$ cvs2cl --utc --summary -T This ChangeLog contains all CVS commits up to the 1.14.6 release. $Id: ChangeLog,v 1.18 2021/09/23 18:11:15 schwarze Exp $ 2021-09-23 18:03 tag VERSION_1_14_6 2021-09-23 18:03 schwarze Changed: NEWS (1.40), "Exp", lines: +2 -2 release 1.14.6 2021-09-23 17:12 schwarze Changed: NEWS (1.39), "Exp", lines: +17 -10 credits for release testing 2021-09-21 17:58 schwarze Changed: TODO (1.319), "Exp", lines: +6 -1 handle man3c/fopen.3c in main.c/fs_*() 2021-09-21 11:04 schwarze Changed: Makefile (1.540), "Exp", lines: +3 -3 POSIX make(1) does not support prerequisites on suffix rules. For HTML generation, the "mandoc" prerequisite isn't needed anyway because ${WWW_MANS} already explicitly depends on mandoc. Issue reported by Sevan Janiyan and Leah Neukirchen. This is not critical for release because it is only used for a maintainer target. While here, i also fixed the associated shell command to use the freshly built mandoc binary rather than whatever may be in the $PATH. 2021-09-20 13:25 schwarze Changed: INSTALL (1.24), "Exp", lines: +11 -6 configure.local.example (1.43), "Exp", lines: +3 -1 more details about Mac OS X; information from Sevan Janiyan 2021-09-20 10:19 schwarze Changed: Makefile (1.539), "Exp", lines: +2 -2 configure (1.81), "Exp", lines: +3 -1 configure.local.example (1.42), "Exp", lines: +7 -2 make the path to ar(1) configurable, needed by NixOS; suggested by Lukas Epple 2021-09-20 10:14 schwarze Changed: Makefile (1.538), "Exp", lines: +3 -3 Create the link from ./man to ./mandoc in the "all" target rather than in the "regress" target. That makes manual "cd regress && ./regress.pl" a bit less fragile. The idea came up in a conversation with Thomas Klausner . 2021-09-19 18:14 schwarze Changed: soelim.c (1.6), "Exp", lines: +4 -4 isspace(3) requires an unsigned argument; bug reported by Thomas Klausner 2021-09-19 18:07 schwarze Changed: roff_term.c (1.24), "Exp", lines: +1 -1 clarify the meaning of a complicated mixed signed/unsigned expression; Thomas Klausner reported a compiler warning 2021-09-19 16:19 schwarze Changed: configure.local.example (1.41), "Exp", lines: +2 -2 do not ship with an old OpenBSD version number 2021-09-19 15:21 schwarze Changed: NEWS (1.38), "Exp", lines: +3 -2 some more portability improvements 2021-09-19 15:05 schwarze Added: compat_mkstemps.c (1.1) test-mkstemps.c (1.1) Changed: Makefile (1.537), "Exp", lines: +5 -2 Makefile.depend (1.51), "Exp", lines: +1 -0 configure (1.80), "Exp", lines: +9 -2 Test availability of mkstemps(3) and provide a fallback implementation in case it is missing; needed for SUN Solaris 10. 2021-09-19 15:02 schwarze Changed: compat_mkdtemp.c (1.4), "Exp", lines: +5 -7 Two minor improvements: 1. If mktemp(3) fails, do not overwrite the errno because all errors mktemp(3) might return are also valid for mkdtemp(3). 2. If mkdir(2) fails, always put back the Xes, even if the error is fatal and the function is about to return NULL. 2021-09-19 12:28 schwarze Changed: configure (1.79), "Exp", lines: +3 -3 do not use the echo(1) -n option, it is not portable; issue found on SUN Solaris 10 2021-09-19 12:15 schwarze Changed: regress/regress.pl (1.16), "Exp", lines: +7 -6 do not use the sed(1) -i option, it is not portable; issue found on Oracle Solaris 11 2021-09-19 11:03 schwarze Changed: Makefile (1.536), "Exp", lines: +2 -2 bump VERSION 2021-09-19 11:02 schwarze Changed: NEWS (1.37), "Exp", lines: +2 -2 tiny update 2021-09-19 11:02 schwarze Changed: LICENSE (1.22), "Exp", lines: +3 -3 update some Copyright years 2021-09-18 15:38 schwarze Changed: Makefile.depend (1.50), "Exp", lines: +1 -1 update Makefile.depend 2021-09-18 12:34 schwarze Changed: tbl.7 (1.37), "Exp", lines: +3 -3 correct whitespace in the title of the Lesk paper to match the original; patch from jsg@ 2021-09-18 12:23 schwarze Changed: roff.7 (1.116), "Exp", lines: +3 -3 replace "Ar arg Ar arg" with "Ar arg arg"; patch from jmc@ 2021-09-17 18:50 schwarze Changed: mandoc_malloc.3 (1.3), "Exp", lines: +30 -11 document mandoc_recallocarray(3); patch found in my tree, apparently forgotten years ago 2021-09-17 18:27 schwarze Changed: NEWS (1.36), "Exp", lines: +146 -37 update 2021-09-10 13:24 schwarze Changed: tbl_data.c (1.59), "Exp", lines: +12 -9 Quirk-compatibility with GNU tbl(1): With the "nospaces" option, skip space characters before and after "T{", in addition to skipping those at the beginning and end of data cells. Minor issue reported by . 2021-09-10 12:48 schwarze Changed: TODO (1.318), "Exp", lines: +13 -11 add two newly reported bugs, and remove two feature requests that were recently implemented 2021-09-10 12:07 schwarze Changed: tbl_data.c (1.58), "Exp", lines: +4 -1 In a tbl(7) having the "nospaces" option, skip space characters not only at the end of data cells, but also after "T}", aligning the behaviour of the parser with GNU tbl(1). Issue reported by . 2021-09-09 16:52 schwarze Changed: tbl_html.c (1.38), "Exp", lines: +25 -1 In HTML output, in cells with an "n" (number) layout, pad numbers on the right side with UTF-8 punctuation and figure spaces such that numbers in different tbl(7) rows align at the decimal point. The exact HTML output format was suggested by ; the implementation in C is mine. 2021-09-09 14:47 schwarze Changed: html.c (1.275), "Exp", lines: +2 -1 html.h (1.109), "Exp", lines: +2 -1 tbl_html.c (1.37), "Exp", lines: +7 -2 If the layout or data of an individual cell in a tbl(7) contains only "_", "-", or "=", requesting a horizontal line to be drawn across the middle of the cell, print
in that cell in HTML output. That is arguably slightly ugly because HTML 5 regards
as semantic markup, meaning "thematic break". If somebody knowns a better way to render a horizontal line across the middle of a table cell with pure HTML and CSS, and without implying a specific meaning, please tell me. Missing feature reported by . 2021-09-07 17:07 schwarze Changed: out.c (1.82), "Exp", lines: +10 -34 Fix an infinite loop that could occur during some cases of horizontally overlapping horizontal spans. One span would calculate a desired target width and start preparations for applying it to some columns, then the other span would overwrite the target width with a different value and also start preparations for applying that one to some columns, which could sometimes confuse the code doing the final distribution to the point of not doing anything at all before entering the next iteration. Fix this by making sure the distribution is done step by step, doing one step at a time rather than allowing multiple steps to conflict. Specifically, always do the smallest useful step first. This change also simplifies the code. For example, the local "colwidth" array is no longer needed. Note that the algorithm still differs from the one implemented in GNU tbl(1), which appears to not even try to harmonize column widths but seems to simply distribute the same amount to all constituent columns, no matter whether their intrinsic width is narrow or wide. Adopting a GNU-compatible algorithm might allow further simplifiction in addition to yielding even more similar output, but i do not want to implement any major changes of the algorithm at this time. The infinite loop was reported by . 2021-09-07 14:56 schwarze Changed: out.c (1.81), "Exp", lines: +5 -4 regress/tbl/layout/span.in (1.6), "Exp", lines: +11 -2 regress/tbl/layout/span.out_ascii (1.7), "Exp", lines: +9 -1 Correctly calculate required column widths for tables containing cells that horizontally span columns which contains "n" (number) formatted cells on other rows. This requires updating total column widths from "n" formatted cells before starting width distribution from the spanning cells to their constituent columns. 2021-09-07 11:48 schwarze Changed: tbl.7 (1.36), "Exp", lines: +3 -3 tbl_data.c (1.57), "Exp", lines: +18 -9 we already parse the GNU tbl(7) "nospaces" option, so let it have the intended effect, too 2021-09-07 10:59 schwarze Changed: tree.c (1.91), "Exp", lines: +3 -1 do not crash when a tbl(7) cell uses roman font 2021-09-06 14:32 schwarze Changed: TODO (1.317), "Exp", lines: +6 -1 TODO: let makewhatis(8) follow symbolic links to dirs 2021-09-04 22:38 schwarze Changed: main.c (1.358), "Exp", lines: +12 -7 during prioritization for man(1), correctly extract the section name from the file name extension of gzipped manual page files; bug found on Alpine Linux by Soeren Tempel , who also tested this patch 2021-09-04 20:26 schwarze Changed: att.c (1.19), "Exp", lines: +2 -2 mdoc(7): improve output of .At 32v The official designation by AT&T was "UNIX/32V", so use that in the output. That also makes sense because "system/architecture" is a widespread convention to refer to the port of an operating system to a specific architecture, in this case 32V (32bit DEC VAX). The former wording "Version 32V AT&T UNIX" was misleading because 32V is not a version number. Even though UNIX/32V was not officially designated as Version 7 by AT&T, prepend "Version 7" because it was in fact a straightforward port of Version 7 AT&T UNIX. That makes it easier to understand for 21st century readers of manual pages. Suggested by nabijaczleweli at nabijaczleweli dot xyz. Same change as in GNU troff commit 21d30728. OK G dot Branden dot Robinson at gmail dot com (gbranden@ in groff) 2021-09-04 12:52 schwarze Changed: main.c (1.357), "Exp", lines: +66 -22 In the fallback code to look for manual pages without using mandoc.db(5), accept files "man/." in addition to the already supported "man/name.[01-9]*". Needed for example on Alpine Linux which puts its Perl manuals into "man3/.3pm" and the POSIX manuals into "man3/.3p". While here, allow the glob(3) at the end of fs_lookup() to add multiple matches to the result set. This improves man -w output and may also help some cases of plain man(1), allowing main() to prioritize properly rather than fs_lookup() picking a random match. Issue reported and patch tested by Soeren Tempel . 2021-08-19 16:55 schwarze Changed: mandocdb.c (1.269), "Exp", lines: +3 -1 do not crash when a manpath directory contains a symbolic link that points to a directory rather than to a regular file; bug reported by Lukas Epple , and my patch also tested by him on NixOS 2021-08-19 15:23 schwarze Changed: cgi.c (1.175), "Exp", lines: +25 -9 fix the section number in the element for preformatted pages; minibug reported by Ian <Ropers at gmail dot com> on misc@ 2021-08-14 13:53 schwarze Changed: main.c (1.356), "Exp", lines: +4 -1 mandoc.1 (1.253), "Exp", lines: +9 -1 mandoc.h (1.274), "Exp", lines: +2 -1 mandoc_msg.c (1.16), "Exp", lines: +1 -0 print a BAGARG message if -T markdown is requested on man(7) input; suggested by Michael Stapelberg at debian dot org 2021-08-10 12:55 schwarze Added: regress/tbl/mod/font-eol.in (1.1) regress/tbl/mod/font-eol.out_ascii (1.1) regress/tbl/mod/font-eol.out_lint (1.1) Changed: html.c (1.274), "Exp", lines: +17 -5 man_validate.c (1.156), "Exp", lines: +4 -2 mandoc.c (1.119), "Exp", lines: +5 -5 mandoc.h (1.273), "Exp", lines: +4 -2 mandoc_headers.3 (1.34), "Exp", lines: +8 -4 mdoc_markdown.c (1.37), "Exp", lines: +4 -2 out.c (1.80), "Exp", lines: +3 -1 roff.c (1.378), "Exp", lines: +4 -2 roff_term.c (1.23), "Exp", lines: +3 -1 tbl.7 (1.35), "Exp", lines: +5 -4 tbl.h (1.2), "Exp", lines: +3 -4 tbl_data.c (1.56), "Exp", lines: +2 -1 tbl_html.c (1.36), "Exp", lines: +2 -5 tbl_layout.c (1.50), "Exp", lines: +27 -29 tbl_term.c (1.75), "Exp", lines: +20 -6 term.c (1.283), "Exp", lines: +4 -2 tree.c (1.90), "Exp", lines: +22 -4 regress/roff/esc/f.out_html (1.3), "Exp", lines: +1 -1 regress/roff/ft/badargs.out_html (1.5), "Exp", lines: +4 -3 regress/tbl/mod/Makefile (1.5), "Exp", lines: +6 -5 regress/tbl/mod/badfont.in (1.3), "Exp", lines: +7 -5 regress/tbl/mod/badfont.out_ascii (1.3), "Exp", lines: +7 -6 regress/tbl/mod/badfont.out_lint (1.5), "Exp", lines: +3 -2 regress/tbl/mod/font.out_lint (1.6), "Exp", lines: +0 -1 Support two-character font names (BI, CW, CR, CB, CI) in the tbl(7) layout font modifier. Get rid of the TBL_CELL_BOLD and TBL_CELL_ITALIC flags and use the usual ESCAPE_FONT* enum mandoc_esc members from mandoc.h instead, which simplifies and unifies some code. While here, also support CB and CI in roff(7) \f escape sequences and in roff(7) .ft requests for all output modes. Using those is certainly not recommended because portability is limited even with groff, but supporting them makes some existing third-party manual pages look better, in particular in HTML output mode. Bug-compatible with groff as far as i'm aware, except that i consider font names starting with the '\n' (ASCII 0x0a line feed) character so insane that i decided to not support them. Missing feature reported by nabijaczleweli dot xyz in https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=992002. I used none of the code from the initial patch submitted by nabijaczleweli, but some of their ideas. Final patch tested by them, too. 2021-08-07 13:02 schwarze Changed: configure (1.78), "Exp", lines: +4 -3 configure.local.example (1.40), "Exp", lines: +21 -7 mandocdb.c (1.268), "Exp", lines: +27 -5 Rename the compile-time configuration variable $HOMEBREWDIR to $READ_ALLOWED_PATH, allow it to contain more than one directory, and explain how to use it for NixOS and for GNU Guix Linux. Feature improvement based on observations, input, and earlier patches from Lukas Epple <sternenseemann at systemli dot org>, and final patch also tested by Lukas. 2021-08-05 14:31 schwarze Changed: man.7 (1.148), "Exp", lines: +4 -4 .OP is not a GNU extension but first appeared in the Documenter's Workbench, see https://github.com/n-t-roff/DWB3.3/blob/master/macros/man/an.sr#L33 from g dot branden dot robinson at gmail dot com via GNU troff commit e3459327 2 Aug 2021 10:49:46 -0400 2021-07-29 17:32 schwarze Changed: mdoc.7 (1.287), "Exp", lines: +73 -2 manually tag the macro names that have false positives 2021-07-29 16:25 schwarze Changed: mdoc.7 (1.286), "Exp", lines: +21 -15 Improve the description of .Fl in multiple respects and in paricular improve the .Fl examples in multiple respects, including better demonstrating long options. Prompted by a question from espie@. Feedback and OK jmc@. 2021-07-18 11:41 schwarze Changed: mdoc_validate.c (1.389), "Exp", lines: +2 -2 Support auto-tagging for ".It Va". This combination is somewhat rare because few libraries expose so many global variables that they need a list to enumerate them, but when the idiom does occur, tagging the variable names is generally useful. For example, this helps awk(1), dc(1), make(1), rc.subr(8), ... Missing feature reported and patch reviewed, tested, and OK'ed by kn@. 2021-07-04 16:33 schwarze Changed: mdoc.7 (1.285), "Exp", lines: +2 -2 s/The arguments are as follows:/The options are as follows:/ because that's what the example is talking about; patch from kn@ 2021-07-04 15:38 schwarze Changed: TODO (1.316), "Exp", lines: +6 -1 mandoc.1 (1.252), "Exp", lines: +21 -1 mandoc.h (1.272), "Exp", lines: +4 -2 mandoc_msg.c (1.15), "Exp", lines: +3 -1 mdoc_man.c (1.137), "Exp", lines: +23 -11 The mandoc(1) manual already mentions that -T man output mode neither supports tbl(7) nor eqn(7) input. If an input file contains such code anyway, tell the user rather than failing an assert(3)ion. Fixing a crash reported by Bjarni Ingi Gislason <bjarniig at rhi dot hi dot is> in https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=901636 which the Debian maintainer of mandoc, Michael at Stapelberg dot ch, forwarded to me. 2021-06-28 20:12 schwarze Changed: regress/char/N/basic.out_ascii (1.2), "Exp", lines: +0 -4 regress/char/accent/combine.out_utf8 (1.2), "Exp", lines: +0 -4 regress/char/accent/nocombine.out_ascii (1.3), "Exp", lines: +0 -4 regress/char/accent/nocombine.out_utf8 (1.3), "Exp", lines: +0 -4 regress/char/accent/utf8only.out_utf8 (1.2), "Exp", lines: +0 -4 regress/char/bar/man.out_ascii (1.2), "Exp", lines: +0 -4 regress/char/hyphen/man.out_ascii (1.2), "Exp", lines: +0 -4 regress/char/space/eos-man.out_ascii (1.2), "Exp", lines: +0 -4 regress/char/space/esct-man.out_ascii (1.4), "Exp", lines: +0 -4 regress/char/space/invalid.out_ascii (1.2), "Exp", lines: +0 -4 regress/char/space/leading-man.out_ascii (1.2), "Exp", lines: +0 -4 regress/char/space/tab-man.out_ascii (1.2), "Exp", lines: +0 -4 regress/char/space/zerowidth.out_ascii (1.2), "Exp", lines: +0 -4 regress/char/space/zerowidth.out_utf8 (1.2), "Exp", lines: +0 -4 regress/char/unicode/ascii.out_ascii (1.3), "Exp", lines: +0 -4 regress/char/unicode/ascii.out_utf8 (1.3), "Exp", lines: +0 -4 regress/char/unicode/input.out_ascii (1.5), "Exp", lines: +0 -4 regress/char/unicode/input.out_utf8 (1.6), "Exp", lines: +0 -4 regress/char/unicode/latin1.out_ascii (1.5), "Exp", lines: +0 -4 regress/char/unicode/latin1.out_utf8 (1.5), "Exp", lines: +0 -4 regress/char/unicode/latin1diff.out_ascii (1.4), "Exp", lines: +0 -4 regress/char/unicode/latin1diff.out_utf8 (1.4), "Exp", lines: +0 -4 regress/char/unicode/man.out_utf8 (1.2), "Exp", lines: +0 -4 regress/char/unicode/named.out_ascii (1.6), "Exp", lines: +0 -4 regress/char/unicode/named.out_utf8 (1.6), "Exp", lines: +0 -4 regress/char/unicode/namediff.out_ascii (1.7), "Exp", lines: +0 -4 regress/char/unicode/namediff.out_utf8 (1.6), "Exp", lines: +0 -4 regress/char/unicode/nogroff.out_ascii (1.3), "Exp", lines: +0 -4 regress/char/unicode/nogroff.out_utf8 (1.4), "Exp", lines: +0 -4 regress/man/B/args.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/B/blank.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/BI/emptyargs.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/BI/literal.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/EX/args.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/EX/nested.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/EX/spacing.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/HP/break.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/HP/literal.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/HP/macrotag.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/HP/manyargs.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/HP/spacing.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/HP/vert.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/IP/bullet.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/IP/bullet.out_utf8 (1.2), "Exp", lines: +0 -4 regress/man/IP/empty.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/IP/empty.out_tag (1.4), "Exp", lines: +5 -5 regress/man/IP/literal.out_ascii (1.4), "Exp", lines: +0 -4 regress/man/IP/longhead.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/IP/manyargs.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/IP/spacing.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/IP/tag.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/IP/tag.out_tag (1.4), "Exp", lines: +4 -4 regress/man/IP/vert.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/IP/width.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/MT/args.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/MT/noME.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/OP/args.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/PD/args.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/PD/nextline.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/PD/spacing.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/PP/args.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/PP/empty.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/PP/vert.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/RS/REarg.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/RS/an-margin.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/RS/breaking.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/RS/broken.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/RS/empty.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/RS/literal.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/RS/lonelyRE.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/RS/nested.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/RS/noRE.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/RS/nowidth.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/RS/paragraph.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/RS/width.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/SH/broken.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/SH/broken_eline.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/SH/empty_before.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/SH/longarg.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/SH/noarg.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/SH/paragraph.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/SH/paragraph.out_tag (1.3), "Exp", lines: +4 -4 regress/man/SH/vert.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/SS/broken.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/SS/broken_eline.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/SS/longarg.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/SS/noarg.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/SS/paragraph.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/SS/paragraph.out_tag (1.3), "Exp", lines: +4 -4 regress/man/SS/vert.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/SY/literal.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TH/baddate.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TH/case.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TH/emptydate.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TH/isodate.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TH/longdate.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TH/longtit.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TH/longvol.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TH/mdocdate.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TH/noarg.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/TH/nobody.out_ascii (1.2), "Exp", lines: +0 -2 regress/man/TH/onearg.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/TH/onlyyear.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TH/sixargs.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TH/twoargs.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/TP/badarg.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TP/broken.out_ascii (1.4), "Exp", lines: +0 -4 regress/man/TP/double.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TP/eof.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TP/fill.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TP/indent.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TP/literal.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/TP/longhead.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TP/macrotag.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/TP/manyargs.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TP/sameline.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TP/spacing.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TP/tag.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TP/tag.out_tag (1.4), "Exp", lines: +5 -5 regress/man/TP/vert.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TP/width.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TS/break.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/TS/vspace.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/UR/args.out_ascii (1.3), "Exp", lines: +0 -4 regress/man/UR/noUE.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/blank/afterSH.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/blank/afterSS.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/blank/line.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/nf/args.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/nf/dupe.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/nf/indent.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/nf/userdef.out_ascii (1.2), "Exp", lines: +0 -4 regress/man/nf/vert.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/args/man.out_ascii (1.3), "Exp", lines: +0 -4 regress/roff/args/roff.out_ascii (1.4), "Exp", lines: +0 -4 regress/roff/br/args.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/cc/basic.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/ce/basic.out_ascii (1.3), "Exp", lines: +0 -4 regress/roff/char/badarg.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/char/basic.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/cond/close.out_ascii (1.4), "Exp", lines: +0 -4 regress/roff/cond/de.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/cond/ie.out_ascii (1.3), "Exp", lines: +0 -4 regress/roff/cond/if.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/cond/numeric.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/cond/register.out_ascii (1.3), "Exp", lines: +0 -4 regress/roff/cond/strcmp.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/cond/string.out_ascii (1.4), "Exp", lines: +0 -4 regress/roff/de/TH.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/esc/O1.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/esc/bs_man.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/esc/c_man.out_ascii (1.4), "Exp", lines: +0 -4 regress/roff/esc/f.out_ascii (1.4), "Exp", lines: +0 -4 regress/roff/esc/ignore.out_ascii (1.4), "Exp", lines: +0 -4 regress/roff/esc/invalid.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/esc/one.out_ascii (1.4), "Exp", lines: +0 -4 regress/roff/esc/unsupp.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/ft/badargs.out_ascii (1.3), "Exp", lines: +0 -4 regress/roff/it/double.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/na/args.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/nr/divzero.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/nr/escname.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/nr/eval.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/nr/incr.out_ascii (1.3), "Exp", lines: +0 -4 regress/roff/nr/int.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/nr/predef.out_ascii (1.3), "Exp", lines: +0 -4 regress/roff/nr/rr.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/nr/scale.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/nr/tab.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/nr/undef.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/ps/ignore.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/scale/horiz.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/shift/bad.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/shift/basic.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/sp/badargs-man.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/sp/fill-man.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/sp/negative.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/sp/scaling-man.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/string/escape.out_ascii (1.3), "Exp", lines: +0 -4 regress/roff/string/infinite.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/string/std.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/string/undef.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/string/zerolength.out_ascii (1.3), "Exp", lines: +0 -4 regress/roff/ta/basic-man.out_ascii (1.3), "Exp", lines: +0 -4 regress/roff/ti/basic-man.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/ti/wide.out_ascii (1.2), "Exp", lines: +0 -4 regress/roff/tr/args.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/data/blankline.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/data/block_empty.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/data/block_unclosed.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/data/empty.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/data/insert.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/layout/badspan.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/layout/center.out_ascii (1.5), "Exp", lines: +0 -4 regress/tbl/layout/complex.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/layout/empty.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/layout/emptycol.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/layout/emptyline.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/layout/font.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/layout/numbers.out_ascii (1.3), "Exp", lines: +0 -4 regress/tbl/layout/shortlines.out_ascii (1.3), "Exp", lines: +0 -4 regress/tbl/layout/spacing-nogroff.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/layout/spacing.out_ascii (1.3), "Exp", lines: +0 -4 regress/tbl/layout/span.out_ascii (1.6), "Exp", lines: +0 -4 regress/tbl/macro/man.out_ascii (1.3), "Exp", lines: +0 -4 regress/tbl/macro/nested.out_ascii (1.3), "Exp", lines: +0 -4 regress/tbl/mod/badfont.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/mod/expand-toowide.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/mod/expand.out_ascii (1.4), "Exp", lines: +0 -4 regress/tbl/mod/font.out_ascii (1.4), "Exp", lines: +0 -4 regress/tbl/mod/misalign.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/mod/spacing.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/mod/width.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/opt/box.out_ascii (1.4), "Exp", lines: +0 -4 regress/tbl/opt/center.out_ascii (1.2), "Exp", lines: +0 -4 regress/tbl/opt/invalid.out_ascii (1.2), "Exp", lines: +0 -4 delete the two pairs of extra blank lines from expected man(7) terminal output that are no longer printed since man_term.c rev. 1.236 2021-06-28 19:50 schwarze Changed: man_term.c (1.236), "Exp", lines: +1 -9 mandoc.1 (1.251), "Exp", lines: +3 -3 In terminal output of man(7) documents, stop printing two extra blank lines before the NAME section and before the page footer. While these blank lines had a long tradition, they didn't really serve any purpose and merely wasted screen real estate. Besides, this makes output from man(7) more similar to output from mdoc(7). This commit keeps mandoc compatible with groff-current, where G. Branden Robinson committed the same change on June 16 (groff commit 2278d6ed). 2021-06-27 17:57 schwarze Changed: libmandoc.h (1.80), "Exp", lines: +2 -2 mandoc.1 (1.250), "Exp", lines: +4 -1 mandoc.h (1.271), "Exp", lines: +2 -1 mandoc_msg.c (1.14), "Exp", lines: +1 -0 read.c (1.220), "Exp", lines: +5 -2 roff.c (1.377), "Exp", lines: +10 -2 add a style message about overlong text lines, trying very hard to avoid false positives, not at all trying to catch as many cases as possible; feature originally suggested by tb@, OK tb@ kn@ jmc@ 2021-06-27 17:29 schwarze Changed: TODO (1.315), "Exp", lines: +6 -1 new TODO entry: HTML formatting of .nf 2021-06-26 11:09 schwarze Changed: TODO (1.314), "Exp", lines: +20 -1 three new TODO items 2021-06-02 18:28 schwarze Changed: main.c (1.355), "Exp", lines: +23 -20 mandoc.1 (1.249), "Exp", lines: +31 -10 mandoc.h (1.270), "Exp", lines: +2 -2 mandoc_msg.c (1.13), "Exp", lines: +1 -1 In -W style mode, check .Xr links along the full manpath because that is more useful for validating manuals of non-base software. Nothing changes in -W all mode: by default for -T lint, we still assume we want to check base system conventions, including usually not wanting to link to non-base manual pages. The use case, a partial idea how to handle it, and a preliminary patch was originally presented by kn@, then refined by me. Final patch tested and OK'ed by kn@. 2021-06-02 18:23 schwarze Changed: TODO (1.313), "Exp", lines: +7 -1 tbl(7) layout "n" specifier for HTML output 2021-06-02 17:51 schwarze Changed: html.c (1.273), "Exp", lines: +3 -1 In revision 1.157 of cgi.c, a meta viewport element was added to the HTML output. Let `mandoc -Thtml' behave the same, making the generated HTML a bit more pleasant to view on a mobile device. Patch from anton@. 2021-06-02 17:39 schwarze Changed: regress/char/unicode/input.in (1.4), "Exp", lines: +3 -1 regress/char/unicode/input.out_ascii (1.4), "Exp", lines: +2 -0 regress/char/unicode/input.out_lint (1.6), "Exp", lines: +34 -34 regress/char/unicode/input.out_utf8 (1.5), "Exp", lines: +2 -0 regress/char/unicode/nogroff.in (1.3), "Exp", lines: +10 -2 regress/char/unicode/nogroff.out_ascii (1.2), "Exp", lines: +9 -1 regress/char/unicode/nogroff.out_html (1.4), "Exp", lines: +8 -0 regress/char/unicode/nogroff.out_utf8 (1.3), "Exp", lines: +9 -1 test private use areas some more as they have proven fragile 2021-06-02 16:38 schwarze Changed: regress/char/unicode/input.in (1.3), "Exp", lines: +18 -16 regress/char/unicode/input.out_ascii (1.3), "Exp", lines: +17 -15 regress/char/unicode/input.out_lint (1.5), "Exp", lines: +23 -23 regress/char/unicode/input.out_utf8 (1.4), "Exp", lines: +17 -15 Cleanup: 1. Move invalid two-byte sequences after valid ones and make their descriptions easier to understand. 2. Replace the wrong and confusing expression "middle byte" with the correct term "start byte". 3. Add test lines for U+EFFFF and U+F0000. 4. Replace the unhelpful word "strange" with more descriptive terms. Arguably, nothing about this (or maybe everything?) is strange. 2021-06-02 15:29 schwarze Changed: regress/char/unicode/input.out_utf8 (1.3), "Exp", lines: +1 -1 regress/char/unicode/nogroff.out_utf8 (1.2), "Exp", lines: +3 -3 The wcwidth(3) of Plane 15 and Plane 16 Private Use Characters was changed from 0 to 1. Adjust the test results accordingly. Issue reported by bluhm@ 2021-05-18 13:22 schwarze Changed: tbl_data.c (1.55), "Exp", lines: +8 -4 When looking for column separators on tbl(7) data lines, properly skip escape sequences; do not misinterpret bytes from the middle of escape sequence names or arguments as column separators. Bug reported and patch tested by Oliver dot Corff at email dot de. 2021-05-16 23:18 schwarze Changed: tbl_html.c (1.35), "Exp", lines: +3 -1 Implement the layout specification "a" (left justify with 1em indentation) in HTML output mode; before this patch, the indentation was missing. Terminal output already supported the "a" specifier since 2010. Issue reported and patch tested by Oliver dot Corff at email dot de. 2021-05-16 22:28 schwarze Added: regress/tbl/layout/font.in (1.1) regress/tbl/layout/font.out_ascii (1.1) regress/tbl/layout/font.out_html (1.1) Changed: regress/tbl/layout/Makefile (1.7), "Exp", lines: +3 -2 test font modifiers in the layout; related to tbl_html.c rev. 1.34 2021-05-16 18:11 schwarze Changed: html.c (1.272), "Exp", lines: +2 -1 tbl_html.c (1.34), "Exp", lines: +11 -3 implement the tbl(7) layout modifiers "b" (bold) and "i" (italic) in HTML output mode, similar to tbl_term.c, function tbl_word(); issue reported by Oliver dot Corff at email dot de 2021-05-15 17:19 schwarze Changed: tbl_data.c (1.54), "Exp", lines: +6 -5 When looking for the last layout row used, we need to look at the layout row used for the previous data line containing data, not at the previous data line outright, which might be a horizontal ruler. If it is, do not restart from the first layout row but still proceed to the next data row, which may have been just read from T&. Bug originally reported by Oliver dot Corff at email dot de on groff at gnu dot org: https://lists.gnu.org/archive/html/groff/2021-03/msg00003.html and forwarded to me by bentley@. Patch OK'ed by bentley@ back in April. 2021-05-13 13:33 schwarze Changed: arch.c (1.17), "Exp", lines: +2 -2 cgi.c (1.174), "Exp", lines: +4 -3 Add OpenBSD riscv64 architecture; patch from jsg@. While here, retire sgi and socppc. 2021-05-12 17:13 schwarze Changed: mdoc.7 (1.284), "Exp", lines: +3 -3 remove stray byte from broken escape sequence; diff from jmc@ 2021-05-12 08:51 schwarze Changed: mdoc.7 (1.283), "Exp", lines: +3 -3 typo; diff from fcambus@ 2021-05-12 08:34 schwarze Changed: TODO (1.312), "Exp", lines: +5 -1 \s with arbitrary arg delimiters 2021-03-30 19:26 schwarze Changed: mandoc.css (1.48), "Exp", lines: +2 -1 mdoc_html.c (1.342), "Exp", lines: +6 -3 regress/mdoc/Bd/paragraph.out_html (1.7), "Exp", lines: +1 -1 In HTML output, correctly render .Bd -unfilled in proportionally-spaced font, rather than with the monospace font appropriate for .Bd -literal. This fixes a minibug reported by anton@. Implemented by no longer relying on the typical browser default of "pre { font-family: monospace }" but instead letting <pre> elements inherit the font family from their parent, then adding an explicit CSS .Li class only for those displays where the manual page author requested it by using the -literal option on the .Bd macro. 2021-03-30 17:16 schwarze Changed: main.c (1.354), "Exp", lines: +2 -1 term_tag.c (1.6), "Exp", lines: +6 -5 term_tag.h (1.4), "Exp", lines: +2 -2 Append .html suffix to temporary files enabling browsers to recognise it. Occasionally one might read a manual page in a webbrowser, e.g. "MANPAGER=firefox man -T html jq", however temporary files created for pagers lack file extensions and most web browsers are unable to detect a file's content without it. Special case mandoc(1)'s HTML output format by appending the ".html" suffix to file names such that browsers will actually render HTML as such instead of showing it as plain text. Idea and patch from kn@, with minor help from me. 2021-03-28 18:45 schwarze Changed: TODO (1.311), "Exp", lines: +5 -1 double .TH in man(7) 2021-03-28 15:33 schwarze Changed: TODO (1.310), "Exp", lines: +7 -2 more about .Bd -unfilled 2020-12-21 15:13 schwarze Deleted: regress/roff/esc/O.in (1.2) regress/roff/esc/O.out_ascii (1.2) regress/roff/esc/O.out_lint (1.2) Added: regress/roff/esc/O1.in (1.1) regress/roff/esc/O1.out_ascii (1.1) regress/roff/esc/O1.out_lint (1.1) Changed: regress/roff/esc/Makefile (1.7), "Exp", lines: +3 -3 Rename syntax test of the \O escape sequence (suppress output groff extension; mandoc only implements syntax checking but ignores the sequence) to please Bill Gates and didickman@: avoid path names that only differ by case, like o.in vs. O.in. 2020-11-13 11:24 schwarze Changed: TODO (1.309), "Exp", lines: +7 -1 MANWIDTH 2020-11-12 20:46 schwarze Changed: TODO (1.308), "Exp", lines: +5 -1 old groff_char(7) reported by kamil at NetBSD 2020-10-31 11:45 schwarze Changed: mandoc_char.7 (1.78), "Exp", lines: +2 -7 Delete a sentence pointing to "the Predefined Strings subsection of the roff(7) manual." Such a subsection does not exist, and i do not see why it should. Predefined strings are an obsolete feature of macro packages, not a feature of the roff language. 2020-10-30 21:34 schwarze Changed: mandoc.css (1.47), "Exp", lines: +3 -3 Finally get rid of the "overflow: auto" property of ".Bl-tag > dd" which has long been know to cause ugly and pointless scroll bars. Matthew Martin <phy1729 at gmail dot com> helpfully explained the following two points to me: 1. What we need to do here is establish a new block formatting context such that the first line of the <dd> content moves down rather than to the right if the preceding <dt> is wide. 2. A comprehensive list of methods to establish block formatting context is available in: https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Block_formatting_context In that list, i found that "column-count: 1" does the job. It is part of CSS Multi-column Layout Level 1. While that is still in Working Draft status according to https://www.w3.org/Style/CSS/current-work , it is fully supported by all browsers according to https://developer.mozilla.org/en-US/docs/Web/CSS/column-count , probably because it was already part of the second draft of this standard almost 20 years ago: WD-css3-multicol-20010118. 2020-10-30 13:24 schwarze Changed: man_validate.c (1.155), "Exp", lines: +2 -2 mdoc_validate.c (1.388), "Exp", lines: +2 -2 Promote section headers that can can be used unmodified as fragment identifiers from TAG_WEAK to TAG_STRONG, such that for example ...#DESCRIPTION always works. Suggested by Aman Verma on the discuss@ list. 2020-10-28 21:07 schwarze Changed: roff.7 (1.115), "Exp", lines: +3 -3 Correct an embarrassing spelling mistake: The last name of the author of groff is "Clark". 2020-10-28 15:31 schwarze Changed: man.7 (1.147), "Exp", lines: +23 -12 Improve the HISTORY and AUTHORS sections, using information received from Douglas McIlroy in private mail: https://manpages.bsd.lv/history/mcilroy_26_10_2020.txt 2020-10-26 13:30 schwarze Changed: TODO (1.307), "Exp", lines: +5 -1 error message simplifications requested by deraadt@ 2020-10-25 18:28 schwarze Changed: tbl_term.c (1.74), "Exp", lines: +1 -12 regress/tbl/data/block_width.out_ascii (1.4), "Exp", lines: +1 -1 regress/tbl/layout/center.out_ascii (1.4), "Exp", lines: +1 -1 regress/tbl/layout/spacing.out_ascii (1.2), "Exp", lines: +1 -1 regress/tbl/layout/span.out_ascii (1.5), "Exp", lines: +1 -1 regress/tbl/mod/expand.out_ascii (1.3), "Exp", lines: +1 -1 regress/tbl/mod/font.out_ascii (1.3), "Exp", lines: +1 -1 The GNU tbl(1) program contained in the groff package internally uses roff(7) tabulator settings to implement tables, and it used to leak the changed tabulator settings from tables to the subsequent roff(7) code. In mandoc/tbl_term.c rev. 1.54 (June 17, 2017), code was added to be bug-compatible with groff. In commit d0e03cf6 (Oct 20, 2020), GNU tbl(1) changed behaviour to save the tabulator settings before starting a table and restore them afterwards. Adjust mandoc for compatibility. Since mandoc implements tables without using roff(7) tabulator settings, saving and restoring tabulator settings is not needed in mandoc. Simply deleting the code that changed tabulator settings by reverting tbl_term.c rev. 1.54 is sufficient in mandoc. Also adjust the desired output of the regression tests to match the new behaviour of both groff and mandoc. 2020-10-24 22:57 schwarze Changed: mandoc.c (1.118), "Exp", lines: +16 -9 regress/roff/nr/predef.in (1.3), "Exp", lines: +2 -2 regress/roff/nr/predef.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/string/dotT.in (1.3), "Exp", lines: +4 -2 regress/roff/string/dotT.out_ascii (1.3), "Exp", lines: +4 -3 regress/roff/string/dotT.out_html (1.5), "Exp", lines: +4 -2 regress/roff/string/dotT.out_markdown (1.3), "Exp", lines: +3 -1 regress/roff/string/dotT.out_utf8 (1.3), "Exp", lines: +3 -3 Treat \*[.T] in the same way as \*(.T rather than calling abort(3). Bug found because the groff-current manual pages started using the variant form of this predefined string. 2020-10-16 17:22 schwarze Changed: html.c (1.271), "Exp", lines: +2 -2 man_html.c (1.179), "Exp", lines: +7 -9 mdoc_html.c (1.341), "Exp", lines: +5 -6 regress/man/HP/literal.out_html (1.3), "Exp", lines: +6 -12 regress/man/IP/literal.out_html (1.7), "Exp", lines: +14 -28 regress/man/RS/literal.out_html (1.3), "Exp", lines: +6 -12 regress/man/SY/literal.out_html (1.4), "Exp", lines: +5 -11 regress/man/TP/literal.out_html (1.5), "Exp", lines: +6 -12 regress/mdoc/Bd/nf.out_html (1.3), "Exp", lines: +6 -12 regress/mdoc/Bd/paragraph.out_html (1.6), "Exp", lines: +2 -4 regress/mdoc/Rs/paragraph.out_html (1.5), "Exp", lines: +0 -1 regress/roff/sp/fill-man.out_html (1.3), "Exp", lines: +2 -4 regress/roff/string/dotT.out_html (1.4), "Exp", lines: +0 -1 In HTML output, avoid printing a newline right after <pre> and right before </pre> because that resulted in vertical whitespace not requested by the manual page author. Formatting bug reported by Aman Verma <amanraoverma plus vim at gmail dot com> on discuss@. 2020-10-14 14:22 schwarze Changed: man.7 (1.146), "Exp", lines: +9 -4 add missing mention of Werner Lemberg, noticed by Werner himself on <groff at gnu dot org>; while here, add missing .An macros 2020-10-01 22:50 schwarze Changed: apropos.1 (1.51), "Exp", lines: +6 -2 add example to apropos.1 to list all manuals in a given section; patch from ians@ 2020-09-09 17:01 schwarze Changed: man_macro.c (1.145), "Exp", lines: +7 -5 regress/man/TP/broken.in (1.4), "Exp", lines: +6 -3 regress/man/TP/broken.out_ascii (1.3), "Exp", lines: +2 -2 regress/man/TP/broken.out_lint (1.6), "Exp", lines: +3 -0 regress/man/TP/macrotag.in (1.3), "Exp", lines: +15 -3 regress/man/TP/macrotag.out_ascii (1.2), "Exp", lines: +8 -2 Element next-line scopes can nest. Consequently, even when closing one element next-line scope, the MAN_ELINE flag must not yet be cleared if the parent macro is another element macro having next-line scope, or an assertion failure is caused if all this is wrapped in another macro that has block next-line scope, for example .TP. Bug found in an afl run performed by Jan Schreiber <jes at posteo dot de>. 2020-09-09 13:45 schwarze Changed: term_ascii.c (1.66), "Exp", lines: +17 -3 Do not abuse assert(3) to react to absurd input; the purpose of assert(3) only is to catch internal inconsistencies in the program itself. Issue found in an afl run performed by Jan Schreiber <jes at posteo dot de>. Instead, just cut down unreasonably wide spacing requested by the document to a narrower width. 2020-09-07 14:18 schwarze Changed: TODO (1.306), "Exp", lines: +16 -1 assertion found in jes@'es afl run: .TS .if n .ce 2020-09-06 14:45 schwarze Changed: term_ascii.c (1.65), "Exp", lines: +10 -4 term_ps.c (1.92), "Exp", lines: +6 -3 After .ti, there are many reasons why the offset may change, so setting it back later requires a guard against underflow, or subsequent assertions may fail. Issue found in an afl run performed by Jan Schreiber <jes at posteo dot de>. 2020-09-03 20:43 schwarze Added: regress/roff/po/range.in (1.1) regress/roff/po/range.out_ascii (1.1) Changed: roff_term.c (1.22), "Exp", lines: +13 -5 regress/roff/po/Makefile (1.2), "Exp", lines: +10 -2 Fix two issues with .po (page offset) formatting: 1. Truncate excessive offsets to a width reasonable in the context of manual pages instead of printing excessively long lines and sometimes causing assertion failures; found in an afl run performed by Jan Schreiber <jes at posteo dot de>. 2. Remember both the requested and the applied page offset; otherwise, subtracting an excessive width, then adding it again, would end up with an incorrectly large offset. While here, simplify the code by reverting the previous offset up front, and also add some comments to make the general ideas easier to understand. 2020-09-03 17:42 schwarze Added: regress/roff/ti/wide.in (1.1) regress/roff/ti/wide.out_ascii (1.1) Changed: roff_term.c (1.21), "Exp", lines: +22 -12 regress/roff/ti/Makefile (1.2), "Exp", lines: +8 -2 If .ti had an excessive argument, using it was attempted, in some cases resulting in an assertion failure. Instead, truncate the temporary indent to a width reasonable in a manual page. I found the issue in an afl run that was performed by Jan Schreiber <jes at posteo dot de>. 2020-09-02 16:40 schwarze Changed: term.c (1.282), "Exp", lines: +9 -12 regress/roff/ce/basic.in (1.2), "Exp", lines: +12 -2 regress/roff/ce/basic.out_ascii (1.2), "Exp", lines: +8 -2 Do not indent by SIZE_MAX/2 when .ce occurs inside explicit no-fill mode. While here, drop two unused arguments from the function term_field(); the related work was already done by term_fill() before this commit. I found the bug in an afl run that was performed by Jan Schreiber <jes at posteo dot de>. 2020-09-01 18:25 schwarze Added: regress/tbl/layout/spacing-nogroff.in (1.1) regress/tbl/layout/spacing-nogroff.out_ascii (1.1) regress/tbl/layout/spacing-nogroff.out_lint (1.1) regress/tbl/layout/spacing.in (1.1) regress/tbl/layout/spacing.out_ascii (1.1) Changed: mandoc.1 (1.248), "Exp", lines: +4 -0 mandoc.h (1.269), "Exp", lines: +2 -1 mandoc_msg.c (1.12), "Exp", lines: +1 -0 tbl_layout.c (1.49), "Exp", lines: +7 -2 regress/tbl/layout/Makefile (1.6), "Exp", lines: +6 -4 Ignore unreasonably large spacing modifiers in tbl layouts. Jan Schreiber <jes at posteo dot de> ran afl on mandoc and it turned out mandoc tried to use spacing modifiers so large that they would trigger assertion failures in term_ascii.c, function locale_advance(). 2020-09-01 18:10 schwarze Changed: TODO (1.305), "Exp", lines: +2 -1 more info from John Gardner about ASCII control chars in roff(7) input 2020-08-27 15:55 schwarze Changed: mandoc.1 (1.247), "Exp", lines: +2 -5 Remove a lie reported by Jamie Landeg-Jones <jamie at catflap dot org>: The times when -T man may have expanded .so requests are long gone, nor would such a feature be useful. Use soelim(1) if you need that. 2020-08-27 14:59 schwarze Changed: manpath.c (1.43), "Exp", lines: +18 -10 Fix a regression caused by the insertion of two new tokens, which unintentionally made the -O tag= argument mandatory, breaking commands like "man -akO tag Ic=ulimit". Noticed while answering questions from Ian Ropers. 2020-08-27 14:28 schwarze Changed: mandoc.1 (1.246), "Exp", lines: +9 -2 Make it more explicit that the statement "-O tag does not work with less(1)" only applies to -T html output mode, and why. Of course, -O tag works just fine with less(1) in the -T ascii and -T utf8 output modes. Potential for confusion pointed out by Ian Ropers. 2020-08-27 12:59 schwarze Changed: roff.c (1.376), "Exp", lines: +4 -2 Avoid artifacts in the most common case of closing conditional blocks when no arguments follow the closing brace, \}. For example, the line "'br\}" contained in the pod2man(1) preamble would throw a bogus "escaped character not allowed in a name" error. This issue was originally reported by Chris Bennett on ports@, and afresh1@ noticed it came from the pod2man(1) preamble. 2020-08-07 20:56 schwarze Changed: main.c (1.353), "Exp", lines: +3 -1 add a forgotten "#if HAVE_PLEDGE"; patch sent in by <alexander dot gromnitsky at gmail dot com> who found the problem the hard way on Fedora 32 2020-08-03 11:02 schwarze Added: regress/roff/cond/de.in (1.1) regress/roff/cond/de.out_ascii (1.1) regress/roff/cond/de.out_lint (1.1) Changed: roff.c (1.375), "Exp", lines: +64 -59 regress/roff/cond/Makefile (1.3), "Exp", lines: +3 -3 regress/roff/cond/close.in (1.4), "Exp", lines: +38 -1 regress/roff/cond/close.out_ascii (1.3), "Exp", lines: +17 -0 regress/roff/cond/close.out_lint (1.8), "Exp", lines: +3 -2 Put the code handling \} into a new function roff_cond_checkend() and call that function not only from both places where copies existed - when processing text lines and when processing request/macro lines in conditional block scope - but also when closing a macro definition request, such that this construction works: .if n \{.de macroname macro content .. \} ignored arguments .macroname This fixes a bug reported by John Gardner <gardnerjohng at gmail dot com>. While here, avoid a confusing decrement of the line scope counter in roffnode_cleanscope() for conditional blocks that do not have line scope in the first place (no functional change for this part). Also improve validation of an internal invariant in roff_cblock() and polish some comments. 2020-07-30 21:42 schwarze Changed: regress/eqn/Makefile.inc (1.4), "Exp", lines: +4 -4 regress/roff/de/Makefile (1.6), "Exp", lines: +6 -6 trivial sync with OpenBSD in parts of these files that are not used by -portable; consequently, no functional change 2020-07-21 15:17 schwarze Changed: regress/man/IP/empty.out_tag (1.3), "Exp", lines: +5 -5 regress/man/IP/tag.out_tag (1.3), "Exp", lines: +4 -4 regress/man/SH/paragraph.out_tag (1.2), "Exp", lines: +4 -4 regress/man/SS/paragraph.out_tag (1.2), "Exp", lines: +4 -4 regress/man/TP/tag.out_tag (1.3), "Exp", lines: +5 -5 regress/mdoc/Bd/nested.out_tag (1.3), "Exp", lines: +6 -6 regress/mdoc/Bd/paragraph.out_tag (1.2), "Exp", lines: +7 -7 regress/mdoc/Bd/spacing.out_tag (1.2), "Exp", lines: +4 -4 regress/mdoc/Cm/tag.out_tag (1.4), "Exp", lines: +9 -9 regress/mdoc/D1/spacing.out_tag (1.2), "Exp", lines: +3 -3 regress/mdoc/Dl/spacing.out_tag (1.3), "Exp", lines: +3 -3 regress/mdoc/Dv/tag.out_tag (1.3), "Exp", lines: +6 -6 regress/mdoc/Em/tag.out_tag (1.4), "Exp", lines: +7 -7 regress/mdoc/Er/tag.out_tag (1.3), "Exp", lines: +5 -5 regress/mdoc/Ev/tag.out_tag (1.3), "Exp", lines: +6 -6 regress/mdoc/Fl/long.out_tag (1.2), "Exp", lines: +4 -4 regress/mdoc/Fl/tag.out_tag (1.3), "Exp", lines: +6 -6 regress/mdoc/Fo/tag.out_tag (1.3), "Exp", lines: +6 -6 regress/mdoc/Ic/tag.out_tag (1.3), "Exp", lines: +6 -6 regress/mdoc/Li/tag.out_tag (1.3), "Exp", lines: +6 -6 regress/mdoc/Ms/tag.out_tag (1.3), "Exp", lines: +6 -6 regress/mdoc/No/tag.out_tag (1.3), "Exp", lines: +6 -6 regress/mdoc/Pp/arg.out_tag (1.3), "Exp", lines: +4 -4 regress/mdoc/Sh/tag.out_tag (1.3), "Exp", lines: +8 -8 regress/mdoc/Sy/tag.out_tag (1.3), "Exp", lines: +7 -7 regress/mdoc/Tg/column.out_tag (1.2), "Exp", lines: +5 -5 regress/mdoc/Tg/list.out_tag (1.2), "Exp", lines: +6 -6 regress/mdoc/Tg/warn.out_tag (1.4), "Exp", lines: +7 -7 trivial adjustment of the desired test results after getting rid of the "copyless" crutch 2020-07-21 15:14 schwarze Deleted: regress/copyless (1.2) Changed: regress/regress.pl (1.15), "Exp", lines: +4 -3 adjust test framework to not require a tty 2020-07-21 15:10 schwarze Changed: main.c (1.352), "Exp", lines: +27 -11 manconf.h (1.9), "Exp", lines: +2 -0 manpath.c (1.42), "Exp", lines: +22 -7 term_tag.c (1.5), "Exp", lines: +42 -17 term_tag.h (1.3), "Exp", lines: +4 -4 undocumented options -O outfilename and -O tagfilename to support regression testing without a tty; no user visible change intended 2020-07-20 16:57 schwarze Changed: apropos.1 (1.50), "Exp", lines: +5 -6 configure (1.77), "Exp", lines: +25 -7 configure.local.example (1.39), "Exp", lines: +9 -1 main.c (1.351), "Exp", lines: +2 -2 man.1 (1.40), "Exp", lines: +5 -6 mandoc.1 (1.245), "Exp", lines: +5 -6 Switch the default pager from "more -s" to "less". POSIX explicitly allows using a different default pager if that is documented. Nowadays, the pager provided in most operating systems is less(1). Our man(1) implementation uses less(1) features that traditional more(1) did not provide, in particular tagging. Besides, as noted by deraadt@, the user interface of less(1) is slightly more refined and preferable over the user inferface of more(1). This switch was originally suggested by Ian Ropers. In ./configure, test whether less(1) is available. If not, fall back to more(1). In ./configure.local, support overriding the automatic test by setting BINM_PAGER. As explained by jmc@ and deraadt@, the -s flag was added a very long time ago when an antique version of groff(1) had an annoying bug in terminal output that would randomly display blank lines in the middle of pages. Clearly, -s has no longer been needed for many years, so drop it from the default pager invocation. OK deraadt@ jmc@ martijn@ job@ on the OpenBSD version of this patch. 2020-06-29 19:22 schwarze Changed: arch.c (1.16), "Exp", lines: +2 -2 cgi.c (1.173), "Exp", lines: +6 -5 Support the "powerpc64" architecture name. The first file using it in .Dt was just committed by kettenis@. 2020-06-25 20:45 schwarze Changed: mdoc.7 (1.282), "Exp", lines: +11 -5 Briefly mention groff_mdoc(7) below SEE ALSO. While both authoritative manual pages document the same content, comparing can occasionally help in cases of doubt, and some people may prefer one style, some the other. While here, modernize a few .Lks from http:// to https://. OK jmc@ 2020-06-24 12:09 schwarze Changed: TODO (1.304), "Exp", lines: +5 -1 more details about ASCII control characters 2020-06-22 20:00 schwarze Added: test-attribute.c (1.1) Changed: Makefile (1.535), "Exp", lines: +3 -2 configure (1.76), "Exp", lines: +4 -5 configure.local.example (1.38), "Exp", lines: +2 -1 Provide a real feature test for __attribute__(). Looking at version numbers like __GNUC__ is always a bad idea. Believe it or not, this even makes ./configure shorter by one line. 2020-06-22 19:20 schwarze Changed: Makefile.depend (1.49), "Exp", lines: +10 -10 dba_array.c (1.2), "Exp", lines: +3 -1 dba_read.c (1.5), "Exp", lines: +3 -1 mandoc_ohash.c (1.3), "Exp", lines: +3 -1 mandoc_xr.c (1.4), "Exp", lines: +3 -1 mdoc_markdown.c (1.36), "Exp", lines: +3 -1 mdoc_state.c (1.17), "Exp", lines: +3 -1 roff_html.c (1.21), "Exp", lines: +3 -1 roff_term.c (1.20), "Exp", lines: +3 -1 roff_validate.c (1.20), "Exp", lines: +3 -1 term_tab.c (1.6), "Exp", lines: +3 -1 Because mandoc_aux.h and mandoc.h use __attribute__, all files that include mandoc_aux.h or mandoc.h need to include config.h, too. It is suspected that for example IRIX needs this, or it is likely to throw errors in these files because the system compiler doesn't understand __attribute__. Issue reported by Kazuo Kuroi <kazuo at irixnet dot org>. 2020-06-22 18:00 schwarze Changed: TODO (1.303), "Exp", lines: +15 -1 John Gardner: handling of ASCII control characters during input 2020-06-17 19:42 schwarze Changed: man.1 (1.39), "Exp", lines: +2 -1 Manually tag the section option. Automatic tagging does not work because the [-s] flag is optional. Patch from Martin Vahlensieck. 2020-06-15 21:48 schwarze Changed: compat_stringlist.c (1.8), "Exp", lines: +50 -25 compat_stringlist.h (1.5), "Exp", lines: +23 -20 Sync stringlist implementation with NetBSD. Various improvements of security, functionality, and style. 2020-06-15 20:49 schwarze Changed: compat_strlcat.c (1.6), "Exp", lines: +26 -26 compat_strlcpy.c (1.6), "Exp", lines: +20 -21 sync with OpenBSD, no functional change intended 2020-06-15 20:19 schwarze Changed: compat_strndup.c (1.3), "Exp", lines: +4 -3 update millert@'s email address 2020-06-15 18:05 schwarze Changed: mandoc.1 (1.244), "Exp", lines: +18 -1 document -T html -O tag as implemented in main.c rev. 1.350 2020-06-15 17:25 schwarze Changed: main.c (1.350), "Exp", lines: +24 -17 Support -T html -O tag by passing a file:// URI to the pager. Feature suggested by and implementation based on a patch from Abel Romero Perez <romeroperezabel at gmail dot com>. 2020-06-15 16:58 schwarze Changed: Makefile (1.534), "Exp", lines: +2 -1 add missing compat_stringlist.o to ALL_COBJS, useful for make clean 2020-06-15 01:37 schwarze Changed: Makefile (1.533), "Exp", lines: +8 -15 compat_err.c (1.5), "Exp", lines: +2 -11 compat_fts.c (1.17), "Exp", lines: +2 -11 compat_getline.c (1.2), "Exp", lines: +2 -11 compat_getsubopt.c (1.6), "Exp", lines: +2 -11 compat_isblank.c (1.3), "Exp", lines: +2 -12 compat_mkdtemp.c (1.3), "Exp", lines: +2 -11 compat_ohash.c (1.7), "Exp", lines: +2 -11 compat_progname.c (1.2), "Exp", lines: +2 -13 compat_reallocarray.c (1.5), "Exp", lines: +3 -12 compat_recallocarray.c (1.2), "Exp", lines: +8 -17 compat_strcasestr.c (1.5), "Exp", lines: +2 -11 compat_stringlist.c (1.7), "Exp", lines: +2 -11 compat_strlcat.c (1.5), "Exp", lines: +2 -10 compat_strlcpy.c (1.5), "Exp", lines: +2 -10 compat_strndup.c (1.2), "Exp", lines: +2 -11 compat_strsep.c (1.5), "Exp", lines: +3 -12 compat_strtonum.c (1.2), "Exp", lines: +3 -12 compat_vasprintf.c (1.4), "Exp", lines: +2 -11 configure (1.75), "Exp", lines: +60 -29 Only compile compat_*.c implementations that are actually needed. That's cleaner and it is supposed to fix compiler warnings with gcc 10 reported by Wynn Wolf Arbor <wolf at oriole dot systems> on discuss@. 2020-06-14 23:40 schwarze Changed: catman.c (1.22), "Exp", lines: +2 -2 configure (1.74), "Exp", lines: +68 -94 mandocd.c (1.12), "Exp", lines: +2 -2 Make the ./configure script simpler, more robust, and 23 lines shorter: * three rather than four arguments for singletest() * let runtest() support testing two variants of compiler flags * always report a failed test, even when another test follows * run all tests before detecting fatal conditions * rename HAVE_CMSG_XPG42 to NEED_XPG4_2 for consistency * consistently use braces for shell variable interpolation * drop archaic "X${" syntax and unusual "==" in string comparisons 2020-06-14 23:08 schwarze Changed: compat_fts.c (1.16), "Exp", lines: +7 -6 merge rev. 1.58 from OpenBSD (deraadt@): recallocarray() the string buffer, to avoid leaving such contents around in the address space. Don't bother doing so for the buffer which contains aslr'd pointers... OK millert@ 2020-06-14 22:49 schwarze Changed: compat_fts.c (1.15), "Exp", lines: +5 -2 compat_fts.h (1.5), "Exp", lines: +2 -1 Give the fts_compar struct member a real prototype. This adds clarity and avoids compiler warnings. 2020-06-14 16:24 schwarze Changed: main.c (1.349), "Exp", lines: +2 -2 Fix a regression in rev. 1.319 (2019/03/03): Pass the right object to html_reset() or it will crash when rendering more than one manual page to HTML in a row. Bug reported by Abel Romero Perez <romeroperezabel at gmail dot com>. Patch from otto@. 2020-04-26 21:41 schwarze Added: regress/mdoc/Fl/long.in (1.1) regress/mdoc/Fl/long.out_ascii (1.1) regress/mdoc/Fl/long.out_html (1.1) regress/mdoc/Fl/long.out_markdown (1.1) regress/mdoc/Fl/long.out_tag (1.1) Changed: TODO (1.302), "Exp", lines: +4 -5 mdoc_validate.c (1.387), "Exp", lines: +26 -2 regress/mdoc/Fl/Makefile (1.8), "Exp", lines: +4 -4 While we do not recommend the idiom ".Fl Fl long" for long options because it is an abuse of semantic macros for device-specific presentational effects, this idiom is so widespread that it makes sense to convert it to the recommended ".Fl \-long" during the validation phase. For example, this improves HTML formatting in pages where authors have used the dubious .Fl Fl. Feature suggested by Steffen Nurpmeso <steffen at sdaoden dot eu> on freebsd-hackers. 2020-04-24 13:13 schwarze Changed: mandoc_html.3 (1.23), "Exp", lines: +19 -2 Resurrect the documentation of the print_otag() 's' attribute specifier, reverting a minor part of rev. 1.21. Contrary to what i thought, that attribute *is* still supported for a small number of unusual cases. 2020-04-24 12:02 schwarze Changed: man_validate.c (1.154), "Exp", lines: +8 -3 mandoc.1 (1.243), "Exp", lines: +17 -3 mandoc.h (1.268), "Exp", lines: +2 -1 mandoc_msg.c (1.11), "Exp", lines: +5 -2 mdoc_validate.c (1.386), "Exp", lines: +8 -2 read.c (1.219), "Exp", lines: +9 -3 roff_int.h (1.17), "Exp", lines: +3 -2 provide a STYLE message when mandoc knows the file name and the extension disagrees with the section number given in the .Dt or .TH macro; feature suggested and patch tested by jmc@ 2020-04-20 13:07 schwarze Changed: html.c (1.270), "Exp", lines: +4 -3 regress/man/IP/literal.out_html (1.6), "Exp", lines: +3 -3 regress/man/TP/literal.out_html (1.4), "Exp", lines: +1 -1 regress/man/TP/vert.out_html (1.3), "Exp", lines: +1 -1 regress/mdoc/Bd/nested.out_html (1.2), "Exp", lines: +2 -2 regress/mdoc/Sh/tag.out_html (1.4), "Exp", lines: +1 -1 In fragment identifiers, use ~%d for ordinal suffixes, and reserve the character '~' for that purpose. Bug found by validator.w3.org in openssl(1), which contains both a tag "tls1_2" and a second instance of a tag "tls1", which also resulted in "tls1_2", causing a clash. Now, the second instance of "tls1" is rendered as "tls1~2" instead, employing the newly reserved '~'. 2020-04-19 16:36 schwarze Added: regress/mdoc/Bd/nested.out_html (1.1) regress/mdoc/Bd/spacing.out_tag (1.1) regress/mdoc/Dl/spacing.out_html (1.1) Changed: tag.c (1.36), "Exp", lines: +41 -24 regress/mdoc/Bd/Makefile (1.7), "Exp", lines: +3 -3 regress/mdoc/Bd/nested.in (1.4), "Exp", lines: +9 -6 regress/mdoc/Bd/nested.out_ascii (1.4), "Exp", lines: +4 -1 regress/mdoc/Bd/nested.out_lint (1.7), "Exp", lines: +2 -2 regress/mdoc/Bd/nested.out_markdown (1.4), "Exp", lines: +9 -5 regress/mdoc/Bd/nested.out_tag (1.2), "Exp", lines: +4 -4 regress/mdoc/Bd/paragraph.in (1.3), "Exp", lines: +5 -5 regress/mdoc/Bd/paragraph.out_ascii (1.3), "Exp", lines: +3 -3 regress/mdoc/Bd/paragraph.out_html (1.5), "Exp", lines: +4 -3 regress/mdoc/Bd/paragraph.out_markdown (1.3), "Exp", lines: +3 -3 regress/mdoc/D1/spacing.out_html (1.4), "Exp", lines: +2 -2 regress/mdoc/Dl/Makefile (1.5), "Exp", lines: +2 -1 regress/mdoc/Dl/spacing.in (1.4), "Exp", lines: +8 -2 regress/mdoc/Dl/spacing.out_ascii (1.4), "Exp", lines: +5 -1 regress/mdoc/Dl/spacing.out_lint (1.7), "Exp", lines: +1 -1 regress/mdoc/Dl/spacing.out_markdown (1.4), "Exp", lines: +6 -2 regress/mdoc/Dl/spacing.out_tag (1.2), "Exp", lines: +1 -1 regress/mdoc/Pp/arg.out_markdown (1.5), "Exp", lines: +1 -2 regress/mdoc/blank/transp.out_markdown (1.3), "Exp", lines: +1 -2 When .Bd, .D1, or .Dl is tagged, attach the permalink to the first few letters, similar to what was earlier done for .Pp. 2020-04-19 15:16 schwarze Changed: html.c (1.269), "Exp", lines: +40 -34 mandoc_html.3 (1.22), "Exp", lines: +17 -16 mdoc_html.c (1.340), "Exp", lines: +9 -4 Correctly handle non-unique tags even when NODE_ID and NODE_HREF fall apart, NODE_ID occurring earlier than NODE_HREF. 2020-04-18 20:44 schwarze Changed: mandoc_html.3 (1.21), "Exp", lines: +137 -32 Major update: Complete includes, add several functions, no more <?xml?>, no more style attributes, NODE_HREF flag, mention roff_html.c. 2020-04-18 20:40 schwarze Added: regress/mdoc/Pp/arg.out_html (1.1) Changed: Makefile.depend (1.48), "Exp", lines: +5 -5 html.c (1.268), "Exp", lines: +21 -4 html.h (1.108), "Exp", lines: +3 -1 man_validate.c (1.153), "Exp", lines: +2 -2 mdoc_html.c (1.339), "Exp", lines: +7 -4 mdoc_validate.c (1.385), "Exp", lines: +2 -2 read.c (1.218), "Exp", lines: +4 -4 tag.c (1.35), "Exp", lines: +29 -4 tag.h (1.14), "Exp", lines: +2 -2 term_tag.c (1.4), "Exp", lines: +2 -1 regress/mdoc/Bd/paragraph.out_html (1.4), "Exp", lines: +5 -3 regress/mdoc/Pp/Makefile (1.5), "Exp", lines: +2 -1 regress/mdoc/Pp/arg.in (1.4), "Exp", lines: +6 -2 regress/mdoc/Pp/arg.out_ascii (1.4), "Exp", lines: +5 -1 regress/mdoc/Pp/arg.out_lint (1.9), "Exp", lines: +3 -3 regress/mdoc/Pp/arg.out_markdown (1.4), "Exp", lines: +7 -2 regress/mdoc/Pp/arg.out_tag (1.2), "Exp", lines: +2 -2 regress/mdoc/blank/transp.out_markdown (1.2), "Exp", lines: +2 -1 When a .Tg is attached to a paragraph, attach the permalink to the first word, or the first few words if they are short. 2020-04-08 11:56 schwarze Changed: html.c (1.267), "Exp", lines: +3 -3 mdoc_validate.c (1.384), "Exp", lines: +3 -3 roff.c (1.374), "Exp", lines: +2 -1 roff.h (1.74), "Exp", lines: +2 -1 tag.c (1.34), "Exp", lines: +17 -10 term_tag.c (1.3), "Exp", lines: +2 -4 tree.c (1.89), "Exp", lines: +39 -49 Use a separate node->tag attribute rather than abusing the node->string attribute for the purpose. No functional change intended. The purpose is to make it possible to later attach tags to text nodes. 2020-04-07 22:56 schwarze Changed: Makefile.depend (1.47), "Exp", lines: +2 -2 html.c (1.266), "Exp", lines: +11 -7 read.c (1.217), "Exp", lines: +2 -1 tag.c (1.33), "Exp", lines: +95 -1 tag.h (1.13), "Exp", lines: +2 -1 tree.c (1.88), "Exp", lines: +5 -2 regress/mdoc/Cm/tag.out_html (1.3), "Exp", lines: +5 -5 regress/mdoc/Dv/tag.out_html (1.2), "Exp", lines: +2 -2 regress/mdoc/Em/tag.out_html (1.3), "Exp", lines: +2 -2 regress/mdoc/Er/tag.out_html (1.2), "Exp", lines: +1 -1 regress/mdoc/Ev/tag.out_html (1.2), "Exp", lines: +2 -2 regress/mdoc/Fl/tag.out_html (1.2), "Exp", lines: +2 -2 regress/mdoc/Fo/tag.out_html (1.2), "Exp", lines: +6 -7 regress/mdoc/Ic/tag.out_html (1.2), "Exp", lines: +2 -2 regress/mdoc/Li/tag.out_html (1.2), "Exp", lines: +2 -2 regress/mdoc/Ms/tag.out_html (1.2), "Exp", lines: +2 -2 regress/mdoc/No/tag.out_html (1.2), "Exp", lines: +2 -2 regress/mdoc/Sy/tag.out_html (1.2), "Exp", lines: +2 -2 regress/mdoc/Tg/column.in (1.2), "Exp", lines: +4 -3 regress/mdoc/Tg/column.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Tg/column.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Tg/warn.out_html (1.3), "Exp", lines: +1 -1 Separate the place to put the <a href> permalink (now marked with NODE_HREF) from the target element of the link (still marked with NODE_ID). In many cases, use this to move the target to the beginning of the paragraph, such that readers don't get dropped into the middle of a sentence. 2020-04-06 10:16 schwarze Added: regress/mdoc/Bd/nested.out_tag (1.1) regress/mdoc/Bd/paragraph.out_tag (1.1) regress/mdoc/D1/spacing.out_tag (1.1) regress/mdoc/Dl/spacing.out_tag (1.1) regress/mdoc/Pp/arg.out_tag (1.1) regress/mdoc/Tg/column.in (1.1) regress/mdoc/Tg/column.out_ascii (1.1) regress/mdoc/Tg/column.out_html (1.1) regress/mdoc/Tg/column.out_markdown (1.1) regress/mdoc/Tg/column.out_tag (1.1) regress/mdoc/Tg/list.in (1.1) regress/mdoc/Tg/list.out_ascii (1.1) regress/mdoc/Tg/list.out_html (1.1) regress/mdoc/Tg/list.out_markdown (1.1) regress/mdoc/Tg/list.out_tag (1.1) Changed: html.c (1.265), "Exp", lines: +17 -6 mdoc.c (1.275), "Exp", lines: +8 -5 mdoc_html.c (1.338), "Exp", lines: +20 -15 mdoc_term.c (1.380), "Exp", lines: +16 -7 mdoc_validate.c (1.383), "Exp", lines: +41 -7 roff.c (1.373), "Exp", lines: +8 -2 roff.h (1.73), "Exp", lines: +3 -2 regress/mdoc/Bd/Makefile (1.6), "Exp", lines: +2 -1 regress/mdoc/Bd/nested.in (1.3), "Exp", lines: +6 -2 regress/mdoc/Bd/nested.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Bd/nested.out_lint (1.6), "Exp", lines: +2 -2 regress/mdoc/Bd/nested.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Bd/paragraph.in (1.2), "Exp", lines: +7 -2 regress/mdoc/Bd/paragraph.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/paragraph.out_html (1.3), "Exp", lines: +5 -5 regress/mdoc/Bd/paragraph.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/D1/Makefile (1.5), "Exp", lines: +2 -1 regress/mdoc/D1/spacing.in (1.4), "Exp", lines: +3 -2 regress/mdoc/D1/spacing.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/D1/spacing.out_html (1.3), "Exp", lines: +3 -1 regress/mdoc/D1/spacing.out_lint (1.7), "Exp", lines: +1 -1 regress/mdoc/D1/spacing.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Dl/Makefile (1.4), "Exp", lines: +2 -1 regress/mdoc/Dl/spacing.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Dl/spacing.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Dl/spacing.out_lint (1.6), "Exp", lines: +1 -1 regress/mdoc/Dl/spacing.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Pp/Makefile (1.4), "Exp", lines: +2 -1 regress/mdoc/Pp/arg.in (1.3), "Exp", lines: +6 -2 regress/mdoc/Pp/arg.out_ascii (1.3), "Exp", lines: +3 -1 regress/mdoc/Pp/arg.out_lint (1.8), "Exp", lines: +3 -3 regress/mdoc/Pp/arg.out_markdown (1.3), "Exp", lines: +3 -1 regress/mdoc/Tg/Makefile (1.2), "Exp", lines: +6 -4 Support manual tagging of .Pp, .Bd, .D1, .Dl, .Bl, and .It. In HTML output, improve the logic for writing inside permalinks: skip them when there is no child content or when there is a risk that the children might contain flow content. 2020-04-04 20:33 schwarze Added: regress/man/SH/paragraph.out_tag (1.1) regress/man/SS/paragraph.out_tag (1.1) Changed: man_html.c (1.178), "Exp", lines: +1 -2 man_validate.c (1.152), "Exp", lines: +25 -2 regress/man/IP/empty.out_tag (1.2), "Exp", lines: +2 -0 regress/man/IP/tag.out_tag (1.2), "Exp", lines: +2 -0 regress/man/SH/Makefile (1.5), "Exp", lines: +2 -1 regress/man/SS/Makefile (1.5), "Exp", lines: +2 -1 regress/man/TP/tag.out_tag (1.2), "Exp", lines: +2 -0 automatically tag .SH and .SS in man(7) terminal output in the same way as it was done for .Sh and .Ss in mdoc(7) 2020-04-03 11:35 schwarze Changed: cgi.c (1.172), "Exp", lines: +6 -4 libmandoc.h (1.79), "Exp", lines: +6 -3 mandoc.h (1.267), "Exp", lines: +4 -3 mandocdb.c (1.267), "Exp", lines: +5 -3 mdoc_markdown.c (1.35), "Exp", lines: +7 -5 out.h (1.34), "Exp", lines: +4 -2 roff.c (1.372), "Exp", lines: +5 -3 Remove some stray argument names from function prototypes, for consistency with the dominant style used in mandoc. No functional change. Patch from Martin Vahlensieck <academicsolutions dot ch>. 2020-04-03 10:30 schwarze Changed: tag.c (1.32), "Exp", lines: +2 -1 #include <stdint.h> because that is needed before #include <ohash.h>; fixing a build failure of mandoc-portable on Arch Linux reported by Stephen Gregoratto <dev at sgregoratto dot me>. 2020-04-02 22:12 schwarze Changed: main.c (1.348), "Exp", lines: +30 -26 manconf.h (1.8), "Exp", lines: +6 -2 tag.c (1.31), "Exp", lines: +4 -12 tag.h (1.12), "Exp", lines: +2 -12 term_tag.c (1.2), "Exp", lines: +25 -29 term_tag.h (1.2), "Exp", lines: +3 -4 When the last file formatted yielded no tags, the tags file got deleted before starting the pager, even when earlier input files had written to it; thanks to weerd@ for reporting that bug. Since we now generate tags for section headers, we almost always generate at least some. Consequently, while fixing the above bug, simplify the code by never deleting the tags file before the pager exits, not even in the rare case that the file happens to be empty. Hence, this patch is -75 +63 LOC even though it fixes two bugs. While deleting the output files belongs after exit from the pager, closing them should be done before it is started. Collect the related code, which was scattered in various places, to where it belongs, in a dedicated function in the term_tag.c module. As a side benefit, never fclose(2) stdout, only dup2(2) to it. Similarly, when the -O tag argument wasn't found in the last file formatted, there was a complaint about "no such tag" even when the argument did occur in earlier files. Fix that by looking for a matching tag after every formatted file rather than just once at the very end. Given that command line arguments aren't properties of the file(s) being formatted, that check is a job for the main program, not for the formatters, so while fixing the check, move it from term_tag.c to main.c. 2020-04-02 15:04 schwarze Changed: mdoc_validate.c (1.382), "Exp", lines: +8 -4 regress/mdoc/Em/tag.in (1.2), "Exp", lines: +3 -3 regress/mdoc/Em/tag.out_ascii (1.2), "Exp", lines: +3 -2 regress/mdoc/Em/tag.out_html (1.2), "Exp", lines: +1 -1 regress/mdoc/Em/tag.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Em/tag.out_tag (1.3), "Exp", lines: +3 -3 regress/mdoc/Sh/tag.in (1.3), "Exp", lines: +4 -2 regress/mdoc/Sh/tag.out_ascii (1.3), "Exp", lines: +4 -1 regress/mdoc/Sh/tag.out_html (1.3), "Exp", lines: +4 -0 regress/mdoc/Sh/tag.out_lint (1.2), "Exp", lines: +2 -2 regress/mdoc/Sh/tag.out_markdown (1.3), "Exp", lines: +5 -1 regress/mdoc/Sh/tag.out_tag (1.2), "Exp", lines: +2 -1 regress/mdoc/Tg/warn.in (1.2), "Exp", lines: +3 -3 regress/mdoc/Tg/warn.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Tg/warn.out_html (1.2), "Exp", lines: +1 -1 regress/mdoc/Tg/warn.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Tg/warn.out_tag (1.3), "Exp", lines: +1 -1 Copy tagged strings before marking hyphens as breakable. For example, this makes ":tCo-processes" work in ksh(1). 2020-04-01 20:21 schwarze Added: regress/mdoc/Sh/tag.out_lint (1.1) regress/mdoc/Sh/tag.out_tag (1.1) Changed: mdoc_html.c (1.337), "Exp", lines: +1 -3 mdoc_validate.c (1.381), "Exp", lines: +38 -24 regress/mdoc/Cm/tag.out_tag (1.3), "Exp", lines: +2 -0 regress/mdoc/Dv/tag.out_tag (1.2), "Exp", lines: +2 -0 regress/mdoc/Em/tag.out_tag (1.2), "Exp", lines: +2 -0 regress/mdoc/Er/tag.out_tag (1.2), "Exp", lines: +3 -0 regress/mdoc/Ev/tag.out_tag (1.2), "Exp", lines: +2 -0 regress/mdoc/Fl/tag.out_tag (1.2), "Exp", lines: +2 -0 regress/mdoc/Fo/tag.out_tag (1.2), "Exp", lines: +2 -0 regress/mdoc/Ic/tag.out_tag (1.2), "Exp", lines: +2 -0 regress/mdoc/Li/tag.out_tag (1.2), "Exp", lines: +2 -0 regress/mdoc/Ms/tag.out_tag (1.2), "Exp", lines: +2 -0 regress/mdoc/No/tag.out_tag (1.2), "Exp", lines: +2 -0 regress/mdoc/Sh/Makefile (1.8), "Exp", lines: +3 -2 regress/mdoc/Sh/tag.in (1.2), "Exp", lines: +8 -2 regress/mdoc/Sh/tag.out_ascii (1.2), "Exp", lines: +10 -1 regress/mdoc/Sh/tag.out_html (1.2), "Exp", lines: +14 -0 regress/mdoc/Sh/tag.out_markdown (1.2), "Exp", lines: +13 -1 regress/mdoc/Sy/tag.out_tag (1.2), "Exp", lines: +2 -0 regress/mdoc/Tg/warn.out_tag (1.2), "Exp", lines: +2 -0 Just like we are already doing it in HTML output, automatically tag section and subsection headers in terminal output, too. Even though admittedly, commands like "/SEE" and "/ Subsec" work, too, there is no downside, and besides, with the recent improvements in the tagging framework, implementation cost is negligible. 2020-03-28 16:18 schwarze Changed: main.c (1.347), "Exp", lines: +10 -13 Even though the HTML, man, markdown, PDF, PostScript, and tree formatters never write a ctags(1) file, using a pager still requires writing the main output file and passing the file name to the pager. Recent regression mentioned on IRC and reported by kn@. 2020-03-21 00:25 schwarze Changed: regress/mdoc/Cm/tag.in (1.2), "Exp", lines: +9 -3 regress/mdoc/Cm/tag.out_ascii (1.2), "Exp", lines: +10 -1 regress/mdoc/Cm/tag.out_html (1.2), "Exp", lines: +6 -0 regress/mdoc/Cm/tag.out_markdown (1.2), "Exp", lines: +13 -1 regress/mdoc/Cm/tag.out_tag (1.2), "Exp", lines: +4 -1 test skipping of initial hyphens and minus signs in automatic tags; related to tags.c rev. 1.30 2020-03-21 00:17 schwarze Changed: tag.c (1.30), "Exp", lines: +19 -3 When setting automatic tags, skip initial hyphens and minus signs, bringing the behaviour for mdoc(7) closer to what is already done for man(7). Triggered by the observation of kn@ that automatic tagging didn't work very well for find(1) primaries. OK kn@ 2020-03-19 12:21 schwarze Changed: main.c (1.346), "Exp", lines: +3 -2 The tag file always needs to be closed before starting the pager, even when no output formatter was allocated because all pages shown were preformatted. Regression in previous reported by <Andreas dot Kahari at abc dot se> on bugs@. 2020-03-13 17:31 schwarze Changed: Makefile (1.532), "Exp", lines: +7 -4 configure (1.73), "Exp", lines: +15 -4 Make the "make depend" maintainer target more convenient by having it run ./configure with native fts and ohash disabled. 2020-03-13 16:16 schwarze Changed: read.c (1.216), "Exp", lines: +3 -1 tag.c (1.29), "Exp", lines: +4 -1 Properly reset the validation part of the tagging module between files. This fixes a crash in makewhatis(8) encountered by naddy@. 2020-03-13 15:32 schwarze Added: term_tag.c (1.1) term_tag.h (1.1) regress/copyless (1.1) regress/man/IP/empty.out_html (1.1) regress/man/IP/empty.out_tag (1.1) regress/man/IP/tag.in (1.1) regress/man/IP/tag.out_ascii (1.1) regress/man/IP/tag.out_html (1.1) regress/man/IP/tag.out_tag (1.1) regress/man/TP/tag.in (1.1) regress/man/TP/tag.out_ascii (1.1) regress/man/TP/tag.out_html (1.1) regress/man/TP/tag.out_tag (1.1) regress/mdoc/Cm/tag.in (1.1) regress/mdoc/Cm/tag.out_ascii (1.1) regress/mdoc/Cm/tag.out_html (1.1) regress/mdoc/Cm/tag.out_markdown (1.1) regress/mdoc/Cm/tag.out_tag (1.1) regress/mdoc/Dv/tag.in (1.1) regress/mdoc/Dv/tag.out_ascii (1.1) regress/mdoc/Dv/tag.out_html (1.1) regress/mdoc/Dv/tag.out_markdown (1.1) regress/mdoc/Dv/tag.out_tag (1.1) regress/mdoc/Em/tag.in (1.1) regress/mdoc/Em/tag.out_ascii (1.1) regress/mdoc/Em/tag.out_html (1.1) regress/mdoc/Em/tag.out_markdown (1.1) regress/mdoc/Em/tag.out_tag (1.1) regress/mdoc/Er/tag.in (1.1) regress/mdoc/Er/tag.out_ascii (1.1) regress/mdoc/Er/tag.out_html (1.1) regress/mdoc/Er/tag.out_markdown (1.1) regress/mdoc/Er/tag.out_tag (1.1) regress/mdoc/Ev/tag.in (1.1) regress/mdoc/Ev/tag.out_ascii (1.1) regress/mdoc/Ev/tag.out_html (1.1) regress/mdoc/Ev/tag.out_markdown (1.1) regress/mdoc/Ev/tag.out_tag (1.1) regress/mdoc/Fl/tag.in (1.1) regress/mdoc/Fl/tag.out_ascii (1.1) regress/mdoc/Fl/tag.out_html (1.1) regress/mdoc/Fl/tag.out_markdown (1.1) regress/mdoc/Fl/tag.out_tag (1.1) regress/mdoc/Fo/tag.in (1.1) regress/mdoc/Fo/tag.out_ascii (1.1) regress/mdoc/Fo/tag.out_html (1.1) regress/mdoc/Fo/tag.out_markdown (1.1) regress/mdoc/Fo/tag.out_tag (1.1) regress/mdoc/Ic/tag.in (1.1) regress/mdoc/Ic/tag.out_ascii (1.1) regress/mdoc/Ic/tag.out_html (1.1) regress/mdoc/Ic/tag.out_markdown (1.1) regress/mdoc/Ic/tag.out_tag (1.1) regress/mdoc/Li/tag.in (1.1) regress/mdoc/Li/tag.out_ascii (1.1) regress/mdoc/Li/tag.out_html (1.1) regress/mdoc/Li/tag.out_markdown (1.1) regress/mdoc/Li/tag.out_tag (1.1) regress/mdoc/Ms/tag.in (1.1) regress/mdoc/Ms/tag.out_ascii (1.1) regress/mdoc/Ms/tag.out_html (1.1) regress/mdoc/Ms/tag.out_markdown (1.1) regress/mdoc/Ms/tag.out_tag (1.1) regress/mdoc/No/tag.in (1.1) regress/mdoc/No/tag.out_ascii (1.1) regress/mdoc/No/tag.out_html (1.1) regress/mdoc/No/tag.out_markdown (1.1) regress/mdoc/No/tag.out_tag (1.1) regress/mdoc/Sy/tag.in (1.1) regress/mdoc/Sy/tag.out_ascii (1.1) regress/mdoc/Sy/tag.out_html (1.1) regress/mdoc/Sy/tag.out_markdown (1.1) regress/mdoc/Sy/tag.out_tag (1.1) regress/mdoc/Tg/Makefile (1.1) regress/mdoc/Tg/warn.in (1.1) regress/mdoc/Tg/warn.out_ascii (1.1) regress/mdoc/Tg/warn.out_html (1.1) regress/mdoc/Tg/warn.out_lint (1.1) regress/mdoc/Tg/warn.out_markdown (1.1) regress/mdoc/Tg/warn.out_tag (1.1) Changed: Makefile (1.531), "Exp", lines: +13 -8 Makefile.depend (1.46), "Exp", lines: +8 -7 html.c (1.264), "Exp", lines: +68 -10 html.h (1.107), "Exp", lines: +7 -2 main.c (1.345), "Exp", lines: +19 -18 man_html.c (1.177), "Exp", lines: +7 -9 man_term.c (1.235), "Exp", lines: +10 -77 man_validate.c (1.151), "Exp", lines: +103 -5 mandoc_headers.3 (1.33), "Exp", lines: +57 -20 mandoc_html.3 (1.20), "Exp", lines: +119 -18 mdoc_html.c (1.336), "Exp", lines: +41 -159 mdoc_term.c (1.379), "Exp", lines: +82 -202 mdoc_validate.c (1.380), "Exp", lines: +126 -74 read.c (1.215), "Exp", lines: +11 -2 tag.c (1.28), "Exp", lines: +76 -204 tag.h (1.11), "Exp", lines: +15 -14 tree.c (1.87), "Exp", lines: +10 -2 regress/regress.pl (1.14), "Exp", lines: +61 -29 regress/regress.pl.1 (1.5), "Exp", lines: +5 -12 regress/man/IP/Makefile (1.4), "Exp", lines: +4 -3 regress/man/IP/empty.in (1.3), "Exp", lines: +3 -1 regress/man/IP/empty.out_ascii (1.2), "Exp", lines: +2 -2 regress/man/IP/empty.out_lint (1.5), "Exp", lines: +2 -2 regress/man/IP/literal.out_html (1.5), "Exp", lines: +4 -4 regress/man/TP/Makefile (1.6), "Exp", lines: +4 -3 regress/man/TP/literal.out_html (1.3), "Exp", lines: +2 -2 regress/man/TP/vert.out_html (1.2), "Exp", lines: +2 -2 regress/mdoc/Makefile (1.2), "Exp", lines: +2 -2 regress/mdoc/Cm/Makefile (1.5), "Exp", lines: +4 -2 regress/mdoc/Dv/Makefile (1.4), "Exp", lines: +4 -2 regress/mdoc/Em/Makefile (1.4), "Exp", lines: +4 -2 regress/mdoc/Er/Makefile (1.4), "Exp", lines: +4 -2 regress/mdoc/Ev/Makefile (1.4), "Exp", lines: +4 -2 regress/mdoc/Fl/Makefile (1.7), "Exp", lines: +5 -2 regress/mdoc/Fo/Makefile (1.6), "Exp", lines: +4 -2 regress/mdoc/Ic/Makefile (1.5), "Exp", lines: +4 -2 regress/mdoc/Li/Makefile (1.5), "Exp", lines: +4 -2 regress/mdoc/Ms/Makefile (1.4), "Exp", lines: +4 -2 regress/mdoc/No/Makefile (1.4), "Exp", lines: +4 -2 regress/mdoc/No/punct.out_lint (1.9), "Exp", lines: +1 -0 regress/mdoc/Sy/Makefile (1.4), "Exp", lines: +4 -2 Split tagging into a validation part including prioritization in tag.{h,c} and {mdoc,man}_validate.c and into a formatting part including command line argument checking in term_tag.{h,c}, html.c, and {mdoc|man}_{term|html}.c. Immediate functional benefits include: * Improved prioritization of automatic tags for .Em and .Sy. * Avoiding bogus automatic tags when .Em, .Fn, or .Sy are explicitly tagged. * Explicit tagging of .Er and .Fl now works in HTML output. * Automatic tagging of .IP and .TP now works in HTML output. But mainly, this patch provides clean earth to build further improvements on. Technical changes: * Main program: Write a tag file for ASCII and UTF-8 output only. * All formatters: There is no more need to delay writing the tags. * mdoc(7)+man(7) formatters: No more need for elaborate syntax tree inspection. * HTML formatter: If available, use the "string" attribute as the tag. * HTML formatter: New function to write permalinks, to reduce code duplication. Style cleanup in the vicinity while here: * mdoc(7) terminal formatter: To set up bold font for children, defer to termp_bold_pre() rather than calling term_fontpush() manually. * mdoc(7) terminal formatter: Garbage collect some duplicate functions. * mdoc(7) HTML formatter: Unify <code> handling, delete redundant functions. * Where possible, use switch statements rather than if cascades. * Get rid of some more Yoda notation. The necessity for such changes was first discussed with kn@, but i didn't bother him with a request to review the resulting -673/+782 line patch. 2020-02-27 22:28 schwarze Changed: html.c (1.263), "Exp", lines: +3 -3 mdoc_html.c (1.335), "Exp", lines: +2 -2 The HTML standard does not allow self-closing syntax for non-void elements. Consequently, write an explicit end tag for <mark> elements. 2020-02-27 21:43 schwarze Added: regress/mdoc/Sh/tag.in (1.1) regress/mdoc/Sh/tag.out_ascii (1.1) regress/mdoc/Sh/tag.out_html (1.1) regress/mdoc/Sh/tag.out_markdown (1.1) Changed: mdoc_term.c (1.378), "Exp", lines: +6 -10 mdoc_validate.c (1.379), "Exp", lines: +45 -6 roff.c (1.371), "Exp", lines: +2 -2 roff.h (1.72), "Exp", lines: +3 -1 tree.c (1.86), "Exp", lines: +8 -1 regress/mdoc/Sh/Makefile (1.7), "Exp", lines: +3 -3 Fully support explicit tagging of .Sh and .Ss. This fixes the offset of two lines in terminal output and this improves HTML output by putting the id= attribute and <a> element into the respective <h1> or <h2> element rather than writing an additional <mark> element. To that end, introduce node flags NODE_ID (to make the node a link target, for example by writing an HTML id= attribute or by calling tag_put()) and NODE_HREF (to make the node a link source, used only in HTML output, used only to write an <a class="permalink"> element). In particular: * In the validator, generalize the concept of the "next node" such that it also works before .Sh and .Ss. * If the first argument of .Tg is empty, don't forget to complain if there are additional arguments, which will be ignored. * In the terminal formatter, support writing of explicit tags for all kinds of nodes, not just for .Tg. * In deroff(), allow nodes to have an explicit string representation even when they aren't text nodes. Use this for explicitly tagged section headers. Suprisingly, this is sufficient to make HTML output work, without explicit code changes in the HTML formatter. * In syntax tree output, display NODE_ID and NODE_HREF. 2020-02-27 01:43 schwarze Added: regress/man/HP/vert.in (1.1) regress/man/HP/vert.out_ascii (1.1) regress/man/IP/bullet.in (1.1) regress/man/IP/bullet.out_ascii (1.1) regress/man/IP/bullet.out_html (1.1) regress/man/IP/bullet.out_utf8 (1.1) regress/man/IP/vert.in (1.1) regress/man/IP/vert.out_ascii (1.1) regress/man/PP/vert.in (1.1) regress/man/PP/vert.out_ascii (1.1) regress/man/SH/vert.in (1.1) regress/man/SH/vert.out_ascii (1.1) regress/man/SS/vert.in (1.1) regress/man/SS/vert.out_ascii (1.1) regress/man/TP/vert.in (1.1) regress/man/TP/vert.out_ascii (1.1) regress/man/TP/vert.out_html (1.1) regress/mdoc/Bl/vert.in (1.1) regress/mdoc/Bl/vert.out_ascii (1.1) regress/mdoc/Bl/vert.out_markdown (1.1) regress/mdoc/Fl/spacing.in (1.1) regress/mdoc/Fl/spacing.out_ascii (1.1) regress/mdoc/Fl/spacing.out_markdown (1.1) regress/mdoc/Fo/transp.in (1.1) regress/mdoc/Fo/transp.out_ascii (1.1) regress/mdoc/Fo/transp.out_markdown (1.1) regress/mdoc/Rs/transp.in (1.1) regress/mdoc/Rs/transp.out_ascii (1.1) regress/mdoc/Rs/transp.out_markdown (1.1) regress/mdoc/Sh/transp.in (1.1) regress/mdoc/Sh/transp.out_ascii (1.1) regress/mdoc/Sh/transp.out_markdown (1.1) regress/mdoc/blank/transp.in (1.1) regress/mdoc/blank/transp.out_ascii (1.1) regress/mdoc/blank/transp.out_lint (1.1) regress/mdoc/blank/transp.out_markdown (1.1) Changed: man_html.c (1.176), "Exp", lines: +8 -6 man_term.c (1.234), "Exp", lines: +17 -24 mdoc_html.c (1.334), "Exp", lines: +38 -32 mdoc_man.c (1.136), "Exp", lines: +49 -38 mdoc_markdown.c (1.34), "Exp", lines: +25 -13 mdoc_term.c (1.377), "Exp", lines: +61 -79 mdoc_validate.c (1.378), "Exp", lines: +70 -86 roff.c (1.370), "Exp", lines: +54 -1 roff.h (1.71), "Exp", lines: +7 -3 roff_validate.c (1.19), "Exp", lines: +4 -4 regress/man/HP/Makefile (1.3), "Exp", lines: +2 -2 regress/man/IP/Makefile (1.3), "Exp", lines: +4 -3 regress/man/PP/Makefile (1.2), "Exp", lines: +2 -2 regress/man/SH/Makefile (1.4), "Exp", lines: +2 -2 regress/man/SS/Makefile (1.4), "Exp", lines: +2 -2 regress/man/TP/Makefile (1.5), "Exp", lines: +3 -3 regress/mdoc/Bd/spacing.in (1.3), "Exp", lines: +8 -2 regress/mdoc/Bd/spacing.out_ascii (1.3), "Exp", lines: +5 -1 regress/mdoc/Bd/spacing.out_markdown (1.3), "Exp", lines: +7 -1 regress/mdoc/Bl/Makefile (1.11), "Exp", lines: +2 -2 regress/mdoc/Bl/noIt.out_lint (1.6), "Exp", lines: +1 -0 regress/mdoc/Fl/Makefile (1.6), "Exp", lines: +2 -2 regress/mdoc/Fo/Makefile (1.5), "Exp", lines: +2 -2 regress/mdoc/Rs/Makefile (1.6), "Exp", lines: +2 -2 regress/mdoc/Sh/Makefile (1.6), "Exp", lines: +3 -2 regress/mdoc/Sm/badarg.out_markdown (1.3), "Exp", lines: +1 -2 regress/mdoc/Sm/twoarg.out_markdown (1.3), "Exp", lines: +2 -4 regress/mdoc/blank/Makefile (1.4), "Exp", lines: +3 -3 Introduce the concept of nodes that are semantically transparent: they are skipped when looking for previous or following high-level macros. Examples include roff(7) .ft, .ll, and .ta, mdoc(7) .Sm and .Tg, and man(7) .DT and .PD. Use this concept for a variety of improved decisions in various validators and formatters. While here, * remove a few const qualifiers on struct arguments that caused trouble; * get rid of some more Yoda notation in the vicinity; * and apply some other stylistic improvements in the vicinity. I found this class of issues while considering .Tg patches from kn@. 2020-02-27 00:36 schwarze Changed: regress/char/unicode/input.out_utf8 (1.2), "Exp", lines: +1 -1 Fix this test after the recent Unicode update in OpenBSD base. The test uses U+07FF NKO TAMAN SIGN because it is the highest code point having a two-byte UTF-8 representation. This character is a new single-width punctuation character in Unicode 11, such that mandoc now does correct horizontal spacing. We already used the code point for the test before it was assigned, which resulted in weird spacing because wcwidth(3) returns -1 for unassigned code points. 2020-02-24 21:16 schwarze Changed: main.c (1.344), "Exp", lines: +26 -4 Marc Espie reported that "man p*ipc" displayed the perlipc(1) manual. The reason was that as a last resort when failing to find a page name in mandoc.db(5) or at a few well well-defined fully qualified file names, man(1) uses glob(3) to look for candidate files in relevant directories, because some operating systems have weird file name extensions, for example pcap.3pcap and BF_set_key.3ssl on Linux. But during that globbing, the metacharacters "*?[" need to be escaped in the name, section, and path supplied by the user, or you would get weird false positives and misleading warning messages and would be unable to use the fallback for path or file names that actually contain an opening bracket. Feedback and OK espie@. 2020-02-20 22:55 schwarze Changed: mdoc_man.c (1.135), "Exp", lines: +4 -4 bugfix: indented paragraph macros need a space character before the width argument 2020-02-20 00:29 schwarze Changed: mdoc_man.c (1.134), "Exp", lines: +2 -2 mdoc_markdown.c (1.33), "Exp", lines: +2 -2 bugfix: .Tg must be ignored completely in these output modes 2020-02-18 17:31 schwarze Changed: man.7 (1.145), "Exp", lines: +16 -5 Mention that .AT, .P, .SB, and .UC are extensions; it really matters because we only retain the language for backward compatibility in the first place. Part of the research done by <G dot Branden dot Robinson at gmail dot com>, see the list <groff at gnu dot org> for details. No change to the following conventions: Consider portable whatever made it into GNU troff no later than 4.4BSD. For portable extensions, mention their origin at the end of the description. For non-portable extensions, for example from man-ext, usually warn earlier, near the beginning of the description. 2020-02-15 15:28 schwarze Changed: mandoc.1 (1.242), "Exp", lines: +8 -3 mention that -T man does not support eqn(7) and tbl(7); triggered by a question from Stephen Gregoratto <dev at sgregoratto dot me> 2020-02-15 14:59 schwarze Changed: TODO (1.301), "Exp", lines: +9 -1 two new entries: "Fl Fl" to "Fl \-" in validation and eqn/tbl in -T man 2020-02-13 18:32 schwarze Changed: mdoc.7 (1.281), "Exp", lines: +4 -17 Mention that the .Dd "date" argument is the date of the last change. Triggered by a question from Jason A. Donenfeld. While here, delete three COMPATIBILITY entries that i fixed some time ago. 2020-02-13 16:18 schwarze Changed: chars.c (1.79), "Exp", lines: +4 -3 mandoc_char.7 (1.77), "Exp", lines: +8 -8 Digit-width and narrow spaces are non-breaking. Noticed because Branden Robinson worked on related documentation in groff. 2020-02-12 21:15 schwarze Changed: man_html.c (1.175), "Exp", lines: +3 -3 In roff, a space character at the beginning of an input line requires starting a new output line, and merely starting a new line of HTML code isn't sufficient to achieve that. Solve this in the same way as mdoc_html.c already does it, by printing a <br/> element. Fixing a bug reported by Jason A. Donenfeld <Jason at zx2c4 dot com> in the wg-quick(8) manual page on manpages.debian.org. 2020-02-10 14:42 schwarze Changed: man.conf.5 (1.8), "Exp", lines: +2 -8 manpath.c (1.41), "Exp", lines: +2 -9 Finally delete support for the "_whatdb" configuration directive, which has a misleading syntax. It was declared obsolete and superseded by the "manpath" directive five years ago. 2020-02-10 14:13 schwarze Changed: man.conf.5 (1.7), "Exp", lines: +5 -3 Reduce the diff to OpenBSD by making FILES a list, even though it has only one entry in the portable version. Do not add /etc/examples/man.conf for the portable version, though. 2020-02-10 14:04 schwarze Changed: man.1 (1.38), "Exp", lines: +3 -3 The man(1) command was already available in AT&T Version 2 UNIX. Jonathan Gray found it in the "Combined Table of Contents" in Doug McIlroy's "A Research UNIX Reader", which contains a table of which edition manuals appeared in, and in both the "Table of Contents" (page vi) and the body (page 89) of the printed UNIX Programmer's Manual (June 12, 1972) from bitsavers. 2020-02-10 13:49 schwarze Changed: main.c (1.343), "Exp", lines: +15 -3 man.1 (1.37), "Exp", lines: +6 -3 For compatibility with the man(1) implementations of the man-1.6 and man-db packages, print the manpath if the -w option is given without a following name argument. This quirk has been in man-1.6 since at least man-1.5e (1998) and in man-db since 2012. Using this feature in portable software is a dubious idea because the internal organization of manual page directories varies in about a dozen respects among operating systems, so even if you get the answer, there is no portable way to use it for looking up anything inside. However, Matej Cepl <mcepl at suse dot cz> made me aware that some software, for example the manual viewing functionality in the newest editors/neovim code, unwisely relies on this feature anyway. No objections were raised when this patch was shown on tech@. 2020-02-06 19:41 schwarze Changed: main.c (1.342), "Exp", lines: +14 -3 Make sure that -l always causes -w to be ignored, as documented in the man(1) manual page. This bugfix is needed to prevent the command "man -lw" from dereferencing a NULL pointer. 2020-02-05 15:12 schwarze Changed: configure (1.72), "Exp", lines: +2 -2 configure.local.example (1.37), "Exp", lines: +9 -16 No longer try to ask make(1) what the default compiler is, just use "cc". That line was a bad idea in the first place, it tried to be too clever, and it failed in different ways on different platforms. Even when it succeeded, what make(1) considered the default wasn't always useful. Having a simple and robust default and asking users to override it when needed is better. 2020-01-26 21:25 schwarze Changed: mandocdb.c (1.266), "Exp", lines: +86 -36 Repair more of the issues that i found in filescan() while investigating the report from <Andreas dot Kahari at abc dot se> on ports@: For a symlink, use the first of the following names that is available: 1. In -t mode, the symlink itself (unchanged). 2. When the (unresolved) symlink already resides inside the manpath, just strip the manpath and use the rest (unchanged). 3. When prefix(es) of the unresolved symlink point to the manpath, strip the longest such prefix and use the rest (new); this fixes situations where the manpath or one of its parent directories is a symlink and at the same time contains symlinks to manual pages. 4. Fall back to the fully resolved symlink, with the manpath stripped (new); this may for example happen when the command line passes symlinks from outside the manpath that point to manual pages inside the manpath, or if manual page trees contain symlinks to symlinks and not all of them are given on the command line. The fallback (4) isn't perfect. You can construct symlink spaghetti in such a way that this algorithm will not enter all manual page names into the database that a human would be able to deduce. But i do not expect such spaghetti to actually occur in practice (not even in ports), and a full fix would require re-implementing realpath(3) in terms of step-by-step readlink(2) calls, repeating the complicated algorithm (3) after each step. While here, also stop using PATH_MAX as the size of a static buffer in filescan(); on some systems, it can be unreasonably large. Instead, allocate path strings dynamically. 2020-01-26 11:16 schwarze Changed: mandocdb.c (1.265), "Exp", lines: +3 -3 Fix incorrect file type tests. This bug caused sockets and character special devices to be accepted as manual pages if they appeared inside manpaths, and it caused incorrect file names to be entered into the database when the manpath or one of its parent directories was a symbolic link. This fixes the issues reported by <Andreas dot Kahari at abc dot se> on ports@, but additional issues remain when symbolic links are contained in a manpath that involves another symbolic link. 2020-01-25 22:59 schwarze Changed: mandocdb.c (1.264), "Exp", lines: +60 -55 Minor cleanup, no functional change: Do not abuse strstr(3) to check whether one long string starts with another long string. Instead, use strncmp(3) with the proper length. In set_basedir(), also reset *basedir in the error brances for extra safety. While here, invert some more Yoda conditions in the neighbourhood. 2020-01-20 10:37 schwarze Changed: main.c (1.341), "Exp", lines: +2 -1 man_term.c (1.233), "Exp", lines: +4 -4 mandoc_headers.3 (1.32), "Exp", lines: +7 -3 mdoc_term.c (1.376), "Exp", lines: +10 -10 tag.c (1.27), "Exp", lines: +13 -12 tag.h (1.10), "Exp", lines: +13 -2 Make the code more readable by introducing symbolic constants for tagging priorities. This review also made me find a minor bug: do not upgrade TAG_FALLBACK to TAG_WEAK when there is trailing whitespace. 2020-01-19 18:02 schwarze Changed: html.c (1.262), "Exp", lines: +2 -1 html.h (1.106), "Exp", lines: +2 -1 mandoc.h (1.266), "Exp", lines: +2 -1 mandoc_msg.c (1.10), "Exp", lines: +2 -1 mdoc.7 (1.280), "Exp", lines: +48 -3 mdoc_html.c (1.333), "Exp", lines: +14 -2 mdoc_macro.c (1.234), "Exp", lines: +3 -2 mdoc_man.c (1.133), "Exp", lines: +2 -1 mdoc_markdown.c (1.32), "Exp", lines: +2 -1 mdoc_state.c (1.16), "Exp", lines: +2 -1 mdoc_term.c (1.375), "Exp", lines: +11 -2 mdoc_validate.c (1.377), "Exp", lines: +39 -2 roff.c (1.369), "Exp", lines: +3 -3 roff.h (1.70), "Exp", lines: +3 -2 tag.c (1.26), "Exp", lines: +6 -5 Introduce a new mdoc(7) macro .Tg ("tag") to explicitly mark a place as defining a term. Please only use it when automatic tagging does not work. Manual page authors will not be required to add the new macro; using it remains optional. HTML output is still rudimentary in this version and will be polished later. Thanks to kn@ for reminding me that i have been considering since BSDCan 2014 whether something like this might be useful. Given that possibilities of making automatic tagging better are running out and there are still several situations where automatic tagging cannot do the job, i think the time is now ripe. Feedback and no objection from millert@; OK espie@ inoguchi@ kn@. 2020-01-19 16:44 schwarze Added: regress/mdoc/Dd/noarg.out_ascii (1.1) regress/mdoc/Dd/noarg.out_markdown (1.1) Changed: libmandoc.h (1.78), "Exp", lines: +4 -3 man_validate.c (1.150), "Exp", lines: +6 -11 mandoc.1 (1.241), "Exp", lines: +3 -3 mandoc.c (1.117), "Exp", lines: +35 -21 mandoc.h (1.265), "Exp", lines: +3 -3 mandoc_msg.c (1.9), "Exp", lines: +3 -3 mdoc_macro.c (1.233), "Exp", lines: +2 -2 mdoc_validate.c (1.376), "Exp", lines: +7 -8 regress/man/TH/baddate.out_lint (1.3), "Exp", lines: +1 -1 regress/man/TH/emptydate.out_lint (1.3), "Exp", lines: +1 -1 regress/man/TH/longdate.out_lint (1.3), "Exp", lines: +1 -1 regress/man/TH/noTH.out_lint (1.2), "Exp", lines: +1 -1 regress/man/TH/noarg.out_lint (1.3), "Exp", lines: +1 -1 regress/man/TH/onearg.out_lint (1.3), "Exp", lines: +1 -1 regress/man/TH/twoargs.out_lint (1.3), "Exp", lines: +1 -1 regress/mdoc/Dd/Makefile (1.5), "Exp", lines: +4 -12 regress/mdoc/Dd/badarg.out_lint (1.6), "Exp", lines: +1 -1 regress/mdoc/Dd/dupe.out_lint (1.7), "Exp", lines: +1 -1 regress/mdoc/Dd/long.out_lint (1.6), "Exp", lines: +1 -1 regress/mdoc/Dd/manarg.out_lint (1.6), "Exp", lines: +1 -1 regress/mdoc/Dd/noarg.out_lint (1.5), "Exp", lines: +1 -1 regress/mdoc/Dd/order.out_lint (1.6), "Exp", lines: +1 -1 regress/mdoc/Os/dupe.in (1.3), "Exp", lines: +2 -2 regress/mdoc/Os/dupe.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Os/dupe.out_lint (1.6), "Exp", lines: +2 -2 regress/mdoc/Os/dupe.out_markdown (1.3), "Exp", lines: +1 -1 Align to the new, sane behaviour of the groff_mdoc(7) .Dd macro: without an argument, use the empty string, and always concatenate all arguments, no matter their number. This allows reducing the number of arguments of mandoc_normdate() and some other simplifications, at the same time polishing some error messages by adding the name of the macro in question. 2020-01-19 16:27 schwarze Changed: TODO (1.300), "Exp", lines: +1 -9 delete the entry for a crash that was already fixed 2020-01-11 21:02 schwarze Added: regress/tbl/layout/badspan.in (1.1) regress/tbl/layout/badspan.out_ascii (1.1) regress/tbl/layout/badspan.out_lint (1.1) Changed: regress/tbl/layout/Makefile (1.5), "Exp", lines: +3 -3 regress/tbl/layout/shortlines.in (1.2), "Exp", lines: +3 -5 regress/tbl/layout/shortlines.out_ascii (1.2), "Exp", lines: +1 -3 test tbl_term.c rev. 1.73 and tbl_data.c rev. 1.53: incomplete short layout lines followed by longer lines, and spans at the beginning of layout lines 2020-01-11 20:48 schwarze Changed: tbl_data.c (1.53), "Exp", lines: +3 -1 When autogenerating one layout cell from a data cell just beyond the last layout cell that was explicitly specified, properly initialize the spacing attribute to indicate that the default is to be used. Failing to do so and leaving the spacing at zero in this case caused misformatting when another row further down the table had even more explicitly specified cells. Bug found while trying to write regression tests for tbl_term.c rev. 1.73. 2020-01-11 16:26 schwarze Changed: tbl_term.c (1.73), "Exp", lines: +13 -14 Fix a logic error: When both the first and the third column are spans, do not use the number of columns of the span starting in column two for the span starting in column zero. With afl, Jan Schreiber <jes at posteo dot de> found cases where this caused NULL pointer accesses because too many layout cells were consumed. While here, make the code more similar at the three places that iterate over data cells. 2020-01-11 16:03 schwarze Changed: tree.c (1.85), "Exp", lines: +95 -12 Print more tbl(7) details to help debugging: column numbers, options, layout rows, cell types, cell modifiers. 2020-01-10 15:21 schwarze Changed: cgi.c (1.171), "Exp", lines: +3 -2 autocapitalize=none; also from Tim Baumgard 2020-01-10 12:54 schwarze Changed: cgi.c (1.170), "Exp", lines: +2 -2 Switch off the useless and annoying "autocomplete" feature; issue reported by Tim Baumgard <at bmgrd dot com>. landry@ and florian@ agree with the general direction. 2020-01-10 11:55 schwarze Changed: eqn.7 (1.39), "Exp", lines: +31 -24 Document the "delim" syntax and its usage. Closing a gap reported by bentley@, who also sent a patch, but i'm explaining it somewhat differently. While here, remove duplicate information from the text. OK bentley@ 2020-01-08 12:16 schwarze Added: regress/eqn/delim/basic.out_utf8 (1.1) Changed: eqn.c (1.84), "Exp", lines: +11 -3 regress/eqn/delim/Makefile (1.3), "Exp", lines: +2 -1 regress/eqn/delim/basic.in (1.4), "Exp", lines: +10 -1 regress/eqn/delim/basic.out_ascii (1.5), "Exp", lines: +1 -1 Skip whitespace before tokens, too. Bug found by bentley@ with input like "delim $$ delim off". 2020-01-08 11:01 schwarze Changed: regress/eqn/delim/basic.in (1.3), "Exp", lines: +6 -6 regress/eqn/delim/basic.out_ascii (1.4), "Exp", lines: +2 -2 Improve the test case by changing the eqn(7) delimiters such that it actually tests which parts of text lines are processed with eqn(7) and which are not. 2020-01-08 10:54 schwarze Changed: regress/eqn/delim/Makefile (1.2), "Exp", lines: +3 -1 Enable generation of the desired delim/basic output with groff(1). No functional change for the portable test suite. 2020-01-08 10:37 schwarze Changed: regress/regress.pl (1.13), "Exp", lines: +2 -3 regress/eqn/Makefile.inc (1.3), "Exp", lines: +1 -3 regress/man/TS/Makefile (1.2), "Exp", lines: +2 -11 regress/mdoc/Dd/Makefile (1.4), "Exp", lines: +2 -2 regress/tbl/Makefile.inc (1.3), "Exp", lines: +2 -11 Simplify maintainer targets in OpenBSD: EQN and TBL variables no longer exist and NROFF/NOPTS were replaced with GROFF/GOPTS. This doesn't change how things work in the protable version of the test suite. 2020-01-07 11:16 schwarze Changed: man.1 (1.36), "Exp", lines: +48 -35 Improve the description of -m/-M/MANPATH/man.conf in multiple respects after kn@ reported that the descriptions were incomplete and somewhat inaccurate. OK jmc@ kn@ 2019-12-31 22:58 schwarze Added: regress/tbl/layout/emptycol.in (1.1) regress/tbl/layout/emptycol.out_ascii (1.1) Changed: out.c (1.79), "Exp", lines: +18 -6 regress/tbl/layout/Makefile (1.4), "Exp", lines: +2 -2 When all cells in a tbl(1) column are empty, set the column width to 1n rather than to 0n, in the same way as groff does. This fixes misformatting reported by bentley@ in xkeyboard-config(7). 2019-12-26 19:51 schwarze Changed: roff.c (1.368), "Exp", lines: +14 -2 Do not fail an assertion when a high level macro occurs in the body of a conditional inside a .ce request block. Instead, abort the .ce block just like when there is no conditional in between. Bug found by espie@ working on the textproc/fstrcmp port. 2019-12-25 13:20 schwarze Changed: TODO (1.299), "Exp", lines: +6 -1 distinction between .Vt and .Va 2019-12-22 13:52 schwarze Changed: TODO (1.298), "Exp", lines: +9 -1 two new entries: make .Sh/.Ss parsed in mdoc(7) and delete release number verification from groff_mdoc(7) 2019-12-11 18:44 schwarze Changed: mdoc_html.c (1.332), "Exp", lines: +8 -4 In HTML, display straight quotes, not curly quotes, for Qq/Qo/Qc macros. This is the intended behavior and already the case in terminal output. Incorrect output noticed by Eldred Habert. Patch from bentley@. 2019-11-10 22:35 schwarze Changed: cgi.c (1.169), "Exp", lines: +3 -1 Add a Content-Security-Policy HTTP header that allows only CSS. This ensures that in a modern browser that understands the header, mandoc rendering bugs cannot possibly be interpreted as JavaScript. Patch from bentley@. 2019-11-10 17:38 schwarze Changed: TODO (1.297), "Exp", lines: +6 -1 want to get rid of the last style= attributes, suggested by bentley@ 2019-11-09 17:09 schwarze Changed: TODO (1.296), "Exp", lines: +14 -1 .ce .if .B crash reported by espie@, and one other bug 2019-11-09 14:39 schwarze Changed: mandoc_parse.h (1.5), "Exp", lines: +2 -1 roff.c (1.367), "Exp", lines: +8 -4 In the past, generating comment nodes stopped at the .TH or .Dd macro, which is usually close to the beginning of the file, right after the Copyright header comments. But espie@ found horrible input files in the textproc/fstrcmp port that generate lots of parse nodes before even getting to the header macro. In some formatters, comment nodes after some kinds of real content triggered assertions. So make sure generation of comment nodes stops once real content is encountered. 2019-10-13 14:45 schwarze Changed: NEWS (1.35), "Exp", lines: +83 -1 draft 1.14.6 release notes 2019-10-01 17:54 schwarze Changed: cgi.c (1.168), "Exp", lines: +11 -8 For invalid queries and for valid queries returning no result, return the appropriate 40x status code rather than 200. Improvement suggested and diff tested by John Gardner <gardnerjohng at gmail dot com>. 2019-09-15 00:08 schwarze Changed: mdoc_html.c (1.331), "Exp", lines: +27 -21 Fix line breaking in no-fill mode (.Bd -unfilled/<pre>), which apparently didn't work since the .Pp/<p> reorg. The new logic is more similar to what the terminal formatter does: 1. Before a node that starts a new mdoc(7) input line, start a new HTML output line. 2. An empty input line or a .Pp causes an empty output line. 3. Nothing needs to be done at the end of a node. Severe misformatting was reported in table(5) by Edgar Pettijohn <edgar at pettijohn dash web dot com> on misc@. 2019-09-13 19:26 schwarze Changed: mdoc_validate.c (1.375), "Exp", lines: +12 -6 regress/mdoc/Fo/warn.in (1.3), "Exp", lines: +16 -2 regress/mdoc/Fo/warn.out_ascii (1.3), "Exp", lines: +22 -1 regress/mdoc/Fo/warn.out_lint (1.6), "Exp", lines: +4 -0 regress/mdoc/Fo/warn.out_markdown (1.3), "Exp", lines: +22 -1 Improve validation of function names: 1. Relax checking to accept function types of the form "ret_type (fname)(args)" (suggested by Yuri Pankov <yuripv dot net>). 2. Tighten checking to require the closing parenthesis. 2019-09-05 13:40 schwarze Changed: regress/eqn/nullary/roman.out_html (1.4), "Exp", lines: +4 -14 regress/eqn/nullary/symbol.out_html (1.3), "Exp", lines: +2 -4 adapt to print_indent() HTML_NOSPACE fix, html.c rev. 1.261 2019-09-05 13:35 schwarze Changed: html.c (1.261), "Exp", lines: +5 -8 Do not clear HTML_NOSPACE in print_indent(). I don't think there ever was a reason for doing so. Besides, there is a discrepacy with respect to the point in the document affected. That flag controls whitespace at the current formatting point. But when HTML_BUFFER is in effect, the line break and indentation is typically inserted one word further to the left. Anything happening at that point to the left can't reasonably influence spacing at the different point further to the right. Among other effects, this change avoids some spurious line breaks in HTML code at points where they weren't supposed to happen, line breaks that in some cases caused undesirable, visible whitespace when the resulting HTML was rendered. 2019-09-03 18:19 schwarze Changed: regress/regress.pl (1.12), "Exp", lines: +6 -3 regress/char/space/zerowidth.out_html (1.2), "Exp", lines: +0 -2 regress/char/unicode/ascii.out_html (1.3), "Exp", lines: +0 -2 regress/char/unicode/invalid.out_html (1.4), "Exp", lines: +0 -2 regress/char/unicode/latin1.out_html (1.6), "Exp", lines: +0 -2 regress/char/unicode/latin1diff.out_html (1.5), "Exp", lines: +0 -2 regress/char/unicode/named.out_html (1.7), "Exp", lines: +0 -2 regress/char/unicode/namediff.out_html (1.7), "Exp", lines: +0 -2 regress/char/unicode/nogroff.out_html (1.3), "Exp", lines: +0 -2 regress/man/HP/literal.out_html (1.2), "Exp", lines: +0 -2 regress/man/IP/literal.out_html (1.4), "Exp", lines: +2 -4 regress/man/RS/literal.out_html (1.2), "Exp", lines: +4 -6 regress/man/RS/paragraph.out_html (1.2), "Exp", lines: +0 -2 regress/man/SH/paragraph.out_html (1.4), "Exp", lines: +1 -3 regress/man/SS/paragraph.out_html (1.4), "Exp", lines: +1 -3 regress/man/SY/literal.out_html (1.3), "Exp", lines: +4 -6 regress/man/TP/literal.out_html (1.2), "Exp", lines: +0 -2 regress/mdoc/Bd/nf.out_html (1.2), "Exp", lines: +1 -3 regress/mdoc/Bd/paragraph.out_html (1.2), "Exp", lines: +0 -2 regress/mdoc/Bf/paragraph.out_html (1.2), "Exp", lines: +0 -2 regress/mdoc/D1/spacing.out_html (1.2), "Exp", lines: +0 -2 regress/mdoc/Rs/paragraph.out_html (1.4), "Exp", lines: +4 -6 regress/mdoc/Sh/paragraph.out_html (1.4), "Exp", lines: +1 -3 regress/roff/esc/f.out_html (1.2), "Exp", lines: +0 -2 regress/roff/ft/badargs.out_html (1.4), "Exp", lines: +6 -8 regress/roff/sp/fill-man.out_html (1.2), "Exp", lines: +0 -2 regress/roff/string/dotT.out_html (1.3), "Exp", lines: +0 -2 adapt to new <p> output logic (html.c rev. 1.260) 2019-09-03 18:08 schwarze Changed: html.c (1.260), "Exp", lines: +25 -2 Wrap text and phrasing elements in paragraphs unless already contained in flow containers; never put them directly into sections. This helps to format paragraphs with the CSS class selector .Pp. Suggested by bentley@ and also by Colin Watson <cjwatson at debian> via Michael Stapelberg <stapelberg at debian>, see https://github.com/Debian/debiman/issues/116 2019-09-03 15:09 schwarze Changed: mdoc_html.c (1.330), "Exp", lines: +2 -4 Format .Nd with more logically with <span> rather than <div>; after all, it is supposed to be a one-line description. For the case where .Nd generates flow content (which is very bad style but syntactically valid), rely on the new feature of html_close_paragraph() to close out the <span> prematurely, effectively moving the flow content out of the .Nd for HTML presentation. For the final closing, also rely on the new html_close_paragraph() functionality, this time triggered by the subsequent block, which will typically be .Sh SYNOPSIS. 2019-09-03 12:31 schwarze Changed: html.c (1.259), "Exp", lines: +11 -14 Make html_close_paragraph() more versatile, more robust, less dependent on individual HTML elements, and simpler: don't just close <p>, <pre>, and <a>, but any element that establishes phrasing context. This doesn't change output for any OpenBSD manual page, but it will allow using this function more safely and at more places in the future. 2019-09-01 15:12 schwarze Changed: html.c (1.258), "Exp", lines: +1 -2 html.h (1.105), "Exp", lines: +1 -2 mdoc_html.c (1.329), "Exp", lines: +2 -2 delete the TAG_IDIV crutch, which is no longer used 2019-08-29 17:57 schwarze Changed: html.c (1.257), "Exp", lines: +40 -28 html.h (1.104), "Exp", lines: +12 -12 In the HTML formatter, assert(3) that no HTML nesting violation occurs. Tested on the complete manual page trees of Version 7 AT&T UNIX, 4.4BSD-Lite2, POSIX-2013, OpenBSD 2.2 to 6.5 and -current, FreeBSD 10.0 to 12.0, NetBSD 6.1.5 to 8.1, DragonFly 3.8.2 to 5.6.1, and Linux 4.05 to 5.02. 2019-08-02 17:06 schwarze Changed: html.c (1.256), "Exp", lines: +7 -12 minor sync of the inline stylesheet with mandoc.css: delete unimportant .Pp rule and shorten overly specific selectors 2019-07-28 19:41 schwarze Changed: main.c (1.340), "Exp", lines: +30 -37 Simplification, no functional change: Delete the "argc" argument from fs_search() which is now always 1, and move error reporting to the main() program where it is more logically placed and easier to see. 2019-07-28 18:36 schwarze Changed: main.c (1.339), "Exp", lines: +1 -17 There is no point in pledge(2)ing literally the same list twice, so delete the second copy. No functional change. 2019-07-28 18:23 schwarze Changed: main.c (1.338), "Exp", lines: +81 -83 In man(1) mode, do the search for each name independently, and show the results in the order of the command line arguments. Implemented by separating the code for man(1) and apropos(1) in the main() program. Surprisingly, the number of lines of code remains unchanged. Issue reported by deraadt@, additional input from millert@. 2019-07-28 13:13 schwarze Changed: main.c (1.337), "Exp", lines: +91 -81 Improve structure, no functional change: Unify code to process one single input file and move it into a dedicated new function. 2019-07-27 13:40 schwarze Changed: main.c (1.336), "Exp", lines: +22 -27 tag.c (1.25), "Exp", lines: +4 -2 tag.h (1.9), "Exp", lines: +3 -3 Move two more output state variables into the new struct outstate. Also, move setting of tag_files.tagname into tag_init(). No functional change. 2019-07-26 23:12 schwarze Changed: main.c (1.335), "Exp", lines: +62 -60 Cleanup, no functional change: For clarity, stop storing the same information (in this case, -O settings) in two structs. Give the local struct in main.c a more descriptive name (output state). 2019-07-26 21:03 schwarze Changed: main.c (1.334), "Exp", lines: +44 -38 Structural cleanup, no functional change: Mixing parser and formatter state in the same struct was a bad idea, so pull the parser state and configuration out of it. This makes sure output options are not passed into parser functions and parser options are not passed into output functions. While here, add comments to the important local variables in main(). 2019-07-26 18:01 schwarze Changed: main.c (1.333), "Exp", lines: +61 -55 Structural cleanup, no functional change: Move process group management out of main() into its own function because it has its own, self-contained logic and its own local variables. 2019-07-23 17:53 schwarze Changed: man_term.c (1.232), "Exp", lines: +13 -1 tagging support for .TP and .TQ; try e.g. man -O tag=commit cvs 2019-07-22 03:21 schwarze Changed: Makefile.depend (1.45), "Exp", lines: +1 -1 man_term.c (1.231), "Exp", lines: +65 -2 tag.c (1.24), "Exp", lines: +3 -3 Slowly start implementing tagging support for man(7) pages, even though it is obvious that this can never become as good as for mdoc(7) pages. As a first step, tag alphabetic arguments of .IP macros, which are often used for lists of options and keywords. Try "man -O tag=g as" to get the point. Thanks to Leah Neukirchen for recently reminding me that exploring how much can be done in this respect may be worthwhile: it is likely to slightly improve usability while adding only small amounts of relatively straightforward code. 2019-07-19 20:27 schwarze Changed: main.c (1.332), "Exp", lines: +2 -2 tag.c (1.23), "Exp", lines: +12 -3 If no tags were generated at all, unlink(2) the empty tags file as soon as the condition can be detected and do not pass it to less(1). This may happen for man(7) pages, for preformatted pages, and for very simple pages like true(1). The main benefit is that :t inside less(1) yields the clearer diagnostic message "No tags file" rather than the mildly confusing "No such tag in tags file": the latter might encourage further, futile attempts to jump to other tags. Improvement suggested by Leah Neukirchen <leah at vuxu dot org> from The Void. 2019-07-18 14:43 schwarze Added: regress/tbl/data/block_empty.in (1.1) regress/tbl/data/block_empty.out_ascii (1.1) Changed: regress/tbl/data/Makefile (1.5), "Exp", lines: +3 -2 new test for an empty text block; from rea@ via bapt@ (FreeBSD) 2019-07-15 21:41 schwarze Changed: main.c (1.331), "Exp", lines: +3 -2 don't print the final heads-up about messages when a search did not yield any manual pages to display; issue found with regress/usr.bin/mandoc/db/ 2019-07-15 19:20 schwarze Changed: mdoc.7 (1.279), "Exp", lines: +9 -2 roff.7 (1.114), "Exp", lines: +8 -2 explain escaping of end-of-sentence characters; missing info reported by Ian <ropers at gmail dot com> on misc@ 2019-07-14 18:16 schwarze Changed: main.c (1.330), "Exp", lines: +4 -2 mandoc.h (1.264), "Exp", lines: +2 -1 mandoc_msg.c (1.8), "Exp", lines: +10 -1 If messages are shown and output is printed without a pager, display a heads-up on stderr at the end because otherwise, users may easily miss the messages: because messages typically occur while parsing, they typically preceed the output. This is most useful with flag combinations like "-c -W all" but may also help in some unusual error scenarios. Inconvenient ordering of output originally pointed out by espie@ for the example situation that /tmp/ is not writeable. 2019-07-11 17:06 schwarze Changed: mdoc_argv.c (1.120), "Exp", lines: +3 -2 regress/mdoc/Bl/column.in (1.4), "Exp", lines: +4 -3 regress/mdoc/Bl/column.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Bl/column.out_lint (1.7), "Exp", lines: +1 -1 regress/mdoc/Bl/column.out_markdown (1.3), "Exp", lines: +1 -1 When parsing a tab character that is not preceded by a space character on an .It -column line, args() sets the MDOC_PHRASEQL flag to Quote the Last word of the Phrase. Even if it turns out this quoting is not needed because the word is already quoted for other reasons, clear the flag at the end of parsing the phrase, such that the flag does not leak to the next phrase. This patch fixes the bug that the trailing Macro on a line of the form .It "word<tab>word" Ta word Macro<eol> was incorrectly considered quoted and hence not parsed. Bug found by Havard Eidnes (he@) with the NetBSD gettytab(5) manual page: https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=54361 Reported via Thomas Klausner (wiz@). 2019-07-10 19:39 schwarze Changed: Makefile.depend (1.44), "Exp", lines: +2 -2 main.c (1.329), "Exp", lines: +142 -157 mandoc.1 (1.240), "Exp", lines: +49 -6 mandoc.h (1.263), "Exp", lines: +31 -3 mandoc_msg.c (1.7), "Exp", lines: +36 -8 manpath.c (1.40), "Exp", lines: +48 -44 read.c (1.214), "Exp", lines: +17 -18 tag.c (1.22), "Exp", lines: +21 -11 Some time ago, i simplified mandoc_msg() such that it can be used everywhere and not only in the parsers. For more uniform messages, use it at more places instead of err(3), in particular in the main program. While here, integrate a few trivial functions called at exactly one place into the main option parser, and let a few more functions use the normal convention of returning 0 for success and -1 for error. 2019-07-10 12:49 schwarze Changed: cgi.c (1.167), "Exp", lines: +1 -2 in man.cgi(8), disable -O toc by default; requested by deraadt@ 2019-07-09 03:46 schwarze Changed: man.7 (1.144), "Exp", lines: +10 -6 The non-standard .EX/.EE macro pair was invented for Version 9 AT&T UNIX and only got adopted by GNU two decades later. Thanks to Doug McIlroy <doug at cs dot dartmouth dot edu> for pointing out the error. 2019-07-06 20:05 schwarze Changed: main.c (1.328), "Exp", lines: +5 -3 prevent mandoc from segfaulting if /tmp is not writable; patch from espie@ 2019-07-01 23:30 schwarze Changed: roff.7 (1.113), "Exp", lines: +3 -3 use the standard spelling of the word "idiosyncrasy"; suggested by Michal Nowak <mnowak at startmail dot com> 2019-07-01 22:56 schwarze Changed: configure (1.71), "Exp", lines: +2 -2 dbm.c (1.7), "Exp", lines: +3 -3 dbm_map.h (1.2), "Exp", lines: +2 -2 lib.in (1.22), "Exp", lines: +2 -2 man_term.c (1.230), "Exp", lines: +2 -2 mansearch.c (1.82), "Exp", lines: +2 -2 mdoc_markdown.c (1.31), "Exp", lines: +2 -2 roff.c (1.366), "Exp", lines: +3 -3 tbl_term.c (1.72), "Exp", lines: +2 -2 regress/regress.pl (1.11), "Exp", lines: +2 -2 delete trailing whitespace and space-tab sequences; no code change; patch from Michal Nowak <mnowak at startmail dot com> who found these with git pbchk in the illumos tree 2019-06-27 15:07 schwarze Changed: man_validate.c (1.149), "Exp", lines: +13 -15 mandoc.c (1.116), "Exp", lines: +9 -4 mdoc_validate.c (1.374), "Exp", lines: +4 -16 Fix mandoc_normdate() and the way it is used. In the past, it could return NULL but the calling code wasn't prepared to handle that. Make sure it always returns an allocated string. While here, simplify the code by handling the "quick" attribute inside mandoc_normdate() rather than at multiple callsites. Triggered by deraadt@ pointing out that snprintf(3) error handling was incomplete in time2a(). 2019-06-27 12:20 schwarze Changed: man_term.c (1.229), "Exp", lines: +17 -12 mdoc_term.c (1.374), "Exp", lines: +14 -10 Improve "man -h" output. 1. For pages lacking a SYNOPSIS, show the NAME section rather than nothing. 2. Do not print a stray blank before the beginning of a SYNOPSIS. Both issues reported by, and patch OK'ed by, tb@. 2019-06-11 16:04 schwarze Added: regress/tbl/layout/shortlines.in (1.1) regress/tbl/layout/shortlines.out_ascii (1.1) Changed: TODO (1.295), "Exp", lines: +4 -1 tbl_term.c (1.71), "Exp", lines: +11 -5 regress/tbl/layout/Makefile (1.3), "Exp", lines: +2 -2 Do not access a NULL pointer if a table contains a horizontal line next to a table line having fewer columns than the table as a whole. Bug found by Stephen Gregoratto <dev at sgregoratto dot me> with aerc-config(5). 2019-06-03 20:23 schwarze Changed: term.c (1.281), "Exp", lines: +3 -1 Explicitly state that the cases in the inner switch in term_fill() are exhaustive. While there is no bug, being explicit has no downside is is potentially safer for the future. Michal Nowak <mnowak at startmail dot com> reported that gcc 4.4.4 and 7.4.0 on illumos throw -Wuninitialized false positives. 2019-06-03 19:58 schwarze Changed: read.c (1.213), "Exp", lines: +2 -2 Initialize the local variable "lastln" in mparse_buf_r(). While there is no bug, it logically makes sense given the meaning of the variable that lastln is NULL as long as firstln is NULL. Michal Nowak <mnowak at startmail dot com> reported that gcc 4.4.4 and 7.4.0 on illumos throw -Wuninitialized false positives. 2019-06-03 19:50 schwarze Changed: mdoc_term.c (1.373), "Exp", lines: +2 -1 Initialize the local variable "act" in print_mdoc_node(). While there is no bug, it helps clarity, and it is also safer in this particular code because in case a bug gets introduced later, accessing a NULL pointer is less dangerous than accessing an uninitialized pointer. Michal Nowak <mnowak at startmail dot com> reported that gcc 4.4.4 and 7.4.0 on illumos throw -Wuninitialized false positives. 2019-06-02 16:57 schwarze Changed: mandoc.css (1.46), "Exp", lines: +21 -8 Support prefers-color-scheme: dark. The :visited rule was contributed by <Armin at Besirovic dot com>. Guidance and OK tj@. 2019-05-26 01:28 schwarze Changed: mandoc.1 (1.239), "Exp", lines: +4 -3 use proper crossreference; patch from naddy@ 2019-05-21 08:04 schwarze Changed: mandoc.c (1.115), "Exp", lines: +3 -3 Do not print the style message "missing date" when the date is given as "$Mdocdate: September 23 2021 $" without an actual date. That is the canonical way to write a new manual page and not bad style at all. Misleading message reported by kn@ on tech@. 2019-05-21 07:52 schwarze Changed: arch.c (1.15), "Exp", lines: +2 -2 socppc makes an extended visit to the bigbucket; patch from deraadt@; OK kettenis 2019-05-03 18:39 schwarze Changed: main.c (1.327), "Exp", lines: +3 -6 manpath.c (1.39), "Exp", lines: +2 -3 avoid duplicate "bad argument" error message, also shortening the code 2019-05-03 18:23 schwarze Changed: manpath.c (1.38), "Exp", lines: +4 -3 when processing unknown output options, prevent passing NULL to printf; patch from anton@ 2019-05-03 18:17 schwarze Changed: mandocdb.c (1.263), "Exp", lines: +12 -7 Enter dangling .so links into the database, to avoid harassing users of man(1) about running makewhatis(8), which won't help. Seeing the content of the broken .so request might even help users to figure out how to access the manual page they want. Fixing the last issue reported by Lorenzo Beretta <loreb at github> as part of https://github.com/void-linux/void-packages/issues/9868 . 2019-05-03 17:31 schwarze Changed: TODO (1.294), "Exp", lines: +1 -7 main.c (1.326), "Exp", lines: +12 -7 In fs_lookup(), use stat(2) rather than access(2) to check file existence. Some mildly broken real-world packages on some operating systems contain dangling symlinks in manual page directories: pestering the user to run makewhatis(8) makes no sense because that won't help. On the other hand, missing read permissions deserve ugly error messages and are unlikely to occur in practice anyway. Fixing an issue reported by Lorenzo Beretta <loreb at github> as part of https://github.com/void-linux/void-packages/issues/9868 . 2019-05-03 16:14 schwarze Changed: TODO (1.293), "Exp", lines: +1 -13 main.c (1.325), "Exp", lines: +17 -6 In man(1) mode with a specific section requested, try harder to find the best match. Use this order of preference: 1. The section in both the directory name and the file name matches exactly. 2. The section in the file name matches exactly. 3. The section in the directory name matches exactly. 4. Neither of them matches exactly. The latter can happen when mansearch() finds substring matches or when the second .Dt argument mismatches the dir and file names. Lorenzo Beretta <loreb at github> reported that this caused real problems on Void Linux, like "man 3 readline" showing readline(3m). See https://github.com/void-linux/void-packages/issues/9868 for details. 2019-05-03 09:39 schwarze Changed: main.c (1.324), "Exp", lines: +2 -2 In man(1) mode, when the first argument starts with a digit, optionally followed by a letter, and at least one more argument follows, interpret the first argument as a section name even when additional characters follow after the digit and letter. This is needed because many operating systems have section names consisting of a digit followed by more than one letter - for example Illumos, Solaris, Linux, even NetBSD. There is very little risk of regressions: in the whole corpus of manual pages on man.openbsd.org, there isn't a single manual page name starting with a digit. And even if programs like "0ad" or "4channels" had manual pages, "man 0ad" and "man -a cat 0ad" would still work, only "man -a 0ad cat" will fail with "man: No entry for cat in section 0ad of the manual." Fixing one of the issues reported by Lorenzo Beretta <loreb at github> as part of https://github.com/void-linux/void-packages/issues/9868 . 2019-04-30 18:51 schwarze Changed: TODO (1.292), "Exp", lines: +1 -7 main.c (1.323), "Exp", lines: +3 -1 mansearch.c (1.81), "Exp", lines: +7 -3 mansearch.h (1.30), "Exp", lines: +2 -1 In man(1) mode, i.e. when asking for a single manual page by name, prefer file name matches over .Dt/.TH matches over first NAME matches over later NAME matches, but do not change the ordering for apropos(1) nor for man -a. This reverts main.c rev. 1.310 and mansearch.h rev. 1.29 and includes a partial revert of mansearch.c rev. 1.79. Regression reported by Lorenzo Beretta <loreb at github> as part of https://github.com/void-linux/void-packages/issues/9868 . 2019-04-30 15:53 schwarze Changed: html.c (1.255), "Exp", lines: +26 -48 html.h (1.103), "Exp", lines: +4 -13 man_html.c (1.174), "Exp", lines: +3 -3 roff_html.c (1.20), "Exp", lines: +2 -2 regress/roff/ft/badargs.out_html (1.3), "Exp", lines: +4 -5 In HTML output, allow switching the desired font for subsequent text without printing an opening tag right away, and use that in the .ft request handler. While here, garbage collect redundant enum htmlfont and reduce code duplication in print_text(). Fixing an assertion failure reported by Michael <Stapelberg at Debian> in pmRegisterDerived(3) from libpcp3-dev. 2019-04-30 11:48 schwarze Changed: mandoc.1 (1.238), "Exp", lines: +6 -3 improve the description of the message "blank line in fill mode"; triggered by a misunderstanding by sashan@ 2019-04-24 13:15 schwarze Changed: mdoc.7 (1.278), "Exp", lines: +12 -10 clarify the difference between .Cm and .Ic; triggered by a question from Fabio Scotoni 2019-04-23 18:46 schwarze Changed: mdoc.7 (1.277), "Exp", lines: +10 -3 clarify how .%P is conventionally used; triggered by a question from Fabio Scotoni <fabio at esse dot ch> 2019-04-23 17:57 schwarze Changed: eqn.7 (1.38), "Exp", lines: +3 -3 add missing "pp." to .%P macro; reported by Fabio Scotoni <fabio at esse dot ch> 2019-04-23 11:43 schwarze Changed: TODO (1.291), "Exp", lines: +22 -1 issues found by Jan Stary in groffer(1) version 1.19 2019-04-21 23:51 schwarze Added: regress/roff/de/empty.in (1.1) regress/roff/de/empty.out_ascii (1.1) Changed: roff.c (1.365), "Exp", lines: +7 -2 regress/roff/de/Makefile (1.5), "Exp", lines: +3 -3 When calling an empty macro, do not clobber existing arguments. Fixing a bug found with the groffer(1) version 1.19 manual page following a report from Jan Stary. 2019-04-21 22:48 schwarze Added: regress/roff/while/break.in (1.1) regress/roff/while/break.out_ascii (1.1) Changed: roff.7 (1.112), "Exp", lines: +3 -4 roff.c (1.364), "Exp", lines: +46 -9 regress/roff/while/Makefile (1.2), "Exp", lines: +2 -2 Implement the roff .break request (break out of a .while loop). Jan Stary <hans at stare dot cz> found it in an ancient groffer(1) manual page (version 1.19) on MacOS X Mojave. Having .break not implemented wasn't a particularly bright idea because obviously, it tended to cause infinite loops. 2019-04-01 15:57 schwarze Changed: TODO (1.290), "Exp", lines: +25 -1 new man(1) issues from Lorenzo Beretta <loreb at github> 2019-03-31 19:17 schwarze Changed: mandoc_char.7 (1.76), "Exp", lines: +4 -4 While we do encourage simplicity in the sense of writing plain '-' for hyphen-minus, soften the language a bit: writing \- for it is not wrong, and people started sending us patches to replace \- with '-' in existing manual pages, which is not a worthwhile change unless the \- is used at a place where it doesn't belong. OK jmc@ 2019-03-29 21:27 schwarze Changed: out.c (1.78), "Exp", lines: +2 -2 Set the maximum column index in a tbl(7) to the maximum *right* edge of any cell span, not to the maximum *left* edge, which may be smaller if the last column of the table is only reached by horizontal spans, but not by any regular cell in any row of the table. Otherwise, the algorithm calculating column widths accessed memomy after the end of the colwidth[] array, while it was trying to handle the rightmost column(s). Crash reported by Jason Thorpe <thorpej at NetBSD> via https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=54069 and via Thomas Klausner (wiz@). Christos@ Zoulas sent a (correct, but slightly confusing) patch. The patch i'm committing here is easier to understand. 2019-03-19 16:26 schwarze Changed: read.c (1.212), "Exp", lines: +3 -1 When the last line of the input is empty and the previous line reduced the line input buffer to a length of one byte, do not write one byte past the end of the line input buffer. Minimal code to show the bug: printf ".ds X\n.X\n\n" | MALLOC_OPTIONS=C mandoc Bug found by bentley@ in the sysutils/rancid par(1) manual page. 2019-03-18 08:00 schwarze Changed: tbl_term.c (1.70), "Exp", lines: +5 -3 fix a NULL pointer access on empty tbl(7) data cells that bentley@ found in syncthing-bep(7) 2019-03-17 18:21 schwarze Changed: Makefile.depend (1.43), "Exp", lines: +3 -3 eqn_html.c (1.19), "Exp", lines: +2 -1 mandoc_headers.3 (1.31), "Exp", lines: +60 -41 tbl_html.c (1.33), "Exp", lines: +2 -1 The header file "html.h" uses enum roff_tok, so "roff.h" must be included before it. Diff from bcallah@ tweaked by me; he found the bug by compiling with pcc. 2019-03-16 21:35 schwarze Changed: tbl_term.c (1.69), "Exp", lines: +18 -13 When drawing a horizontal line in tbl(7) UTF-8 output, it is not sufficient to look at two data rows, but up to three are needed: the one above to identify vertical lines branching off upward, the row itself (in case the line is in a data row rather than a layout line) to figure out the horizontal line style, and the row below to identify vertical lines branching off downward. As an example, bentley@ reported from the mpv(1) manual page that in a tbl(7) having a vertical line in the middle and a horizontal line in the bottom data row, the vertical line extended below the bottom horizontal line. 2019-03-13 18:29 schwarze Changed: man_validate.c (1.148), "Exp", lines: +3 -3 mdoc_validate.c (1.373), "Exp", lines: +3 -3 Contrary to what the NetBSD attribute(3) manual page suggests, using __dead instead of __attribute__((__noreturn__)) actually hinders portability rather than helping it. Given that mandoc already uses __attribute__ in several files and that in the portable version, ./configure already contains rudimentary support for ignoring it on platforms that do not support it, use __attribute__ directly. This is expected to fix build failures that Stephen Gregoratto <dev at sgregoratto dot me> reported from Arch and Debian Linux. 2019-03-11 13:21 schwarze Changed: man_validate.c (1.147), "Exp", lines: +3 -3 mdoc_validate.c (1.372), "Exp", lines: +3 -3 mark check_abort() and post_abort() as __dead; based on a patch by Christos@ Zoulas at NetBSD 2019-03-10 09:32 tag VERSION_1_14_5 2019-03-10 09:32 schwarze Changed: NEWS (1.34), "Exp", lines: +10 -5 release 1.14.5 2019-03-10 09:23 schwarze Changed: regress/regress.pl (1.10), "Exp", lines: +2 -1 Automatically detect whether diff(1) supports the -a option. Useful on illumos and on Oracle Solaris, where it doesn't. Patch written based on a report from Sevan Janiyan. 2019-03-09 15:55 schwarze Changed: man.1 (1.35), "Exp", lines: +14 -2 Mention mandoc.db(5), makewhatis(8), and weekly(8). Omission noticed by espie@ long ago, and wording tweaked by jmc@. 2019-03-06 16:08 schwarze Changed: Makefile (1.530), "Exp", lines: +5 -1 new dist-install maintainer target 2019-03-06 16:04 schwarze Changed: configure (1.70), "Exp", lines: +2 -2 while $() is more modern than ``, it does not work with the default /bin/sh on Solaris 10, so use the classical form 2019-03-06 15:58 schwarze Changed: INSTALL (1.23), "Exp", lines: +4 -3 regress/regress.pl.1 (1.4), "Exp", lines: +20 -2 mention Solaris BUGS in regress.pl(1) 2019-03-06 15:55 schwarze Changed: mandoc_msg.c (1.6), "Exp", lines: +3 -1 this file needs to #include "config.h" because it calls getprogname(); found while testing on Debian jessie 2019-03-06 12:32 schwarze Changed: cgi.c (1.166), "Exp", lines: +2 -2 drop redundant '0' flag from "%02.2X" format string; found by a compiler warning from gcc 4.9.2 on Linux 2019-03-06 11:19 schwarze Changed: Makefile (1.529), "Exp", lines: +10 -7 work towards 1.14.5, mostly updating WWW_INCS 2019-03-06 11:11 schwarze Changed: Makefile.depend (1.42), "Exp", lines: +1 -0 add arch.o 2019-03-06 10:22 schwarze Changed: NEWS (1.33), "Exp", lines: +70 -1 draft 1.14.5 NEWS entry 2019-03-06 10:18 schwarze Changed: configure (1.69), "Exp", lines: +17 -1 configure.local.example (1.36), "Exp", lines: +2 -1 main.c (1.322), "Exp", lines: +5 -1 autoconfiguration test whether less(1) supports the -T option; needed for Alpine Linux because it uses busybox less(1) by default; based on a patch from Daniel Sabogal explained to me by Natanael Copa 2019-03-04 18:15 schwarze Changed: main.c (1.321), "Exp", lines: +2 -2 For TIOCGWINSZ, #include <termios.h> rather than <sys/termios.h> like almost all other userland programs. This also improves portability: for example, it looks like <sys/termios.h> does not work on FreeBSD, or at least bapt@ did the same change over there. 2019-03-04 17:35 schwarze Changed: lib.in (1.21), "Exp", lines: +2 -1 add libbe; from kevans@ via FreeBSD rev. 337663 2019-03-04 13:01 schwarze Changed: Makefile (1.528), "Exp", lines: +5 -3 TODO (1.289), "Exp", lines: +1 -10 arch.c (1.14), "Exp", lines: +33 -16 configure (1.68), "Exp", lines: +24 -2 configure.local.example (1.35), "Exp", lines: +14 -3 main.c (1.320), "Exp", lines: +6 -2 mdoc_validate.c (1.371), "Exp", lines: +14 -40 roff.h (1.69), "Exp", lines: +3 -2 When the -S option is given to man(1) and the requested manual page name is not found and the requested architecture is unknown, complain about the architecture rather than about the manual page name: $ man -S vax cpu man: Unknown architecture "vax". $ man -S sparc64 foobar man: No entry for foobar in the manual. Friendlier error message suggested by jmc@, who also OK'ed the patch. 2019-03-04 11:40 schwarze Changed: TODO (1.288), "Exp", lines: +1 -5 mdoc_validate.c (1.370), "Exp", lines: +2 -2 Fix the last straggler where the struct roff_node "line" member was abused to detect an input line break; instead, use the NODE_LINE flag to improve robustness. 2019-03-04 11:37 schwarze Changed: TODO (1.287), "Exp", lines: +12 -4 additional comments on two TODO items 2019-03-03 13:02 schwarze Changed: html.c (1.254), "Exp", lines: +18 -7 main.c (1.319), "Exp", lines: +3 -1 main.h (1.30), "Exp", lines: +3 -2 mandocd.c (1.11), "Exp", lines: +4 -2 Reset HTML formatter state, in particular the id_unique hash, after processing each manual page, such that the next page starts from a clean state and doesn't continue suffix numbering. Issue found while looking at https://github.com/Debian/debiman/issues/48 which was brought up by Orestis Ioannou <oorestisime at github>. 2019-03-03 11:01 schwarze Changed: demandoc.c (1.33), "Exp", lines: +3 -2 mandocd.c (1.10), "Exp", lines: +3 -3 add forgotten mparse options to two rarely used programs 2019-03-02 22:04 schwarze Changed: man.7 (1.143), "Exp", lines: +165 -178 Do not open a subsection for each and every macro. Instead, use a tagged list and the canonical .Ic macro as it is natural for such purposes. While here, also delete heaps of needless escaping. 2019-03-02 21:03 schwarze Changed: tbl.7 (1.34), "Exp", lines: +4 -4 remove a few words to improve flow; from tedu@ 2019-03-02 16:30 schwarze Changed: TODO (1.286), "Exp", lines: +1 -6 man_html.c (1.173), "Exp", lines: +68 -16 Represent multiple subsequent .IP blocks having a consistent head argument of *, \-, or \(bu as <ul> rather than as <dl>, using a bit of heuristics. Basic idea suggested by Dagfinn Ilmari Mannsaker <ilmari at github> in https://github.com/Debian/debiman/issues/67 and independently by <Pali dot Rohar at gmail dot com> on <discuss at mandoc dot bsd dot lv>. 2019-03-01 10:57 schwarze Changed: TODO (1.285), "Exp", lines: +1 -8 html.c (1.253), "Exp", lines: +2 -1 html.h (1.102), "Exp", lines: +2 -1 man_html.c (1.172), "Exp", lines: +14 -7 mandoc.css (1.45), "Exp", lines: +11 -9 mdoc_html.c (1.328), "Exp", lines: +6 -2 regress/man/IP/literal.out_html (1.3), "Exp", lines: +3 -0 regress/man/SH/paragraph.out_html (1.3), "Exp", lines: +4 -0 regress/man/SS/paragraph.out_html (1.3), "Exp", lines: +3 -0 regress/mdoc/Rs/paragraph.out_html (1.3), "Exp", lines: +2 -0 regress/mdoc/Sh/paragraph.out_html (1.3), "Exp", lines: +4 -0 regress/roff/ft/badargs.out_html (1.2), "Exp", lines: +1 -1 Wrap .Sh/.SH sections and .Ss/.SS subsections in HTML <section> elements as recommended for accessibility by the HTML 5 standard. Triggered by a similar, but slightly different suggestion from Laura Morales <lauretas at mail dot com>. 2019-02-28 16:36 schwarze Changed: TODO (1.284), "Exp", lines: +1 -6 man_html.c (1.171), "Exp", lines: +29 -3 Format multiple subsequent .IP or multiple subsequent .TP/.TQ as a single <dl> list rather than opening a new list for each item; feature suggested by Pali dot Rohar at gmail dot com. 2019-02-23 18:53 schwarze Changed: mandoc.1 (1.237), "Exp", lines: +13 -2 Explain the ASCII rendering of single quotes because that repeatedly caused confusion in the past. People plainly do not expect that there are limits to the compatibility between Unicode and ASCII, but there are. The information belongs here and not into mandoc_char(7) because it explains how the specific output device (-T ascii) works and because it has nothing to do with the question of how characters are represented on the input side. 2019-02-09 21:02 schwarze Changed: tbl_term.c (1.68), "Exp", lines: +45 -48 The horizontal line in a data cell containing only "_" or "=" connects to the horizontally adjacent vertical line or cell; fixing a bug reported by bentley@. 2019-02-09 16:46 schwarze Changed: tbl.7 (1.33), "Exp", lines: +17 -3 add a BUGS section explaining the situation with box and line drawing in UTF-8 output; suggested by bentley@ 2019-02-09 16:00 schwarze Changed: tbl_data.c (1.52), "Exp", lines: +23 -10 ignore empty request lines in the table data reader; fixing a minibug reported by bentley@ 2019-02-08 22:51 schwarze Changed: tbl.7 (1.32), "Exp", lines: +3 -3 fix typo: "a data cells" -> "a data cell"; from bentley@ 2019-02-07 15:45 schwarze Changed: mdoc.7 (1.276), "Exp", lines: +4 -6 style improvement from jmc@, no output change; original commit message: .Pp .Bd ... -compact is better written as .Bd ... 2019-02-06 22:18 schwarze Changed: mdoc.7 (1.275), "Exp", lines: +3 -3 Remove the misleading statement ".No takes no arguments". In facts, i works very similarly to .Em and .Sy. Triggered by a question from Kurt Mosiejczuk <kurt at cranky dot work>. 2019-02-06 21:11 schwarze Added: regress/roff/de/tab.in (1.1) regress/roff/de/tab.out_ascii (1.1) regress/roff/ds/tab.in (1.1) regress/roff/ds/tab.out_ascii (1.1) regress/roff/nr/tab.in (1.1) regress/roff/nr/tab.out_ascii (1.1) regress/roff/rn/tab.in (1.1) regress/roff/rn/tab.out_ascii (1.1) regress/roff/rn/tab.out_lint (1.1) Changed: roff.c (1.363), "Exp", lines: +19 -8 regress/roff/cond/register.in (1.3), "Exp", lines: +10 -2 regress/roff/cond/register.out_ascii (1.2), "Exp", lines: +5 -1 regress/roff/cond/string.in (1.4), "Exp", lines: +10 -2 regress/roff/cond/string.out_ascii (1.3), "Exp", lines: +5 -1 regress/roff/de/Makefile (1.4), "Exp", lines: +4 -3 regress/roff/ds/Makefile (1.2), "Exp", lines: +2 -2 regress/roff/nr/Makefile (1.4), "Exp", lines: +2 -2 regress/roff/rn/Makefile (1.2), "Exp", lines: +3 -2 Let roff_getname() end the roff identifier at a tab character and audit all its callers whether termination is handled correctly. Resulting improvements: * An escape or tab ending the macro name in a macro invocation is discarded, and argument processing is started after it. * An escape or tab ending a name in ".if d" and ".if r" is preserved. * An escape ending a name in ".ds" causes the whole request to be ignored. * A tab ending a name in ".ds" becomes part of the string. * An escape or tab ending a name in ".rm" causes the rest of the line to be ignored. * An escape or tab ending the first name in ".als", ".rn", or ".nr" causes the whole request to be ignored. Kurt Jaeger <pi at FreeBSD> made me aware of https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235456#c0 and in that bug report, comment 0 item (3) is a special case of this class of issues. Yes, the "mh" manual pages are no doubt among the worst on the planet. 2019-02-06 17:40 schwarze Changed: roff.c (1.362), "Exp", lines: +15 -12 adjust style and comments in roff_getname(); no functional change 2019-01-31 23:00 schwarze Changed: cgi.c (1.165), "Exp", lines: +2 -2 Relax overzealous PATH_INFO validation. URIs like https://man.openbsd.org/OpenBSD-2.2/cat1/cat.0 are still required to work because they result from apropos searches for old releases (up to 5.0) which used to install preformatted manual pages. Regression reported by jj@. 2019-01-31 16:31 schwarze Added: regress/tbl/opt/center-mdoc.in (1.1) regress/tbl/opt/center-mdoc.out_ascii (1.1) Changed: regress/tbl/opt/Makefile (1.2), "Exp", lines: +2 -2 Since resetting of offsets works quite differently in man(7) and mdoc(7), test table centering in an mdoc(7) document as well. Related to tbl_term.c rev. 1.67. 2019-01-31 16:06 schwarze Changed: tbl_term.c (1.67), "Exp", lines: +8 -4 Fix tbl(7) centering in mdoc(7) documents. Since resetting of offsets works quite differently in the mdoc(7) and man(7) formatters, the tbl(7) formatter needs to save the global offset on entry and restore it on exit. The additional indentation needed for table centering has to be added to its own offset variable and applied to each line of the table, rather than only to the first. Bug found by bentley@ in emulators/fceux(6). 2019-01-18 14:36 schwarze Changed: html.c (1.252), "Exp", lines: +50 -42 html.h (1.101), "Exp", lines: +3 -1 man_html.c (1.170), "Exp", lines: +10 -8 mdoc_html.c (1.327), "Exp", lines: +11 -8 The .UR and .MT blocks in man(7) are represented by <a> elements which establish phrasing context, but they can contain paragraph breaks (which is relevant for terminal formatting, so we can't just change the structure of the syntax tree), which are respresented by <p> elements and cannot occur inside <a>. Fix this by prematurely closing the <a> element in the HTML formatter. This menas that the clickable text in HTML output is shorter than what is represented as the link text in terminal output, but in HTML, it is frankly impossible to have the clickable area of a hyperlink extend across a paragraph break. The difference in presentation is not a major problem, and besides, paragraph breaks inside .UR are rather poor style in the first place. The implementation is quite tricky. Naively closing out the <a> prematurely would result in accessing a stale pointer when later reaching the physical end of the .UR block. So this commit separates visual and structural closing of "struct tag" stack items. Visual closing means that the HTML element is closed but the "struct tag" remains on the stack, to avoid later access to a stale pointer and to avoid closing the same HTML element a second time later. This also needs reference counting of pointers to "struct tag" stack items because often more than one child holds a pointer to the same parent item, and only the outermost child can safely do the physical closing. In the whole corpus of nearly half a million manual pages on man.openbsd.org, this problem occurs in exactly one page: the groff(1) version 1.20.1 manual contained in DragonFly-3.8.2, which contains a formatting error triggering the bug. 2019-01-17 08:14 schwarze Changed: TODO (1.283), "Exp", lines: +2 -29 Delete several entries that were already fixed. The two entries about dashes, hyphens, and minus signs are no longer relevant because we decided on a policy that is now documented. 2019-01-17 06:33 schwarze Added: regress/roff/esc/bs_man.in (1.1) regress/roff/esc/bs_man.out_ascii (1.1) regress/roff/esc/bs_mdoc.in (1.1) regress/roff/esc/bs_mdoc.out_ascii (1.1) Changed: regress/roff/esc/Makefile (1.6), "Exp", lines: +2 -2 Test handling of escaped backslashes because the code related to copy mode is complicated and prone to regressions. 2019-01-15 12:16 schwarze Changed: term.c (1.280), "Exp", lines: +4 -3 In PostScript and PDF output, one AFM unit is not nearly enough inter-word spacing, let's try again with 250 AFM units. Regression caused during my recent term_flushln() reorg in rev. 1.278, reported by brynet@ (sorry and many thanks for reporting). 2019-01-11 17:04 schwarze Changed: main.c (1.318), "Exp", lines: +2 -2 read.c (1.211), "Exp", lines: +5 -3 Improve error reporting when a file given on the command line cannot be opened: * Mention the filename. * Report the errno for the file itself, not the one with .gz appended. 2019-01-11 16:36 schwarze Changed: man_html.c (1.169), "Exp", lines: +2 -2 mdoc_html.c (1.326), "Exp", lines: +3 -3 do not access a NULL pointer when formatting a completely empty document 2019-01-11 12:56 schwarze Changed: html.c (1.251), "Exp", lines: +1 -7 man_html.c (1.168), "Exp", lines: +6 -6 mandoc.css (1.44), "Exp", lines: +76 -2 mandoc_html.3 (1.19), "Exp", lines: +2 -7 mdoc_html.c (1.325), "Exp", lines: +43 -43 regress/man/IP/literal.out_html (1.2), "Exp", lines: +2 -2 regress/man/SH/paragraph.out_html (1.2), "Exp", lines: +2 -2 regress/man/SS/paragraph.out_html (1.2), "Exp", lines: +2 -2 regress/man/SY/literal.out_html (1.2), "Exp", lines: +2 -2 regress/mdoc/Rs/paragraph.out_html (1.2), "Exp", lines: +8 -9 regress/mdoc/Sh/paragraph.out_html (1.2), "Exp", lines: +2 -2 Remove the HTML title= attributes which harmed accessibility and violated the principle of separation of content and presentation. Instead, implement the tooltips purely in CSS. Thanks to John Gardner <gardnerjohng at gmail dot com> for suggesting most of the styling in the new ::before rules. 2019-01-10 07:40 schwarze Changed: mandoc.css (1.43), "Exp", lines: +7 -2 mdoc_html.c (1.324), "Exp", lines: +1 -13 After years of gnashing of teeth, i finally found a way to avoid having to write empty list elements for non-compact .Bl -tag lists: 1. Add margin-bottom to the <dd>. Note that margin-top on the <dt> doesn't work because it would put a short <dt> lower than the <dd>; margin-bottom on the <dt> doesn't work because it would put vertical space before the <dd> for a long <dt>; and margin-top on the <dd> doesn't work because it would put a short <dt> higher than the <dd>. Only margin-bottom on the <dd> has none of these adverse effects. 2. Of course, margin-bottom on the <dd> fails to take care of the vertical spacing before the first list element, so implement that separately by margin-top on the <dl>. 3. For .Bl -tag -compact, reset both to zero. 2019-01-10 06:29 schwarze Changed: main.c (1.317), "Exp", lines: +3 -2 mandoc_msg.c (1.5), "Exp", lines: +2 -2 Initializers for file-scope static variables should be compile-time constants, and while stderr is a compile-time constant in OpenBSD, Kelvin Sherlock <ksherlock at gmail dot com> reports that it isn't on some other systems, for example on FreeBSD or Linux. So do the initialization by calling mandoc_msg_setoutfile() from main() instead. 2019-01-07 07:26 schwarze Added: regress/mdoc/Bd/nf.out_html (1.1) regress/mdoc/Bd/paragraph.in (1.1) regress/mdoc/Bd/paragraph.out_ascii (1.1) regress/mdoc/Bd/paragraph.out_html (1.1) regress/mdoc/Bd/paragraph.out_markdown (1.1) regress/mdoc/Bf/paragraph.in (1.1) regress/mdoc/Bf/paragraph.out_ascii (1.1) regress/mdoc/Bf/paragraph.out_html (1.1) regress/mdoc/D1/spacing.out_html (1.1) regress/mdoc/Rs/paragraph.in (1.1) regress/mdoc/Rs/paragraph.out_ascii (1.1) regress/mdoc/Rs/paragraph.out_html (1.1) regress/mdoc/Rs/paragraph.out_markdown (1.1) regress/mdoc/Sh/paragraph.in (1.1) regress/mdoc/Sh/paragraph.out_ascii (1.1) regress/mdoc/Sh/paragraph.out_html (1.1) regress/mdoc/Sh/paragraph.out_markdown (1.1) Changed: html.c (1.250), "Exp", lines: +11 -13 html.h (1.100), "Exp", lines: +1 -2 man_html.c (1.167), "Exp", lines: +12 -11 mdoc_html.c (1.323), "Exp", lines: +132 -94 mdoc_macro.c (1.232), "Exp", lines: +14 -3 roff_html.c (1.19), "Exp", lines: +4 -4 regress/char/unicode/invalid.out_html (1.3), "Exp", lines: +7 -7 regress/mdoc/Bd/Makefile (1.5), "Exp", lines: +3 -2 regress/mdoc/Bd/nf.in (1.2), "Exp", lines: +7 -2 regress/mdoc/Bd/nf.out_ascii (1.2), "Exp", lines: +4 -2 regress/mdoc/Bd/nf.out_markdown (1.2), "Exp", lines: +5 -2 regress/mdoc/Bf/Makefile (1.3), "Exp", lines: +4 -3 regress/mdoc/D1/Makefile (1.4), "Exp", lines: +2 -1 regress/mdoc/D1/spacing.in (1.3), "Exp", lines: +10 -3 regress/mdoc/D1/spacing.out_ascii (1.3), "Exp", lines: +6 -2 regress/mdoc/D1/spacing.out_lint (1.6), "Exp", lines: +1 -1 regress/mdoc/D1/spacing.out_markdown (1.3), "Exp", lines: +8 -3 regress/mdoc/Rs/Makefile (1.5), "Exp", lines: +3 -2 regress/mdoc/Sh/Makefile (1.5), "Exp", lines: +3 -2 regress/roff/string/dotT.in (1.2), "Exp", lines: +5 -7 regress/roff/string/dotT.out_ascii (1.2), "Exp", lines: +2 -6 regress/roff/string/dotT.out_html (1.2), "Exp", lines: +3 -5 regress/roff/string/dotT.out_markdown (1.2), "Exp", lines: +3 -7 regress/roff/string/dotT.out_utf8 (1.2), "Exp", lines: +2 -6 Represent mdoc(7) .Pp (and .sp, and some SYNOPSIS and .Rs features) by the <p> HTML element and use the html_fillmode() mechanism for .Bd -unfilled, just like it was done for man(7) earlier, finally getting rid both of the horrible <div class="Pp"></div> hack and of the worst HTML syntax violations caused by nested displays. Care is needed because in some situations, paragraphs have to remain open across several subsequent macros, whereas in other situations, they must get closed together with a block containing them. Some implementation details include: * Always close paragraphs before emitting HTML flow content. * Let html_close_paragraph() also close <pre> for extra safety. * Drop the old, now unused function print_paragraph(). * Minor adjustments in the top-level man(7) node formatter for symmetry. * Bugfix: .Ss heads suspend no-fill mode, even though .Ss doesn't end it. * Bugfix: give up on .Op semantic markup for now, see the comment. 2019-01-06 04:55 schwarze Added: regress/man/HP/literal.out_html (1.1) regress/man/IP/literal.out_html (1.1) regress/man/RS/paragraph.in (1.1) regress/man/RS/paragraph.out_ascii (1.1) regress/man/RS/paragraph.out_html (1.1) regress/man/SH/paragraph.in (1.1) regress/man/SH/paragraph.out_ascii (1.1) regress/man/SH/paragraph.out_html (1.1) regress/man/SS/paragraph.in (1.1) regress/man/SS/paragraph.out_ascii (1.1) regress/man/SS/paragraph.out_html (1.1) regress/man/TP/literal.out_html (1.1) regress/roff/sp/fill-man.in (1.1) regress/roff/sp/fill-man.out_ascii (1.1) regress/roff/sp/fill-man.out_html (1.1) Changed: html.c (1.249), "Exp", lines: +17 -2 html.h (1.99), "Exp", lines: +4 -2 man_html.c (1.166), "Exp", lines: +55 -70 roff_html.c (1.18), "Exp", lines: +8 -2 tbl_html.c (1.32), "Exp", lines: +2 -1 regress/man/HP/Makefile (1.2), "Exp", lines: +2 -1 regress/man/HP/literal.in (1.3), "Exp", lines: +13 -8 regress/man/HP/literal.out_ascii (1.2), "Exp", lines: +9 -6 regress/man/IP/Makefile (1.2), "Exp", lines: +2 -1 regress/man/IP/literal.in (1.4), "Exp", lines: +8 -4 regress/man/IP/literal.out_ascii (1.3), "Exp", lines: +4 -2 regress/man/RS/Makefile (1.4), "Exp", lines: +3 -3 regress/man/SH/Makefile (1.3), "Exp", lines: +3 -2 regress/man/SS/Makefile (1.3), "Exp", lines: +3 -2 regress/man/TP/Makefile (1.4), "Exp", lines: +2 -2 regress/man/TP/literal.in (1.3), "Exp", lines: +12 -6 regress/man/TP/literal.out_ascii (1.2), "Exp", lines: +8 -5 regress/roff/sp/Makefile (1.2), "Exp", lines: +5 -3 Finally, represent the man(7) .PP and .HP macros by the natural choice, which is the <p> HTML element. On top of the previous fill-mode improvements, the key to making this possible is to automatically close the <p> when required: before headers, subsequent paragraphs, lists, indented blocks, synopsis blocks, tbl(7) blocks, and before blocks using no-fill mode. In man(7) documents, represent the .sp request by a blank line in no-fill mode and in the same way as .PP in fill mode. 2019-01-05 21:55 schwarze Added: regress/man/SY/literal.out_html (1.1) Changed: man_html.c (1.165), "Exp", lines: +3 -3 regress/man/SY/Makefile (1.2), "Exp", lines: +2 -1 In no-fill mode, avoid bogus blank lines in two situations: 1. After the last child; the parent will take care of the line break. 2. At the .YS macro; the end of the preceding .SY already broke the line. 2019-01-05 21:18 schwarze Added: regress/man/SY/Makefile (1.1) regress/man/SY/literal.in (1.1) regress/man/SY/literal.out_ascii (1.1) Changed: man_term.c (1.228), "Exp", lines: +4 -2 regress/man/Makefile (1.3), "Exp", lines: +2 -2 In groff, when the .SY block macro occurs in no-fill mode, the output line gets broken after the head. Do the same. 2019-01-05 20:04 schwarze Added: regress/man/RS/literal.out_html (1.1) Changed: regress/man/RS/Makefile (1.3), "Exp", lines: +2 -1 regress/man/RS/literal.in (1.3), "Exp", lines: +13 -5 regress/man/RS/literal.out_ascii (1.2), "Exp", lines: +9 -6 Slowly start doing more HTML output tests, in this case for the interaction of .nf and .RS, related to man_macro.c rev. 1.106. HTML regression testing is tricky because it is extremely prone to over-testing, i.e. unintentional testing for volatile formatting details which are irrelevant for deciding whether the HTML output is good or bad. Minor changes to the formatter - which is still heavily under development - might result in the necessity to repeatedly adjust many test cases. Then again, HTML syntax rules are so complicated that without regression testing, the risk is simply too high that later changes will re-introduce issues that were already fixed earlier. Let's just try to design the tests very carefully in such a way that the *.out_html files contain nothing that is likely to change, and defer testing in cases where the HTML output is not yet clean enough to allow designing tests in such a way. 2019-01-05 18:59 schwarze Changed: man_macro.c (1.144), "Exp", lines: +5 -2 In HTML output, man(7) .RS blocks get formatted as <div class="Bd-indent">, and i can see no reasonable alternative: they do indeed represent indented displays. They certainly require flow context and make no sense in phrasing context. Consequently, they have to suspend no-fill mode during their head, in just the same way as other paragraph-type macros do it. This fixes HTML syntax errors that resulted from .nf followed by .RS. 2019-01-05 09:46 schwarze Changed: man_html.c (1.164), "Exp", lines: +16 -24 minor cleanup, no functional change: * delete one irrelevant FIXME; no more fixed lengths in HTML, please * simplify some conditions * avoid testing pointers as truth values, use "!= NULL" * sort some declarations * delete some pointless blank lines 2019-01-05 09:14 schwarze Changed: html.c (1.248), "Exp", lines: +34 -1 html.h (1.98), "Exp", lines: +2 -1 man_html.c (1.163), "Exp", lines: +18 -117 roff_html.c (1.17), "Exp", lines: +20 -4 Now that the NODE_NOFILL flag in the syntax tree is accurate, use it in the man(7) HTML formatter rather than keeping fill mode state locally, resulting in massive simplification (minus 40 LOC). Move the html_fillmode() state handler function to the html.c module such that both the man(7) and the roff(7) formatter (and in the future, also the mdoc(7) formatter) can use it. Give it a query mode, to be invoked with TOKEN_NONE. 2019-01-05 09:10 schwarze Changed: roff.c (1.361), "Exp", lines: +3 -1 no-fill mode has to be suspended during tbl(7) rendering, too 2019-01-05 01:29 schwarze Changed: man_term.c (1.227), "Exp", lines: +65 -82 minor cleanup, no functional change: * in node type switches, explicitly handle all types, sort them, and abort() on those that cannot occur * avoid testing pointers as truth values, use "!= NULL" * avoid testing "constant == variable", use "variable == constant" * prefer sizeof(var) over sizeof(type) * delete one duplicate function * sort some declarations * delete some useless blank lines 2019-01-05 00:36 schwarze Changed: man.c (1.187), "Exp", lines: +6 -6 man_macro.c (1.143), "Exp", lines: +4 -2 man_term.c (1.226), "Exp", lines: +6 -3 roff.c (1.360), "Exp", lines: +3 -3 roff_int.h (1.16), "Exp", lines: +3 -2 Some high-level block macros have an effect similar to temporarily suspending no-fill mode during their head. Model this with an additional roff parser state flag ROFF_NONOFILL. That is much simpler than it would be to save and restore the ROFF_NOFILL flag itself, in particular since the latter can be switched (with lasting effect) by the .nf and .fi requests even while its effect is temporarily suspended. This commit does not change formatting yet, but prepares for future formatting simplifications and improvements. 2019-01-04 04:04 schwarze Added: regress/mdoc/Bd/nf.in (1.1) regress/mdoc/Bd/nf.out_ascii (1.1) regress/mdoc/Bd/nf.out_markdown (1.1) Changed: regress/mdoc/Bd/Makefile (1.4), "Exp", lines: +2 -2 regress/mdoc/Bd/centered.in (1.3), "Exp", lines: +3 -5 regress/mdoc/Bd/centered.out_ascii (1.3), "Exp", lines: +3 -3 regress/mdoc/Bd/centered.out_markdown (1.3), "Exp", lines: +2 -3 Test interaction of low-level roff(7) filling requests with .Bd in general and filling in .Bd -centered in particular; related to mdoc_term.c rev. 1.372. 2019-01-04 03:39 schwarze Changed: TODO (1.282), "Exp", lines: +1 -8 mdoc_term.c (1.372), "Exp", lines: +44 -64 Two functional improvements to filling in terminal output. 1. Fully support no-fill mode in mdoc(7), even when invoked with low-level roff(7) .nf requests. As a side effect, this substantially simplifies the implementation of .Bd -unfilled and .Bd -literal. 2. Let .Bd -centered fill its text, using the new TERMP_CENTER flag. That finally fixes the long-standing bug that it used to operate in no-fill mode, which was known to be wrong for at least five years. This also simplifies the implementation of .Bd -centered considerably. 2019-01-04 03:24 schwarze Changed: roff_term.c (1.19), "Exp", lines: +4 -15 Simplify the roff(7) .ce and .rj terminal formatter by using the new TERMP_CENTER and TERMP_RIGHT flags. No functional change. 2019-01-04 03:21 schwarze Changed: term.c (1.279), "Exp", lines: +16 -2 term.h (1.131), "Exp", lines: +4 -2 Implement centering and adjustment to the right margin directly in the terminal filling routine, controlled by new flags TERMP_CENTER and TERMP_RIGHT. This became possible by the recent term_flushln() rewrite. No functional change yet, but to be used by upcoming commits. 2019-01-04 03:17 schwarze Changed: mdoc_man.c (1.132), "Exp", lines: +33 -10 Oops, i forgot to adjust this file to the changes in roff.h rev. 1.67. Provide a handler for the new .nf and .fi roff(7) request nodes, avoiding a potential crash, and correctly restore the former fill more at .Ed even when there was .nf or .fi inside the block. 2019-01-04 01:11 schwarze Added: regress/roff/ce/Makefile (1.1) regress/roff/ce/basic.in (1.1) regress/roff/ce/basic.out_ascii (1.1) Changed: regress/roff/Makefile (1.9), "Exp", lines: +2 -2 test the roff(7) .ce and .rj requests; they were already supported in the past 2019-01-03 19:59 schwarze Changed: term.c (1.278), "Exp", lines: +253 -179 Rewrite the line filling function for terminal output yet again. This function has always been among the most complicated parts of mandoc, and it repeatedly needed substantial functional enhancements. The present rewrite is required to prepare for the implementation of simultaneous filling and centering of output lines. The previous implementation looked at each word in turn and printed it to the output stream as soon as it was found to still fit on the current output line. Obviously, that approach neither allows centering nor adjustment to the right margin. The new implementation first decides which part of the paragraph to put onto the current output line, also measuring the display width of that part, even if that part consists of multiple words including intervening whitespace. This will allow moving the whole output line to the right as desired before printing it, for example to center it or to adjust it to the right margin. The function is split into three parts, each much shorter, solving a better defined task, much easier to understand and better commented: 1. the steering function term_flushln() looping over output lines; 2. the calculation function term_fill() looping over input characters; 3. and the output function term_field() looping over printed characters. No functional change yet. 2019-01-01 08:18 schwarze Changed: main.c (1.316), "Exp", lines: +17 -8 mandoc.1 (1.236), "Exp", lines: +12 -4 Support taking the -O tag value from apropos(1) key=value search terms; feature improvement suggested by kn@. While here, also make "-O value" work from standard input. OK kn@ 2019-01-01 07:42 schwarze Changed: mdoc_macro.c (1.231), "Exp", lines: +46 -4 mdoc_state.c (1.15), "Exp", lines: +3 -40 Correctly set the ROFF_NOFILL parser flag for .Bd .Ed .Sh, such that children and later siblings get correct NODE_NOFILL assignments. This doesn't change rendering yet but prepares for future rendering improvements. 2019-01-01 05:56 schwarze Changed: tree.c (1.84), "Exp", lines: +16 -12 display the NODE_NOFILL flag indicating no-fill mode 2019-01-01 03:45 schwarze Changed: man.7 (1.142), "Exp", lines: +11 -22 roff.7 (1.111), "Exp", lines: +35 -12 Now that .nf and .fi are implemented in the roff(7) parser and formatters rather than in the man(7) parser and formatters, document them in the roff(7) manual, where they belong, rather than in the man(7) manual. Mention that they imply an output line break, and mention which macros imply these requests. 2018-12-31 11:09 schwarze Changed: html.h (1.97), "Exp", lines: +1 -2 drop flag HTML_LITERAL which is no longer used 2018-12-31 11:01 schwarze Changed: man_term.c (1.225), "Exp", lines: +7 -48 Cleanup, minus 25 LOC, no functional change: Delete the complicated mechanism keeping fill mode state locally in the man(7) HTML formatter. Instead, use the state stored in the nodes. 2018-12-31 10:35 schwarze Changed: mdoc_html.c (1.322), "Exp", lines: +4 -13 Cleanup, no functional change: Stop trying to keep fill mode state locally in the mdoc HTML formatter, rely on the state stored in the nodes instead. Note that the .Bd -literal code is buggy. Nested literal displays result in nested <pre> elements, which violates HTML syntax. But i'm not yet fixing bugs in this commit, i'm merely deleting code which has no effect. 2018-12-31 10:04 schwarze Changed: libman.h (1.86), "Exp", lines: +1 -2 man.c (1.186), "Exp", lines: +1 -20 man_macro.c (1.142), "Exp", lines: +2 -2 man_validate.c (1.146), "Exp", lines: +2 -3 Cleanup, no functional change: Since the man(7) and roff(7) validators no longer use the parser state flag ROFF_NOFILL, we can finally get rid of the function man_state(), resulting in a better separation of parsing and validation. 2018-12-31 09:02 schwarze Changed: roff_validate.c (1.18), "Exp", lines: +2 -2 oops, one change ROFF_NOFILL -> NODE_NOFILL was forgotten in rev. 1.17 2018-12-31 08:45 schwarze Changed: regress/man/SH/noarg.out_lint (1.7), "Exp", lines: +1 -1 regress/man/SS/noarg.out_lint (1.7), "Exp", lines: +1 -1 catch up with the changed order of warnings; related to man_validate.c rev. 1.145 2018-12-31 08:38 schwarze Changed: man.c (1.185), "Exp", lines: +1 -6 man_validate.c (1.145), "Exp", lines: +20 -4 mdoc_validate.c (1.369), "Exp", lines: +3 -5 roff_validate.c (1.17), "Exp", lines: +2 -2 Use the new flag NODE_NOFILL in the validators, which is sometimes simpler and always more robust. In particular, move the nesting warnings for .EX and .EE from man_state(), where they were misplaced, to the man(7) validator. 2018-12-31 08:18 schwarze Changed: roff.c (1.359), "Exp", lines: +5 -1 roff.h (1.68), "Exp", lines: +9 -8 Store the fill mode with a new flag NODE_NOFILL in every node, like it is already done with NODE_SYNPRETTY, such that the fill mode becomes more directly available to the formatters. Not used yet, but will be used by upcoming commits. 2018-12-31 08:03 schwarze Changed: man_macro.c (1.141), "Exp", lines: +6 -1 For .EX and .EE, set the fill mode parser state directly in the macro parsing function, in the same way as the roff parser already does it for the .nf and .fi requests. This is a preparation for getting rid of the ugly function man_state() later on. 2018-12-31 07:46 schwarze Changed: mdoc.c (1.274), "Exp", lines: +4 -4 mdoc_state.c (1.14), "Exp", lines: +3 -3 mdoc_validate.c (1.368), "Exp", lines: +3 -3 roff_int.h (1.15), "Exp", lines: +1 -2 Cleanup, no functional change: Use the new parser flag ROFF_NOFILL in the mdoc(7) parser, too, instead of the old MDOC_LITERAL, which was an alias for the former MAN_LITERAL. 2018-12-31 07:08 schwarze Changed: man.c (1.184), "Exp", lines: +12 -12 man_html.c (1.162), "Exp", lines: +17 -19 man_macro.c (1.140), "Exp", lines: +4 -11 man_term.c (1.224), "Exp", lines: +7 -4 man_validate.c (1.144), "Exp", lines: +3 -4 roff.c (1.358), "Exp", lines: +29 -21 roff.h (1.67), "Exp", lines: +3 -5 roff_html.c (1.16), "Exp", lines: +3 -1 roff_int.h (1.14), "Exp", lines: +3 -3 roff_term.c (1.18), "Exp", lines: +5 -1 roff_validate.c (1.16), "Exp", lines: +19 -10 Move parsing of the .nf and .fi (fill mode) requests from the man(7) parser to the roff(7) parser. As a side effect, .nf and .fi are now also parsed in mdoc(7) input, though the mdoc(7) formatters still ignore most of their effect. 2018-12-31 04:55 schwarze Changed: libman.h (1.85), "Exp", lines: +1 -2 libmdoc.h (1.117), "Exp", lines: +1 -3 man.c (1.183), "Exp", lines: +1 -10 man_macro.c (1.139), "Exp", lines: +1 -3 man_validate.c (1.143), "Exp", lines: +3 -3 mdoc.c (1.273), "Exp", lines: +1 -10 mdoc_macro.c (1.230), "Exp", lines: +1 -2 mdoc_state.c (1.13), "Exp", lines: +1 -9 mdoc_validate.c (1.367), "Exp", lines: +3 -3 read.c (1.210), "Exp", lines: +2 -1 roff.c (1.357), "Exp", lines: +13 -6 roff_int.h (1.13), "Exp", lines: +2 -1 Cleanup, minus 15 LOC, no functional change: Simplify the way the man(7) and mdoc(7) validators are called. Reset the parser state with a common function before calling them. There is no need to again reset the parser state afterwards, the parsers are no longer used after validation. This allows getting rid of man_node_validate() and mdoc_node_validate() as separate functions. 2018-12-30 00:49 schwarze Changed: Makefile.depend (1.41), "Exp", lines: +2 -2 cgi.c (1.164), "Exp", lines: +9 -21 demandoc.c (1.32), "Exp", lines: +8 -13 libman.h (1.84), "Exp", lines: +4 -1 libmdoc.h (1.116), "Exp", lines: +5 -1 main.c (1.315), "Exp", lines: +17 -20 main.h (1.29), "Exp", lines: +10 -10 man.c (1.182), "Exp", lines: +2 -2 man_html.c (1.161), "Exp", lines: +6 -6 man_macro.c (1.138), "Exp", lines: +2 -2 man_term.c (1.223), "Exp", lines: +5 -6 mandoc.3 (1.44), "Exp", lines: +15 -52 mandoc.c (1.114), "Exp", lines: +3 -2 mandoc_headers.3 (1.30), "Exp", lines: +46 -27 mandoc_parse.h (1.4), "Exp", lines: +4 -4 mandocd.c (1.9), "Exp", lines: +9 -15 mandocdb.c (1.262), "Exp", lines: +21 -25 mdoc.c (1.272), "Exp", lines: +2 -2 mdoc.h (1.146), "Exp", lines: +4 -1 mdoc_html.c (1.321), "Exp", lines: +6 -6 mdoc_macro.c (1.229), "Exp", lines: +2 -2 mdoc_man.c (1.131), "Exp", lines: +5 -6 mdoc_markdown.c (1.30), "Exp", lines: +10 -10 mdoc_state.c (1.12), "Exp", lines: +2 -1 mdoc_term.c (1.371), "Exp", lines: +5 -7 mdoc_validate.c (1.366), "Exp", lines: +3 -3 read.c (1.209), "Exp", lines: +22 -26 roff.c (1.356), "Exp", lines: +14 -17 roff.h (1.66), "Exp", lines: +5 -40 roff_int.h (1.12), "Exp", lines: +47 -1 tree.c (1.83), "Exp", lines: +6 -6 Cleanup, no functional change: The struct roff_man used to be a bad mixture of internal parser state and public parsing results. Move the public results to the parsing result struct roff_meta, which is already public. Move the rest of struct roff_man to the parser-internal header roff_int.h. Since the validators need access to the parser state, call them from the top level parser during mparse_result() rather than from the main programs, also reducing code duplication. This keeps parser internal state out of thee main programs (five in mandoc portable) and out of eight formatters. 2018-12-28 00:15 schwarze Changed: mandoc.1 (1.235), "Exp", lines: +9 -2 add some notes about using col(1) and ul(1) to process the ascii markup since these may not be commonly known utilities; idea from and joint work with tedu@ CV: ---------------------------------------------------------------------- 2018-12-25 00:06 schwarze Changed: mdoc_html.c (1.320), "Exp", lines: +2 -2 bugfix: make the static class buffer long enough for .Bl -bullet -compact -offset indent 2018-12-24 23:37 schwarze Changed: mandoc.1 (1.234), "Exp", lines: +9 -9 mandoc.css lives in /usr/share/misc now; use full paths to indicate this. from tedu@ 2018-12-23 22:03 schwarze Changed: mdoc.7 (1.274), "Exp", lines: +683 -796 Finally, stop abusing .Ss and .Sx to mark up macros, use .Ic instead since these are clearly commands in a domain-specific language. As a nice side effect, the resulting list allows including the synopsis for each macro in the item head, reducing some repetitive verbiage. 2018-12-23 16:55 schwarze Changed: mdoc.7 (1.273), "Exp", lines: +22 -36 Simplify and clarify instructions for .Ql, and deprecate .Li. The macros .Ql, .Dl, and .Bd -literal leave no room for any valid use case for .Li whatsoever. General direction discussed with jmc@. 2018-12-23 15:32 schwarze Changed: mdoc.7 (1.272), "Exp", lines: +4 -4 Deprecate .Lp, use .Pp instead. Simplicity matters, and fewer macros is simpler. OK jmc@ 2018-12-22 19:49 schwarze Changed: mdoc_html.c (1.319), "Exp", lines: +3 -2 In the TOC, close <a> before opening <ul>. Simplified version of a bugfix patch from rapha@. 2018-12-21 17:47 schwarze Changed: regress/roff/nr/incr.in (1.2), "Exp", lines: +8 -1 regress/roff/nr/incr.out_ascii (1.2), "Exp", lines: +3 -0 merge a test update from OpenBSD that was forgotten in April 2018-12-21 17:15 schwarze Added: regress/mdoc/Bl/esc.in (1.1) regress/mdoc/Bl/esc.out_ascii (1.1) regress/mdoc/Bl/esc.out_markdown (1.1) regress/mdoc/Eo/arg.in (1.1) regress/mdoc/Eo/arg.out_ascii (1.1) regress/mdoc/Eo/arg.out_markdown (1.1) regress/mdoc/Eo/arg.out_utf8 (1.1) regress/mdoc/Fd/arg.in (1.1) regress/mdoc/Fd/arg.out_ascii (1.1) regress/mdoc/Fd/arg.out_markdown (1.1) regress/mdoc/Li/arg.in (1.1) regress/mdoc/Li/arg.out_ascii (1.1) regress/mdoc/Li/arg.out_markdown (1.1) regress/mdoc/Ns/arg.in (1.1) regress/mdoc/Ns/arg.out_ascii (1.1) regress/mdoc/Ns/arg.out_markdown (1.1) regress/mdoc/Op/arg.in (1.1) regress/mdoc/Op/arg.out_ascii (1.1) regress/mdoc/Op/arg.out_markdown (1.1) Changed: libmandoc.h (1.77), "Exp", lines: +2 -2 libmdoc.h (1.115), "Exp", lines: +2 -1 man_macro.c (1.137), "Exp", lines: +13 -7 mdoc_argv.c (1.119), "Exp", lines: +19 -13 mdoc_macro.c (1.228), "Exp", lines: +66 -23 roff.c (1.355), "Exp", lines: +54 -21 regress/man/RS/REarg.in (1.3), "Exp", lines: +6 -5 regress/man/RS/REarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/man/RS/REarg.out_lint (1.5), "Exp", lines: +7 -7 regress/mdoc/Bl/Makefile (1.10), "Exp", lines: +2 -2 regress/mdoc/Eo/Makefile (1.5), "Exp", lines: +3 -2 regress/mdoc/Fd/Makefile (1.5), "Exp", lines: +2 -2 regress/mdoc/Li/Makefile (1.4), "Exp", lines: +2 -2 regress/mdoc/Ns/Makefile (1.4), "Exp", lines: +2 -2 regress/mdoc/Op/Makefile (1.5), "Exp", lines: +2 -2 regress/roff/args/mdoc.out_lint (1.7), "Exp", lines: +10 -6 Rename mandoc_getarg() to roff_getarg() and pass it the roff parser struct as an argument such that after copy-in, it can call roff_expand() once again, which used to be called roff_res() before this. This fixes a subtle low-level roff(7) parsing bug reported by Fabio Scotoni <fabio at esse dot ch> in the 4.4BSD-Lite2 mdoc.samples(7) manual page, because that page used an escaped escape sequence in a macro argument. To expand escaped escape sequences in quoted mdoc(7) arguments, too, stop bypassing the call to roff_getarg() in mdoc_argv.c, function args() for this case. This does not solve the case of escaped escape sequences in quoted .Bl -column phrases yet. Because roff_expand() can make the string longer, roff_getarg() can no longer operate in-place but needs to malloc(3) the returned string. In the high-level parsers, free(3) that string after processing it. 2018-12-20 21:30 schwarze Changed: main.c (1.314), "Exp", lines: +6 -4 read.c (1.208), "Exp", lines: +4 -4 Move the full responsibility for reporting open(2) errors from mparse_open() to the caller. That is better because only the caller knows its preferred reporting method and format and only the caller has access to all the data that should be included - like the column number in .so processing or the current manpath in makewhatis(8). Moving the mandoc_msg() call out is possible because the caller can call strerror(3) just as easily as mparse_open() can. Move mandoc_msg_setinfilename() closer to the parsing of the file contents, to avoid problems *with* the file (like non-existence, lack of permissions, etc.) getting misreported as problems *in* the file. Fix the column number reported for .so failure: let it point to the beginning of the filename. Taken together, this prevents makewhatis(8) from spewing confusing messages about .so failures to stderr, a bug reported by Raf Czlonka <rczlonka at gmail dot com> on ports@. It also prevents mandoc(1) from issuing *two* messages for every single .so failure. 2018-12-20 18:24 schwarze Changed: mandoc.1 (1.233), "Exp", lines: +21 -5 Explain what the fields in mandoc messages mean, rather than merely specifying the message syntax. Gap in documentation found while looking at a bug report from Raf Czlonka <rczlonka at gmail dot com>. 2018-12-20 03:41 schwarze Changed: roff.c (1.354), "Exp", lines: +2 -2 regress/char/space/esct-man.in (1.4), "Exp", lines: +4 -2 regress/char/space/esct-man.out_ascii (1.3), "Exp", lines: +2 -1 regress/char/space/esct-man.out_lint (1.6), "Exp", lines: +2 -0 Bugfix: When after a \\, \t, or \a, another \t or \a had to be resolved in copy mode within the same argument, the argument got corrupted. Found while working on a loosely related bug report from Fabio Scotoni <fabio at esse dot ch>. 2018-12-18 22:00 schwarze Changed: mandoc.c (1.113), "Exp", lines: +1 -97 roff.c (1.353), "Exp", lines: +98 -1 As a first step towards making roff_res() callable from mandoc_getarg(), move the function mandoc_getarg() from mandoc.c to roff.c. It was misplaced in mandoc.c in the first place; that file is intended for utilities needed both by parsers and by formatters, while reading macro arguments in copy mode is purely a task of the roff(7) parser. Needed as a preliminary for an upcoming bugfix. No code change. 2018-12-16 02:21 schwarze Changed: man.7 (1.141), "Exp", lines: +19 -11 The .HP macro was deprecated by groff, and that makes sense because it serves no real purpose and works poorly with HTML. While here, describe the section argument of .TH, clarify the syntax display of .TP, and polish some wordings. 2018-12-16 01:34 schwarze Changed: roff.7 (1.110), "Exp", lines: +30 -22 minor polishing, in parts related to functional improvements in the past, and also adding some cross references for important escape sequences 2018-12-16 00:21 schwarze Changed: man_validate.c (1.142), "Exp", lines: +1 -1 mandoc_msg.c (1.4), "Exp", lines: +1 -1 term_tab.c (1.5), "Exp", lines: +1 -1 s/OpenBSD/Id/ in CVS Ids 2018-12-16 00:17 schwarze Added: regress/roff/esc/f.out_html (1.1) regress/roff/ft/badargs.out_html (1.1) Changed: Makefile.depend (1.40), "Exp", lines: +4 -4 html.c (1.247), "Exp", lines: +3 -4 html.h (1.96), "Exp", lines: +2 -1 man_html.c (1.160), "Exp", lines: +2 -1 mandoc.c (1.112), "Exp", lines: +55 -42 mandoc.h (1.262), "Exp", lines: +2 -1 mandoc_headers.3 (1.29), "Exp", lines: +4 -1 mdoc_html.c (1.318), "Exp", lines: +2 -1 roff.7 (1.109), "Exp", lines: +79 -43 roff_html.c (1.15), "Exp", lines: +15 -3 roff_term.c (1.17), "Exp", lines: +12 -14 roff_validate.c (1.15), "Exp", lines: +3 -25 tbl_html.c (1.31), "Exp", lines: +2 -1 regress/regress.pl (1.9), "Exp", lines: +12 -10 regress/roff/esc/Makefile (1.5), "Exp", lines: +2 -1 regress/roff/esc/f.in (1.3), "Exp", lines: +11 -12 regress/roff/esc/f.out_ascii (1.3), "Exp", lines: +12 -5 regress/roff/ft/Makefile (1.3), "Exp", lines: +2 -1 regress/roff/ft/badargs.in (1.3), "Exp", lines: +19 -2 regress/roff/ft/badargs.out_ascii (1.2), "Exp", lines: +5 -2 regress/roff/ft/badargs.out_lint (1.5), "Exp", lines: +2 -2 Yet another round of improvements to manual font selection. Unify handling of \f and .ft. Support \f4 (bold+italic). Support ".ft BI" and ".ft CW" for terminal output. Support the .ft request in HTML output. Reject the bogus fonts \f(C1, \f(C2, \f(C3, and \f(CP. In regress.pl, only strip leading whitespace in math mode. 2018-12-15 19:30 schwarze Added: regress/char/accent/nocombine.out_lint (1.1) regress/char/space/invalid.in (1.1) regress/char/space/invalid.out_ascii (1.1) regress/char/space/invalid.out_lint (1.1) regress/roff/esc/O.in (1.1) regress/roff/esc/O.out_ascii (1.1) regress/roff/esc/O.out_lint (1.1) regress/roff/esc/invalid.in (1.1) regress/roff/esc/invalid.out_ascii (1.1) regress/roff/esc/invalid.out_lint (1.1) regress/roff/esc/unsupp.in (1.1) regress/roff/esc/unsupp.out_ascii (1.1) regress/roff/esc/unsupp.out_lint (1.1) Changed: TODO (1.281), "Exp", lines: +1 -11 chars.c (1.78), "Exp", lines: +6 -16 html.c (1.246), "Exp", lines: +6 -4 mandoc.1 (1.232), "Exp", lines: +17 -3 mandoc.c (1.111), "Exp", lines: +79 -17 mandoc.h (1.261), "Exp", lines: +5 -1 mandoc_char.7 (1.75), "Exp", lines: +7 -5 mandoc_msg.c (1.3), "Exp", lines: +2 -0 mdoc_man.c (1.130), "Exp", lines: +2 -1 mdoc_markdown.c (1.29), "Exp", lines: +4 -1 roff.7 (1.108), "Exp", lines: +44 -1 roff.c (1.352), "Exp", lines: +34 -15 term.c (1.277), "Exp", lines: +11 -9 regress/char/accent/Makefile (1.2), "Exp", lines: +1 -0 regress/char/accent/nocombine.in (1.3), "Exp", lines: +6 -6 regress/char/accent/nocombine.out_ascii (1.2), "Exp", lines: +3 -3 regress/char/accent/nocombine.out_utf8 (1.2), "Exp", lines: +3 -3 regress/char/space/Makefile (1.2), "Exp", lines: +2 -1 regress/char/space/esct-man.in (1.3), "Exp", lines: +13 -1 regress/char/space/esct-man.out_ascii (1.2), "Exp", lines: +5 -1 regress/char/space/esct-man.out_lint (1.5), "Exp", lines: +5 -5 regress/roff/esc/Makefile (1.4), "Exp", lines: +3 -2 regress/roff/esc/ignore.in (1.3), "Exp", lines: +8 -10 regress/roff/esc/ignore.out_ascii (1.3), "Exp", lines: +13 -6 regress/roff/esc/ignore.out_lint (1.6), "Exp", lines: +4 -1 regress/roff/esc/one.in (1.3), "Exp", lines: +6 -12 regress/roff/esc/one.out_ascii (1.3), "Exp", lines: +11 -7 Several improvements to escape sequence handling. * Add the missing special character \_ (underscore). * Partial implementations of \a (leader character) and \E (uninterpreted escape character). * Parse and ignore \r (reverse line feed). * Add a WARNING message about undefined escape sequences. * Add an UNSUPP message about unsupported escape sequences. * Mark \! and \? (transparent throughput) and \O (suppress output) as unsupported. * Treat the various variants of zero-width spaces as one-byte escape sequences rather than as special characters, to avoid defining bogus forms with square brackets. * For special characters with one-byte names, do not define bogus forms with square brackets, except for \[-], which is valid. * In the form with square brackets, undefined special characters do not fall back to printing the name verbatim, not even for one-byte names. * Starting a special character name with a blank is an error. * Undefined escape sequences never abort formatting of the input string, not even in HTML output mode. * Document the newly handled escapes, and a few that were missing. * Regression tests for most of the above. 2018-12-14 20:40 schwarze Changed: tbl.7 (1.31), "Exp", lines: +3 -3 zap trailing whitespace; from jmc@ 2018-12-14 06:33 schwarze Changed: eqn.c (1.83), "Exp", lines: +2 -3 eqn_parse.h (1.3), "Exp", lines: +2 -4 libmandoc.h (1.76), "Exp", lines: +4 -6 man_macro.c (1.136), "Exp", lines: +2 -2 mandoc.c (1.110), "Exp", lines: +2 -2 mandoc_headers.3 (1.28), "Exp", lines: +3 -27 mdoc_argv.c (1.118), "Exp", lines: +2 -2 read.c (1.207), "Exp", lines: +3 -3 roff.c (1.351), "Exp", lines: +6 -10 roff.h (1.65), "Exp", lines: +1 -2 tbl.3 (1.6), "Exp", lines: +2 -9 tbl.c (1.46), "Exp", lines: +2 -3 tbl_int.h (1.2), "Exp", lines: +1 -2 tbl_parse.h (1.2), "Exp", lines: +2 -3 Cleanup, no functional change: Now that message handling is properly encapsulated, remove struct mparse pointers from four structs (roff, roff_man, tbl_node, eqn_node) and from the argument lists of five functions (roff_alloc, roff_man_alloc, mandoc_getarg, tbl_alloc, eqn_alloc). Except for being passed to the main program as an opaque object, it now only occurs in read.c, as it should, and not across 15 files like in the past. 2018-12-14 05:18 schwarze Changed: eqn.c (1.82), "Exp", lines: +30 -30 main.c (1.313), "Exp", lines: +5 -6 man.c (1.181), "Exp", lines: +11 -19 man_macro.c (1.135), "Exp", lines: +15 -17 man_validate.c (1.141), "Exp", lines: +26 -34 mandoc.c (1.109), "Exp", lines: +9 -12 mandoc.h (1.260), "Exp", lines: +3 -5 mandoc_msg.c (1.2), "Exp", lines: +1 -11 mdoc.c (1.271), "Exp", lines: +6 -11 mdoc_argv.c (1.117), "Exp", lines: +5 -7 mdoc_macro.c (1.227), "Exp", lines: +33 -42 mdoc_validate.c (1.365), "Exp", lines: +160 -225 read.c (1.206), "Exp", lines: +20 -22 roff.c (1.350), "Exp", lines: +77 -92 roff_validate.c (1.14), "Exp", lines: +8 -9 tbl.c (1.45), "Exp", lines: +5 -9 tbl_data.c (1.51), "Exp", lines: +6 -6 tbl_layout.c (1.48), "Exp", lines: +12 -16 tbl_opts.c (1.24), "Exp", lines: +9 -10 Almost mechanical diff to remove the "struct mparse *" argument from mandoc_msg(), where it is no longer used. While here, rename mandoc_vmsg() to mandoc_msg() and retire the old version: There is really no point in having another function merely to save "%s" in a few places. Minus 140 lines of code. 2018-12-14 02:16 schwarze Changed: read.c (1.205), "Exp", lines: +41 -40 Fold mparse_parse_buffer() into mparse_readfd(), making the code considerably more readable. This is possible now that i finally deleted mparse_readmem() from mandoc portable - an unused function that never existed in OpenBSD. This cleanup already made me find a minor bug: after a recursive parse, restoring the line number of the parent file was forgotten. This is fixed now. 2018-12-14 01:24 schwarze Changed: mandoc_parse.h (1.3), "Exp", lines: +1 -3 read.c (1.204), "Exp", lines: +1 -14 Delete the function mparse_readmem() that has been unused for almost a decade but regularly makes maintenance harder. Mandoc is not a general-purpose library, and being as pluggable as possible is not among the goals of the project. 2018-12-14 01:18 schwarze Added: mandoc_msg.c (1.1) Changed: Makefile (1.527), "Exp", lines: +3 -1 Makefile.depend (1.39), "Exp", lines: +1 -0 cgi.c (1.163), "Exp", lines: +2 -2 chars.c (1.77), "Exp", lines: +2 -1 demandoc.c (1.31), "Exp", lines: +2 -3 libmandoc.h (1.75), "Exp", lines: +1 -6 main.c (1.312), "Exp", lines: +38 -74 man_macro.c (1.134), "Exp", lines: +2 -1 man_validate.c (1.140), "Exp", lines: +1 -0 mandoc.3 (1.43), "Exp", lines: +5 -81 mandoc.h (1.259), "Exp", lines: +12 -4 mandoc_headers.3 (1.27), "Exp", lines: +10 -5 mandoc_parse.h (1.2), "Exp", lines: +3 -7 mandocd.c (1.8), "Exp", lines: +2 -2 mandocdb.c (1.261), "Exp", lines: +2 -3 mdoc_state.c (1.11), "Exp", lines: +2 -1 msec.c (1.16), "Exp", lines: +2 -1 read.c (1.203), "Exp", lines: +11 -299 roff_term.c (1.16), "Exp", lines: +2 -2 roff_validate.c (1.13), "Exp", lines: +2 -2 st.c (1.16), "Exp", lines: +3 -1 tbl_data.c (1.50), "Exp", lines: +2 -1 tbl_layout.c (1.47), "Exp", lines: +2 -1 Major cleanup; may imply minor changes in edge cases of error reporting. Finally, drop support for the run-time configurable mandocmsg() callback. It was over-engineered from the start, never used for anything in a decade, and repeatedly caused maintenance headaches. Consolidate reporting infrastructure into two files, mandoc.h and mandoc_msg.c, mopping up the bits and pieces that were scattered around main.c, read.c, mandoc_parse.h, libmandoc.h, the prototypes of four parsing-related functions, and both parser structs. 2018-12-13 11:55 schwarze Added: mandoc_parse.h (1.1) Changed: Makefile (1.526), "Exp", lines: +6 -3 Makefile.depend (1.38), "Exp", lines: +17 -17 att.c (1.18), "Exp", lines: +1 -2 cgi.c (1.162), "Exp", lines: +2 -1 demandoc.c (1.30), "Exp", lines: +2 -1 lib.c (1.15), "Exp", lines: +1 -4 main.c (1.311), "Exp", lines: +2 -1 man_html.c (1.159), "Exp", lines: +1 -2 man_term.c (1.222), "Exp", lines: +1 -2 mandoc.h (1.258), "Exp", lines: +4 -35 mandoc_headers.3 (1.26), "Exp", lines: +58 -52 mandocd.c (1.7), "Exp", lines: +2 -1 mandocdb.c (1.260), "Exp", lines: +2 -1 mansearch.c (1.80), "Exp", lines: +1 -2 mdoc_html.c (1.317), "Exp", lines: +1 -2 mdoc_term.c (1.370), "Exp", lines: +1 -2 out.c (1.77), "Exp", lines: +1 -2 preconv.c (1.17), "Exp", lines: +4 -1 read.c (1.202), "Exp", lines: +2 -1 roff.c (1.349), "Exp", lines: +2 -1 roff.h (1.64), "Exp", lines: +7 -1 roff_html.c (1.14), "Exp", lines: +1 -2 Cleanup, no functional change: Split the top level parser interface out of the utility header mandoc.h, into a new header mandoc_parse.h, for use in the main program and in the main parser only. Move enum mandoc_os into roff.h because struct roff_man is the place where it is stored. This allows removal of mandoc.h from seven files in low-level parsers and in formatters. 2018-12-13 07:30 schwarze Changed: att.c (1.17), "Exp", lines: +1 -2 mandoc_headers.3 (1.25), "Exp", lines: +9 -13 libmdoc.h no longer needs mdoc.h 2018-12-13 07:28 schwarze Deleted: st.in (1.31) Changed: Makefile (1.525), "Exp", lines: +1 -2 Makefile.depend (1.37), "Exp", lines: +3 -3 st.c (1.15), "Exp", lines: +48 -6 Cleanup, no functional change: Finally merge the pointless file st.in into st.c. Nobody should do operating systems dependent changes to standards: By definition, standards are the same for every operating system. While here, libmdoc.h no longer requires mdoc.h. 2018-12-13 06:18 schwarze Changed: mandoc_headers.3 (1.24), "Exp", lines: +16 -6 read.c (1.201), "Exp", lines: +2 -1 roff.h (1.63), "Exp", lines: +3 -4 roff_int.h (1.11), "Exp", lines: +8 -2 Cleanup, no functional change: Move the roffhash_*() functions from roff.h to roff_int.h because they are only intended for use by parsers, neither by main programs nor by formatters. 2018-12-13 05:23 schwarze Added: eqn.h (1.1) Changed: Makefile (1.524), "Exp", lines: +6 -3 Makefile.depend (1.36), "Exp", lines: +4 -4 eqn.c (1.81), "Exp", lines: +14 -4 eqn_html.c (1.18), "Exp", lines: +2 -1 eqn_parse.h (1.2), "Exp", lines: +3 -2 eqn_term.c (1.19), "Exp", lines: +2 -2 mandoc.h (1.257), "Exp", lines: +1 -69 mandoc_headers.3 (1.23), "Exp", lines: +17 -5 roff.c (1.348), "Exp", lines: +2 -3 tree.c (1.82), "Exp", lines: +2 -1 Cleanup, no functional change: No need to expose the eqn(7) syntax tree data structures everywhere. Move them to their own include file, "eqn.h". While here, delete the unused enum eqn_pilet. 2018-12-13 03:40 schwarze Deleted: libroff.h (1.44) Added: eqn_parse.h (1.1) Changed: Makefile (1.523), "Exp", lines: +2 -2 Makefile.depend (1.35), "Exp", lines: +10 -10 eqn.c (1.80), "Exp", lines: +14 -3 mandoc_headers.3 (1.22), "Exp", lines: +42 -33 roff.c (1.347), "Exp", lines: +4 -6 Cleanup, no functional change: In libroff.h, nothing was left except the eqn(7) parser interface, which isn't really part of the roff(7) parser, so rename it to eqn_parse.h. While here, move struct eqn_def to eqn.c because that's the only file using it, and let eqn_box_free() and eqn_free() handle NULL. 2018-12-13 02:06 schwarze Added: tbl_int.h (1.1) tbl_parse.h (1.1) Changed: Makefile (1.522), "Exp", lines: +3 -1 libroff.h (1.43), "Exp", lines: +3 -35 mandoc_headers.3 (1.21), "Exp", lines: +62 -9 roff.c (1.346), "Exp", lines: +14 -22 roff.h (1.62), "Exp", lines: +2 -2 tbl.3 (1.5), "Exp", lines: +12 -11 tbl.c (1.44), "Exp", lines: +36 -28 tbl_data.c (1.49), "Exp", lines: +2 -2 tbl_layout.c (1.46), "Exp", lines: +2 -2 tbl_opts.c (1.23), "Exp", lines: +2 -2 Cleanup, no functional change: Move tbl(7)-specific parser internals out of libroff.h. Move some tbl(7)-internal processing from roff.c to tbl.c. 2018-12-12 21:54 schwarze Added: tbl.h (1.1) Changed: Makefile (1.521), "Exp", lines: +6 -3 eqn.c (1.79), "Exp", lines: +2 -1 mandoc.h (1.256), "Exp", lines: +2 -107 mandoc_headers.3 (1.20), "Exp", lines: +37 -13 out.c (1.76), "Exp", lines: +2 -1 roff.c (1.345), "Exp", lines: +3 -2 tbl.3 (1.4), "Exp", lines: +3 -2 tbl.c (1.43), "Exp", lines: +3 -2 tbl_data.c (1.48), "Exp", lines: +3 -2 tbl_html.c (1.30), "Exp", lines: +2 -2 tbl_layout.c (1.45), "Exp", lines: +3 -2 tbl_opts.c (1.22), "Exp", lines: +2 -1 tbl_term.c (1.66), "Exp", lines: +2 -1 tree.c (1.81), "Exp", lines: +2 -1 Cleanup, no functional change: No need to expose the tbl(7) syntax tree data structures everywhere. Move them to their own include file, "tbl.h", and improve comments. 2018-12-04 18:29 schwarze Changed: html.c (1.245), "Exp", lines: +2 -5 HTML syntax audit: render \p as <br/>, not as <div>. It can occur anywhere, in particular in phrasing context. 2018-12-04 06:11 schwarze Changed: mandoc.css (1.42), "Exp", lines: +3 -3 Restrict "vertical-align: middle;" to <td> descendants of class="tbl" elements, we don't want that for other tables. 2018-12-04 05:21 schwarze Changed: mandoc.css (1.41), "Exp", lines: +7 -2 Make sure all borders in a table are drawn in the same color. Required because browsers tend to have inconsistent defaults: For example, Firefox 62.0.2 sets border-color for tbody, but not for table, and Pali Rohar reports that Chrome set it for td, but not for tr or tbody. The td part is from Pali Rohar, the tbody and tr parts from me. 2018-12-04 03:28 schwarze Changed: roff_validate.c (1.12), "Exp", lines: +9 -1 During validation, drop .br before a text line starting with a blank, rather than teaching each formatter individually to ignore the .br in such situations. That's simpler and also results in better diagnostics. Mark Harris <mark dot hsj at gmail dot com> reported that -T html got confused in particular. 2018-12-04 02:53 schwarze Changed: libmdoc.h (1.114), "Exp", lines: +1 -2 man_validate.c (1.139), "Exp", lines: +48 -39 mdoc.c (1.270), "Exp", lines: +1 -10 mdoc_macro.c (1.226), "Exp", lines: +2 -2 mdoc_validate.c (1.364), "Exp", lines: +14 -41 roff.c (1.344), "Exp", lines: +9 -1 roff_int.h (1.10), "Exp", lines: +3 -2 roff_validate.c (1.11), "Exp", lines: +59 -3 regress/man/PP/empty.out_lint (1.5), "Exp", lines: +1 -0 regress/man/blank/afterSH.out_lint (1.5), "Exp", lines: +2 -0 regress/man/blank/afterSS.out_lint (1.5), "Exp", lines: +2 -0 regress/man/blank/line.out_lint (1.6), "Exp", lines: +7 -2 regress/mdoc/Sh/parborder.out_lint (1.6), "Exp", lines: +1 -1 regress/mdoc/blank/line.out_lint (1.6), "Exp", lines: +3 -1 regress/roff/args/roff.out_lint (1.6), "Exp", lines: +1 -0 regress/roff/cond/if.out_lint (1.6), "Exp", lines: +2 -0 Clean up the validation of .Pp, .PP, .sp, and .br. Make sure all combinations are handled, and are handled in a systematic manner. This resolves some erratic duplicate handling, handles a number of missing cases, and improves diagnostics in various respects. Move validation of .br and .sp to the roff validation module rather than doing that twice in the mdoc and man validation modules. Move the node relinking function to the roff library where it belongs. In validation functions, only look at the node itself, at previous nodes, and at descendants, not at following nodes or ancestors, such that only nodes are inspected which are already validated. 2018-12-03 21:00 schwarze Changed: man_html.c (1.158), "Exp", lines: +12 -7 man_term.c (1.221), "Exp", lines: +10 -3 man_validate.c (1.138), "Exp", lines: +31 -4 mdoc_html.c (1.316), "Exp", lines: +10 -4 mdoc_man.c (1.129), "Exp", lines: +10 -3 mdoc_markdown.c (1.28), "Exp", lines: +11 -3 mdoc_term.c (1.369), "Exp", lines: +10 -4 mdoc_validate.c (1.363), "Exp", lines: +43 -15 regress/man/PP/args.out_lint (1.5), "Exp", lines: +2 -2 In the validators, translate obsolete macro aliases (Lp, Ot, LP, P) to the standard forms (Pp, Ft, PP) up front, such that later code does not need to look for the obsolete versions. This reduces the risk of incomplete handling. 2018-12-03 16:18 schwarze Changed: roff_html.c (1.13), "Exp", lines: +2 -6 Render .br as <br/>, not as an empty <div>. The element <br/> was already employed for many other purposes, so there is nothing wrong with using it. Also, it is safer because <br/> is permitted in phrasing content, whereas <div> is only allowed in flow content. This is the first part of the HTML syntax audit which i wanted to do for a long time. Reminded by a loosely related bug report from Mark Harris <mark dot hsj at gmail dot com>. Examples of where this caused HTML nesting syntax errors: * in man(7) code between .nf and .fi * in mdoc(7) code between .Bd -unfilled and .Ed * in mdoc(7) code between .Ql Xo and .Xc * in mdoc(7) code between .Rs and .Re 2018-11-29 23:08 schwarze Changed: tbl_term.c (1.65), "Exp", lines: +19 -5 Do not draw horizontal lines through vertical spans which are requested in the data section rather than in the layout. Mini-feature found in misc/pfm(1). 2018-11-29 21:40 schwarze Changed: tbl_term.c (1.64), "Exp", lines: +106 -72 Now that it is better understood how borders work, rewrite tbl_hrule() in a simpler way. Fix several bugs in the process. No more special flags, just use the existing TBL_OPT_* from mandoc.h. Reduce the number of tracked rows from three to two, which is more logical: one above the line and one below is sufficient to figure out crossings. No more magic quirks, all conditions are readily comprehensible now. Add comments. 2018-11-29 01:55 schwarze Changed: TODO (1.280), "Exp", lines: +1 -6 out.c (1.75), "Exp", lines: +206 -43 Better handle automatic column width assignments in the presence of horizontal spans, by implementing a moderately difficult iterative algoritm. The benefit is that spans containing long text no longer cause an excessive width of their starting column. The result is likely not optimal, in particular in the presence of many spans overlapping in complicated ways nor when spans interact with equalizing or maximizing colums. But i doubt the practical usefulness of making this more complicated. Issue originally reported in synaptics(4), which now looks better, by tedu@ three years ago, and reminded by Pali Rohar this summer. 2018-11-28 14:23 schwarze Changed: term_ascii.c (1.64), "Exp", lines: +4 -4 Bugfix: never set termp->enc to the ambiguous value TERMENC_LOCALE, but instead set it to TERMENC_UTF8 or TERMENC_ASCII. Makes tbl(7) box drawing work under -T locale (that is, by default when LC_CTYPE is defined appropriately). 2018-11-28 13:43 schwarze Changed: tbl_term.c (1.63), "Exp", lines: +8 -5 additional check needed after the previous (box drawing) patch 2018-11-28 04:47 schwarze Changed: TODO (1.279), "Exp", lines: +1 -10 tbl_term.c (1.62), "Exp", lines: +318 -151 In -T utf8 output mode, render tbl(7) borders with the Unicode box drawing characters, U+2500 to U+257F. Originally suggested by bentley@ four years ago, reminded this summer by Pali Rohar. Binary and decimal arithmetics are boring, so let's use some ternary arithmetics for a change. That said, some other aspects are too complicated for my liking, so this could use some polishing in the future. 2018-11-26 21:06 schwarze Changed: mandoc.css (1.40), "Exp", lines: +6 -3 tbl_html.c (1.29), "Exp", lines: +123 -67 Implement tbl(7) lines in -T html output, as far as they are on the edges of table cells rather than going through the middle of cells: * the box, doublebox, and allbox options; * the | and || layout modifiers; * and the _ and = data lines; - but not yet _ and = in individual layout and data cells. Missing feature reported by Pali dot Rohar at gmail dot com. 2018-11-26 17:44 schwarze Changed: roff.c (1.343), "Exp", lines: +29 -7 regress/roff/cond/close.in (1.3), "Exp", lines: +17 -1 regress/roff/cond/close.out_ascii (1.2), "Exp", lines: +11 -1 regress/roff/cond/close.out_lint (1.7), "Exp", lines: +2 -2 When a conditional block is closed by putting "\}" on a text line by itself (which is somewhat unusual but not invalid; most authors use the empty macro line ".\}" instead), agree more closely with groff and do not produce a double space in the output. Quirk reported by millert@. While here, tweak the rest of the function body of roff_cond_text() to more closely match roff_cond_sub(). The subtly different handling could make people (including myself) wonder whether there is any point in being different. Testing shows there is not. 2018-11-26 17:11 schwarze Changed: LICENSE (1.21), "Exp", lines: +5 -5 Mark Harris pointed out that people might have doubts whether all files contained in the mandoc toolkit are "code and documentation", and whether this is of any consequence for licensing, so clarify. 2018-11-26 15:02 schwarze Changed: mandoc.css (1.39), "Exp", lines: +6 -1 Place mandoc.css into the public domain. The reason for doing this rather than using the ISC license is that i guess that in some contexts, a requirement to preserve a Copyright and license header might be inconvenient, and i really don't care at all how people use it. What matters is that they do use it, or something similar - attempts to use mandoc without any CSS are a constant source of grief and bogus bug reports because HTML without CSS doesn't look very good: the more structural and semantic and the less presentational and old-fashioned the HTML, the more so. Thanks to Mark Harris <mark dot hsj at gmail dot com> for pointing out that the permissions on this particular file were unclear. 2018-11-26 01:51 schwarze Changed: tbl_html.c (1.28), "Exp", lines: +5 -17 Simplify writing of tbl(7) cells by using the new feature of passing a NULL pointer for the value of a style attribute, in which case the attribute is omitted from the HTML element. Minus 12 lines of ugly and repetitive code, no functional change. 2018-11-26 01:38 schwarze Changed: html.c (1.244), "Exp", lines: +25 -16 mandoc_html.3 (1.18), "Exp", lines: +9 -1 Support more than one style attribute one the same HTML element. In fact, this is already required when a table uses non-default horizontal and vertical alignment in the same cell. 2018-11-25 21:17 schwarze Changed: TODO (1.278), "Exp", lines: +1 -5 tbl.7 (1.30), "Exp", lines: +14 -8 tbl_data.c (1.47), "Exp", lines: +17 -10 tbl_html.c (1.27), "Exp", lines: +12 -7 Let cells containing nothing but \^ extend the cell above. Missing feature reported by Pali dot Rohar at gmail dot com. 2018-11-25 19:24 schwarze Changed: TODO (1.277), "Exp", lines: +5 -5 mandoc.h (1.255), "Exp", lines: +3 -2 out.c (1.74), "Exp", lines: +6 -6 tbl_data.c (1.46), "Exp", lines: +43 -6 tbl_html.c (1.26), "Exp", lines: +40 -17 tbl_term.c (1.61), "Exp", lines: +18 -18 tree.c (1.80), "Exp", lines: +32 -26 In tbl(7) -T html output, span cells horizontally and vertically as requested by the layout. Does not handle spans requested in the data section yet. To be able to do this, record the number of rows spanned in the first data cell (struct tbl_dat) of a vertical span. Missing feature reported by Pali dot Rohar at gmail dot com. 2018-11-25 18:04 schwarze Changed: TODO (1.276), "Exp", lines: +7 -1 HTML formatting of .IP 2018-11-24 23:03 schwarze Changed: TODO (1.275), "Exp", lines: +1 -5 mandoc.css (1.38), "Exp", lines: +2 -2 tbl_html.c (1.25), "Exp", lines: +36 -6 Implement horizontal and vertical alignment of tbl(7) cell content in -T html output. This does not handle spanned cells yet. Missing feature reported by Pali dot Rohar at gmail dot com. 2018-11-23 19:17 schwarze Changed: html.c (1.243), "Exp", lines: +5 -2 When a font escape appears in the middle of a string, make sure it doesn't cause output of bogus whitespace. Fixing a bug reported by Pali dot Rohar at gmail dot com. 2018-11-22 12:33 schwarze Changed: apropos.1 (1.49), "Exp", lines: +4 -20 Correct and shorten the description of the sort order of apropos(1) results. As a matter of fact, which manpath the page comes from does not matter in that context. That only matters for the priority of pages in man(1) mode (without -a, -f, and -k). Noticed while working on a patch from Yuri Pankov <yuripv at FreeBSD>. 2018-11-22 12:01 schwarze Changed: main.c (1.310), "Exp", lines: +1 -3 mansearch.c (1.79), "Exp", lines: +3 -7 mansearch.h (1.29), "Exp", lines: +1 -2 In apropos(1) output, stop sorting .Nm search results by name priorities (bits). The obscure feature wasn't documented and merely confused people - for example Edward Tomasz Napierala <trasz at FreeBSD>, see https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=227408. Smaller patch provided by Yuri Pankov <yuripv at FreeBSD>, but i'm also retiring the now unused "bits" member from struct manpage. Simplification is good. 2018-11-22 11:30 schwarze Changed: main.c (1.309), "Exp", lines: +17 -5 man.1 (1.34), "Exp", lines: +10 -3 manconf.h (1.7), "Exp", lines: +3 -2 mandoc.1 (1.231), "Exp", lines: +13 -1 manpath.c (1.37), "Exp", lines: +14 -7 tag.c (1.21), "Exp", lines: +9 -1 tag.h (1.8), "Exp", lines: +2 -1 In -T locale (the default), -T ascii, and -T utf8 mode, provide a new output option -O tag[=term] to move right to the definition of "term" when opening the manual page in a pager, effectively porting the -T html fragment name feature - https://man.openbsd.org/ksh#ulimit - to the terminal. Try: $ man -O tag uvm_sysctl $ man -O tag=ulimit ksh $ man -O tag 3 compress Feature development triggered by a question from kn@. Klemens also tested, provided feedback that resulted in improvements, and provided an OK. 2018-11-19 19:27 schwarze Changed: apropos.1 (1.48), "Exp", lines: +29 -12 mansearch.c (1.78), "Exp", lines: +5 -4 Improve POSIX compliance by making case-insensitive extended regular expressions the default in man(1) -k searches, also matching what the man-db package used by many Linux distributions does. Originally requested by Wolfram Schneider <wosch at FreeBSD> via Yuri Pankov <yuripv at FreeBSD>. Feedback and OK cheloha@, and no objections when shown on tech@. Thanks to cheloha@ for pointing out that POSIX requires this behaviour and for the suggestion to explicitly say that *extended* regular expressions are used here. While here, unify spelling of case-[in]sensitive, fix a typo, update the EXAMPLES, and add a STANDARDS section. 2018-11-19 19:22 schwarze Changed: dbm.c (1.6), "Exp", lines: +4 -4 Correctly construct empty lists in dbm_page_get(). Original commit message by the author of this bugfix patch, bluhm@: lstmatch() expects a list of strings separated by \0 and terminated with \0\0. In the NULL case dbm_page_get() returned only simple strings so correct processing was depending on data layout. Use an additional \0 to terminate the single string lists. Found by mandoc regress since llvm linker on amd64 arranges strings differently. 2018-10-25 21:23 schwarze Changed: TODO (1.274), "Exp", lines: +7 -1 in -man -Thtml, vertical spacing is required before .IP 2018-10-25 01:32 schwarze Changed: html.c (1.242), "Exp", lines: +11 -1 html.h (1.95), "Exp", lines: +2 -1 mandoc.c (1.108), "Exp", lines: +7 -2 mandoc.h (1.254), "Exp", lines: +2 -1 mdoc_markdown.c (1.27), "Exp", lines: +2 -1 roff.c (1.342), "Exp", lines: +2 -1 term.c (1.276), "Exp", lines: +2 -1 Implement the \f(CW and \f(CR (constant width font) escape sequences for HTML output. Somewhat relevant because pod2man(1) relies on this. Missing feature reported by Pali dot Rohar at gmail dot com. Note that constant width font was already correctly selected before this when required by semantic markup. Only attempting physical markup with the low-level escape sequence was ineffective. 2018-10-23 20:42 schwarze Changed: tag.c (1.20), "Exp", lines: +27 -10 The ctags(1) file format uses whitespace as a field delimiter, and there is no escaping mechanism, so tags cannot contain whitespace. Consequently, we used to simply not tag macro arguments containing space characters. Instead, let's tag the first word, unless there is a proper match for that word somewhere else. For example, this makes ":tquery" work in ntpd.conf(5). Feature suggested by kn@, who also thinks the implementation looks reasonable and works in his testing. 2018-10-23 17:18 schwarze Changed: man_html.c (1.157), "Exp", lines: +6 -3 Input lines that are not blank but generate no output, for example lines containing nothing but "\&", are significant in no-fill mode and can be represented by blank lines inside <pre>. Fixing a bug that Pali dot Rohar at gmail dot com found in pod2man(1) output, for example Email::Address::XS(3p). While here, inside no-fill mode, there is no need to encode totally blank input lines by emulating .PP - just let them through as we are inside <pre> anyway. 2018-10-19 21:10 schwarze Changed: cgi.c (1.161), "Exp", lines: +41 -47 Rewrite parse_path_info() to be four lines shorter, simplify ownership of allocated strings, do not write to the input string, and improve diagnostic output. The confusing error message "invalid arch" as a reaction to mistyping the release name was noticed by tb@, who likes the new code and message. 2018-10-04 15:32 schwarze Changed: roff.7 (1.107), "Exp", lines: +19 -20 update DESCRIPTION and COMPATIBILITY, mostly correcting statements from the past that are no longer true 2018-10-04 15:16 schwarze Changed: roff.7 (1.106), "Exp", lines: +103 -97 Stop abusing subsections to represent the list of escape sequences; instead, use .Bl -tag like everywhere else. The same was already done for requests quite some time ago. Also, consistently mark up escape sequences with .Ic, just like requests. 2018-10-04 13:23 schwarze Changed: mdoc_html.c (1.315), "Exp", lines: +4 -2 When a subsection header contains no letters but only special characters, skip the TOC entry. Issue reported by kristaps@. 2018-10-02 19:44 schwarze Changed: mdoc_html.c (1.314), "Exp", lines: +23 -7 add DESCRIPTION and .Ss to the toc; suggested by espie@ 2018-10-02 19:41 schwarze Changed: cgi.c (1.160), "Exp", lines: +3 -2 enable the equivalent of -O toc in man.cgi(8) 2018-10-02 14:56 schwarze Changed: TODO (1.273), "Exp", lines: +1 -6 html.c (1.241), "Exp", lines: +3 -1 html.h (1.94), "Exp", lines: +3 -1 man.conf.5 (1.6), "Exp", lines: +4 -3 manconf.h (1.6), "Exp", lines: +3 -2 mandoc.1 (1.230), "Exp", lines: +5 -2 manpath.c (1.36), "Exp", lines: +6 -3 mdoc_html.c (1.313), "Exp", lines: +32 -2 Add an option -T html -O toc to add a brief table of contents near the top of HTML pages containing at least two non-standard sections. Suggested by Adam Kalisz and discussed with kristaps@ during EuroBSDCon 2018. 2018-10-02 12:33 schwarze Changed: TODO (1.272), "Exp", lines: +1 -7 html.c (1.240), "Exp", lines: +19 -3 html.h (1.93), "Exp", lines: +3 -2 mandoc.1 (1.229), "Exp", lines: +7 -3 mdoc_html.c (1.312), "Exp", lines: +2 -2 Support a second argument to -O man, selecting the format according to local existence of the file. Suggested by kristaps@ during EuroBSDCon 2018. Written on the train Frankfurt-Karlsruhe returning from EuroBSDCon. 2018-10-02 12:18 schwarze Changed: TODO (1.271), "Exp", lines: +2 -5 eqn_term.c (1.18), "Exp", lines: +2 -2 regress/eqn/over/precedence.out_ascii (1.7), "Exp", lines: +2 -2 regress/eqn/unary/sqrt.out_ascii (1.6), "Exp", lines: +2 -2 Render the eqn(7) "sqrt" function as U+221A in UTF-8 output. This also agrees with what groff does. Suggested by an attendee of EuroBSDCon 2018 in Bucuresti. Written on the plane Bucuresti-Frankfurt returning from EuroBSDCon. 2018-10-01 08:06 schwarze Changed: cgi.c (1.159), "Exp", lines: +33 -5 Add missing URI encoding when writing HTTP redirects, fixing a bug reported by <jungleboogie0 at gmail dot com> on bugs@. While here, fully validate the arch name such that we do not have to URI encode that one. 2018-09-23 05:34 schwarze Changed: TODO (1.270), "Exp", lines: +15 -1 feature suggestions from EuroBSDCon 2018 2018-08-27 23:13 schwarze Changed: mandoc.css (1.37), "Exp", lines: +2 -2 Reduce excessive right padding in tagged list heads. The 1.2em was an approximate equivalent of the 2n traditionally used for terminal display, but it is much too wide for HTML rendering. Issue reported by mikeb@. 2018-08-26 16:21 schwarze Changed: libman.h (1.83), "Exp", lines: +7 -5 man.c (1.180), "Exp", lines: +18 -20 man_macro.c (1.133), "Exp", lines: +37 -32 man_term.c (1.220), "Exp", lines: +3 -3 Support nesting of elements with next-line scope. For example, ksh93(1) needs this for .B\n.SM. 2018-08-25 16:53 schwarze Added: regress/roff/char/Makefile (1.1) regress/roff/char/badarg.in (1.1) regress/roff/char/badarg.out_ascii (1.1) regress/roff/char/badarg.out_lint (1.1) regress/roff/char/basic.in (1.1) regress/roff/char/basic.out_ascii (1.1) Changed: mandoc.1 (1.228), "Exp", lines: +15 -2 mandoc.h (1.253), "Exp", lines: +3 -1 read.c (1.200), "Exp", lines: +3 -1 roff.7 (1.105), "Exp", lines: +12 -5 roff.c (1.341), "Exp", lines: +73 -2 regress/roff/Makefile (1.8), "Exp", lines: +2 -2 Rudimentary implementation of the roff(7) .char (output glyph definition) request, used for example by groff_hdtbl(7). This simplistic implementation may interact incorrectly with the .tr (input character translation) request. But come on, you are not only using .char *and* .tr, but you do so with respect to the same character in the same manual page? 2018-08-25 12:33 schwarze Changed: man.c (1.179), "Exp", lines: +31 -18 regress/roff/esc/c_man.in (1.4), "Exp", lines: +17 -2 regress/roff/esc/c_man.out_ascii (1.3), "Exp", lines: +12 -1 If man(7) next-line scope is open and the line ends with \c, the scope remains open. Needed for example for groff_man(7). 2018-08-24 23:12 schwarze Added: regress/roff/while/Makefile (1.1) regress/roff/while/badargs.in (1.1) regress/roff/while/badargs.out_ascii (1.1) regress/roff/while/badargs.out_lint (1.1) regress/roff/while/basic.in (1.1) regress/roff/while/basic.out_ascii (1.1) regress/roff/while/into.in (1.1) regress/roff/while/into.out_ascii (1.1) regress/roff/while/into.out_lint (1.1) regress/roff/while/nesting.in (1.1) regress/roff/while/nesting.out_ascii (1.1) regress/roff/while/nesting.out_lint (1.1) regress/roff/while/outof.in (1.1) regress/roff/while/outof.out_ascii (1.1) regress/roff/while/outof.out_lint (1.1) Changed: TODO (1.269), "Exp", lines: +1 -5 libmandoc.h (1.74), "Exp", lines: +23 -12 mandoc.h (1.252), "Exp", lines: +5 -1 mandoc_headers.3 (1.19), "Exp", lines: +0 -1 read.c (1.199), "Exp", lines: +119 -55 roff.7 (1.104), "Exp", lines: +9 -9 roff.c (1.340), "Exp", lines: +146 -125 tbl.3 (1.3), "Exp", lines: +3 -3 regress/roff/Makefile (1.7), "Exp", lines: +3 -2 Rudimentary implementation of the roff(7) .while request. Needed for example by groff_hdtbl(7). There are two limitations: It does not support nested .while requests yet, and each .while loop must start and end in the same scope. The roff_parseln() return codes are now more flexible and allow OR'ing options. 2018-08-23 19:33 schwarze Changed: libmandoc.h (1.73), "Exp", lines: +4 -3 main.c (1.308), "Exp", lines: +2 -8 main.h (1.28), "Exp", lines: +1 -2 man.c (1.178), "Exp", lines: +1 -9 man.h (1.79), "Exp", lines: +1 -2 mandoc.3 (1.42), "Exp", lines: +8 -34 mandoc.h (1.251), "Exp", lines: +2 -3 mdoc_man.c (1.128), "Exp", lines: +1 -14 read.c (1.198), "Exp", lines: +68 -71 The upcoming .while request will have to re-execute roff(7) lines parsed earlier, so they will have to be saved for reuse - but the read.c preparser does not know yet whether a line contains a .while request before passing it to the roff parser. To cope with that, save all parsed lines for now. Even shortens the code by 20 lines. 2018-08-23 14:29 schwarze Added: regress/roff/return/Makefile (1.1) regress/roff/return/basic.in (1.1) regress/roff/return/basic.out_ascii (1.1) regress/roff/return/basic.out_lint (1.1) regress/roff/shift/Makefile (1.1) regress/roff/shift/bad.in (1.1) regress/roff/shift/bad.out_ascii (1.1) regress/roff/shift/bad.out_lint (1.1) regress/roff/shift/basic.in (1.1) regress/roff/shift/basic.out_ascii (1.1) Changed: TODO (1.268), "Exp", lines: +2 -2 libmandoc.h (1.72), "Exp", lines: +5 -2 mandoc.1 (1.227), "Exp", lines: +24 -2 mandoc.h (1.250), "Exp", lines: +5 -1 read.c (1.197), "Exp", lines: +32 -12 roff.7 (1.103), "Exp", lines: +9 -6 roff.c (1.339), "Exp", lines: +205 -179 regress/roff/Makefile (1.6), "Exp", lines: +2 -2 regress/roff/de/infinite.in (1.4), "Exp", lines: +4 -4 regress/roff/de/infinite.out_ascii (1.4), "Exp", lines: +2 -2 regress/roff/de/infinite.out_lint (1.7), "Exp", lines: +2 -1 Implement the roff(7) .shift and .return requests, for example used by groff_hdtbl(7) and groff_mom(7). Also correctly interpolate arguments during nested macro execution even after .shift and .return, implemented using a stack of argument arrays. Note that only read.c, but not roff.c can detect the end of a macro execution, and the existence of .shift implies that arguments cannot be interpolated up front, so unfortunately, this includes a partial revert of roff.c rev. 1.337, moving argument interpolation back into the function roff_res(). 2018-08-21 18:15 schwarze Changed: roff.7 (1.102), "Exp", lines: +7 -2 roff.c (1.338), "Exp", lines: +19 -5 Implement the \\$@ escape sequence (insert all macro arguments, quoted) in addition to the already supported \\$* (similar, but unquoted). Then use \\$@ to improve the implementation of the .als request (macro alias). Needed by groff_hdtbl(7). Gosh, it feels like the manual pages of the groff package are exercising every bloody roff(7) feature under the sun. In the manual page source code itself, not merely in the implementation of the used macro packages, that is. 2018-08-21 16:06 schwarze Changed: chars.c (1.76), "Exp", lines: +6 -6 term_ascii.c (1.63), "Exp", lines: +2 -2 regress/char/unicode/latin1.in (1.5), "Exp", lines: +10 -4 regress/char/unicode/latin1.out_ascii (1.4), "Exp", lines: +9 -3 regress/char/unicode/latin1.out_html (1.5), "Exp", lines: +8 -2 regress/char/unicode/latin1.out_utf8 (1.4), "Exp", lines: +9 -3 regress/char/unicode/latin1diff.in (1.4), "Exp", lines: +2 -8 regress/char/unicode/latin1diff.out_ascii (1.3), "Exp", lines: +1 -7 regress/char/unicode/latin1diff.out_html (1.4), "Exp", lines: +0 -6 regress/char/unicode/latin1diff.out_utf8 (1.3), "Exp", lines: +1 -7 regress/char/unicode/named.in (1.6), "Exp", lines: +12 -1 regress/char/unicode/named.out_ascii (1.5), "Exp", lines: +11 -0 regress/char/unicode/named.out_html (1.6), "Exp", lines: +11 -0 regress/char/unicode/named.out_utf8 (1.5), "Exp", lines: +11 -0 regress/char/unicode/namediff.in (1.6), "Exp", lines: +1 -13 regress/char/unicode/namediff.out_ascii (1.6), "Exp", lines: +0 -12 regress/char/unicode/namediff.out_html (1.6), "Exp", lines: +0 -12 regress/char/unicode/namediff.out_utf8 (1.5), "Exp", lines: +0 -12 Improve the ASCII rendering of \(Po (Pound Sterling) and of the playing card suits to match groff, using feedback from Ralph Corderoy <ralph at inputplus dot co dot uk>. 2018-08-21 01:59 schwarze Changed: chars.c (1.75), "Exp", lines: +5 -2 mandoc_char.7 (1.74), "Exp", lines: +4 -2 regress/char/unicode/named.in (1.5), "Exp", lines: +3 -2 regress/char/unicode/named.out_ascii (1.4), "Exp", lines: +2 -1 regress/char/unicode/named.out_html (1.5), "Exp", lines: +1 -0 regress/char/unicode/named.out_utf8 (1.4), "Exp", lines: +2 -1 regress/char/unicode/namediff.in (1.5), "Exp", lines: +2 -3 regress/char/unicode/namediff.out_ascii (1.5), "Exp", lines: +1 -2 regress/char/unicode/namediff.out_html (1.5), "Exp", lines: +0 -1 regress/char/unicode/namediff.out_utf8 (1.4), "Exp", lines: +1 -2 Fix some issues found looking at groff_char(7): * Add two missing characters, \('Y and \('y. * The Weierstrass p is not capital, see http://unicode.org/notes/tn27/. * Add a groff-compatible ASCII transliteration for U+02DC: "~". 2018-08-20 18:06 schwarze Changed: mandoc.c (1.107), "Exp", lines: +8 -5 \f[] means \fP, not \fR 2018-08-20 17:25 schwarze Changed: roff.c (1.337), "Exp", lines: +35 -8 Expand \n(.$ (the number of macro arguments) right in roff_userdef(), before even reparsing the expanded macro. That is the least dirty way to fix the bug that \(.$ remained set after execution of the user-defined macro ended. Any other way to fix it would probably require changes to read.c, which really shouldn't be bothered with such roff(7) internals. 2018-08-19 23:58 schwarze Changed: regress/roff/args/roff.in (1.4), "Exp", lines: +3 -3 regress/roff/args/roff.out_ascii (1.3), "Exp", lines: +0 -1 Disable one test for now that is broken after the addition of \). It is not broken because of \), which is correctly implemented, but the addition merely reveals a hidden bug elsewhere, almost certainly in \\ handling. Given that \\ is among the most mysterious escape sequences and using it is very strongly discouraged in manual pages, fixing that is not urgent - and may be hard. 2018-08-19 23:48 schwarze Changed: chars.c (1.74), "Exp", lines: +2 -1 Add the \) special character, a variant of \& so arcane that i intentionally leave it undocumented. Abused for example in the groff(7) manual page. 2018-08-19 23:10 schwarze Changed: out.c (1.73), "Exp", lines: +52 -34 tbl_term.c (1.60), "Exp", lines: +52 -27 Do alignment of non-numeric strings in numeric cells the same way as groff, and also honour the explicit alignment indicator "\&". This required an almost complete rewrite of both the measurement function and the formatter function for numeric cells. 2018-08-19 19:32 schwarze Changed: tbl_term.c (1.59), "Exp", lines: +21 -7 do not print horizontal lines inside vertical spans 2018-08-19 17:46 schwarze Changed: TODO (1.267), "Exp", lines: +1 -7 roff.7 (1.101), "Exp", lines: +19 -6 roff.c (1.336), "Exp", lines: +44 -5 Mostly complete implementation of the 'c' (character available) roff conditional, except that the .char request still isn't supported and that behaviour differs from groff in many edge cases. But at least valid character names and numbers are now distinguished from invalid ones. This also fixes the bug that parsing of the 'c' conditional was incomplete, which resulted in leaking the tested character to the input parser at the beginning of the body when the condition was inverted. 2018-08-18 22:05 schwarze Changed: roff.c (1.335), "Exp", lines: +3 -2 Bugfix: When a line ends with '\ \"', don't strip the trailing space because that turned it into a bogus line continuation. 2018-08-18 21:37 schwarze Changed: roff.7 (1.100), "Exp", lines: +8 -2 roff.c (1.334), "Exp", lines: +9 -2 support the highly surprising escape sequence \# (line continuation with comment); used for example by gropdf(1) 2018-08-18 20:41 schwarze Changed: man_macro.c (1.132), "Exp", lines: +3 -2 paragraphs can contain .MT and .UR blocks 2018-08-18 20:18 schwarze Changed: out.c (1.72), "Exp", lines: +9 -4 out.h (1.33), "Exp", lines: +3 -2 If a tbl(7) column contains both text cells and numeric cells, horizontally align the numbers in the same way as groff does. 2018-08-18 17:32 schwarze Changed: man_macro.c (1.131), "Exp", lines: +7 -1 .RE causes a line break even if .RS is not open 2018-08-18 17:07 schwarze Changed: man_term.c (1.219), "Exp", lines: +2 -2 .SY causes a one-column indentation even without any argument 2018-08-18 16:44 schwarze Changed: out.c (1.71), "Exp", lines: +5 -7 tbl_term.c (1.58), "Exp", lines: +5 -7 Do not allocate a column for decimal points if all numbers are integers. 2018-08-18 15:17 schwarze Changed: term_ascii.c (1.62), "Exp", lines: +2 -3 Unsurprisingly, zero-width non-breaking spaces have... width 0. 2018-08-18 15:13 schwarze Changed: man_macro.c (1.130), "Exp", lines: +3 -1 end of sentence detection after .ME and .UE, useful for some GNU manuals 2018-08-18 14:26 schwarze Changed: man_term.c (1.218), "Exp", lines: +3 -3 The .nf/.fi (fill mode) requests never have text children and in particular do not reset font mode. 2018-08-18 14:02 schwarze Changed: man_macro.c (1.129), "Exp", lines: +9 -2 man_term.c (1.217), "Exp", lines: +3 -2 Two consecutive .SY blocks only get a blank line in between if the first one is explicitly closed with .YS. 2018-08-18 13:05 schwarze Changed: man_term.c (1.216), "Exp", lines: +3 -2 prevent line breaks in the middle of .OP 2018-08-18 04:32 schwarze Changed: man.7 (1.140), "Exp", lines: +74 -371 Massively reduce the amount of text, cutting it down to what is needed to understand existing man(7) code and deleting parts that would only be useful for writing new documents, which we strongly discourage: * Delete the MANUAL STRUCTURE section which merely duplicates mdoc(7). * Delete internal cross references only useful for writing new code. * Delete many instances of "included only for compatibility" as the whole language is only provided for compatibility. * Fix a few minor errors and omissions. 2018-08-18 02:08 schwarze Changed: LICENSE (1.20), "Exp", lines: +2 -1 TODO (1.266), "Exp", lines: +1 -4 man.7 (1.139), "Exp", lines: +20 -3 man_html.c (1.156), "Exp", lines: +25 -1 man_macro.c (1.128), "Exp", lines: +6 -1 man_term.c (1.215), "Exp", lines: +61 -1 man_validate.c (1.137), "Exp", lines: +2 -0 roff.c (1.333), "Exp", lines: +3 -2 roff.h (1.61), "Exp", lines: +4 -2 implement the GNU man-ext .SY/.YS (synopsis block) macro in man(7), used in most manual pages of the groff package 2018-08-17 20:33 schwarze Changed: libman.h (1.82), "Exp", lines: +3 -4 libmdoc.h (1.113), "Exp", lines: +3 -5 man.c (1.177), "Exp", lines: +10 -10 man_html.c (1.155), "Exp", lines: +6 -6 man_macro.c (1.127), "Exp", lines: +16 -10 man_term.c (1.214), "Exp", lines: +22 -14 mandocdb.c (1.259), "Exp", lines: +13 -11 mdoc.c (1.269), "Exp", lines: +7 -13 mdoc_argv.c (1.116), "Exp", lines: +6 -7 mdoc_html.c (1.311), "Exp", lines: +8 -8 mdoc_macro.c (1.225), "Exp", lines: +30 -22 mdoc_man.c (1.127), "Exp", lines: +21 -15 mdoc_markdown.c (1.26), "Exp", lines: +16 -9 mdoc_state.c (1.10), "Exp", lines: +4 -5 mdoc_term.c (1.368), "Exp", lines: +10 -10 mdoc_validate.c (1.362), "Exp", lines: +2 -2 Remove more pointer arithmetic passing via regions outside the array that is undefined according to the C standard. Robert Elz <kre at munnari dot oz dot au> pointed out i wasn't quite done yet. 2018-08-16 23:43 schwarze Changed: TODO (1.265), "Exp", lines: +1 -4 man.7 (1.138), "Exp", lines: +8 -2 man_html.c (1.154), "Exp", lines: +14 -13 man_macro.c (1.126), "Exp", lines: +3 -2 man_term.c (1.213), "Exp", lines: +4 -2 man_validate.c (1.136), "Exp", lines: +1 -0 roff.c (1.332), "Exp", lines: +2 -1 roff.h (1.60), "Exp", lines: +2 -1 implement the GNU man-ext .TQ macro in man(7), used for example by groff_diff(7) 2018-08-16 15:05 schwarze Changed: man_validate.c (1.135), "Exp", lines: +2 -3 mdoc_validate.c (1.361), "Exp", lines: +3 -4 Do not calculate a pointer to a memory location before the beginning of a static array. Christos Zoulas, Robert Elz, and Andreas Gustafsson point out that is undefined behaviour by the C standard even if we never access the pointer. 2018-08-16 14:07 schwarze Changed: roff.7 (1.99), "Exp", lines: +23 -40 Document \*(.T. While here, delete the section about predefined strings. For manual pages, the concept is not important enough to be discussed in such a prominent place, and some aspects of the text were also misleading. Add a shorter version of the relevant parts to the description of the \* escape sequence instead. 2018-08-16 13:54 schwarze Added: regress/roff/string/dotT.in (1.1) regress/roff/string/dotT.out_ascii (1.1) regress/roff/string/dotT.out_html (1.1) regress/roff/string/dotT.out_markdown (1.1) regress/roff/string/dotT.out_utf8 (1.1) Changed: TODO (1.264), "Exp", lines: +1 -8 html.c (1.239), "Exp", lines: +4 -1 mandoc.c (1.106), "Exp", lines: +8 -1 mandoc.h (1.249), "Exp", lines: +2 -1 mdoc_markdown.c (1.25), "Exp", lines: +5 -2 roff.c (1.331), "Exp", lines: +14 -1 term.c (1.275), "Exp", lines: +27 -2 regress/roff/string/Makefile (1.4), "Exp", lines: +4 -1 Implement the \*(.T predefined string (interpolate device name) by allowing the preprocessor to pass it through to the formatters. Used for example by the groff_char(7) manual page. 2018-08-16 12:25 schwarze Changed: gmdiff (1.11), "Exp", lines: +2 -2 process UTF-8 input even in ASCII output mode, and provide a way to specify additional diff(1) options 2018-08-15 15:37 schwarze Changed: man_macro.c (1.125), "Exp", lines: +2 -2 fix incomplete variable renaming in previous; found by Thomas Klausner <wiz at NetBSD> via a compiler warning 2018-08-15 14:37 schwarze Changed: test-getsubopt.c (1.6), "Exp", lines: +2 -2 Change comment: NetBSD just fixed their headers; but leave the workaround in place for now for the benefit of older systems, and other systems might contain similar problems. 2018-08-15 02:48 schwarze Changed: test-stringlist.c (1.3), "Exp", lines: +2 -1 NULL requires <stddef.h> 2018-08-15 02:15 schwarze Changed: configure (1.67), "Exp", lines: +60 -42 test-getsubopt.c (1.5), "Exp", lines: +8 -5 test-strcasestr.c (1.4), "Exp", lines: +0 -4 test-strptime.c (1.4), "Exp", lines: +0 -4 test-vasprintf.c (1.5), "Exp", lines: +1 -5 test-wchar.c (1.5), "Exp", lines: +1 -5 Autodetect whether _GNU_SOURCE or _OPENBSD_SOURCE are needed; the latter is a NetBSD idiosyncrasy reported by wiz@. Also take into account that NetBSD declares getsubopt(3) in the wrong header. 2018-08-14 01:27 schwarze Changed: TODO (1.263), "Exp", lines: +1 -4 man_macro.c (1.124), "Exp", lines: +27 -20 man_term.c (1.212), "Exp", lines: +3 -1 tree.c (1.79), "Exp", lines: +3 -1 regress/man/MT/args.in (1.3), "Exp", lines: +7 -1 regress/man/MT/args.out_ascii (1.2), "Exp", lines: +4 -2 regress/man/MT/args.out_lint (1.3), "Exp", lines: +5 -5 regress/man/UR/args.in (1.3), "Exp", lines: +7 -1 regress/man/UR/args.out_ascii (1.2), "Exp", lines: +5 -2 regress/man/UR/args.out_lint (1.5), "Exp", lines: +5 -5 support tail arguments on the .ME and .UE macros, used for example in the ditroff(7) manual of the groff package 2018-08-10 22:43 schwarze Changed: TODO (1.262), "Exp", lines: +10 -1 error message for invalid -S argument 2018-08-10 22:12 schwarze Changed: TODO (1.261), "Exp", lines: +5 -4 mandoc.c (1.105), "Exp", lines: +22 -4 mandoc_char.7 (1.73), "Exp", lines: +7 -5 handle the non-portable GNU-style \[charNN], \[charNNN] character escape sequences, used for example in the groff_char(7) manual page 2018-08-10 20:40 schwarze Changed: TODO (1.260), "Exp", lines: +1 -4 roff.7 (1.98), "Exp", lines: +5 -5 roff_term.c (1.15), "Exp", lines: +8 -3 roff_validate.c (1.10), "Exp", lines: +6 -4 The groff man-ext macros define fonts CB, CI, and CR, and some groff manual pages actually use them in .ft requests. It's easy enough to handle these .ft requests in mandoc, too. 2018-08-10 04:41 schwarze Changed: TODO (1.259), "Exp", lines: +1 -4 roff.7 (1.97), "Exp", lines: +9 -6 roff.c (1.330), "Exp", lines: +12 -2 Implement the roff(7) .nop (no operation) request. Examples of manual pages (ab)using it include groff(7), chem(1), groff_mom(7), and groff_hdtbl(7). 2018-08-09 17:30 schwarze Changed: main.c (1.307), "Exp", lines: +9 -3 If somebody asks "man 3 chmod", don't respond with the lie: "No entry for chmod in the manual." Instead, say "No entry for chmod in section 3 of the manual." Came up after a question from kn@; OK kn@. 2018-08-09 17:28 schwarze Changed: Makefile (1.520), "Exp", lines: +14 -9 some fixes for the "www" and "www-install" maintainer targets 2018-08-08 14:47 tag VERSION_1_14_4 2018-08-08 14:47 schwarze Changed: NEWS (1.32), "Exp", lines: +8 -6 release 1.14.4 2018-08-08 14:30 schwarze Changed: mandoc_char.7 (1.72), "Exp", lines: +2 -2 Even though we strongly discourage escaping hyphens in manual pages in general, when introducing the *typographic* term "hyphen", actually display a real hyphen in output modes supporting it. 2018-08-08 14:16 schwarze Changed: mandoc_char.7 (1.71), "Exp", lines: +25 -25 Reorder the text in the "Dashes and Hyphens" subsection to keep the simplest and most important instructions together and at the beginning. No text change. Suggested by jmc@. 2018-08-08 14:03 schwarze Changed: mandoc_char.7 (1.70), "Exp", lines: +19 -18 Clarify the confusing "(text)" annotation in the character lists. In some cases, it meant "render as an ASCII character in output modes that have a notion of codepoints" (e.g. UTF-8, HTML); in other cases, "render in the text font in output modes that also provide a special font for mathematical symbols" (e.g. PostScript, PDF). Also explicitly annotate the escape sequences that use a special font if available. OK bentley@ 2018-08-08 13:54 schwarze Changed: mandoc_char.7 (1.69), "Exp", lines: +21 -16 After years of deliberation, finally provide a clear recommendation for hyphens and minus signs in manual pages. Since there is consensus that a typographically perfect solution is impossible, let's KISS - just write "-", don't bother with "\-", all currently relevant manual page formatters can handle "-" reasonably. OK jmc@ bentley@ 2018-08-06 14:16 schwarze Changed: TODO (1.258), "Exp", lines: +29 -1 scanned to groff manual pages for todo items; the sheer number of issues is amazing, but they all look feasible 2018-08-01 16:00 schwarze Changed: mdoc_validate.c (1.360), "Exp", lines: +2 -3 Fix an off-by-one string read access that could happen if an empty string argument preceded a string argument beginning with "--". Found by Leah Neukirchen <leah at vuxu dot org> with -Wpointer-compare. 2018-08-01 15:40 schwarze Changed: NEWS (1.31), "Exp", lines: +4 -2 roff.c (1.329), "Exp", lines: +4 -1 After rewriting the parse buffer from scratch, we also have to reset the parse point to the beginning of the new buffer or we risk out of bounds accesses. Bug found by Leah Neukirchen <leah at vuxu dot org> with valgrind on Void Linux. 2018-08-01 13:46 schwarze Changed: NEWS (1.30), "Exp", lines: +3 -3 mdoc_validate.c (1.359), "Exp", lines: +2 -2 Avoid a read access one byte beyond the end of an allocated string which occurred in situations like ".Fl a Cm --"; found by Leah Neukirchen <leah at vuxu dot org> with valgrind on Void Linux. 2018-07-31 15:34 schwarze Added: test-noop.c (1.1) Changed: INSTALL (1.22), "Exp", lines: +1 -3 Makefile (1.519), "Exp", lines: +8 -7 NEWS (1.29), "Exp", lines: +3 -1 configure (1.66), "Exp", lines: +72 -36 configure.local.example (1.34), "Exp", lines: +24 -20 more 1.14.4 release preparations: autodetect whether the compiler can use -W and -static, clearer output from ./configure, and adjust some configuration instructions 2018-07-31 15:25 schwarze Changed: TODO (1.257), "Exp", lines: +5 -1 makewhatis -p complains about language subdirectories 2018-07-31 10:25 schwarze Changed: Makefile.depend (1.34), "Exp", lines: +2 -1 html.c now uses ohash, and new file compat_strndup.c 2018-07-31 10:18 schwarze Changed: INSTALL (1.21), "Exp", lines: +10 -8 LICENSE (1.19), "Exp", lines: +2 -2 NEWS (1.28), "Exp", lines: +72 -1 first steps toward the 1.14.4 release 2018-07-28 18:34 schwarze Changed: mandoc.1 (1.226), "Exp", lines: +12 -2 mandoc.c (1.104), "Exp", lines: +5 -2 mandoc.h (1.248), "Exp", lines: +3 -2 mdoc.7 (1.271), "Exp", lines: +6 -6 read.c (1.196), "Exp", lines: +3 -2 Issue a STYLE message when normalizing the date format in .Dd/.TH. Leah Neukirchen pointed out that mdoclint(1) used to warn about a leading zero before the day number, so we know that both NetBSD and Void Linux want the message. It does no harm on OpenBSD because Mdocdate always does the right thing anyway. jmc@ agrees that it makes sense in contexts not using Mdocdate. 2018-07-28 18:32 schwarze Changed: TODO (1.256), "Exp", lines: +3 -11 remove two entries that were done 2018-07-27 17:49 schwarze Changed: man_html.c (1.153), "Exp", lines: +1 -3 mdoc_html.c (1.310), "Exp", lines: +1 -3 garbage collect the unused "#define INDENT" 2018-07-23 22:51 schwarze Changed: mandoc.css (1.36), "Exp", lines: +37 -37 Remove more redundant element selectors where the class selector is already sufficient. John Gardner tells me that "CSS selectors should only contain what's necessary to target their subjects". 2018-07-23 22:33 schwarze Changed: mandoc.css (1.35), "Exp", lines: +6 -6 replace the last instances of ex units by em; recommended by John Gardner <gardnerjohng at gmail dot com> 2018-07-16 15:22 schwarze Changed: TODO (1.255), "Exp", lines: +19 -1 new todos, mostly from Pali Rohar, mostly tbl(7) 2018-06-25 16:54 schwarze Changed: html.c (1.238), "Exp", lines: +18 -139 html.h (1.92), "Exp", lines: +1 -2 mandoc_html.3 (1.17), "Exp", lines: +4 -29 mdoc_html.c (1.309), "Exp", lines: +3 -4 out.h (1.32), "Exp", lines: +1 -6 Delete substantial amounts of code now that we no longer use variable style= attributes. 2018-06-25 14:53 schwarze Changed: roff_html.c (1.12), "Exp", lines: +3 -13 Get rid of the last explicit length in HTML style= attributes. Even though style=height is not particularly harmful for responsive design except for very large arguments which don't really occur in practice, it is not useful either: nobody should use .sp in manual pages, in particular not with an argument. Even if somebody does, ignoring the argument will likely make the output look better rather than worse. Consequently, simplify by dropping a useless feature. 2018-06-25 14:13 schwarze Changed: html.c (1.237), "Exp", lines: +3 -11 mandoc_html.3 (1.16), "Exp", lines: +1 -10 Delete support for style=margin-left attributes, which are no longer used. 2018-06-25 14:06 schwarze Changed: mdoc_html.c (1.308), "Exp", lines: +2 -2 Drop explicit, constant style=margin-left attribute on .Bf blocks. Since <div> uses HTML_NLAROUND, it is no longer needed. 2018-06-25 14:00 schwarze Changed: html.c (1.236), "Exp", lines: +1 -41 mandoc_html.3 (1.15), "Exp", lines: +2 -26 Delete support for style=width attributes, which are no longer used. 2018-06-25 13:45 schwarze Changed: html.c (1.235), "Exp", lines: +1 -3 html.h (1.91), "Exp", lines: +1 -3 mdoc_html.c (1.307), "Exp", lines: +2 -22 tbl_html.c (1.24), "Exp", lines: +1 -10 Do not write <colgroup> elements. Their only purpose is to enforce author-specified column widths, which can harm responsive design and provide no real benefit: HTML rendering engines usually do just fine automatically selecting appropriate column widths. 2018-06-25 13:33 schwarze Changed: man_html.c (1.152), "Exp", lines: +3 -21 Ignore author-specified indentation for .RS; it harms responsive design. Use the existing @media-dependent indent instead. This removes the last style= attribute from man(7) output. 2018-06-25 13:26 schwarze Changed: html.c (1.234), "Exp", lines: +1 -4 mandoc_html.3 (1.14), "Exp", lines: +2 -6 Delete support for the style=text-indent attribute, which is no longer used. 2018-06-25 13:01 schwarze Changed: man_html.c (1.151), "Exp", lines: +5 -16 mandoc.css (1.34), "Exp", lines: +6 -1 For -man -Thtml, ignore author-specified .HP widths because they harm responsive design; use @media-dependent defaults instead. 2018-06-18 01:49 schwarze Changed: html.c (1.233), "Exp", lines: +4 -1 Revert previous: style=height is still used by roff_html.c, and it doesn't actually harm responsive design, so keep it for now. Bug reported in de.comp.os.unix.bsd via naddy@, thanks. 2018-06-10 16:47 schwarze Changed: html.c (1.232), "Exp", lines: +1 -4 mandoc_html.3 (1.13), "Exp", lines: +2 -6 delete support for the HTML style=height property, which is no longer used 2018-06-10 16:15 schwarze Changed: mandoc.css (1.33), "Exp", lines: +3 -3 mdoc_html.c (1.306), "Exp", lines: +10 -17 In HTML output, for lists that have an -indent argument, just use a uniform indentation in CSS adapted to the viewport width and ignore the value of the argument taken from mdoc(7). While author-specified widths somewhat work as a micro-optimization in terminal and typeset output, they are nothing but harmful in HTML style= attributes because they break responsive design, whereas using a reasonable default indent almost never results in ugly output. Admittedly, the author-specified width might occasionally look even better, but only slightly so, and only for some viewport sizes. Based on guidance provided by John Gardner. 2018-06-10 15:12 schwarze Changed: man_term.c (1.211), "Exp", lines: +13 -1 When formatting man(7) documents that do not contain .SH macros with -Tps or -Tpdf, do not squeeze the whole text beyond the right margin. Bug reported by Will Backman during BSDCan. 2018-05-29 20:32 schwarze Changed: cgi.c (1.158), "Exp", lines: +6 -8 Remove redundant value= attributes from option elements, and use type=search rather than type=text for the input element because it tends to better support autocompletion. Both suggested by John Gardner <gardnerjohng at gmail dot com>. 2018-05-29 02:10 schwarze Changed: html.c (1.231), "Exp", lines: +1 -12 mandoc_html.3 (1.12), "Exp", lines: +4 -12 Delete support for the print_otag(sw) * and - modifiers, which are no longer used because we write fewer style= attributes. 2018-05-29 01:55 schwarze Changed: mdoc_html.c (1.305), "Exp", lines: +6 -7 Ignore author-specified -width arguments for -tag and -hang lists in HTML output. For terminal and typeset output, such arguments kind of work to achieve presentational micro-optimization. But for HTML, they only do harm. Large increases usually look ugly. Large reductions are impossible since the default is not large in the first place. Small tweaks in either direction are not important; at least not important enough to justify making responsive design impossible. Triggered by John Gardner's suggestion to further reduce style= attributes in the HTML code, in particular those containing hard-coded lengths. 2018-05-28 15:39 schwarze Changed: mandoc.css (1.32), "Exp", lines: +55 -52 John Gardner tells me that among frontend developers, gratuitous use of double selectors like "element.class" is considered poor style. When doing selection mainly by elements is not appropriate because most elements require several different styles, exclusively selecting by class is less cumbersome, more concise, and more flexible. So drop the elements from the selectors, except where they are required for disambiguation and except where they add clarity due to the presence of child selectors. 2018-05-28 14:13 schwarze Changed: html.c (1.230), "Exp", lines: +9 -3 URL-fragment strings can only contain certain characters. Fixing HTML syntax violations e.g. in pf.conf(5) and ifconfig(8) reported by Anton Lazarov <lists at wrant dot com>. 2018-05-26 20:04 schwarze Changed: mandoc.css (1.31), "Exp", lines: +15 -1 Start with baby steps towards responsive design: Use a @media width query to select a set of default indentations. Suggested by John Gardner <gardnerjohng at gmail dot com>. 2018-05-26 17:38 schwarze Changed: mandoc.css (1.30), "Exp", lines: +20 -20 Use em units rather than ex units for horizontal lengths. John Gardner and others tell me it produces more predictable results and is generally considered better style. Also use 0em instead of 0ex, in general. 2018-05-25 20:23 schwarze Changed: TODO (1.254), "Exp", lines: +4 -7 html.c (1.229), "Exp", lines: +45 -5 html.h (1.90), "Exp", lines: +2 -2 man_html.c (1.150), "Exp", lines: +3 -5 mdoc_html.c (1.304), "Exp", lines: +6 -17 Do not write duplicate id= attributes, they violate HTML syntax. Append suffixes for disambiguation. Issue first reported by Jakub Klinkovsky <j dot l dot k at gmx dot com> (Arch Linux). 2018-05-21 01:11 schwarze Changed: html.c (1.228), "Exp", lines: +3 -1 mandoc.css (1.29), "Exp", lines: +3 -2 mdoc_html.c (1.303), "Exp", lines: +2 -2 Use <span> for .Ms rather than <b>; discussed with John Gardner. 2018-05-21 00:30 schwarze Changed: html.c (1.227), "Exp", lines: +2 -2 mandoc.css (1.28), "Exp", lines: +3 -2 mdoc_html.c (1.302), "Exp", lines: +2 -2 Use <span> for .Ad rather than <i>; also suggested by John Gardner. 2018-05-21 00:00 schwarze Changed: html.c (1.226), "Exp", lines: +3 -1 mandoc.css (1.27), "Exp", lines: +3 -2 mdoc_html.c (1.301), "Exp", lines: +2 -2 Use <span> rather than abusing <i> for .Pa; suggested by John Gardner <gardnerjohng at gmail dot com>. 2018-05-20 21:48 schwarze Changed: man.cgi.8 (1.23), "Exp", lines: +9 -4 various minor improvements 2018-05-20 21:37 schwarze Changed: term_ascii.c (1.61), "Exp", lines: +7 -1 Protect against malicious manual pages containing .ll requests with excessive arguments: apply the same cutoff as for the -O width= command line argument. While here, also place some assertions at strategical places to prevent excessive indentations from being printed in case of bugs. In the past, we had more than one bug that caused mandoc to print effectively infinite output, filling up people's /tmp/ file system, which is not funny. We cannot prevent bugs from crashing the program, but we can at least make filling up the disk less likely. Triggered by a remark from sthen@ on source-changes@. 2018-05-18 14:23 schwarze Changed: cgi.c (1.157), "Exp", lines: +3 -1 In a nutshell, all mobile browsers are broken. By default, no matter the physical screen size, they use a fixed viewport width of about 1000px, then scale down the rendered page to make that huge viewport fit on the physical screen. That results in poor rendering for bad websites which assume a large fixed-size viewport (typically requiring zooming in to be able to actually read any text), but in atrocious rendering for good websites that make no assumption about the screen size (unreadably small text in the top left corner, most of the screen empty). A standard way to disable that insane behaviour and just render normally on the actual physical screen size does not exist. The closest thing is the CSS3 Device Adaptation Module Level 1 https://drafts.csswg.org/css-device-adapt/ but https://caniuse.com/#feat=css-deviceadaptation tells me that basically no browser implements it, not even on mobile. The next closest thing is the HTML meta viewport element - even though the problem has nothing to do with HTML and is purely a CSS issue. Standardization is not even planned for that one: * HTML 5.2 mentions it in passing without specifying it: https://www.w3.org/TR/html/document-metadata.html#the-meta-element * The Web Hypertext Application Technology Working Group provides very incomplete information: https://wiki.whatwg.org/wiki/MetaExtensions * CSS3 Device Adaptation Module Level 1 already wants to deprecate it, explaining mostly how to migrate *away* from it to some castle in the sky that no browser implements: https://drafts.csswg.org/css-device-adapt/#viewport-meta While i strongly believe in sticking to well-established standards, in the absence of standards and with atrocious behaviour being universal, there appears to be no alternative to using whatever works. The meta viewport element appears to be the only way to make real-world mobile browsers decently render any HTML page that does not have a fixed-width layout of 1000px. So use it, grudgingly. Originally suggested by xcv at dr dot com. Direction supported by espie@. 2018-05-14 14:10 schwarze Changed: main.c (1.306), "Exp", lines: +3 -2 Some broken terminal emulators (e.g. sakura) do the equivalent of "stty cols 0". Ignore that insanity rather than setting conf.output.width to an invalid value and embarking on infinite loops. Issue reported by Jesper Wallin <jesper at ifconfig dot se>, thanks! 2018-05-09 00:46 schwarze Changed: html.c (1.225), "Exp", lines: +4 -1 html.h (1.89), "Exp", lines: +2 -1 mandoc.css (1.26), "Exp", lines: +4 -3 mdoc_html.c (1.300), "Exp", lines: +11 -15 Fix a long-standing issue: Some macros (Nd, Oo) can contain blocks but rendered as elements that can only contain phrasing content, resulting in invalid HTML nesting. Switch them to <div>. Also move the related "display: inline" style from the HTML to the CSS. Reminded during a conversation with John Gardner. 2018-05-08 21:42 schwarze Changed: TODO (1.253), "Exp", lines: +1 -7 html.c (1.224), "Exp", lines: +5 -1 man_html.c (1.149), "Exp", lines: +3 -3 mandoc.css (1.25), "Exp", lines: +26 -18 mdoc_html.c (1.299), "Exp", lines: +13 -54 Eliminate the class=It-* attributes. Cleaner HTML, more idiomatic CSS, and minus 30 lines of C code. Suggested by John Gardner <gardnerjohng at gmail dot com>. 2018-05-08 17:52 schwarze Changed: html.c (1.223), "Exp", lines: +7 -1 mandoc.css (1.24), "Exp", lines: +25 -9 mdoc_html.c (1.298), "Exp", lines: +11 -11 Switch the emitted HTML element from <b> to <code> for the fixed syntax element macros .Nm, .Fl, .Cm, .Ic, .In, .Fd, .Fn, and .Cd. Adjust both the internal and external style sheets such that rendering remains unchanged in typical browsers. Based on feedback from John Gardner <gardnerjohng at gmail dot com>. 2018-05-03 14:21 schwarze Changed: mandoc.1 (1.225), "Exp", lines: +3 -3 Minor correction: we render HTML character references hexadecimal, not decimal; bentley@ changed that in html.c on July 14, 2017. 2018-05-01 23:36 schwarze Changed: html.c (1.222), "Exp", lines: +7 -6 skip printing the embedded style sheet if an external style is referenced 2018-04-29 14:29 schwarze Changed: mandoc.1 (1.224), "Exp", lines: +87 -101 Simpler description of output formats, shortening the manual page by 15 lines. Avoid the double redirection from -Tutf8 via -Tlocale to -Tascii. Add LC_CTYPE to the ENVIRONMENT section. While here, also correct a few inaccuracies and tweak some wordings. Triggered by a question from Laura Morales <lauretas at mail dot com>. 2018-04-24 13:58 schwarze Changed: gmdiff (1.10), "Exp", lines: +10 -7 Better mandoc(1) -I and -T options for Heirloom comparisons. Filter through col(1) -b for Heirloom because it produces double encoding. Switch on mandoc(1) -Wall in groff comparisons. Update usage. 2018-04-24 13:30 schwarze Changed: TODO (1.252), "Exp", lines: +42 -1 multiple new entries from various sources 2018-04-24 00:36 schwarze Changed: mandoc.css (1.23), "Exp", lines: +2 -2 mdoc_html.c (1.297), "Exp", lines: +12 -12 man_html.c (1.148), "Exp", lines: +3 -3 replace my vague and idiosyncratic term "selflink" with the clearer and more usual "permalink"; suggested by John Gardner <gardnerjohng at gmail dot com> 2018-04-20 14:02 schwarze Changed: TODO (1.251), "Exp", lines: +7 -2 dedup issues 2018-04-19 23:41 schwarze Changed: man.1 (1.33), "Exp", lines: +5 -4 Tweak the description of -l: Avoid the misunderstanding that the essential purpose of -l is similar to the purpose of the -a option in mandoc(1), which is not the point: the fact that -l implies -a is merely a minor detail. The point of -l is to make man(1) behave like mandoc(1). Move the mention of -a to the end to de-emphasize it. Nate Bargmann reported that this seriously confused him, and i can see why. 2018-04-19 16:25 schwarze Changed: main.c (1.305), "Exp", lines: +57 -13 Compatibility with man-db: In page name mode (= man(1) default mode), also try to interpret names containing slashes as absolute or relative file names. Missing feature reported by Nate Bargmann on <groff at gnu dot org>, and the man-db maintainer Colin Watson <cjwatson at debian dot org> kindly explained to me how this is supposed to work. 2018-04-13 19:55 schwarze Changed: main.c (1.304), "Exp", lines: +14 -2 mandoc.1 (1.223), "Exp", lines: +10 -6 Use TIOCGWINSZ to reduce the default -Owidth during interactive use on terminals narrower than 79 columns and the default -Oindent on terminals narrower than 66 columns. Requested by and feedback from pirofti@; mpi@ and juanfra@ also like the general direction. 2018-04-13 18:31 schwarze Changed: term_ascii.c (1.60), "Exp", lines: +15 -3 Make sure that mandoc only goes into UTF-8 mode if the user really selected UTF-8, not some other multibyte locale. This obviously makes no difference on OpenBSD but improves portability. Issue reported by <Nakayama at NetBSD> via wiz@. 2018-04-13 16:28 schwarze Changed: html.c (1.221), "Exp", lines: +28 -2 html.h (1.88), "Exp", lines: +3 -2 man_html.c (1.147), "Exp", lines: +21 -14 mandoc_html.3 (1.11), "Exp", lines: +17 -3 mdoc_html.c (1.296), "Exp", lines: +20 -13 preserve comments before .Dd and .TH (typically Copyright and license) in full HTML output, but not with -Ofragment, e.g. in man.cgi(8); suggested by Thomas Klausner <wiz at NetBSD> 2018-04-11 17:11 schwarze Changed: man_html.c (1.146), "Exp", lines: +3 -1 man_term.c (1.210), "Exp", lines: +8 -5 man_validate.c (1.134), "Exp", lines: +3 -3 mdoc_html.c (1.295), "Exp", lines: +2 -2 mdoc_man.c (1.126), "Exp", lines: +11 -3 mdoc_markdown.c (1.24), "Exp", lines: +2 -2 mdoc_term.c (1.367), "Exp", lines: +11 -6 mdoc_validate.c (1.358), "Exp", lines: +6 -3 roff.c (1.328), "Exp", lines: +30 -7 roff.h (1.59), "Exp", lines: +2 -1 tree.c (1.78), "Exp", lines: +10 -2 preserve comments before .Dd when converting mdoc(7) to man(7) with mandoc -Tman; suggested by Thomas Klausner <wiz at NetBSD> 2018-04-10 00:52 schwarze Added: regress/roff/nr/incr.in (1.1) regress/roff/nr/incr.out_ascii (1.1) Changed: TODO (1.250), "Exp", lines: +1 -9 roff.7 (1.96), "Exp", lines: +19 -5 roff.c (1.327), "Exp", lines: +44 -15 regress/roff/nr/Makefile (1.3), "Exp", lines: +1 -1 Two new low-level roff(7) features: * .nr optional third argument (auto-increment step size) * \n+ and \n- numerical register auto-increment and -decrement bentley@ reported on Dec 9, 2013 that lang/sbcl(1) uses these. 2018-04-09 22:27 schwarze Added: regress/roff/nr/undef.in (1.1) regress/roff/nr/undef.out_ascii (1.1) Changed: libmandoc.h (1.71), "Exp", lines: +2 -2 roff.c (1.326), "Exp", lines: +20 -24 regress/roff/nr/Makefile (1.2), "Exp", lines: +1 -1 When accessing an undefined number register, define it to be zero, like the previous commit for strings and macros, only technically simpler. Desired behaviour also mentioned by Werner Lemberg in 2011. This diff adds functionality but is -21 +19 LOC. :-) 2018-04-09 02:31 schwarze Added: regress/roff/string/undef.in (1.1) regress/roff/string/undef.out_ascii (1.1) regress/roff/string/undef.out_lint (1.1) Changed: TODO (1.249), "Exp", lines: +1 -5 roff.c (1.325), "Exp", lines: +82 -43 regress/roff/string/Makefile (1.3), "Exp", lines: +2 -2 Using an undefined string or macro will cause it to be defined as empty. Observed by Werner Lemberg on Nov 14, 2011 and rotting on my TODO list ever since. 2018-04-05 22:12 schwarze Changed: man.7 (1.137), "Exp", lines: +4 -17 Stop documenting the non-portable .R man(7) macro. Neither groff nor the heirloom-doctools support it. Adding it was a mistake in the first place. 2018-04-05 22:05 schwarze Changed: mdoc_man.c (1.125), "Exp", lines: +2 -2 Do not use a non-portable .R man(7) macro. Neither groff nor the heirloom-doctools support it. Work around the gap by using .BR with an empty first argument. This was noticed more than once in the past, but i always forgot to fix it. 2018-04-05 09:17 schwarze Changed: mdoc_term.c (1.366), "Exp", lines: +3 -3 mdoc_validate.c (1.357), "Exp", lines: +3 -3 st.in (1.30), "Exp", lines: +44 -44 use the portable \(lq and \(rq internally rather than \(Lq and \(Rq 2018-04-05 08:47 schwarze Changed: mdoc_man.c (1.124), "Exp", lines: +3 -3 For .Do/.Dq, use the documented and portable \(lq and \(rq character escape sequences rather than the undocumented and non-portable \(Lq and \(Rq. Bug reported by Tim L <darkxst at github> via Thomas Klausner <wiz at NetBSD>; see https://github.com/nih-at/libzip/pull/42 2018-03-16 20:41 schwarze Changed: mdoc_validate.c (1.356), "Exp", lines: +3 -2 Ouch, fix previous: In the edge case of a single-character string containing nothing but a single hyphen, the pointer got incremented twice at one point, causing a read overrun found by naddy@. 2018-03-16 15:05 schwarze Changed: mandoc.1 (1.222), "Exp", lines: +9 -3 mandoc.h (1.247), "Exp", lines: +2 -1 mdoc_validate.c (1.355), "Exp", lines: +66 -9 read.c (1.195), "Exp", lines: +2 -1 Style message about bad input encoding of em-dashes as -- instead of \(em. Suggested by Thomas Klausner <wiz at NetBSD>; discussed with jmc@. 2018-03-15 18:10 schwarze Changed: mandoc_char.7 (1.68), "Exp", lines: +22 -8 Soften the language discouraging special character escape sequences. After i improved their ASCII renderings in groff and mandoc some time ago, mathematical symbols can now be used in specialised mathematical manual pages like libm and some X libraries. Tweaks and OK jmc@. 2018-02-27 11:16 schwarze Added: compat_strndup.c (1.1) test-strndup.c (1.1) Changed: Makefile (1.518), "Exp", lines: +4 -1 configure (1.65), "Exp", lines: +9 -2 Add strndup(3) compat implementation. Jan Stary reports that MacOS X Snow Leopard and older lacks it. 2018-02-23 21:35 schwarze Changed: read.c (1.194), "Exp", lines: +32 -7 After opening a file with gzdopen(3), we have to call gzclose(3) or we leak memory internally used by zlib to keep compression state. Bug reported by Wolfgang Mueller <vehk at vehk dot de> who also provided an incomplete patch, part of which i'm using in this commit. 2018-02-23 18:54 schwarze Changed: apropos.1 (1.47), "Exp", lines: +25 -2 clarify documentation of macro keys 2018-02-23 18:25 schwarze Changed: mandocdb.c (1.258), "Exp", lines: +27 -6 Logically, the following are are type names - just like .Vt, some of them with an optional variable name following: - .Ft - .Fa in the SYNOPSIS - .Fn second and later arguments in the SYNOPSIS So add these to the .Vt macro table in the mandoc.db(5) database. During my LibreSSL work, i'm getting really tired of typing $ man -k Vt,Ft,Fa=some_type_name over and over again; now, this becomes just: $ man -k Vt=some_type_name 2018-02-23 16:47 schwarze Changed: main.c (1.303), "Exp", lines: +2 -2 tag.c (1.19), "Exp", lines: +4 -1 Invalidate the tag_files.tfd after fclose(3)ing the stram associated with it. In main() assert that the tfd was actually invalidated. This avoids closing an invalid fd. From tb@; OK deraadt@ on an earlier version. 2018-02-07 20:31 schwarze Changed: mandocdb.c (1.257), "Exp", lines: +13 -3 In man(7) and cat pages, cut off excessive one line descriptions. An extreme example of how rogue files could mess up apropos(1) output was reported by bentley@: qwtlicense(3) in the x11/qwt port. 2018-02-07 20:04 schwarze Changed: mandoc_aux.c (1.11), "Exp", lines: +4 -4 Fix the mandoc_strndup() utility function. All existing callers seem safe so far, but implementing it with an unchecked memcpy(3) is just wrong and quite dangerous. 2018-02-07 19:58 schwarze Changed: regress/mdoc/Oo/punct.out_ascii (1.6), "Exp", lines: +1 -1 regress/mdoc/Oo/punct.out_markdown (1.6), "Exp", lines: +1 -1 fix wrong date 2018-02-06 16:29 schwarze Deleted: regress/mdoc/Oo/punct.out_lint (1.6) Changed: mdoc_validate.c (1.354), "Exp", lines: +9 -10 regress/mdoc/Aq/empty.out_lint (1.6), "Exp", lines: +0 -1 regress/mdoc/Brq/empty.out_lint (1.6), "Exp", lines: +0 -1 regress/mdoc/Oo/Makefile (1.5), "Exp", lines: +0 -1 regress/mdoc/Oo/punct.in (1.5), "Exp", lines: +0 -4 regress/mdoc/Oo/punct.out_ascii (1.5), "Exp", lines: +0 -2 regress/mdoc/Oo/punct.out_markdown (1.5), "Exp", lines: +0 -3 regress/mdoc/Qq/empty.out_lint (1.6), "Exp", lines: +0 -1 regress/mdoc/Sq/empty.out_lint (1.6), "Exp", lines: +0 -1 Delete the "no blank before trailing delimiter" check from the partial explicit macros. Leah Neukirchen <leah at vuxu dot org> rightfully points out that the check makes no sense for these macros. 2018-01-13 05:23 schwarze Changed: mdoc_man.c (1.123), "Exp", lines: +1 -10 mdoc_term.c (1.365), "Exp", lines: +1 -9 regress/mdoc/Lk/noarg.out_ascii (1.5), "Exp", lines: +2 -3 Remove the implicit display feature of .Lk because it was inconsistent across output devices, counter-intuitive, and resulted in ugly output for many real-world manual pages. Always format even long links in-line. I already committed a similar change to groff. OK jmc@, bentley@, and the original author of the feature, Werner Lemberg <wl@gnu.org>. 2017-12-15 23:39 schwarze Changed: roff.7 (1.95), "Exp", lines: +3 -3 typo; from Alexander Kuleshov <kuleshovmail at gmail dot com> 2017-11-29 20:05 schwarze Changed: mdoc_state.c (1.9), "Exp", lines: +15 -10 Recognize .Bl -column at parse time, and not only at validation time, even if other arguments precede -column. This is required because the .It parser needs to know whether or not we are a -column list. Fixes tree corruption leading to an assertion failure. Bug reported by bentley@. 2017-11-28 20:26 schwarze Changed: mandoc.1 (1.221), "Exp", lines: +3 -3 duplicate word, found by igor(1) 2017-11-10 23:42 schwarze Changed: term_ps.c (1.91), "Exp", lines: +6 -15 streamline termp allocation: this will allow the init function to do things differently in the ps vs pdf case; from espie@ 2017-11-10 23:32 schwarze Changed: mandoc.1 (1.220), "Exp", lines: +3 -3 mandoc.h (1.246), "Exp", lines: +2 -2 read.c (1.193), "Exp", lines: +2 -2 be less assertive when warning about a possible typo; from jca@, ok jmc@ 2017-11-02 14:53 schwarze Changed: LICENSE (1.18), "Exp", lines: +2 -2 term_ps.c (1.90), "Exp", lines: +37 -15 Shrink -Tps output by more than 50% by using PostScript as a programming language. * Define and use one PostScript procedure to select each font. * Define and use procedures combining "use" and "show". * In one of these, reuse the current row if it did not change. Most ideas and most coding by espie@, tweaked by me. 2017-10-29 19:25 schwarze Changed: term_ps.c (1.89), "Exp", lines: +28 -11 Print a human-readable media name in the %%DocumentMedia DSC comment and use the setpagedevice PostScript operator to help printers automatically select the paper of the best matching PageSize. Many thanks to Mike Williams <obsd1 at eandem dot co dot uk> for teaching me about the relevant features of PostScript and DSC and for suggesting what to put into the first %%DocumentMedia argument. 2017-10-28 16:20 schwarze Changed: TODO (1.248), "Exp", lines: +5 -1 duplicate anchors 2017-10-26 18:11 schwarze Changed: term_ps.c (1.88), "Exp", lines: +3 -3 more readable conversion of paper size from millimeters to PostScript basic units, also slightly more precise 2017-10-25 20:48 schwarze Changed: term_ps.c (1.87), "Exp", lines: +1 -3 The page footer line (psmarg) is created in ps_begin(), and the last call writing to it is always ps_endline(), which ends with ps_pclose(), which prints "ET" (end text). Consequently, do not print another instance of "ET" in ps_closepage() after the footer line and before the "endstream" for the page. Fixing a PDF syntax error found while investigating the bug report from Jan Stary that also resulted in the previous commit. 2017-10-25 18:52 schwarze Changed: term_ps.c (1.86), "Exp", lines: +4 -4 Properly close out the top-level Font object, the end-of-page Resource objects, and the Catalog object, fixing three PDF syntax errors that were present in every PDF file generated with mandoc since the initial checkin of the formatter in July 2010. Bug reported by Jan Stary <hans at stare dot cz> on misc@. 2017-10-23 13:54 schwarze Changed: mdoc.7 (1.270), "Exp", lines: +41 -17 Modernize documentation of .Ao and .Aq. I looked through our whole tree and failed to find a single use that is really convincing, except those with .Mt. Putting it around character and key names is somewhat widespread and maybe acceptable, even if hardly useful. So for now, delete the bogus examples and explain what these macros are really used for. Discourage the most common abuses. Triggered by a question from Raf Czlonka <rczlonka at gmail dot com>. 2017-10-17 23:19 schwarze Changed: tbl.7 (1.29), "Exp", lines: +5 -3 HISTORY: mention first appearance in OpenBSD 2017-09-12 18:21 schwarze Changed: mdoc_validate.c (1.353), "Exp", lines: +5 -2 Do not segfault when there are two .Dt macros, the first without an architecture argument and the second with an invalid one. Bug found by jsg@ with afl(1). 2017-09-07 14:55 schwarze Changed: mandoc.1 (1.219), "Exp", lines: +3 -3 typo: convertion -> convention; from dcoppa@ 2017-09-06 16:24 schwarze Changed: html.c (1.220), "Exp", lines: +3 -1 fix a NULL pointer access on deroff() failure; could be triggered with '.SS ""'; reported by Michael <Stapelberg at debian> 2017-09-04 10:35 schwarze Changed: eqn.7 (1.37), "Exp", lines: +3 -3 fix grammar; while here, improve spacing; from sobrado@ 2017-09-02 11:55 schwarze Changed: TODO (1.247), "Exp", lines: +5 -1 format ".IP *" etc. as <ul> rather than <dl> 2017-08-26 20:38 schwarze Changed: mandocdb.c (1.256), "Exp", lines: +6 -6 Fix previous: mmap(2) returns MAP_FAILED on failure, not NULL. Bug pointed out by tedu@. 2017-08-26 15:55 schwarze Changed: mandocdb.c (1.255), "Exp", lines: +54 -42 Do not fork and exec cmp(1); instead, simply fstat(2), mmap(2), and compare the files directly, allowing a much stricter pledge(2), at very little cost: merely 15 additional lines of very simple code. Suggested by George Brown <321 dot george at gmail dot com> on misc@. 2017-08-26 12:59 schwarze Changed: mandocdb.c (1.254), "Exp", lines: +4 -21 No need to fork and exec rm(1) -rf, we know that we have exactly one file and exactly one directory to remove. While here, increase the size of the buffer such that the file name actually fits. Minus 17 lines of code, no functional change. Opportunity for simplification reported by George Brown <321 dot george at gmail dot com> on misc@. 2017-08-23 21:56 schwarze Changed: eqn_term.c (1.17), "Exp", lines: +5 -3 remove spacing after another representation of unary minus 2017-08-23 20:49 schwarze Changed: eqn_term.c (1.16), "Exp", lines: +5 -3 remove spacing after unary minus 2017-08-23 20:29 schwarze Changed: eqn_term.c (1.15), "Exp", lines: +8 -2 regress/eqn/fromto/precedence.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/over/precedence.out_ascii (1.6), "Exp", lines: +2 -2 regress/eqn/subsup/precedence.out_ascii (1.4), "Exp", lines: +1 -1 eliminate white space after opening and before closing punctuation 2017-08-23 20:03 schwarze Changed: eqn_term.c (1.14), "Exp", lines: +13 -3 regress/eqn/matrix/basic.out_ascii (1.4), "Exp", lines: +1 -1 Suppress spacing before certain kinds of lists. One benefit is a reduced probablity that a blank appears between a function name and the opening parenthesis introducing the arguments. The heuristics isn't perfect and may occasionally suppress a blank that wouldn't do harm. 2017-08-23 20:03 schwarze Changed: gmdiff (1.9), "Exp", lines: +1 -1 use the tty-char macro file for ASCII comparisons 2017-08-23 13:01 schwarze Changed: chars.c (1.73), "Exp", lines: +8 -8 regress/char/unicode/namediff.out_ascii (1.4), "Exp", lines: +5 -5 regress/eqn/fromto/basic.out_ascii (1.6), "Exp", lines: +1 -1 Improve ASCII rendering of a few rare character escape sequences that can be changed unilaterally because groff fails to render them at all. 2017-08-23 10:59 schwarze Changed: regress/char/unicode/latin1.in (1.4), "Exp", lines: +4 -0 regress/char/unicode/latin1.out_ascii (1.3), "Exp", lines: +10 -6 regress/char/unicode/latin1.out_html (1.4), "Exp", lines: +4 -0 regress/char/unicode/latin1.out_utf8 (1.3), "Exp", lines: +4 -0 regress/char/unicode/latin1diff.in (1.3), "Exp", lines: +0 -4 regress/char/unicode/latin1diff.out_ascii (1.2), "Exp", lines: +0 -4 regress/char/unicode/latin1diff.out_html (1.3), "Exp", lines: +0 -4 regress/char/unicode/latin1diff.out_utf8 (1.2), "Exp", lines: +0 -4 regress/char/unicode/named.in (1.4), "Exp", lines: +4 -0 regress/char/unicode/named.out_ascii (1.3), "Exp", lines: +65 -61 regress/char/unicode/named.out_html (1.4), "Exp", lines: +4 -0 regress/char/unicode/named.out_utf8 (1.3), "Exp", lines: +4 -0 regress/char/unicode/namediff.in (1.4), "Exp", lines: +0 -4 regress/char/unicode/namediff.out_ascii (1.3), "Exp", lines: +0 -4 regress/char/unicode/namediff.out_html (1.4), "Exp", lines: +0 -4 regress/char/unicode/namediff.out_utf8 (1.3), "Exp", lines: +0 -4 regress/eqn/delim/basic.out_ascii (1.3), "Exp", lines: +2 -1 regress/eqn/fromto/basic.out_ascii (1.5), "Exp", lines: +1 -1 regress/eqn/nullary/symbol.out_ascii (1.3), "Exp", lines: +2 -2 regress/roff/esc/multi.out_ascii (1.3), "Exp", lines: +2 -2 regress/roff/esc/two.out_ascii (1.3), "Exp", lines: +12 -8 catch up with ASCII renderings in chars.c rev. 1.72 2017-08-23 10:50 schwarze Changed: chars.c (1.72), "Exp", lines: +78 -78 term_ascii.c (1.59), "Exp", lines: +6 -6 Switch ASCII rendering of the same mathematical symbols and greek letters as in groff commit babca15f from trying to imitate the characters' graphical shapes, which resulted in unintelligible renderings in many cases, to transliterations conveying the characters' meanings. One benefit is making these characters usable for portable manual pages. Solving a problem pointed out by bentley@. 2017-08-22 18:17 schwarze Changed: man.conf.5 (1.5), "Exp", lines: +8 -4 Correct the mandoc.db(5) requirements of man(1) after the deprecation of MLINKS. Inaccuracy pointed out by espie@. 2017-08-22 17:50 schwarze Changed: mansearch.c (1.77), "Exp", lines: +11 -1 When finding a bogus database entry, print a meaningful warning and skip the entry. Issue reported by espie@. 2017-08-21 15:42 schwarze Changed: main.c (1.302), "Exp", lines: +12 -1 When the stdout stream gets broken, there is no point in reading any more input files, and it would be misleading to start a parser, because that would show randomly truncated text. Instead, print an error message and exit the program. Issue found by Leah Neukirchen <leah at vuxu dot org>, who was surprised to see half a manpage when her /tmp/ overflew. 2017-08-20 02:30 schwarze Changed: lib.in (1.20), "Exp", lines: +17 -7 sync with FreeBSD; suggested by Sevan Janiyan <venture37 at geeklan dot co dot uk> 2017-08-19 22:05 schwarze Changed: man.1 (1.32), "Exp", lines: +2 -7 Delete the lie that $PAGER would only be used with -a or -l; the text was probably copied from mandoc(1) or apropos(1), where it is true. 2017-08-19 22:00 schwarze Changed: mandoc.1 (1.218), "Exp", lines: +16 -2 document -O mdoc; triggered by a question from jmc@ and OK jmc@ 2017-08-11 16:56 schwarze Changed: mdoc.c (1.268), "Exp", lines: +3 -3 Make the "new sentence, new line" check stricter, allowing digits in the last two letters of the last word of the sentence. No false positives in base or Xenocara. Suggested by and OK jmc@. 2017-08-11 15:10 schwarze Changed: man.1 (1.31), "Exp", lines: +12 -2 Add two EXAMPLES; triggered by a question from jmc@. Feedback and OK jmc@. 2017-08-09 12:49 schwarze Changed: man.1 (1.30), "Exp", lines: +18 -12 Explain how to transform markup for the terminal when not using a pager, and how to remove markup. Add related cross references. While here, as suggested by jmc@, replace the excessive cross references to the intro pages by a more relevant one to mandoc(1). Triggered by a question from, using feedback from, and OK jmc@. 2017-08-05 13:34 tag VERSION_1_14_3 2017-08-05 13:34 schwarze Changed: Makefile (1.517), "Exp", lines: +2 -2 NEWS (1.27), "Exp", lines: +16 -1 release 1.14.3 2017-08-02 13:29 schwarze Changed: mansearch.c (1.76), "Exp", lines: +49 -18 mdoc_validate.c (1.352), "Exp", lines: +3 -6 No longer use names that only occur in the SYNOPSIS section as names for man(1) lookup. For OpenBSD base and Xenocara, that functionality was never intended to be required, and i just fixed the last handful of offenders using it - not counting the horribly ill-designed interfaces engine(3) and lh_new(3) which are impossible to properly document in the first place. Of course, apropos(1) and whatis(1) continue to use SYNOPSIS .Nm, .Fn, and .Fo macros, so "man -k ENGINE_get_load_privkey_function" still works. This change also gets rid of a few bogus warnings "cross reference to self" which actually are *not* to self, like in yp(8). This former functionality was intended to help third-party software in the ports tree and on non-OpenBSD systems containing manual pages with incomplete or corrupt NAME sections. But it turned out it did more harm than good, and caused more confusion than relief, specifically for third party manuals and for maintainers of mandoc-portable on other operating systems. So kill it. Problems reported, among others, by Yuri Pankov (illumos). OK jmc@ 2017-07-31 16:14 schwarze Changed: tbl_html.c (1.23), "Exp", lines: +4 -1 tbl_term.c (1.57), "Exp", lines: +5 -2 Ignore explicitly specified negative column widths rather than wrapping around to huge numbers and risking memory exhaustion; fixes Debian ps(1). Bug reported by Dr. Markus Waldeck. 2017-07-31 15:19 schwarze Changed: man_term.c (1.209), "Exp", lines: +3 -3 mdoc_validate.c (1.351), "Exp", lines: +2 -2 Fix an out of bounds read access to a constant array that caused segfaults on certain hardened versions of glibc. Triggered by .sp or blank lines right before .SS or .SH, or before the first .Sh. Found the hard way by Dr. Markus Waldner on Debian and by Leah Neukirchen on Void Linux. 2017-07-28 14:57 tag VERSION_1_14_2 2017-07-28 14:57 schwarze Changed: INSTALL (1.20), "Exp", lines: +4 -4 NEWS (1.26), "Exp", lines: +17 -11 final tweaks for the 1.14.2 release 2017-07-28 14:48 schwarze Changed: mandocdb.c (1.253), "Exp", lines: +2 -2 When the mparse_alloc() prototype changed in read.c 1.179, updating the enum constant was forgotten in this call. No functional change since the mmsg argument is NULL anyway. Found by florian@ with clang. 2017-07-28 14:25 schwarze Changed: term.c (1.274), "Exp", lines: +2 -2 fix typo in TERMP_MULTICOL flag test; patch from florian@, found with clang 2017-07-28 13:02 schwarze Changed: regress/mdoc/Xr/Makefile (1.4), "Exp", lines: +3 -0 disable .Xr -Tlint test for now, it causes too much trouble on non-OpenBSD systems 2017-07-28 12:48 schwarze Changed: regress/mdoc/Sh/before.in (1.4), "Exp", lines: +5 -7 regress/mdoc/Sh/before.out_ascii (1.4), "Exp", lines: +2 -2 regress/mdoc/Sh/before.out_markdown (1.4), "Exp", lines: +4 -6 regress/mdoc/Sh/subbefore.in (1.4), "Exp", lines: +5 -7 regress/mdoc/Sh/subbefore.out_ascii (1.4), "Exp", lines: +2 -2 regress/mdoc/Sh/subbefore.out_markdown (1.4), "Exp", lines: +4 -6 Do not test .Xr here. It is not what this directory should focus on, and it is causing too much trouble in -portable. 2017-07-26 10:33 schwarze Changed: man_validate.c (1.133), "Exp", lines: +1 -2 Fix a typo that caused a non-constant string to be passed as a format string; no functional change; reported by Michael <Stapelberg at debian>. 2017-07-26 10:21 schwarze Changed: main.c (1.301), "Exp", lines: +2 -2 Cast the return value of chdir(2) to void. We already have a comment above explaining to human auditors why no error checking is needed here, so it's only fair to tell the compiler, too. Worried compiler reported by Michael <Stapelberg at debian>. 2017-07-24 11:15 schwarze Changed: TODO (1.246), "Exp", lines: +11 -2 two more entries from the mdoclint TODO, clerified by wiz@ 2017-07-22 20:43 schwarze Changed: TODO (1.245), "Exp", lines: +14 -1 migrate the mdoclint(1) TODO list here, from pkgsrc 2017-07-20 16:35 schwarze Changed: regress/mdoc/Sh/before.in (1.3), "Exp", lines: +3 -3 regress/mdoc/Sh/before.out_ascii (1.3), "Exp", lines: +2 -2 regress/mdoc/Sh/before.out_markdown (1.3), "Exp", lines: +2 -2 regress/mdoc/Sh/subbefore.in (1.3), "Exp", lines: +3 -3 regress/mdoc/Sh/subbefore.out_ascii (1.3), "Exp", lines: +2 -2 regress/mdoc/Sh/subbefore.out_markdown (1.3), "Exp", lines: +2 -2 Avoid cross reference to mandoc(1) because it may cause a message on other operating systems where mandoc is not installed, causing the test to fail in the portable test suite. 2017-07-20 16:24 schwarze Changed: Makefile (1.516), "Exp", lines: +12 -12 configure.local.example (1.33), "Exp", lines: +2 -2 mdoc.7 (1.269), "Exp", lines: +3 -3 more renaming from mdocml to mandoc 2017-07-20 16:23 schwarze Changed: NEWS (1.25), "Exp", lines: +3 -1 mention -Tlint to stdout 2017-07-20 15:41 schwarze Changed: TODO (1.244), "Exp", lines: +1 -6 MAP_PRIVATE is pointless without PROT_WRITE 2017-07-20 15:26 schwarze Changed: TODO (1.243), "Exp", lines: +1 -10 main.c (1.300), "Exp", lines: +10 -7 mandoc.1 (1.217), "Exp", lines: +5 -3 For -Tlint, put parser messages on stdout instead of stderr. Originally, naddy@ requested this in 2011 (or maybe even earlier). It was discussed with joerg@, kristaps@, naddy@, and espie@ in 2011, and everybody agreed in principle, but it was postponed because kristaps@ wanted to do some cleanup of the message system first. Meanwhile, message infrastructure was improved about a dozen times... This makes long, tedious commands like "mandoc -Tlint *.1 2>&1 | less" unnecessary and allows simple ones like "man -l -Tlint *.1". 2017-07-20 14:36 schwarze Changed: read.c (1.192), "Exp", lines: +16 -10 Do not call err(3) from the parser. Call mandoc_vmsg() and return failure such that we can continue with the next file. 2017-07-20 12:54 schwarze Changed: TODO (1.242), "Exp", lines: +1 -6 mdoc_validate.c (1.350), "Exp", lines: +16 -1 correctly handle letters in .Nx arguments; improves for example getpgid(2), ac(8), ldconfig(8), mount_ffs(8), sa(8), ttyflags(8), ... 2017-07-20 11:58 schwarze Changed: TODO (1.241), "Exp", lines: +9 -1 three ideas found in a different TODO file 2017-07-20 11:41 schwarze Changed: Makefile (1.515), "Exp", lines: +6 -14 * clean catman.o which was missing * delete WWW_OBJS which i don't use * do not complain about *.out_markdown * bump VERSION to 1.14.2 (not released yet) 2017-07-20 11:24 schwarze Changed: Makefile.depend (1.33), "Exp", lines: +2 -2 sync 2017-07-20 11:07 schwarze Changed: eqn.7 (1.36), "Exp", lines: +3 -3 Fix incorrectly swapped labels of left/right arrows; from bentley@. 2017-07-19 21:48 schwarze Changed: TODO (1.240), "Exp", lines: +1 -48 delete some entries that have been taken care of 2017-07-19 21:01 schwarze Changed: NEWS (1.24), "Exp", lines: +10 -6 more bits for 1.14.2 2017-07-19 14:05 schwarze Changed: mansearch.c (1.75), "Exp", lines: +19 -3 Prefer arch-dependent over arch-independent pages if the name priority, the section number, and all names match. Changes little on installed systems except the ordering of apropos(1) results, because we install base and Xenocara manuals in different trees, but fixes lookup of pages like apm(4) vs. apm(4/amd64) in man.cgi(8). Issue discovered by martian67 on freenode and reported via tj@. 2017-07-18 18:47 schwarze Changed: regress/regress.pl (1.8), "Exp", lines: +230 -180 regress/regress.pl.1 (1.3), "Exp", lines: +11 -57 Run the regression tests iteratively rather than recursively. Simpler user interface, better summary output, simpler code, and slightly faster. Inspired by espie@'s request to avoid needless recursive make(1) in the OpenBSD regression testing tree. 2017-07-16 18:45 schwarze Changed: mandoc.css (1.22), "Exp", lines: +4 -3 The only elements using floats are dt.It-tag, so the only elements allowed to the right of them are dd.It-tag. Fixes overlapping rendering after long tag lists without bodies, for example in the Xenocara apm(4) manual. Issue reported by tj@. 2017-07-16 17:59 schwarze Added: regress/mdoc/Bl/diag.out_lint (1.1) regress/mdoc/Bl/inset.out_lint (1.1) Changed: regress/mdoc/Bl/Makefile (1.9), "Exp", lines: +1 -1 regress/mdoc/Bl/diag.in (1.3), "Exp", lines: +5 -4 regress/mdoc/Bl/diag.out_ascii (1.3), "Exp", lines: +3 -2 regress/mdoc/Bl/diag.out_markdown (1.3), "Exp", lines: +3 -2 regress/mdoc/Bl/inset.in (1.3), "Exp", lines: +3 -3 regress/mdoc/Bl/inset.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Bl/inset.out_markdown (1.3), "Exp", lines: +1 -1 test -diag -width and -inset -width 2017-07-15 17:57 schwarze Changed: html.c (1.219), "Exp", lines: +18 -14 mandoc_html.3 (1.10), "Exp", lines: +8 -5 mdoc_html.c (1.294), "Exp", lines: +5 -5 In .Bl -tag and -hang, do not print a margin-left style attribute for each individual item if the -width argument matches the default of 6n. Suggested by Steffen Nurpmeso <steffen at sdaoden dot eu> on <groff at GNU dot org> in April 2017. 2017-07-15 17:29 schwarze Changed: mandoc.css (1.21), "Exp", lines: +2 -2 mdoc_html.c (1.293), "Exp", lines: +2 -2 use the same width increase logic for .Bl -hang as for .Bl -tag 2017-07-15 16:40 schwarze Changed: mdoc_validate.c (1.349), "Exp", lines: +6 -5 If -column, -diag, -inset, -item, or -ohang lists have a -width, don't just talk about ignoring it, actually do ignore it. No change for terminal output, improves HTML output. 2017-07-15 16:35 schwarze Changed: mandoc.css (1.20), "Exp", lines: +6 -6 correct left margins for different classes of definition lists 2017-07-15 16:26 schwarze Changed: eqn.c (1.78), "Exp", lines: +2 -2 regress/eqn/subsup/precedence.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/subsup/precedence.out_html (1.3), "Exp", lines: +1 -1 regress/eqn/unary/diacrit.out_ascii (1.5), "Exp", lines: +1 -1 regress/eqn/unary/diacrit.out_html (1.5), "Exp", lines: +1 -1 print the right character for mathematical overbar; from bentley@ 2017-07-15 13:17 schwarze Changed: mandocdb.c (1.252), "Exp", lines: +2 -2 Improve rev. 1.250 further: If a database is empty, we already don't write a database file and delete an existing one. If none exists, that only means the database was empty and remains so, which is not an error. So don't nag about it, in particular because that would be a weekly(8) annoyance. Issue reported by jmc@. 2017-07-15 01:11 schwarze Changed: NEWS (1.23), "Exp", lines: +75 -1 first draft of the 1.14.2 release notes 2017-07-14 18:18 schwarze Changed: eqn.c (1.77), "Exp", lines: +2 -2 always give commas their own <mo> element, suggested by bentley@, improves e.g. glMultMatrix(3) 2017-07-14 17:16 schwarze Changed: roff.c (1.324), "Exp", lines: +3 -2 The .Dd and .TH macros must interrupt .ce, too; fixing tree corruption and assertion failure found by jsg@ with afl(1) 2017-07-14 16:49 schwarze Changed: roff.c (1.323), "Exp", lines: +7 -6 Explicitly initialize a variable where the compiler is (understandably) unable to figure out that it is never used uninitialized. While here, tweak the content of the variable to make its usage easier to understand. No functional change. 2017-07-14 16:28 schwarze Changed: html.c (1.218), "Exp", lines: +7 -2 Fix an assertion failure triggered by print_otag("sw+-l", NULL). Even though we skip the style when the argument is NULL, we must still consume the options. Not found with afl(1), but during manual testing of the previous patch... 2017-07-14 16:06 schwarze Changed: html.c (1.217), "Exp", lines: +1 -12 mandoc.css (1.19), "Exp", lines: +9 -1 mandoc_html.3 (1.9), "Exp", lines: +2 -15 mdoc_html.c (1.292), "Exp", lines: +19 -26 Handle .Bl -compact via CSS rather than writing individual style attributes into .It blocks; suggested by Steffen Nurpmeso <steffen at sdaoden dot eu> on <groff at GNU dot org> in April 2017. Delete margin-bottom and margin-top style names and the 'v' argument letter from print_otag() because they are no longer used. 2017-07-14 15:56 schwarze Changed: html.c (1.216), "Exp", lines: +4 -4 regress/char/unicode/invalid.out_html (1.2), "Exp", lines: +1 -1 regress/char/unicode/latin1.out_html (1.3), "Exp", lines: +84 -84 regress/char/unicode/latin1diff.out_html (1.2), "Exp", lines: +11 -11 regress/char/unicode/named.out_html (1.3), "Exp", lines: +152 -152 regress/char/unicode/namediff.out_html (1.3), "Exp", lines: +40 -40 regress/char/unicode/nogroff.out_html (1.2), "Exp", lines: +34 -34 regress/eqn/fromto/basic.out_html (1.3), "Exp", lines: +1 -1 regress/eqn/nullary/roman.out_html (1.3), "Exp", lines: +3 -3 regress/eqn/nullary/symbol.out_html (1.2), "Exp", lines: +3 -3 regress/eqn/subsup/precedence.out_html (1.2), "Exp", lines: +1 -1 regress/eqn/unary/diacrit.out_html (1.4), "Exp", lines: +1 -1 print HTML character references as 4+ digits hexadecimal, like Unicode; from bentley@, tweaked by me 2017-07-14 13:32 schwarze Changed: eqn_html.c (1.17), "Exp", lines: +4 -1 do not print <math class="eqn"><mrow></mrow></math> for empty .EQ; issue reported by bentley@ 2017-07-14 12:48 schwarze Changed: TODO (1.239), "Exp", lines: +10 -1 eqn(7) nits from bentley@ 2017-07-13 15:13 schwarze Changed: roff.c (1.322), "Exp", lines: +3 -1 eqn(7) .EQ has to break man(7) next-line scope, or tree corruption and use after free many ensue; again found by jsg@ with afl(1) 2017-07-08 17:52 schwarze Changed: libmandoc.h (1.70), "Exp", lines: +2 -6 libroff.h (1.42), "Exp", lines: +5 -5 mandoc_headers.3 (1.18), "Exp", lines: +7 -17 read.c (1.191), "Exp", lines: +2 -15 roff.c (1.321), "Exp", lines: +37 -37 roff_int.h (1.9), "Exp", lines: +1 -2 tbl.c (1.42), "Exp", lines: +8 -13 tbl_data.c (1.45), "Exp", lines: +4 -6 Simplify by creating struct roff_node syntax tree nodes for tbl(7) right from roff_parseln() rather than delegating to read.c, similar to what i just did for eqn(7). The interface function roff_span() becomes obsolete and is deleted, the former interface function roff_addtbl() becomes static, the interface functions tbl_read() and tbl_cdata() become void, and minus twelve linus of code. No functional change. 2017-07-08 15:28 schwarze Changed: roff.c (1.320), "Exp", lines: +3 -2 fix an assertion failure triggered by .ce in next-line scope; found by jsg@ with afl(1) 2017-07-08 14:51 schwarze Changed: eqn.c (1.76), "Exp", lines: +55 -103 eqn_html.c (1.16), "Exp", lines: +3 -3 eqn_term.c (1.13), "Exp", lines: +3 -3 html.h (1.87), "Exp", lines: +3 -3 libmandoc.h (1.69), "Exp", lines: +1 -4 libroff.h (1.41), "Exp", lines: +7 -7 mandoc.h (1.245), "Exp", lines: +1 -12 mandoc_headers.3 (1.17), "Exp", lines: +4 -9 read.c (1.190), "Exp", lines: +1 -4 roff.c (1.319), "Exp", lines: +38 -48 roff.h (1.58), "Exp", lines: +2 -2 roff_int.h (1.8), "Exp", lines: +1 -2 term.h (1.130), "Exp", lines: +3 -3 tree.c (1.77), "Exp", lines: +3 -3 1. Eliminate struct eqn, instead use the existing members of struct roff_node which is allocated for each equation anyway. 2. Do not keep a list of equation parsers, one parser is enough. Minus fifty lines of code, no functional change. 2017-07-08 13:43 schwarze Changed: tbl_term.c (1.56), "Exp", lines: +10 -9 Correctly handle horizontal spans at the beginning of rows, fixing an assertion failure found by jsg@ with afl(1). While here, also drop printing of whitespace in tbl_data() which makes no difference because column positioning code in term_tbl() already takes care of that. 2017-07-07 19:39 schwarze Changed: mandoc.h (1.244), "Exp", lines: +1 -2 tree.c (1.76), "Exp", lines: +1 -4 garbage collect unused enum member EQN_ROOT 2017-07-07 19:06 schwarze Changed: eqn_term.c (1.12), "Exp", lines: +28 -6 regress/eqn/fromto/basic.out_ascii (1.4), "Exp", lines: +1 -1 regress/eqn/fromto/noarg.out_ascii (1.4), "Exp", lines: +1 -1 regress/eqn/fromto/precedence.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/over/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/over/precedence.out_ascii (1.5), "Exp", lines: +2 -2 regress/eqn/subsup/combine.out_ascii (1.4), "Exp", lines: +1 -1 regress/eqn/subsup/noarg.out_ascii (1.4), "Exp", lines: +1 -1 regress/eqn/subsup/precedence.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/subsup/sub_group.out_ascii (1.4), "Exp", lines: +1 -1 add parentheses to the output where required for disambiguation 2017-07-07 17:16 schwarze Changed: eqn.c (1.75), "Exp", lines: +11 -13 simplify the eqn_box_makebinary() function by removing the trivial pos parameter; also minus two lines of code; no functional change 2017-07-07 16:20 schwarze Changed: mandoc.1 (1.216), "Exp", lines: +8 -27 Radically simplify the definitions what the message levels ERROR and WARNING mean: minus 20 lines of mdoc source. OK jmc@. 2017-07-06 22:59 schwarze Changed: mandoc.1 (1.215), "Exp", lines: +58 -58 mandoc.h (1.243), "Exp", lines: +9 -9 read.c (1.189), "Exp", lines: +9 -9 regress/char/space/trailing-mdoc.out_lint (1.6), "Exp", lines: +3 -3 regress/man/SH/noarg.out_lint (1.6), "Exp", lines: +1 -1 regress/man/SS/noarg.out_lint (1.6), "Exp", lines: +1 -1 regress/man/TH/case.out_lint (1.5), "Exp", lines: +1 -1 regress/man/nf/dupe.out_lint (1.5), "Exp", lines: +2 -2 regress/mdoc/Bd/blank.out_lint (1.6), "Exp", lines: +7 -7 regress/mdoc/Dd/dupe.out_lint (1.6), "Exp", lines: +2 -2 regress/mdoc/Dt/case.out_lint (1.6), "Exp", lines: +1 -1 regress/mdoc/Dt/dupe.out_lint (1.6), "Exp", lines: +2 -2 regress/mdoc/Dt/late.out_lint (1.6), "Exp", lines: +1 -1 regress/mdoc/Os/dupe.out_lint (1.5), "Exp", lines: +2 -2 regress/mdoc/blank/comment.out_lint (1.6), "Exp", lines: +1 -1 regress/roff/args/man.out_lint (1.5), "Exp", lines: +8 -8 regress/roff/args/mdoc.out_lint (1.6), "Exp", lines: +12 -12 regress/roff/args/roff.out_lint (1.5), "Exp", lines: +16 -16 regress/roff/nr/escname.out_lint (1.5), "Exp", lines: +1 -1 regress/roff/string/name.out_lint (1.6), "Exp", lines: +7 -7 Now that we have the -Wstyle message level, downgrade six warnings that are not syntax mistakes and that do not cause wrong formatting or content to style suggestions. Also upgrade two warnings that may cause information loss to errors. 2017-07-06 00:19 schwarze Added: regress/eqn/fromto/precedence.in (1.1) regress/eqn/fromto/precedence.out_ascii (1.1) regress/eqn/fromto/precedence.out_html (1.1) regress/eqn/subsup/precedence.in (1.1) regress/eqn/subsup/precedence.out_ascii (1.1) regress/eqn/subsup/precedence.out_html (1.1) Changed: eqn.c (1.74), "Exp", lines: +20 -11 eqn_term.c (1.11), "Exp", lines: +9 -10 regress/eqn/fromto/Makefile (1.2), "Exp", lines: +3 -3 regress/eqn/over/precedence.in (1.3), "Exp", lines: +4 -3 regress/eqn/over/precedence.out_ascii (1.4), "Exp", lines: +3 -2 regress/eqn/over/precedence.out_html (1.3), "Exp", lines: +1 -1 regress/eqn/subsup/Makefile (1.2), "Exp", lines: +3 -3 regress/eqn/unary/bold.in (1.3), "Exp", lines: +3 -3 regress/eqn/unary/bold.out_ascii (1.3), "Exp", lines: +2 -2 regress/eqn/unary/bold.out_html (1.2), "Exp", lines: +1 -1 regress/eqn/unary/diacrit.in (1.3), "Exp", lines: +3 -2 regress/eqn/unary/diacrit.out_ascii (1.4), "Exp", lines: +2 -2 regress/eqn/unary/diacrit.out_html (1.3), "Exp", lines: +1 -1 regress/eqn/unary/sqrt.in (1.5), "Exp", lines: +3 -3 regress/eqn/unary/sqrt.out_ascii (1.5), "Exp", lines: +3 -2 regress/eqn/unary/sqrt.out_html (1.4), "Exp", lines: +1 -1 Fix operator precedence according to Brian W. Kernighan and Lorinda L. Cherry, "Typesetting Mathematics - User's Guide (Second Edition)", August 15, 1978, paragraph 23; swarm of bugs pointed out by bentley@. 2017-07-05 15:03 schwarze Changed: eqn.c (1.73), "Exp", lines: +11 -8 eqn_html.c (1.15), "Exp", lines: +7 -4 eqn_term.c (1.10), "Exp", lines: +7 -4 mandoc.h (1.242), "Exp", lines: +1 -2 tree.c (1.75), "Exp", lines: +1 -2 The EQN_LISTONE box type is pointless. Simplify by just using EQN_LIST with expectargs = 1. Noticed while investigating a bug report from bentley@. No functional change. 2017-07-05 12:25 schwarze Changed: mdoc.7 (1.268), "Exp", lines: +5 -5 roff.7 (1.94), "Exp", lines: +15 -15 nits about trailing punctuation found with mandoc -Tlint 2017-07-04 23:40 schwarze Changed: apropos.1 (1.46), "Exp", lines: +2 -2 man.options.1 (1.7), "Exp", lines: +10 -4 mandoc.3 (1.41), "Exp", lines: +3 -3 mandoc_escape.3 (1.4), "Exp", lines: +3 -3 mandoc_headers.3 (1.16), "Exp", lines: +1 -1 soelim.1 (1.5), "Exp", lines: +5 -5 various nits found with mandoc -Tlint 2017-07-04 22:52 schwarze Changed: roff.c (1.318), "Exp", lines: +22 -16 regress/roff/cond/ie.in (1.3), "Exp", lines: +10 -2 regress/roff/cond/ie.out_ascii (1.2), "Exp", lines: +2 -1 Fix handling of \} on roff request lines. Cures bogus error messages in pages generated with pod2man(1). 2017-07-04 21:08 schwarze Added: regress/tbl/data/insert.in (1.1) regress/tbl/data/insert.out_ascii (1.1) regress/tbl/data/insert.out_lint (1.1) Changed: tbl_data.c (1.44), "Exp", lines: +24 -52 regress/tbl/data/Makefile (1.4), "Exp", lines: +3 -3 It turns out association of tbl spans with layout rows is simpler than i thought. Fixing a bug in curs_addch(3) and minus 25 lines of code. 2017-07-04 21:01 schwarze Changed: gmdiff (1.8), "Exp", lines: +1 -1 adjust to today's change of the OpenBSD groff port 2017-07-04 15:24 schwarze Changed: regress/regress.pl (1.7), "Exp", lines: +7 -7 regress/char/N/basic.in (1.2), "Exp", lines: +2 -1 regress/char/accent/combine.in (1.2), "Exp", lines: +2 -1 regress/char/accent/nocombine.in (1.2), "Exp", lines: +2 -1 regress/char/accent/utf8only.in (1.2), "Exp", lines: +2 -1 regress/char/bar/man.in (1.2), "Exp", lines: +2 -1 regress/char/bar/mdoc.in (1.2), "Exp", lines: +3 -2 regress/char/bar/mdoc.out_ascii (1.2), "Exp", lines: +1 -1 regress/char/hyphen/man.in (1.2), "Exp", lines: +2 -1 regress/char/hyphen/mdoc.in (1.2), "Exp", lines: +3 -2 regress/char/hyphen/mdoc.out_ascii (1.2), "Exp", lines: +1 -1 regress/char/space/break.in (1.2), "Exp", lines: +3 -2 regress/char/space/break.out_ascii (1.2), "Exp", lines: +1 -1 regress/char/space/eos-man.in (1.2), "Exp", lines: +2 -1 regress/char/space/eos.in (1.2), "Exp", lines: +3 -2 regress/char/space/eos.out_ascii (1.2), "Exp", lines: +1 -1 regress/char/space/esct-man.in (1.2), "Exp", lines: +2 -1 regress/char/space/esct-man.out_lint (1.4), "Exp", lines: +6 -7 regress/char/space/esct-mdoc.in (1.3), "Exp", lines: +3 -2 regress/char/space/esct-mdoc.out_ascii (1.2), "Exp", lines: +1 -1 regress/char/space/esct-mdoc.out_lint (1.5), "Exp", lines: +3 -6 regress/char/space/leading-man.in (1.2), "Exp", lines: +2 -1 regress/char/space/leading-mdoc.in (1.2), "Exp", lines: +3 -2 regress/char/space/leading-mdoc.out_ascii (1.2), "Exp", lines: +1 -1 regress/char/space/multiple.in (1.2), "Exp", lines: +3 -2 regress/char/space/multiple.out_ascii (1.2), "Exp", lines: +1 -1 regress/char/space/nobreak.in (1.2), "Exp", lines: +3 -2 regress/char/space/nobreak.out_ascii (1.2), "Exp", lines: +1 -1 regress/char/space/tab-man.in (1.2), "Exp", lines: +2 -1 regress/char/space/tab-man.out_lint (1.4), "Exp", lines: +21 -22 regress/char/space/tab.in (1.2), "Exp", lines: +3 -2 regress/char/space/tab.out_ascii (1.2), "Exp", lines: +1 -1 regress/char/space/tab.out_lint (1.5), "Exp", lines: +41 -44 regress/char/space/trailing-mdoc.in (1.2), "Exp", lines: +3 -2 regress/char/space/trailing-mdoc.out_ascii (1.2), "Exp", lines: +1 -1 regress/char/space/trailing-mdoc.out_lint (1.5), "Exp", lines: +3 -6 regress/char/space/zerowidth.in (1.2), "Exp", lines: +2 -1 regress/char/unicode/ascii.in (1.3), "Exp", lines: +2 -1 regress/char/unicode/input.in (1.2), "Exp", lines: +2 -1 regress/char/unicode/input.out_lint (1.4), "Exp", lines: +68 -69 regress/char/unicode/invalid.in (1.2), "Exp", lines: +3 -2 regress/char/unicode/invalid.out_ascii (1.2), "Exp", lines: +1 -1 regress/char/unicode/invalid.out_lint (1.5), "Exp", lines: +9 -12 regress/char/unicode/invalid.out_utf8 (1.2), "Exp", lines: +1 -1 regress/char/unicode/latin1.in (1.3), "Exp", lines: +2 -1 regress/char/unicode/latin1diff.in (1.2), "Exp", lines: +2 -1 regress/char/unicode/man.in (1.2), "Exp", lines: +2 -1 regress/char/unicode/mdoc.in (1.2), "Exp", lines: +3 -2 regress/char/unicode/mdoc.out_utf8 (1.2), "Exp", lines: +1 -1 regress/char/unicode/named.in (1.3), "Exp", lines: +2 -1 regress/char/unicode/namediff.in (1.3), "Exp", lines: +2 -1 regress/char/unicode/nogroff.in (1.2), "Exp", lines: +2 -1 regress/eqn/define/font.in (1.2), "Exp", lines: +3 -2 regress/eqn/define/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/define/infinite.in (1.2), "Exp", lines: +3 -2 regress/eqn/define/infinite.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/define/infinite.out_lint (1.6), "Exp", lines: +4 -7 regress/eqn/define/invalid.in (1.2), "Exp", lines: +3 -2 regress/eqn/define/invalid.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/define/invalid.out_lint (1.6), "Exp", lines: +5 -8 regress/eqn/define/quoted.in (1.2), "Exp", lines: +3 -2 regress/eqn/define/quoted.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/delim/basic.in (1.2), "Exp", lines: +3 -2 regress/eqn/delim/basic.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/fromto/basic.in (1.2), "Exp", lines: +3 -2 regress/eqn/fromto/basic.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/fromto/noarg.in (1.2), "Exp", lines: +3 -2 regress/eqn/fromto/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/matrix/basic.in (1.3), "Exp", lines: +3 -2 regress/eqn/matrix/basic.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/matrix/empty.in (1.2), "Exp", lines: +3 -2 regress/eqn/matrix/empty.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/nullary/roman.in (1.3), "Exp", lines: +3 -2 regress/eqn/nullary/roman.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/nullary/symbol.in (1.2), "Exp", lines: +3 -2 regress/eqn/nullary/symbol.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/nullary/symbol.out_utf8 (1.2), "Exp", lines: +1 -1 regress/eqn/over/noarg.in (1.2), "Exp", lines: +3 -2 regress/eqn/over/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/over/noarg.out_lint (1.6), "Exp", lines: +1 -4 regress/eqn/over/precedence.in (1.2), "Exp", lines: +3 -2 regress/eqn/over/precedence.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/size/basic.in (1.2), "Exp", lines: +3 -2 regress/eqn/size/basic.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/subsup/combine.in (1.2), "Exp", lines: +3 -2 regress/eqn/subsup/combine.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/subsup/noarg.in (1.2), "Exp", lines: +3 -2 regress/eqn/subsup/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/subsup/sub_group.in (1.2), "Exp", lines: +3 -2 regress/eqn/subsup/sub_group.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/unary/bold.in (1.2), "Exp", lines: +3 -2 regress/eqn/unary/bold.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/unary/diacrit.in (1.2), "Exp", lines: +3 -2 regress/eqn/unary/diacrit.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/unary/sqrt.in (1.4), "Exp", lines: +3 -2 regress/eqn/unary/sqrt.out_ascii (1.4), "Exp", lines: +1 -1 regress/man/B/args.in (1.2), "Exp", lines: +2 -1 regress/man/B/args.out_lint (1.4), "Exp", lines: +1 -2 regress/man/B/blank.in (1.2), "Exp", lines: +2 -1 regress/man/B/blank.out_lint (1.4), "Exp", lines: +1 -2 regress/man/BI/emptyargs.in (1.2), "Exp", lines: +2 -1 regress/man/BI/literal.in (1.2), "Exp", lines: +1 -0 regress/man/EX/args.in (1.2), "Exp", lines: +2 -1 regress/man/EX/nested.in (1.2), "Exp", lines: +2 -1 regress/man/EX/spacing.in (1.2), "Exp", lines: +2 -1 regress/man/HP/break.in (1.2), "Exp", lines: +2 -1 regress/man/HP/literal.in (1.2), "Exp", lines: +2 -1 regress/man/HP/macrotag.in (1.2), "Exp", lines: +2 -1 regress/man/HP/manyargs.in (1.2), "Exp", lines: +2 -1 regress/man/HP/spacing.in (1.3), "Exp", lines: +2 -1 regress/man/IP/empty.in (1.2), "Exp", lines: +2 -1 regress/man/IP/empty.out_lint (1.4), "Exp", lines: +2 -3 regress/man/IP/literal.in (1.3), "Exp", lines: +2 -1 regress/man/IP/longhead.in (1.2), "Exp", lines: +2 -1 regress/man/IP/manyargs.in (1.2), "Exp", lines: +2 -1 regress/man/IP/spacing.in (1.2), "Exp", lines: +2 -1 regress/man/IP/width.in (1.3), "Exp", lines: +2 -1 regress/man/MT/args.in (1.2), "Exp", lines: +2 -1 regress/man/MT/args.out_lint (1.2), "Exp", lines: +5 -6 regress/man/MT/noME.in (1.2), "Exp", lines: +2 -1 regress/man/MT/noME.out_lint (1.2), "Exp", lines: +2 -3 regress/man/OP/args.in (1.2), "Exp", lines: +2 -1 regress/man/OP/args.out_lint (1.4), "Exp", lines: +2 -3 regress/man/PD/args.in (1.2), "Exp", lines: +2 -1 regress/man/PD/args.out_lint (1.4), "Exp", lines: +1 -2 regress/man/PD/nextline.in (1.2), "Exp", lines: +2 -1 regress/man/PD/spacing.in (1.2), "Exp", lines: +2 -1 regress/man/PP/args.in (1.2), "Exp", lines: +2 -1 regress/man/PP/args.out_lint (1.4), "Exp", lines: +3 -4 regress/man/PP/empty.in (1.2), "Exp", lines: +2 -1 regress/man/PP/empty.out_lint (1.4), "Exp", lines: +3 -4 regress/man/RS/REarg.in (1.2), "Exp", lines: +2 -1 regress/man/RS/REarg.out_lint (1.4), "Exp", lines: +7 -8 regress/man/RS/an-margin.in (1.2), "Exp", lines: +2 -1 regress/man/RS/breaking.in (1.2), "Exp", lines: +2 -1 regress/man/RS/broken.in (1.2), "Exp", lines: +2 -1 regress/man/RS/empty.in (1.2), "Exp", lines: +2 -1 regress/man/RS/empty.out_lint (1.4), "Exp", lines: +1 -2 regress/man/RS/literal.in (1.2), "Exp", lines: +2 -1 regress/man/RS/lonelyRE.in (1.2), "Exp", lines: +2 -1 regress/man/RS/lonelyRE.out_lint (1.4), "Exp", lines: +3 -4 regress/man/RS/nested.in (1.2), "Exp", lines: +2 -1 regress/man/RS/noRE.in (1.2), "Exp", lines: +2 -1 regress/man/RS/noRE.out_lint (1.4), "Exp", lines: +1 -2 regress/man/RS/nowidth.in (1.2), "Exp", lines: +2 -1 regress/man/RS/width.in (1.3), "Exp", lines: +2 -1 regress/man/SH/broken.in (1.2), "Exp", lines: +2 -1 regress/man/SH/broken.out_lint (1.4), "Exp", lines: +1 -2 regress/man/SH/broken_eline.in (1.2), "Exp", lines: +2 -1 regress/man/SH/broken_eline.out_lint (1.4), "Exp", lines: +2 -3 regress/man/SH/empty_before.in (1.2), "Exp", lines: +2 -1 regress/man/SH/empty_before.out_lint (1.4), "Exp", lines: +1 -2 regress/man/SH/longarg.in (1.2), "Exp", lines: +2 -1 regress/man/SH/noarg.in (1.3), "Exp", lines: +2 -1 regress/man/SH/noarg.out_lint (1.5), "Exp", lines: +14 -15 regress/man/SS/broken.in (1.2), "Exp", lines: +2 -1 regress/man/SS/broken.out_lint (1.4), "Exp", lines: +1 -2 regress/man/SS/broken_eline.in (1.2), "Exp", lines: +2 -1 regress/man/SS/broken_eline.out_lint (1.4), "Exp", lines: +2 -3 regress/man/SS/longarg.in (1.2), "Exp", lines: +2 -1 regress/man/SS/noarg.in (1.3), "Exp", lines: +2 -1 regress/man/SS/noarg.out_lint (1.5), "Exp", lines: +14 -15 regress/man/TH/baddate.in (1.2), "Exp", lines: +1 -0 regress/man/TH/baddate.out_lint (1.2), "Exp", lines: +1 -1 regress/man/TH/case.in (1.2), "Exp", lines: +2 -1 regress/man/TH/case.out_lint (1.4), "Exp", lines: +1 -2 regress/man/TH/emptydate.in (1.2), "Exp", lines: +1 -0 regress/man/TH/emptydate.out_lint (1.2), "Exp", lines: +1 -1 regress/man/TH/isodate.in (1.2), "Exp", lines: +1 -0 regress/man/TH/longdate.in (1.2), "Exp", lines: +1 -0 regress/man/TH/longdate.out_lint (1.2), "Exp", lines: +1 -1 regress/man/TH/longtit.in (1.2), "Exp", lines: +1 -0 regress/man/TH/longvol.in (1.2), "Exp", lines: +1 -0 regress/man/TH/mdocdate.in (1.2), "Exp", lines: +1 -0 regress/man/TH/noTH.in (1.2), "Exp", lines: +1 -0 regress/man/TH/noarg.in (1.2), "Exp", lines: +1 -0 regress/man/TH/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/man/TH/noarg.out_lint (1.2), "Exp", lines: +3 -3 regress/man/TH/nobody.in (1.2), "Exp", lines: +2 -1 regress/man/TH/nobody.out_lint (1.4), "Exp", lines: +0 -1 regress/man/TH/onearg.in (1.2), "Exp", lines: +1 -0 regress/man/TH/onearg.out_ascii (1.2), "Exp", lines: +1 -1 regress/man/TH/onearg.out_lint (1.2), "Exp", lines: +2 -2 regress/man/TH/onlyyear.in (1.2), "Exp", lines: +1 -0 regress/man/TH/sixargs.in (1.2), "Exp", lines: +1 -0 regress/man/TH/sixargs.out_lint (1.4), "Exp", lines: +1 -2 regress/man/TH/twoargs.in (1.2), "Exp", lines: +1 -0 regress/man/TH/twoargs.out_ascii (1.2), "Exp", lines: +1 -1 regress/man/TH/twoargs.out_lint (1.2), "Exp", lines: +2 -2 regress/man/TP/badarg.in (1.2), "Exp", lines: +2 -1 regress/man/TP/broken.in (1.3), "Exp", lines: +2 -1 regress/man/TP/broken.out_lint (1.5), "Exp", lines: +2 -3 regress/man/TP/double.in (1.2), "Exp", lines: +2 -1 regress/man/TP/double.out_lint (1.4), "Exp", lines: +5 -6 regress/man/TP/eof.in (1.2), "Exp", lines: +2 -1 regress/man/TP/eof.out_lint (1.4), "Exp", lines: +1 -2 regress/man/TP/fill.in (1.2), "Exp", lines: +2 -1 regress/man/TP/indent.in (1.2), "Exp", lines: +2 -1 regress/man/TP/literal.in (1.2), "Exp", lines: +2 -1 regress/man/TP/longhead.in (1.2), "Exp", lines: +2 -1 regress/man/TP/macrotag.in (1.2), "Exp", lines: +2 -1 regress/man/TP/manyargs.in (1.2), "Exp", lines: +2 -1 regress/man/TP/sameline.in (1.2), "Exp", lines: +2 -1 regress/man/TP/spacing.in (1.2), "Exp", lines: +2 -1 regress/man/TP/width.in (1.3), "Exp", lines: +2 -1 regress/man/TS/break.in (1.2), "Exp", lines: +2 -1 regress/man/TS/break.out_lint (1.4), "Exp", lines: +4 -5 regress/man/TS/vspace.in (1.3), "Exp", lines: +2 -1 regress/man/UR/args.in (1.2), "Exp", lines: +2 -1 regress/man/UR/args.out_lint (1.4), "Exp", lines: +5 -6 regress/man/UR/noUE.in (1.2), "Exp", lines: +2 -1 regress/man/UR/noUE.out_lint (1.4), "Exp", lines: +2 -3 regress/man/blank/afterSH.in (1.2), "Exp", lines: +2 -1 regress/man/blank/afterSH.out_lint (1.4), "Exp", lines: +4 -5 regress/man/blank/afterSS.in (1.2), "Exp", lines: +2 -1 regress/man/blank/afterSS.out_lint (1.4), "Exp", lines: +4 -5 regress/man/blank/line.in (1.2), "Exp", lines: +2 -1 regress/man/blank/line.out_lint (1.5), "Exp", lines: +8 -9 regress/man/nf/args.in (1.2), "Exp", lines: +2 -1 regress/man/nf/args.out_lint (1.4), "Exp", lines: +2 -3 regress/man/nf/dupe.in (1.2), "Exp", lines: +2 -1 regress/man/nf/dupe.out_lint (1.4), "Exp", lines: +2 -3 regress/man/nf/indent.in (1.2), "Exp", lines: +2 -1 regress/man/nf/userdef.in (1.2), "Exp", lines: +2 -1 regress/man/nf/vert.in (1.2), "Exp", lines: +2 -1 regress/mdoc/Ad/font.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Ad/font.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Ad/font.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Ad/noarg.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Ad/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Ad/noarg.out_lint (1.6), "Exp", lines: +2 -5 regress/mdoc/Ad/noarg.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/An/break.in (1.4), "Exp", lines: +3 -2 regress/mdoc/An/break.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/An/break.out_lint (1.6), "Exp", lines: +13 -16 regress/mdoc/An/break.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ap/eos.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ap/eos.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ap/eos.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ap/middle.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Ap/middle.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Ap/middle.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Aq/author.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Aq/author.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Aq/author.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Aq/author.out_utf8 (1.2), "Exp", lines: +1 -1 regress/mdoc/Aq/empty.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Aq/empty.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Aq/empty.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Aq/empty.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Aq/empty.out_utf8 (1.4), "Exp", lines: +1 -1 regress/mdoc/Ar/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ar/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ar/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ar/punct.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Ar/punct.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Ar/punct.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Ar/punct.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/At/invalid.in (1.3), "Exp", lines: +3 -2 regress/mdoc/At/invalid.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/At/invalid.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/At/invalid.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Bd/badargs.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bd/badargs.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/badargs.out_lint (1.5), "Exp", lines: +12 -15 regress/mdoc/Bd/badargs.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/beforeNAME.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bd/beforeNAME.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/beforeNAME.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Bd/beforeNAME.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/blank.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bd/blank.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/blank.out_lint (1.5), "Exp", lines: +8 -11 regress/mdoc/Bd/blank.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/break.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bd/break.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/break.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Bd/break.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/broken.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bd/broken.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/broken.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Bd/broken.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/centered.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bd/centered.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/centered.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/empty.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bd/empty.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/empty.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/nested.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bd/nested.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/nested.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Bd/nested.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/offset-empty.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bd/offset-empty.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/offset-empty.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/offset-neg.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Bd/offset-neg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/offset-neg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/spacing.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bd/spacing.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/spacing.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/unclosed.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bd/unclosed.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bd/unclosed.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Bd/unclosed.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bf/badargs.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bf/badargs.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bf/badargs.out_lint (1.5), "Exp", lines: +3 -6 regress/mdoc/Bf/break.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bf/break.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bf/break.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Bf/broken.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bf/broken.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bf/broken.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Bf/multiargs.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bf/multiargs.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bf/multiargs.out_lint (1.5), "Exp", lines: +5 -8 regress/mdoc/Bf/nest.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bf/nest.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bk/badarg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bk/badarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bk/badarg.out_lint (1.5), "Exp", lines: +6 -9 regress/mdoc/Bk/break.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Bk/break.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bk/broken.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bk/broken.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bk/broken.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Bk/inputlines.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bk/inputlines.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bk/lines.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bk/lines.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bk/synopsis.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Bk/synopsis.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/badargs.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/badargs.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/badargs.out_lint (1.5), "Exp", lines: +18 -21 regress/mdoc/Bl/badargs.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/bareIt.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/bareIt.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/bareIt.out_lint (1.5), "Exp", lines: +3 -6 regress/mdoc/Bl/bareIt.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/bareTa.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/bareTa.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/bareTa.out_lint (1.5), "Exp", lines: +5 -8 regress/mdoc/Bl/bareTa.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/break.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/break.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/break.out_lint (1.5), "Exp", lines: +18 -21 regress/mdoc/Bl/breakingIt.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Bl/breakingIt.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Bl/breakingIt.out_lint (1.5), "Exp", lines: +16 -19 regress/mdoc/Bl/breakingIt.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Bl/breakingTa.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Bl/breakingTa.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/breakingTa.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/broken.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/broken.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/broken.out_lint (1.5), "Exp", lines: +3 -6 regress/mdoc/Bl/broken.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/bullet.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/bullet.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/bullet.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/colNoIt.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/colNoIt.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/colNoIt.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/column.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Bl/column.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/column.out_lint (1.6), "Exp", lines: +7 -10 regress/mdoc/Bl/column.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/column_nogroff.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/column_nogroff.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/column_nogroff.out_lint (1.2), "Exp", lines: +2 -5 regress/mdoc/Bl/column_nogroff.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/dash.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/dash.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/dash.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/dash.out_utf8 (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/diag.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/diag.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/diag.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/empty.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/empty.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/empty.out_lint (1.5), "Exp", lines: +11 -14 regress/mdoc/Bl/empty.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/emptyhead.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/emptyhead.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/emptyhead.out_lint (1.5), "Exp", lines: +4 -7 regress/mdoc/Bl/emptyhead.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/emptyitem.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/emptyitem.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/emptyitem.out_lint (1.5), "Exp", lines: +8 -11 regress/mdoc/Bl/emptyitem.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/emptytag.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/emptytag.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/emptytag.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Bl/emptytag.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/enum.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/enum.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/enum.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/extend.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/extend.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/extend.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/hang.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/hang.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/hang.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/inset.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/inset.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/inset.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/item.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/item.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/item.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/multitag.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/multitag.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/multitag.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/multitype.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/multitype.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/multitype.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/nested.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/nested.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/nested.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/noIt.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Bl/noIt.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Bl/noIt.out_lint (1.5), "Exp", lines: +8 -11 regress/mdoc/Bl/noIt.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Bl/notype.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/notype.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/notype.out_lint (1.5), "Exp", lines: +5 -8 regress/mdoc/Bl/notype.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/offset.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Bl/offset.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Bl/offset.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Bl/ohang.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/ohang.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/ohang.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/secstart.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/secstart.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/secstart.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/tag.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Bl/tag.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/tag.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Bl/tag.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/unclosed.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Bl/unclosed.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Bl/unclosed.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Brq/empty.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Brq/empty.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Brq/empty.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Brq/empty.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Bx/args.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Bx/args.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Bx/args.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Bx/args.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Cd/eos.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Cd/eos.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Cd/eos.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Cd/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Cd/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Cd/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Cd/noarg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Cd/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Cd/noarg.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Cd/noarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Cd/punct.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Cd/punct.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Cd/punct.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Cm/basic.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Cm/basic.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Cm/basic.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Cm/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Cm/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Cm/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Cm/noarg.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Cm/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Cm/noarg.out_lint (1.6), "Exp", lines: +3 -6 regress/mdoc/Cm/noarg.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Cm/punct.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Cm/punct.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Cm/punct.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/D1/spacing.in (1.2), "Exp", lines: +3 -2 regress/mdoc/D1/spacing.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/D1/spacing.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/D1/spacing.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Db/args.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Db/args.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Db/args.out_lint (1.5), "Exp", lines: +3 -6 regress/mdoc/Dd/badarg.in (1.2), "Exp", lines: +2 -1 regress/mdoc/Dd/badarg.out_lint (1.5), "Exp", lines: +2 -4 regress/mdoc/Dd/dupe.in (1.2), "Exp", lines: +2 -1 regress/mdoc/Dd/dupe.out_lint (1.5), "Exp", lines: +3 -5 regress/mdoc/Dd/late.in (1.2), "Exp", lines: +2 -1 regress/mdoc/Dd/late.out_lint (1.4), "Exp", lines: +1 -3 regress/mdoc/Dd/long.in (1.2), "Exp", lines: +2 -1 regress/mdoc/Dd/long.out_lint (1.5), "Exp", lines: +2 -4 regress/mdoc/Dd/manarg.in (1.2), "Exp", lines: +2 -1 regress/mdoc/Dd/manarg.out_lint (1.5), "Exp", lines: +2 -4 regress/mdoc/Dd/noarg.in (1.2), "Exp", lines: +2 -1 regress/mdoc/Dd/noarg.out_lint (1.4), "Exp", lines: +1 -3 regress/mdoc/Dd/order.in (1.2), "Exp", lines: +2 -1 regress/mdoc/Dd/order.out_lint (1.5), "Exp", lines: +2 -4 regress/mdoc/Dl/spacing.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Dl/spacing.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Dl/spacing.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Dl/spacing.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Dq/empty.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Dq/empty.out_ascii (1.5), "Exp", lines: +1 -1 regress/mdoc/Dq/empty.out_lint (1.5), "Exp", lines: +0 -3 regress/mdoc/Dq/empty.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Dt/badsec.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Dt/badsec.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Dt/case.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Dt/case.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/case.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Dt/case.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/dupe.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Dt/dupe.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/dupe.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Dt/dupe.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/fourargs.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Dt/fourargs.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/fourargs.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Dt/fourargs.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/late.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Dt/late.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/late.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Dt/late.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/missing.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Dt/missing.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/missing.out_lint (1.5), "Exp", lines: +0 -3 regress/mdoc/Dt/missing.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/noarg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Dt/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/noarg.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Dt/noarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/nobody.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Dt/nobody.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/nobody.out_lint (1.5), "Exp", lines: +0 -3 regress/mdoc/Dt/nobody.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/nosec.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Dt/nosec.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/nosec.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Dt/nosec.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/order.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Dt/order.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Dt/order.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Dt/order.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Dv/font.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Dv/font.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Dv/font.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Dv/noarg.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Dv/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Dv/noarg.out_lint (1.6), "Exp", lines: +2 -5 regress/mdoc/Dv/noarg.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Em/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Em/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Em/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Em/noarg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Em/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Em/noarg.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Em/noarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Em/punct.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Em/punct.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Em/punct.out_lint (1.7), "Exp", lines: +5 -8 regress/mdoc/Em/punct.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Eo/break.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Eo/break.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Eo/break.out_lint (1.5), "Exp", lines: +8 -11 regress/mdoc/Eo/break.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Eo/empty.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Eo/empty.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Eo/empty.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Eo/obsolete.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Eo/obsolete.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Eo/obsolete.out_lint (1.5), "Exp", lines: +6 -9 regress/mdoc/Eo/obsolete.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Eo/unclosed.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Eo/unclosed.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Eo/unclosed.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Eo/unclosed.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Er/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Er/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Er/font.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Er/noarg.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Er/noarg.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Er/noarg.out_lint (1.6), "Exp", lines: +2 -5 regress/mdoc/Er/noarg.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Ev/font.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Ev/font.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Ev/font.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Ev/noarg.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Ev/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Ev/noarg.out_lint (1.6), "Exp", lines: +2 -5 regress/mdoc/Ev/noarg.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Ex/args.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ex/args.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ex/args.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ex/noname.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ex/noname.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ex/noname.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Ex/noname.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ex/nostd.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ex/nostd.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ex/nostd.out_lint (1.5), "Exp", lines: +3 -6 regress/mdoc/Ex/nostd.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fd/break.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fd/break.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fd/break.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fd/empty.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fd/empty.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fd/empty.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Fd/empty.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fd/eos.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fd/eos.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fd/eos.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fd/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fd/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fd/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fl/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fl/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fl/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fl/multiarg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fl/multiarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fl/multiarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fl/noarg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fl/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fl/noarg.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Fl/parsed.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fl/parsed.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fl/parsed.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fl/punct.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Fl/punct.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Fl/punct.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Fl/punct.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Fo/basic.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fo/basic.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/basic.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/break.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fo/break.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/break.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/eos.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fo/eos.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/eos.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/font.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Fo/font.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Fo/font.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Fo/noarg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fo/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/noarg.out_lint (1.5), "Exp", lines: +10 -13 regress/mdoc/Fo/noarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/nohead.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fo/nohead.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/nohead.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Fo/nohead.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/obsolete.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fo/obsolete.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/obsolete.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Fo/obsolete.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/punct.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Fo/punct.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Fo/punct.out_lint (1.5), "Exp", lines: +3 -6 regress/mdoc/Fo/punct.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Fo/section.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fo/section.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/section.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/warn.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Fo/warn.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/warn.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Fo/warn.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ft/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ft/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ft/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ic/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ic/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ic/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ic/noarg.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Ic/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Ic/noarg.out_lint (1.6), "Exp", lines: +2 -5 regress/mdoc/Ic/noarg.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Ic/punct.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ic/punct.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ic/punct.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/In/break.in (1.2), "Exp", lines: +3 -2 regress/mdoc/In/break.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/In/break.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/In/eos.in (1.2), "Exp", lines: +3 -2 regress/mdoc/In/eos.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/In/eos.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/In/font.in (1.3), "Exp", lines: +3 -2 regress/mdoc/In/font.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/In/font.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/In/noarg.in (1.3), "Exp", lines: +3 -2 regress/mdoc/In/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/In/noarg.out_lint (1.6), "Exp", lines: +3 -6 regress/mdoc/In/noarg.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Lb/badargs.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Lb/badargs.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Lb/badargs.out_lint (1.8), "Exp", lines: +5 -8 regress/mdoc/Lb/badargs.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Lb/break.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Lb/break.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Lb/break.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Lb/eos.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Lb/eos.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Lb/eos.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Li/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Li/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Li/font.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Li/punct.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Li/punct.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Li/punct.out_lint (1.7), "Exp", lines: +5 -8 regress/mdoc/Li/punct.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Lk/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Lk/font.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Lk/link.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Lk/link.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Lk/link.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Lk/noarg.in (1.5), "Exp", lines: +3 -2 regress/mdoc/Lk/noarg.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Lk/noarg.out_lint (1.7), "Exp", lines: +3 -6 regress/mdoc/Lk/noarg.out_markdown (1.5), "Exp", lines: +1 -1 regress/mdoc/Ms/font.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Ms/font.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Ms/font.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Ms/noarg.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Ms/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Ms/noarg.out_lint (1.6), "Exp", lines: +2 -5 regress/mdoc/Ms/noarg.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Mt/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Mt/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Mt/simple.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Mt/simple.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Mt/simple.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Mt/simple.out_markdown (1.5), "Exp", lines: +1 -1 regress/mdoc/Nd/broken.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Nd/broken.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Nd/broken.out_lint (1.7), "Exp", lines: +9 -12 regress/mdoc/Nd/hyph.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nd/hyph.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nd/hyph.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Nd/noarg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nd/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nd/noarg.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Nd/noarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Nd/par.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nd/par.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nd/par.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/badNAME.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nm/badNAME.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/badNAME.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Nm/badNAMEuse.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nm/badNAMEuse.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/badNAMEuse.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Nm/break.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nm/break.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/break.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Nm/break.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/broken.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Nm/broken.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Nm/broken.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Nm/broken.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/empty.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nm/empty.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/empty.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/emptyNAME.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nm/emptyNAME.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/emptyNAMEuse.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nm/emptyNAMEuse.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nm/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/long.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nm/long.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/long.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/par.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nm/par.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/par.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/parns.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Nm/parns.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/parns.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/punct.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Nm/punct.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Nm/punct.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Nm/punct.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/No/punct.in (1.4), "Exp", lines: +3 -2 regress/mdoc/No/punct.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/No/punct.out_lint (1.8), "Exp", lines: +4 -7 regress/mdoc/No/punct.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/No/spacing.in (1.2), "Exp", lines: +3 -2 regress/mdoc/No/spacing.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/No/spacing.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ns/position.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Ns/position.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Ns/position.out_lint (1.6), "Exp", lines: +2 -5 regress/mdoc/Ns/position.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Ns/punct.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Ns/punct.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ns/punct.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Oo/punct.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Oo/punct.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Oo/punct.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Oo/punct.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Op/break.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Op/break.out_lint (1.5), "Exp", lines: +3 -6 regress/mdoc/Op/break.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Op/broken.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Op/broken.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Op/broken.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Op/broken.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Op/punct.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Op/punct.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Op/punct.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Op/punct.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Os/dupe.in (1.2), "Exp", lines: +2 -1 regress/mdoc/Os/dupe.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Os/dupe.out_lint (1.4), "Exp", lines: +9 -7 regress/mdoc/Os/dupe.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Os/late.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Os/late.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Os/late.out_lint (1.4), "Exp", lines: +1 -3 regress/mdoc/Os/late.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Os/long.in (1.2), "Exp", lines: +2 -1 regress/mdoc/Os/long.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Os/long.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Os/missing.in (1.2), "Exp", lines: +2 -1 regress/mdoc/Os/missing.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Os/missing.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ox/keep.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ox/keep.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ox/keep.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Pa/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Pa/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Pa/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Pa/punct.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Pa/punct.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Pa/punct.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Pa/punct.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Pf/spacing.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Pf/spacing.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Pf/spacing.out_lint (1.5), "Exp", lines: +3 -6 regress/mdoc/Pf/spacing.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Pp/arg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Pp/arg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Pp/arg.out_lint (1.7), "Exp", lines: +3 -6 regress/mdoc/Pp/arg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Qq/empty.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Qq/empty.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Qq/empty.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Qq/empty.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Rs/allch.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Rs/allch.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Rs/allch.out_lint (1.5), "Exp", lines: +6 -9 regress/mdoc/Rs/allch.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Rs/allch.out_utf8 (1.2), "Exp", lines: +1 -1 regress/mdoc/Rs/args.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Rs/args.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Rs/args.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Rs/args.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Rs/break.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Rs/break.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Rs/break.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Rs/break.out_utf8 (1.2), "Exp", lines: +1 -1 regress/mdoc/Rs/empty.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Rs/empty.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Rs/empty.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Rs/empty.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Rs/empty.out_utf8 (1.2), "Exp", lines: +1 -1 regress/mdoc/Rs/three_authors.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Rs/three_authors.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Rs/three_authors.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Rs/three_authors.out_utf8 (1.2), "Exp", lines: +1 -1 regress/mdoc/Rv/args.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Rv/args.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Rv/args.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Rv/noname.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Rv/noname.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Rv/noname.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Rv/nostd.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Rv/nostd.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Rv/nostd.out_lint (1.5), "Exp", lines: +3 -6 regress/mdoc/Rv/nostd.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/badNAME.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sh/badNAME.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/badNAME.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Sh/badNAME.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/before.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sh/before.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/before.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Sh/before.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/empty.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sh/empty.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/empty.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Sh/empty.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/emptyNAME.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sh/emptyNAME.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/emptyNAME.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Sh/emptyNAME.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/first.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sh/first.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/first.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Sh/first.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/nohead.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sh/nohead.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/nohead.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Sh/nohead.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/order.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sh/order.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/order.out_lint (1.5), "Exp", lines: +3 -6 regress/mdoc/Sh/order.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/orderNAME.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sh/orderNAME.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/orderNAME.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Sh/orderNAME.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/parbefore.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sh/parbefore.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/parbefore.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Sh/parbefore.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/parborder.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sh/parborder.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/parborder.out_lint (1.5), "Exp", lines: +7 -10 regress/mdoc/Sh/parborder.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/punctNAME.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sh/punctNAME.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/punctNAME.out_lint (1.5), "Exp", lines: +4 -7 regress/mdoc/Sh/punctNAME.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/subbefore.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sh/subbefore.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sh/subbefore.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Sh/subbefore.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sm/badarg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sm/badarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sm/badarg.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Sm/badarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sm/noarg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sm/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sm/noarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sm/scope.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sm/scope.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sm/scope.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sm/spacing-No.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sm/spacing-No.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sm/spacing-No.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sm/spacing-Op.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sm/spacing-Op.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sm/spacing-Op.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sm/twoarg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sm/twoarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sm/twoarg.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Sm/twoarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sq/empty.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Sq/empty.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Sq/empty.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/Sq/empty.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/St/badargs.in (1.2), "Exp", lines: +3 -2 regress/mdoc/St/badargs.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/St/badargs.out_lint (1.5), "Exp", lines: +2 -5 regress/mdoc/St/badargs.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/St/call.in (1.3), "Exp", lines: +3 -2 regress/mdoc/St/call.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/St/call.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/St/call.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sx/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sx/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sx/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sx/noarg.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Sx/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Sx/noarg.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Sx/noarg.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Sy/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sy/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sy/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sy/noarg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Sy/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sy/noarg.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/Sy/noarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sy/punct.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Sy/punct.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Sy/punct.out_lint (1.7), "Exp", lines: +5 -8 regress/mdoc/Sy/punct.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/Tn/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Tn/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Tn/font.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Tn/noarg.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Tn/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Tn/noarg.out_lint (1.6), "Exp", lines: +2 -5 regress/mdoc/Tn/noarg.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Ud/arg.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ud/arg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ud/arg.out_lint (1.6), "Exp", lines: +10 -13 regress/mdoc/Ud/arg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ux/eos.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ux/eos.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ux/eos.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ux/punct.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ux/punct.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ux/punct.out_lint (1.5), "Exp", lines: +5 -8 regress/mdoc/Ux/punct.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ux/spacing.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Ux/spacing.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ux/spacing.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Va/basic.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Va/basic.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Va/basic.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Va/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Va/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Va/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Va/noarg.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Va/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Va/noarg.out_lint (1.6), "Exp", lines: +2 -5 regress/mdoc/Va/noarg.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Va/punct.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Va/punct.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Va/punct.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Vt/child.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Vt/child.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Vt/child.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Vt/font.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Vt/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Vt/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Vt/noarg.in (1.3), "Exp", lines: +3 -2 regress/mdoc/Vt/noarg.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/Vt/noarg.out_lint (1.6), "Exp", lines: +2 -5 regress/mdoc/Vt/noarg.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Vt/spacing.in (1.2), "Exp", lines: +3 -2 regress/mdoc/Vt/spacing.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Vt/spacing.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Xr/args.in (1.4), "Exp", lines: +3 -2 regress/mdoc/Xr/args.out_ascii (1.4), "Exp", lines: +1 -1 regress/mdoc/Xr/args.out_lint (1.6), "Exp", lines: +7 -9 regress/mdoc/Xr/args.out_markdown (1.4), "Exp", lines: +1 -1 regress/mdoc/blank/comment.in (1.2), "Exp", lines: +3 -2 regress/mdoc/blank/comment.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/blank/comment.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/blank/comment.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/blank/line.in (1.2), "Exp", lines: +3 -2 regress/mdoc/blank/line.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/blank/line.out_lint (1.5), "Exp", lines: +22 -25 regress/mdoc/blank/list.in (1.2), "Exp", lines: +3 -2 regress/mdoc/blank/list.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/blank/list.out_lint (1.5), "Exp", lines: +7 -10 regress/mdoc/blank/list.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/break/brokenbreaker.in (1.2), "Exp", lines: +3 -2 regress/mdoc/break/brokenbreaker.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/break/brokenbreaker.out_lint (1.5), "Exp", lines: +3 -6 regress/mdoc/break/brokenbreaker.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/break/notopen.in (1.2), "Exp", lines: +3 -2 regress/mdoc/break/notopen.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/break/notopen.out_lint (1.5), "Exp", lines: +1 -4 regress/mdoc/break/notopen.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/break/tail.in (1.3), "Exp", lines: +3 -2 regress/mdoc/break/tail.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/break/tail.out_lint (1.6), "Exp", lines: +5 -8 regress/mdoc/break/tail.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/break/twice.in (1.3), "Exp", lines: +3 -2 regress/mdoc/break/twice.out_ascii (1.3), "Exp", lines: +1 -1 regress/mdoc/break/twice.out_lint (1.6), "Exp", lines: +10 -13 regress/mdoc/break/twice.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/break/two.in (1.2), "Exp", lines: +3 -2 regress/mdoc/break/two.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/break/two.out_lint (1.5), "Exp", lines: +8 -11 regress/mdoc/break/two.out_markdown (1.2), "Exp", lines: +1 -1 regress/roff/args/man.in (1.3), "Exp", lines: +2 -1 regress/roff/args/man.out_lint (1.4), "Exp", lines: +9 -10 regress/roff/args/mdoc.in (1.2), "Exp", lines: +3 -2 regress/roff/args/mdoc.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/args/mdoc.out_lint (1.5), "Exp", lines: +13 -16 regress/roff/args/roff.in (1.3), "Exp", lines: +2 -1 regress/roff/args/roff.out_lint (1.4), "Exp", lines: +16 -17 regress/roff/br/args.in (1.2), "Exp", lines: +2 -1 regress/roff/br/args.out_lint (1.4), "Exp", lines: +1 -2 regress/roff/cc/basic.in (1.2), "Exp", lines: +2 -1 regress/roff/cc/basic.out_lint (1.4), "Exp", lines: +1 -2 regress/roff/cond/before-Dd.in (1.2), "Exp", lines: +3 -2 regress/roff/cond/before-Dd.out_ascii (1.3), "Exp", lines: +1 -1 regress/roff/cond/close.in (1.2), "Exp", lines: +2 -1 regress/roff/cond/close.out_lint (1.6), "Exp", lines: +2 -3 regress/roff/cond/ie.in (1.2), "Exp", lines: +2 -1 regress/roff/cond/if.in (1.2), "Exp", lines: +2 -1 regress/roff/cond/if.out_lint (1.5), "Exp", lines: +2 -3 regress/roff/cond/numeric.in (1.2), "Exp", lines: +2 -1 regress/roff/cond/register.in (1.2), "Exp", lines: +2 -1 regress/roff/cond/strcmp.in (1.2), "Exp", lines: +2 -1 regress/roff/cond/string.in (1.3), "Exp", lines: +2 -1 regress/roff/de/Dd.in (1.2), "Exp", lines: +3 -2 regress/roff/de/Dd.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/de/Makefile (1.3), "Exp", lines: +2 -2 regress/roff/de/TH.in (1.2), "Exp", lines: +2 -1 regress/roff/de/append.in (1.3), "Exp", lines: +3 -2 regress/roff/de/append.out_ascii (1.3), "Exp", lines: +1 -1 regress/roff/de/cond.in (1.2), "Exp", lines: +3 -2 regress/roff/de/cond.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/de/escname.in (1.2), "Exp", lines: +3 -2 regress/roff/de/escname.out_ascii (1.3), "Exp", lines: +1 -1 regress/roff/de/escname.out_lint (1.6), "Exp", lines: +8 -11 regress/roff/de/factorial.in (1.2), "Exp", lines: +3 -2 regress/roff/de/factorial.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/de/indir.in (1.2), "Exp", lines: +3 -2 regress/roff/de/indir.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/de/indir.out_lint (1.6), "Exp", lines: +4 -7 regress/roff/de/infinite.in (1.3), "Exp", lines: +3 -2 regress/roff/de/infinite.out_ascii (1.3), "Exp", lines: +1 -1 regress/roff/de/infinite.out_lint (1.6), "Exp", lines: +2 -5 regress/roff/de/startde.in (1.2), "Exp", lines: +3 -2 regress/roff/de/startde.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/ds/append.in (1.2), "Exp", lines: +3 -2 regress/roff/ds/append.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/ds/escname.in (1.2), "Exp", lines: +3 -2 regress/roff/ds/escname.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/ds/nested.in (1.2), "Exp", lines: +3 -2 regress/roff/ds/nested.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/ds/quoting.in (1.2), "Exp", lines: +3 -2 regress/roff/ds/quoting.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/B.in (1.2), "Exp", lines: +3 -2 regress/roff/esc/B.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/B.out_lint (1.5), "Exp", lines: +1 -4 regress/roff/esc/c.in (1.3), "Exp", lines: +3 -2 regress/roff/esc/c.out_ascii (1.4), "Exp", lines: +1 -1 regress/roff/esc/c_man.in (1.3), "Exp", lines: +2 -1 regress/roff/esc/e.in (1.2), "Exp", lines: +3 -2 regress/roff/esc/e.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/f.in (1.2), "Exp", lines: +3 -2 regress/roff/esc/f.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/h.in (1.5), "Exp", lines: +3 -2 regress/roff/esc/h.out_ascii (1.4), "Exp", lines: +1 -1 regress/roff/esc/h.out_lint (1.7), "Exp", lines: +1 -4 regress/roff/esc/ignore.in (1.2), "Exp", lines: +3 -2 regress/roff/esc/ignore.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/ignore.out_lint (1.5), "Exp", lines: +1 -4 regress/roff/esc/l.in (1.2), "Exp", lines: +3 -2 regress/roff/esc/l.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/l.out_lint (1.4), "Exp", lines: +1 -4 regress/roff/esc/multi.in (1.2), "Exp", lines: +3 -2 regress/roff/esc/multi.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/o.in (1.2), "Exp", lines: +3 -2 regress/roff/esc/o.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/one.in (1.2), "Exp", lines: +3 -2 regress/roff/esc/one.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/p.in (1.2), "Exp", lines: +3 -2 regress/roff/esc/p.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/two.in (1.2), "Exp", lines: +3 -2 regress/roff/esc/two.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/w.in (1.2), "Exp", lines: +3 -2 regress/roff/esc/w.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/w.out_lint (1.5), "Exp", lines: +1 -4 regress/roff/esc/z.in (1.2), "Exp", lines: +3 -2 regress/roff/esc/z.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/ft/badargs-mdoc.in (1.2), "Exp", lines: +3 -2 regress/roff/ft/badargs-mdoc.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/ft/badargs-mdoc.out_lint (1.5), "Exp", lines: +2 -5 regress/roff/ft/badargs.in (1.2), "Exp", lines: +2 -1 regress/roff/ft/badargs.out_lint (1.4), "Exp", lines: +2 -3 regress/roff/ig/basic.in (1.2), "Exp", lines: +3 -2 regress/roff/ig/basic.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/ig/basic.out_lint (1.6), "Exp", lines: +3 -6 regress/roff/it/badarg.in (1.2), "Exp", lines: +3 -2 regress/roff/it/badarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/it/badarg.out_lint (1.6), "Exp", lines: +2 -5 regress/roff/it/double.in (1.2), "Exp", lines: +2 -1 regress/roff/it/text.in (1.2), "Exp", lines: +3 -2 regress/roff/it/text.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/ll/basic.in (1.2), "Exp", lines: +3 -2 regress/roff/ll/basic.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/na/args.in (1.2), "Exp", lines: +2 -1 regress/roff/nr/argc.in (1.2), "Exp", lines: +3 -2 regress/roff/nr/argc.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/nr/divzero.in (1.2), "Exp", lines: +2 -1 regress/roff/nr/divzero.out_lint (1.4), "Exp", lines: +2 -3 regress/roff/nr/escname.in (1.2), "Exp", lines: +2 -1 regress/roff/nr/escname.out_lint (1.4), "Exp", lines: +4 -5 regress/roff/nr/eval.in (1.2), "Exp", lines: +2 -1 regress/roff/nr/int.in (1.2), "Exp", lines: +2 -1 regress/roff/nr/predef.in (1.2), "Exp", lines: +2 -1 regress/roff/nr/rr.in (1.2), "Exp", lines: +2 -1 regress/roff/nr/scale.in (1.2), "Exp", lines: +2 -1 regress/roff/po/basic-mdoc.in (1.2), "Exp", lines: +3 -2 regress/roff/po/basic-mdoc.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/ps/ignore.in (1.2), "Exp", lines: +2 -1 regress/roff/rm/basic.in (1.2), "Exp", lines: +3 -2 regress/roff/rm/basic.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/rn/append.in (1.2), "Exp", lines: +3 -2 regress/roff/rn/append.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/scale/horiz.in (1.2), "Exp", lines: +2 -1 regress/roff/sp/badargs-man.in (1.2), "Exp", lines: +2 -1 regress/roff/sp/badargs-man.out_lint (1.4), "Exp", lines: +1 -2 regress/roff/sp/badargs-mdoc.in (1.2), "Exp", lines: +3 -2 regress/roff/sp/badargs-mdoc.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/sp/negative.in (1.2), "Exp", lines: +2 -1 regress/roff/sp/scaling-man.in (1.2), "Exp", lines: +2 -1 regress/roff/sp/scaling-mdoc.in (1.2), "Exp", lines: +3 -2 regress/roff/sp/scaling-mdoc.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/string/escape.in (1.3), "Exp", lines: +2 -1 regress/roff/string/infinite.in (1.2), "Exp", lines: +2 -1 regress/roff/string/name.in (1.2), "Exp", lines: +3 -2 regress/roff/string/name.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/string/name.out_lint (1.5), "Exp", lines: +17 -20 regress/roff/string/std.in (1.2), "Exp", lines: +2 -1 regress/roff/string/std.out_lint (1.3), "Exp", lines: +2 -3 regress/roff/string/zerolength.in (1.3), "Exp", lines: +2 -1 regress/roff/ta/basic-man.in (1.3), "Exp", lines: +2 -1 regress/roff/ta/basic-mdoc.in (1.2), "Exp", lines: +3 -2 regress/roff/ta/basic-mdoc.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/ti/basic-man.in (1.3), "Exp", lines: +2 -1 regress/roff/ti/basic-mdoc.in (1.2), "Exp", lines: +3 -2 regress/roff/ti/basic-mdoc.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/tr/args.in (1.2), "Exp", lines: +2 -1 regress/roff/tr/args.out_lint (1.5), "Exp", lines: +3 -4 regress/tbl/data/blankline.in (1.2), "Exp", lines: +2 -1 regress/tbl/data/block_unclosed.in (1.2), "Exp", lines: +2 -1 regress/tbl/data/block_unclosed.out_lint (1.5), "Exp", lines: +2 -3 regress/tbl/data/block_width.in (1.3), "Exp", lines: +3 -2 regress/tbl/data/block_width.out_ascii (1.3), "Exp", lines: +1 -1 regress/tbl/data/block_wrap.in (1.2), "Exp", lines: +3 -2 regress/tbl/data/block_wrap.out_ascii (1.2), "Exp", lines: +1 -1 regress/tbl/data/empty.in (1.2), "Exp", lines: +2 -1 regress/tbl/data/empty.out_lint (1.5), "Exp", lines: +1 -2 regress/tbl/layout/center.in (1.4), "Exp", lines: +2 -1 regress/tbl/layout/complex.in (1.2), "Exp", lines: +2 -1 regress/tbl/layout/complex.out_lint (1.4), "Exp", lines: +5 -6 regress/tbl/layout/empty.in (1.2), "Exp", lines: +2 -1 regress/tbl/layout/empty.out_lint (1.4), "Exp", lines: +2 -3 regress/tbl/layout/emptyline.in (1.2), "Exp", lines: +2 -1 regress/tbl/layout/lines-nogroff.in (1.2), "Exp", lines: +3 -2 regress/tbl/layout/lines-nogroff.out_ascii (1.2), "Exp", lines: +1 -1 regress/tbl/layout/lines.in (1.2), "Exp", lines: +3 -2 regress/tbl/layout/lines.out_ascii (1.2), "Exp", lines: +1 -1 regress/tbl/layout/numbers.in (1.3), "Exp", lines: +2 -1 regress/tbl/layout/span.in (1.5), "Exp", lines: +2 -1 regress/tbl/macro/column.in (1.2), "Exp", lines: +3 -2 regress/tbl/macro/column.out_ascii (1.2), "Exp", lines: +1 -1 regress/tbl/macro/man.in (1.3), "Exp", lines: +2 -1 regress/tbl/macro/man.out_lint (1.4), "Exp", lines: +2 -3 regress/tbl/macro/nested.in (1.3), "Exp", lines: +2 -1 regress/tbl/macro/nested.out_lint (1.4), "Exp", lines: +1 -2 regress/tbl/mod/badfont.in (1.2), "Exp", lines: +2 -1 regress/tbl/mod/badfont.out_lint (1.4), "Exp", lines: +2 -3 regress/tbl/mod/expand-toowide.in (1.2), "Exp", lines: +2 -1 regress/tbl/mod/expand.in (1.3), "Exp", lines: +2 -1 regress/tbl/mod/font.in (1.3), "Exp", lines: +2 -1 regress/tbl/mod/font.out_lint (1.5), "Exp", lines: +5 -6 regress/tbl/mod/misalign.in (1.2), "Exp", lines: +2 -1 regress/tbl/mod/spacing.in (1.2), "Exp", lines: +2 -1 regress/tbl/mod/width.in (1.3), "Exp", lines: +2 -1 regress/tbl/opt/box.in (1.4), "Exp", lines: +2 -1 regress/tbl/opt/center.in (1.2), "Exp", lines: +2 -1 regress/tbl/opt/invalid.in (1.2), "Exp", lines: +2 -1 regress/tbl/opt/invalid.out_lint (1.4), "Exp", lines: +5 -6 Messages of the -Wbase level now print STYLE:. Since this causes horrible churn anyway, profit of the opportunity to stop excessive testing, such that this is hopefully the last instance of such churn. Consistently use OpenBSD RCS tags, blank .Os, blank fourth .TH argument, and Mdocdate like everywhere else. Use -Ios=OpenBSD for platform-independent predictable output. 2017-07-04 14:40 schwarze Changed: main.c (1.299), "Exp", lines: +2 -3 mandoc.1 (1.214), "Exp", lines: +7 -1 read.c (1.188), "Exp", lines: +2 -2 Printing "BASE:" in messages about violations of base system conventions is confusing, simply print "STYLE:", which is intuitive and does not sound excessively alarming; suggested by jmc@, OK tedu@ jmc@. 2017-07-03 17:33 schwarze Changed: mandoc.1 (1.213), "Exp", lines: +10 -6 mandoc.h (1.241), "Exp", lines: +3 -3 mdoc_validate.c (1.348), "Exp", lines: +95 -49 read.c (1.187), "Exp", lines: +2 -2 report trailing delimiters after macros where they are usually a mistake; the idea came up in a discussion with Thomas Klausner <wiz at NetBSD> 2017-07-03 13:40 schwarze Changed: mandoc.1 (1.212), "Exp", lines: +10 -2 mandoc.c (1.103), "Exp", lines: +11 -3 mandoc.h (1.240), "Exp", lines: +2 -1 read.c (1.186), "Exp", lines: +2 -1 warn about time machines; suggested by Thomas Klausner <wiz @ NetBSD> 2017-07-02 21:18 schwarze Changed: main.c (1.298), "Exp", lines: +6 -2 mandoc_xr.c (1.3), "Exp", lines: +3 -1 mandoc_xr.h (1.3), "Exp", lines: +2 -1 If a single page references the same non-existent manual more than once, print "(N times)" after the message "referenced manual not found", to lessen the risk that people fix the first instance and miss the others; jmc@ confirmed that this is useful. 2017-07-02 15:31 schwarze Changed: main.c (1.297), "Exp", lines: +6 -4 mandoc.1 (1.211), "Exp", lines: +20 -2 mandoc.h (1.239), "Exp", lines: +2 -1 mandoc_xr.c (1.2), "Exp", lines: +14 -7 mandoc_xr.h (1.2), "Exp", lines: +3 -3 mdoc_validate.c (1.347), "Exp", lines: +13 -3 read.c (1.185), "Exp", lines: +2 -1 add warning "cross reference to self"; inspired by mdoclint 2017-07-01 12:54 schwarze Changed: main.c (1.296), "Exp", lines: +12 -3 When checking cross references with -Tlint, ultimately fall back to looking in the current working directory. Not a security issue because the files are never open(2)ed, only access(2)ed. Requested by jmc@ and inspired by mdoclint(1). This cannot be perfect because it only works for files having the exact filename ./pagename.sec - mandoc has no way to figure out which files might contain a manual for multiple names, or that files in autohell might be called ./pagename.man.in instead, or which subdirectories might contain additional source files. Also, it may hide messages if you have bogus stuff lying around in the directory where you run mandoc -Tlint. But jmc@ considers it important, and good enough for everyday use. Also avoid leaking the memory for the file name while here. 2017-07-01 12:02 schwarze Changed: main.c (1.295), "Exp", lines: +13 -7 When checking the validity of cross references with -Tlint, fall back from database search to file system search just like man(1) does when looking up manuals. This is not too expensive because on a system having up-to-date mandoc.db(5) files, it only prolongs the time needed to check *invalid* references - and you are not supposed to have many of those, right? And on a system with missing or invalid mandoc.db(5) files, spending a bit of time and warning loudly about the real problem is also better than quickly issuing bogus warnings about cross references that are actually valid. 2017-07-01 09:47 schwarze Added: mandoc_xr.c (1.1) mandoc_xr.h (1.1) Changed: Makefile (1.514), "Exp", lines: +4 -1 Makefile.depend (1.32), "Exp", lines: +13 -11 configure (1.64), "Exp", lines: +3 -1 configure.local.example (1.32), "Exp", lines: +6 -1 main.c (1.294), "Exp", lines: +34 -1 manconf.h (1.5), "Exp", lines: +3 -2 mandoc.1 (1.210), "Exp", lines: +10 -2 mandoc.h (1.238), "Exp", lines: +2 -1 mandoc_headers.3 (1.15), "Exp", lines: +11 -1 manpath.c (1.35), "Exp", lines: +8 -1 mansearch.c (1.74), "Exp", lines: +9 -3 mdoc_validate.c (1.346), "Exp", lines: +6 -2 read.c (1.184), "Exp", lines: +2 -1 Basic reporting of .Xrs to manual pages that don't exist in the base system, inspired by mdoclint(1). We are able to do this because (1) the -mdoc parser, the -Tlint validator, and the man(1) manual page lookup code are all in the same program and (2) the mandoc.db(5) database format allows fast lookup. Feedback from, previous versions tested by, and OK jmc@. A few features will be added to this in the tree, step by step. 2017-06-29 16:31 schwarze Changed: eqn.c (1.72), "Exp", lines: +2 -2 Skip whitespace at the beginning of eqn(7) nodes, in particular ~ and ^ that misrendered; found by bentley@ in glCopyTexSubImage1D(3); also affected glAccum(3), glClipPlane(3), glDrawPixels(3), glEvalMesh(3), and others. 2017-06-29 15:22 schwarze Added: regress/mdoc/Bl/column_nogroff.in (1.1) regress/mdoc/Bl/column_nogroff.out_ascii (1.1) regress/mdoc/Bl/column_nogroff.out_lint (1.1) regress/mdoc/Bl/column_nogroff.out_markdown (1.1) Changed: mandoc.1 (1.209), "Exp", lines: +19 -2 mandoc.h (1.237), "Exp", lines: +3 -1 mdoc_validate.c (1.345), "Exp", lines: +20 -5 read.c (1.183), "Exp", lines: +3 -1 regress/mdoc/Bl/Makefile (1.8), "Exp", lines: +7 -4 regress/mdoc/Bl/column.in (1.2), "Exp", lines: +3 -0 regress/mdoc/Bl/column.out_lint (1.5), "Exp", lines: +7 -4 warn about some non-portable idioms in .Bl -column; triggered by a question from Yuri Pankov (illumos) 2017-06-29 13:17 schwarze Changed: mdoc.7 (1.267), "Exp", lines: +5 -5 Clarify that .Ta as a line macro is a portability problem, even though mandoc(1) handles it; triggered by a question from Yuri Pankov (illumos). 2017-06-28 12:52 schwarze Changed: man.c (1.176), "Exp", lines: +7 -4 fix incomplete handling of roff(7) nodes in man(7) block next-line scope; assertion failure in tclsh(1) reported by deraadt@ via bentley@ 2017-06-28 00:59 schwarze Changed: tbl.7 (1.28), "Exp", lines: +253 -187 Rewrite half of this, i was completely unaware how bad it was. Remove several lies, lots of duplicate information, and a lengthy discussion of features we don't support. Clarify the wording in some places and make it more concise in others. Delete examples from where they don't belong and write a new EXAMPLES section from scratch. 2017-06-27 19:51 schwarze Added: regress/tbl/mod/spacing.in (1.1) regress/tbl/mod/spacing.out_ascii (1.1) Changed: regress/tbl/mod/Makefile (1.4), "Exp", lines: +1 -1 test inter-column spacing 2017-06-27 18:25 schwarze Changed: out.c (1.70), "Exp", lines: +10 -3 out.h (1.31), "Exp", lines: +2 -1 tbl_layout.c (1.44), "Exp", lines: +3 -1 tbl_term.c (1.55), "Exp", lines: +28 -21 Implement spacing of columns as defined in the table layout; this is for example used by lftp(1) and, ironically, misused by our very own tbl(7) manual... 2017-06-27 12:18 schwarze Changed: mandoc.1 (1.208), "Exp", lines: +4 -2 mdoc_validate.c (1.344), "Exp", lines: +6 -3 regress/mdoc/Ns/position.in (1.2), "Exp", lines: +7 -1 regress/mdoc/Ns/position.out_ascii (1.2), "Exp", lines: +5 -1 regress/mdoc/Ns/position.out_lint (1.5), "Exp", lines: +2 -1 regress/mdoc/Ns/position.out_markdown (1.2), "Exp", lines: +7 -1 warn about .Ns macros that have no effect because they are followed by an isolated closing delimiter; inspired by mdoclint 2017-06-26 20:11 schwarze Added: regress/eqn/define/font.in (1.1) regress/eqn/define/font.out_ascii (1.1) regress/eqn/define/quoted.in (1.1) regress/eqn/define/quoted.out_ascii (1.1) regress/eqn/delim/Makefile (1.1) regress/eqn/delim/basic.in (1.1) regress/eqn/delim/basic.out_ascii (1.1) regress/eqn/nullary/symbol.in (1.1) regress/eqn/nullary/symbol.out_ascii (1.1) regress/eqn/nullary/symbol.out_html (1.1) regress/eqn/nullary/symbol.out_utf8 (1.1) regress/eqn/unary/bold.in (1.1) regress/eqn/unary/bold.out_ascii (1.1) regress/eqn/unary/bold.out_html (1.1) Changed: regress/eqn/Makefile (1.2), "Exp", lines: +1 -1 regress/eqn/define/Makefile (1.3), "Exp", lines: +2 -2 regress/eqn/define/invalid.out_ascii (1.2), "Exp", lines: +3 -3 regress/eqn/fromto/basic.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/fromto/basic.out_html (1.2), "Exp", lines: +1 -1 regress/eqn/fromto/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/matrix/basic.in (1.2), "Exp", lines: +3 -0 regress/eqn/matrix/basic.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/matrix/basic.out_html (1.2), "Exp", lines: +1 -1 regress/eqn/nullary/Makefile (1.2), "Exp", lines: +3 -2 regress/eqn/nullary/roman.in (1.2), "Exp", lines: +22 -4 regress/eqn/nullary/roman.out_ascii (1.2), "Exp", lines: +7 -3 regress/eqn/nullary/roman.out_html (1.2), "Exp", lines: +15 -1 regress/eqn/over/precedence.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/over/precedence.out_html (1.2), "Exp", lines: +1 -1 regress/eqn/size/basic.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/subsup/combine.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/subsup/combine.out_html (1.2), "Exp", lines: +1 -1 regress/eqn/subsup/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/subsup/noarg.out_html (1.2), "Exp", lines: +1 -1 regress/eqn/subsup/sub_group.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/subsup/sub_group.out_html (1.2), "Exp", lines: +1 -1 regress/eqn/unary/Makefile (1.2), "Exp", lines: +2 -2 regress/eqn/unary/diacrit.out_ascii (1.2), "Exp", lines: +1 -1 regress/eqn/unary/diacrit.out_html (1.2), "Exp", lines: +1 -1 regress/eqn/unary/sqrt.in (1.3), "Exp", lines: +1 -1 regress/eqn/unary/sqrt.out_ascii (1.3), "Exp", lines: +1 -1 regress/eqn/unary/sqrt.out_html (1.3), "Exp", lines: +1 -1 catch up with the recent eqn(7) improvements 2017-06-26 20:09 schwarze Changed: eqn.c (1.71), "Exp", lines: +161 -241 libroff.h (1.40), "Exp", lines: +4 -3 Complete rewrite of the lexer in a single function with four operation modes instead of four functions, resulting in considerable simplification, fifty lines less of code, fifteen fewer automatic variables, and several bug fixes, for example: 1. The delim control statement consumes exactly two bytes of input, requires no whitespace after these two bytes, and does not treat quotes in any special way. 2. If the argument of left, right, gfont, gsize, or size is defined as an alias, only the first word of the value is used as the delimiter, font name, or font size. 3. If a back, fwd, down, or up keyword is followed by another keyword instead of the required number, GNU eqn does nothing useful, but typically errors out. So no need to have special handling (with an ugly goto!) for it in mandoc. Also getting rid of one pointless static buffer and twelve redundant calls to strlcpy(3). 2017-06-26 11:04 schwarze Changed: eqn.c (1.70), "Exp", lines: +10 -7 when splitting a composite word, do not forget to close the inserted list box 2017-06-25 17:43 schwarze Changed: mandoc.1 (1.207), "Exp", lines: +7 -2 mandoc.h (1.236), "Exp", lines: +2 -1 mdoc_validate.c (1.343), "Exp", lines: +63 -2 read.c (1.182), "Exp", lines: +2 -1 Catch typos in .Sh names; suggested by jmc@. I'm using a very simple, linear time / zero space fuzzy string matching heuristic rather than a full Levenshtein metric, to keep the code both simple and fast. 2017-06-25 14:09 schwarze Added: regress/man/MT/Makefile (1.1) regress/man/MT/args.in (1.1) regress/man/MT/args.out_ascii (1.1) regress/man/MT/args.out_lint (1.1) regress/man/MT/noME.in (1.1) regress/man/MT/noME.out_ascii (1.1) regress/man/MT/noME.out_lint (1.1) Changed: regress/man/Makefile (1.2), "Exp", lines: +1 -1 test new MT macro 2017-06-25 12:51 schwarze Changed: regress/char/space/esct-man.out_lint (1.3), "Exp", lines: +1 -1 regress/char/space/esct-mdoc.out_lint (1.4), "Exp", lines: +3 -2 regress/char/space/tab-man.out_lint (1.3), "Exp", lines: +1 -1 regress/char/space/tab.out_lint (1.4), "Exp", lines: +3 -2 regress/char/space/trailing-mdoc.out_lint (1.4), "Exp", lines: +3 -2 regress/char/unicode/input.out_lint (1.3), "Exp", lines: +1 -1 regress/char/unicode/invalid.out_lint (1.4), "Exp", lines: +3 -2 regress/eqn/define/infinite.out_lint (1.5), "Exp", lines: +3 -2 regress/eqn/define/invalid.out_lint (1.5), "Exp", lines: +3 -2 regress/eqn/over/noarg.out_lint (1.5), "Exp", lines: +3 -2 regress/man/B/args.out_lint (1.3), "Exp", lines: +1 -1 regress/man/B/blank.out_lint (1.3), "Exp", lines: +1 -1 regress/man/IP/empty.out_lint (1.3), "Exp", lines: +1 -1 regress/man/OP/args.out_lint (1.3), "Exp", lines: +1 -1 regress/man/PD/args.out_lint (1.3), "Exp", lines: +1 -1 regress/man/PP/args.out_lint (1.3), "Exp", lines: +1 -1 regress/man/PP/empty.out_lint (1.3), "Exp", lines: +1 -1 regress/man/RS/REarg.out_lint (1.3), "Exp", lines: +1 -1 regress/man/RS/empty.out_lint (1.3), "Exp", lines: +1 -1 regress/man/RS/lonelyRE.out_lint (1.3), "Exp", lines: +1 -1 regress/man/RS/noRE.out_lint (1.3), "Exp", lines: +1 -1 regress/man/SH/broken.out_lint (1.3), "Exp", lines: +1 -1 regress/man/SH/broken_eline.out_lint (1.3), "Exp", lines: +1 -1 regress/man/SH/empty_before.out_lint (1.3), "Exp", lines: +1 -1 regress/man/SH/noarg.out_lint (1.4), "Exp", lines: +1 -1 regress/man/SS/broken.out_lint (1.3), "Exp", lines: +1 -1 regress/man/SS/broken_eline.out_lint (1.3), "Exp", lines: +1 -1 regress/man/SS/noarg.out_lint (1.4), "Exp", lines: +1 -1 regress/man/TH/case.out_lint (1.3), "Exp", lines: +1 -1 regress/man/TH/nobody.out_lint (1.3), "Exp", lines: +1 -1 regress/man/TH/sixargs.out_lint (1.3), "Exp", lines: +1 -1 regress/man/TP/broken.out_lint (1.4), "Exp", lines: +1 -1 regress/man/TP/double.out_lint (1.3), "Exp", lines: +1 -1 regress/man/TP/eof.out_lint (1.3), "Exp", lines: +1 -1 regress/man/TS/break.out_lint (1.3), "Exp", lines: +1 -1 regress/man/UR/args.out_lint (1.3), "Exp", lines: +1 -1 regress/man/UR/noUE.out_lint (1.3), "Exp", lines: +1 -1 regress/man/blank/afterSH.out_lint (1.3), "Exp", lines: +1 -1 regress/man/blank/afterSS.out_lint (1.3), "Exp", lines: +1 -1 regress/man/blank/line.out_lint (1.4), "Exp", lines: +1 -1 regress/man/nf/args.out_lint (1.3), "Exp", lines: +1 -1 regress/man/nf/dupe.out_lint (1.3), "Exp", lines: +1 -1 regress/mdoc/Ad/noarg.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/An/break.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/Aq/empty.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Ar/punct.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/At/invalid.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bd/badargs.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bd/beforeNAME.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bd/blank.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bd/break.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bd/broken.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bd/nested.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bd/unclosed.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bf/badargs.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bf/break.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bf/broken.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bf/multiargs.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bk/badarg.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bk/broken.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/badargs.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/bareIt.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/bareTa.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/break.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/breakingIt.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/broken.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/column.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/empty.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/emptyhead.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/emptyitem.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/emptytag.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/noIt.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/notype.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bl/tag.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Brq/empty.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Bx/args.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Cd/noarg.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Cm/noarg.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/D1/spacing.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Db/args.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dd/badarg.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dd/dupe.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dd/late.out_lint (1.3), "Exp", lines: +2 -1 regress/mdoc/Dd/long.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dd/manarg.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dd/noarg.out_lint (1.3), "Exp", lines: +2 -1 regress/mdoc/Dd/order.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dl/spacing.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dq/empty.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dt/badsec.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dt/case.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dt/dupe.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dt/fourargs.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dt/late.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dt/missing.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dt/noarg.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dt/nobody.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dt/nosec.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dt/order.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Dv/noarg.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/Em/noarg.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Em/punct.out_lint (1.6), "Exp", lines: +3 -2 regress/mdoc/Eo/break.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Eo/obsolete.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Eo/unclosed.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Er/noarg.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/Ev/noarg.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/Ex/noname.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Ex/nostd.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Fd/empty.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Fl/punct.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Fo/noarg.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Fo/nohead.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Fo/obsolete.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Fo/punct.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Fo/warn.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Ic/noarg.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/In/noarg.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/Lb/badargs.out_lint (1.7), "Exp", lines: +3 -2 regress/mdoc/Li/punct.out_lint (1.6), "Exp", lines: +3 -2 regress/mdoc/Lk/noarg.out_lint (1.6), "Exp", lines: +3 -2 regress/mdoc/Ms/noarg.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/Mt/simple.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Nd/broken.out_lint (1.6), "Exp", lines: +3 -2 regress/mdoc/Nd/noarg.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Nm/badNAME.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Nm/badNAMEuse.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Nm/break.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Nm/broken.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Nm/punct.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/No/punct.out_lint (1.7), "Exp", lines: +3 -2 regress/mdoc/Ns/position.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Oo/punct.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Op/break.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Op/broken.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Op/punct.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Os/dupe.out_lint (1.3), "Exp", lines: +4 -1 regress/mdoc/Os/late.out_lint (1.3), "Exp", lines: +2 -1 regress/mdoc/Pa/punct.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Pf/spacing.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Pp/arg.out_lint (1.6), "Exp", lines: +3 -2 regress/mdoc/Qq/empty.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Rs/allch.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Rs/args.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Rs/empty.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Rv/noname.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Rv/nostd.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sh/badNAME.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sh/before.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sh/empty.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sh/emptyNAME.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sh/first.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sh/nohead.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sh/order.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sh/orderNAME.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sh/parbefore.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sh/parborder.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sh/punctNAME.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sh/subbefore.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sm/badarg.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sm/twoarg.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sq/empty.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/St/badargs.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/St/call.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sx/noarg.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sy/noarg.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Sy/punct.out_lint (1.6), "Exp", lines: +3 -2 regress/mdoc/Tn/noarg.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/Ud/arg.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/Ux/punct.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/Va/noarg.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/Vt/noarg.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/Xr/args.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/blank/comment.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/blank/line.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/blank/list.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/break/brokenbreaker.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/break/notopen.out_lint (1.4), "Exp", lines: +3 -2 regress/mdoc/break/tail.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/break/twice.out_lint (1.5), "Exp", lines: +3 -2 regress/mdoc/break/two.out_lint (1.4), "Exp", lines: +3 -2 regress/roff/args/man.out_lint (1.3), "Exp", lines: +1 -1 regress/roff/args/mdoc.out_lint (1.4), "Exp", lines: +3 -2 regress/roff/args/roff.out_lint (1.3), "Exp", lines: +1 -1 regress/roff/br/args.out_lint (1.3), "Exp", lines: +1 -1 regress/roff/cc/basic.out_lint (1.3), "Exp", lines: +1 -1 regress/roff/cond/close.out_lint (1.5), "Exp", lines: +1 -1 regress/roff/cond/if.out_lint (1.4), "Exp", lines: +1 -1 regress/roff/de/escname.out_lint (1.5), "Exp", lines: +3 -2 regress/roff/de/indir.out_lint (1.5), "Exp", lines: +3 -2 regress/roff/de/infinite.out_lint (1.5), "Exp", lines: +3 -2 regress/roff/esc/B.out_lint (1.4), "Exp", lines: +3 -2 regress/roff/esc/h.out_lint (1.6), "Exp", lines: +3 -2 regress/roff/esc/ignore.out_lint (1.4), "Exp", lines: +3 -2 regress/roff/esc/l.out_lint (1.3), "Exp", lines: +3 -2 regress/roff/esc/w.out_lint (1.4), "Exp", lines: +3 -2 regress/roff/ft/badargs-mdoc.out_lint (1.4), "Exp", lines: +3 -2 regress/roff/ft/badargs.out_lint (1.3), "Exp", lines: +1 -1 regress/roff/ig/basic.out_lint (1.5), "Exp", lines: +3 -2 regress/roff/it/badarg.out_lint (1.5), "Exp", lines: +3 -2 regress/roff/nr/divzero.out_lint (1.3), "Exp", lines: +1 -1 regress/roff/nr/escname.out_lint (1.3), "Exp", lines: +1 -1 regress/roff/sp/badargs-man.out_lint (1.3), "Exp", lines: +1 -1 regress/roff/string/name.out_lint (1.4), "Exp", lines: +3 -2 regress/roff/string/std.out_lint (1.2), "Exp", lines: +1 -1 regress/roff/tr/args.out_lint (1.4), "Exp", lines: +1 -1 regress/tbl/data/block_unclosed.out_lint (1.4), "Exp", lines: +1 -1 regress/tbl/data/empty.out_lint (1.4), "Exp", lines: +1 -1 regress/tbl/layout/complex.out_lint (1.3), "Exp", lines: +1 -1 regress/tbl/layout/empty.out_lint (1.3), "Exp", lines: +1 -1 regress/tbl/macro/man.out_lint (1.3), "Exp", lines: +1 -1 regress/tbl/macro/nested.out_lint (1.3), "Exp", lines: +1 -1 regress/tbl/mod/badfont.out_lint (1.3), "Exp", lines: +1 -1 regress/tbl/mod/font.out_lint (1.4), "Exp", lines: +1 -1 regress/tbl/opt/invalid.out_lint (1.3), "Exp", lines: +1 -1 cope with changes in BASE messages 2017-06-25 11:45 schwarze Changed: man_macro.c (1.123), "Exp", lines: +6 -1 add support for the MT and ME mailto macros, used for example in wg(8); patch from bentley@ 2017-06-25 11:42 schwarze Changed: man.7 (1.136), "Exp", lines: +16 -2 man_html.c (1.145), "Exp", lines: +11 -2 man_term.c (1.208), "Exp", lines: +3 -1 man_validate.c (1.132), "Exp", lines: +3 -1 mandoc.1 (1.206), "Exp", lines: +7 -3 roff.c (1.317), "Exp", lines: +2 -2 roff.h (1.57), "Exp", lines: +3 -1 add support for the MT and ME mailto macros, used for example in wg(8); patch from bentley@ 2017-06-24 21:08 schwarze Changed: mandoc.1 (1.205), "Exp", lines: +2 -2 delete useless .Ns macro that jmc@ found with mdoclint(1) 2017-06-24 19:06 schwarze Changed: mandoc.1 (1.204), "Exp", lines: +7 -1 document message "unknown architecture" 2017-06-24 18:58 schwarze Changed: mandoc.h (1.235), "Exp", lines: +2 -1 mdoc_validate.c (1.342), "Exp", lines: +40 -1 read.c (1.181), "Exp", lines: +2 -1 operating system dependent message about unknown architecture; inspired by mdoclint 2017-06-24 17:37 schwarze Changed: msec.in (1.8), "Exp", lines: +1 -7 delete old, undocumented, obsolete section names that nobody uses 2017-06-24 15:59 schwarze Changed: mandoc.1 (1.203), "Exp", lines: +8 -2 mandoc.h (1.234), "Exp", lines: +2 -1 mdoc_validate.c (1.341), "Exp", lines: +8 -1 read.c (1.180), "Exp", lines: +2 -1 in the base system, suggest leaving .Os blank; inspired by mdoclint 2017-06-24 14:38 schwarze Changed: att.c (1.16), "Exp", lines: +2 -1 cgi.c (1.156), "Exp", lines: +2 -2 demandoc.c (1.29), "Exp", lines: +4 -3 lib.c (1.14), "Exp", lines: +2 -1 main.c (1.293), "Exp", lines: +43 -26 man_html.c (1.144), "Exp", lines: +2 -1 man_validate.c (1.131), "Exp", lines: +11 -7 mandoc.1 (1.202), "Exp", lines: +70 -29 mandoc.3 (1.40), "Exp", lines: +25 -12 mandoc.h (1.233), "Exp", lines: +14 -4 mandoc_headers.3 (1.14), "Exp", lines: +6 -1 mandocd.c (1.6), "Exp", lines: +2 -2 mandocdb.c (1.251), "Exp", lines: +3 -2 mdoc_html.c (1.291), "Exp", lines: +2 -1 mdoc_validate.c (1.340), "Exp", lines: +21 -15 read.c (1.179), "Exp", lines: +17 -13 roff.c (1.316), "Exp", lines: +6 -6 roff.h (1.56), "Exp", lines: +4 -10 roff_html.c (1.11), "Exp", lines: +2 -1 roff_term.c (1.14), "Exp", lines: +2 -1 st.c (1.14), "Exp", lines: +2 -1 Split -Wstyle into -Wstyle and the even lower -Wbase, and add -Wopenbsd and -Wnetbsd to check conventions for the base system of a specific operating system. Mark operating system specific messages with "(OpenBSD)" at the end. Please use just "-Tlint" to check base system manuals (defaulting to -Wall, which is now -Wbase), but prefer "-Tlint -Wstyle" for the manuals of portable software projects you maintain that are not part of OpenBSD base, to avoid bogus recommendations about base system conventions that do not apply. Issue originally reported by semarie@, solution using an idea from tedu@, discussed with jmc@ and jca@. 2017-06-24 13:49 schwarze Changed: mdoc.7 (1.266), "Exp", lines: +2 -7 st.in (1.29), "Exp", lines: +1 -2 Delete .St -p1003.1-2013. It is an OpenBSD addition that did not get used a single time in three years, and groff did not pick it up either, so removing it does not affect any existing manuals anywhere. Cleanup suggested by jmc@, OK bentley@. 2017-06-23 23:00 schwarze Changed: eqn_html.c (1.14), "Exp", lines: +15 -9 Consistently treat character escape sequences as operators, not as letters, even if their names contain letters. This is certainly not perfect, but code to recognize that \(*a is not an operator but a letter would need a huge table, or Unicode character property support, which won't happen at this time. 2017-06-23 22:20 schwarze Changed: TODO (1.238), "Exp", lines: +8 -1 eqn(1) output operator translation 2017-06-23 21:04 schwarze Changed: eqn.c (1.69), "Exp", lines: +20 -2 splitting a text box sometimes requires wrapping it in a list 2017-06-23 15:58 schwarze Changed: INSTALL (1.19), "Exp", lines: +11 -9 LICENSE (1.17), "Exp", lines: +3 -3 NEWS (1.22), "Exp", lines: +6 -6 Stop using "mdocml" as an official name. Prefer mandoc.bsd.lv to mdocml.bsd.lv. 2017-06-23 02:32 schwarze Changed: eqn_html.c (1.13), "Exp", lines: +50 -4 html.c (1.215), "Exp", lines: +2 -1 html.h (1.86), "Exp", lines: +2 -1 Write text boxes as <mi>, <mn>, or <mo> as appropriate, and write fontstyle or fontweight attributes where required. Missing features reported by bentley@. 2017-06-23 00:30 schwarze Changed: eqn.c (1.68), "Exp", lines: +41 -37 Simplify font handling: 1. Inherit the font attribute from the parent box, such that iteration is no longer required to find the current font. 2. For well-known function name tokens, do not insert an EQN_LISTONE box into the AST; simply set the font attribute of the text box itself that contains the name. Also improve word splitting of unquoted strings in default font mode: 3. Split between numbers and punctuation because both will soon get different HTML markup. 4. Do not split between letters. With the newly ubiquitious font attributes, all formatters will be able to figure out what to do without putting each letter into a separate box. 2017-06-22 00:30 schwarze Changed: eqn.c (1.67), "Exp", lines: +22 -8 Fix font selection for text boxes in the terminal formatter. Issue reported by bentley@. The AST data structure is powerful enough that all required information can easily be provided in the parser, and no change of the formatting code is needed. 2017-06-21 20:50 schwarze Changed: eqn.c (1.66), "Exp", lines: +45 -14 Outside explicit font context, give every letter its own box. The formatters need this to correctly select fonts. Missing feature reported by bentley@. 2017-06-21 18:38 schwarze Changed: eqn.c (1.65), "Exp", lines: +11 -12 quoted words are not parsed for defined keys 2017-06-21 18:04 schwarze Changed: eqn.c (1.64), "Exp", lines: +38 -17 Recognize well-known functions names (the same that Heirloom recognizes, which includes those recognized by groff) and wrap them in a roman box unless they already are in roman context. Missing feature reported by bentley@. 2017-06-20 17:24 schwarze Changed: cgi.c (1.155), "Exp", lines: +5 -5 eqn.c (1.63), "Exp", lines: +71 -71 eqn_html.c (1.12), "Exp", lines: +9 -9 KNF: remove parentheses from switch case labels; no binary change 2017-06-19 12:57 schwarze Changed: mdoc_html.c (1.290), "Exp", lines: +7 -3 Fix a regression in the previous revision: When there is no link description, reuse the URI. Reported by tj@ and bentley@. 2017-06-18 17:36 schwarze Added: regress/roff/rn/Makefile (1.1) regress/roff/rn/append.in (1.1) regress/roff/rn/append.out_ascii (1.1) regress/roff/string/std.in (1.1) regress/roff/string/std.out_ascii (1.1) regress/roff/string/std.out_lint (1.1) Changed: roff.c (1.315), "Exp", lines: +185 -135 regress/roff/Makefile (1.5), "Exp", lines: +1 -1 regress/roff/cond/string.in (1.2), "Exp", lines: +4 -0 regress/roff/cond/string.out_ascii (1.2), "Exp", lines: +2 -0 regress/roff/de/append.in (1.2), "Exp", lines: +12 -1 regress/roff/de/append.out_ascii (1.2), "Exp", lines: +5 -1 regress/roff/string/Makefile (1.2), "Exp", lines: +7 -3 Implement appending to standard man(7) and mdoc(7) macros with .am. With roff_getstrn(), provide finer control which definitions can be used for what: * All definitions can be used for .if d tests and .am appending. * User-defined for \* expansion, .dei expansion, and macro calling. * Predefined for \* expansion. * Standard macros, original or renamed, for macro calling. Several related improvements while here: * Do not return string table entries that have explicitly been removed. * Do not create a rentab entry when trying to rename a non-existent macro. * Clear an existing rentab entry when the external interface roff_setstr() is called with its name. * Avoid trailing blanks in macro lines generated from renamed and from aliased macros. * Delete the duplicate __m*_reserved[] tables, just use roff_name[]. 2017-06-17 23:07 schwarze Changed: mandoc.1 (1.201), "Exp", lines: +7 -2 mandoc.h (1.232), "Exp", lines: +2 -1 read.c (1.178), "Exp", lines: +2 -1 roff.c (1.314), "Exp", lines: +6 -2 style message about duplicate RCS ids; inspired by mdoclint 2017-06-17 22:43 schwarze Changed: man_validate.c (1.130), "Exp", lines: +8 -0 mandoc.1 (1.200), "Exp", lines: +44 -2 mandoc.h (1.231), "Exp", lines: +2 -1 mdoc_validate.c (1.339), "Exp", lines: +5 -2 read.c (1.177), "Exp", lines: +2 -1 roff.c (1.313), "Exp", lines: +19 -1 roff.h (1.55), "Exp", lines: +2 -1 regress/char/space/esct-man.out_lint (1.2), "Exp", lines: +1 -0 regress/char/space/esct-mdoc.out_lint (1.3), "Exp", lines: +1 -0 regress/char/space/tab-man.out_lint (1.2), "Exp", lines: +1 -0 regress/char/space/tab.out_lint (1.3), "Exp", lines: +1 -0 regress/char/space/trailing-mdoc.out_lint (1.3), "Exp", lines: +1 -0 regress/char/unicode/input.out_lint (1.2), "Exp", lines: +1 -0 regress/char/unicode/invalid.out_lint (1.3), "Exp", lines: +1 -0 regress/eqn/define/infinite.out_lint (1.4), "Exp", lines: +1 -0 regress/eqn/define/invalid.out_lint (1.4), "Exp", lines: +1 -0 regress/eqn/over/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/man/B/args.out_lint (1.2), "Exp", lines: +1 -0 regress/man/B/blank.out_lint (1.2), "Exp", lines: +1 -0 regress/man/IP/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/man/OP/args.out_lint (1.2), "Exp", lines: +1 -0 regress/man/PD/args.out_lint (1.2), "Exp", lines: +1 -0 regress/man/PP/args.out_lint (1.2), "Exp", lines: +1 -0 regress/man/PP/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/man/RS/REarg.out_lint (1.2), "Exp", lines: +1 -0 regress/man/RS/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/man/RS/lonelyRE.out_lint (1.2), "Exp", lines: +1 -0 regress/man/RS/noRE.out_lint (1.2), "Exp", lines: +1 -0 regress/man/SH/broken.out_lint (1.2), "Exp", lines: +1 -0 regress/man/SH/broken_eline.out_lint (1.2), "Exp", lines: +1 -0 regress/man/SH/empty_before.out_lint (1.2), "Exp", lines: +1 -0 regress/man/SH/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/man/SS/broken.out_lint (1.2), "Exp", lines: +1 -0 regress/man/SS/broken_eline.out_lint (1.2), "Exp", lines: +1 -0 regress/man/SS/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/man/TH/case.out_lint (1.2), "Exp", lines: +1 -0 regress/man/TH/nobody.out_lint (1.2), "Exp", lines: +1 -0 regress/man/TH/sixargs.out_lint (1.2), "Exp", lines: +1 -0 regress/man/TP/broken.out_lint (1.3), "Exp", lines: +1 -0 regress/man/TP/double.out_lint (1.2), "Exp", lines: +1 -0 regress/man/TP/eof.out_lint (1.2), "Exp", lines: +1 -0 regress/man/TS/break.out_lint (1.2), "Exp", lines: +1 -0 regress/man/TS/vspace.in (1.2), "Exp", lines: +1 -1 regress/man/TS/vspace.out_ascii (1.2), "Exp", lines: +1 -1 regress/man/UR/args.out_lint (1.2), "Exp", lines: +1 -0 regress/man/UR/noUE.out_lint (1.2), "Exp", lines: +1 -0 regress/man/blank/afterSH.out_lint (1.2), "Exp", lines: +1 -0 regress/man/blank/afterSS.out_lint (1.2), "Exp", lines: +1 -0 regress/man/blank/line.out_lint (1.3), "Exp", lines: +1 -0 regress/man/nf/args.out_lint (1.2), "Exp", lines: +1 -0 regress/man/nf/dupe.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Ad/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/An/break.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Aq/empty.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Ar/punct.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/At/invalid.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bd/badargs.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bd/beforeNAME.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bd/blank.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bd/break.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bd/broken.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bd/nested.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bd/unclosed.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bf/badargs.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bf/break.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bf/broken.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bf/multiargs.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bk/badarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bk/broken.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/badargs.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/bareIt.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/bareTa.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/break.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/breakingIt.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/broken.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/column.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/empty.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/emptyhead.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/emptyitem.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/emptytag.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/noIt.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/notype.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bl/tag.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Brq/empty.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Bx/args.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Cd/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Cm/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/D1/spacing.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Db/args.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dd/badarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dd/dupe.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dd/late.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dd/long.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dd/manarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dd/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dd/order.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dl/spacing.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dq/empty.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dt/badsec.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dt/case.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dt/dupe.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dt/fourargs.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dt/late.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dt/missing.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dt/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dt/nobody.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dt/nosec.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dt/order.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Dv/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Em/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Em/punct.out_lint (1.5), "Exp", lines: +1 -0 regress/mdoc/Eo/break.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Eo/obsolete.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Eo/unclosed.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Er/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Ev/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Ex/noname.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Ex/nostd.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Fd/empty.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Fl/punct.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Fo/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Fo/nohead.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Fo/obsolete.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Fo/punct.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Fo/warn.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Ic/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/In/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Lb/badargs.out_lint (1.6), "Exp", lines: +1 -0 regress/mdoc/Li/punct.out_lint (1.5), "Exp", lines: +1 -0 regress/mdoc/Lk/noarg.out_lint (1.5), "Exp", lines: +1 -0 regress/mdoc/Ms/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Mt/simple.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Nd/broken.out_lint (1.5), "Exp", lines: +1 -0 regress/mdoc/Nd/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Nm/badNAME.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Nm/badNAMEuse.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Nm/break.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Nm/broken.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Nm/punct.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/No/punct.out_lint (1.6), "Exp", lines: +1 -0 regress/mdoc/Ns/position.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Oo/punct.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Op/break.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Op/broken.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Op/punct.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Os/dupe.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Os/late.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Pa/punct.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Pf/spacing.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Pp/arg.out_lint (1.5), "Exp", lines: +1 -0 regress/mdoc/Qq/empty.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Rs/allch.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Rs/args.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Rs/empty.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Rv/noname.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Rv/nostd.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sh/badNAME.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sh/before.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sh/empty.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sh/emptyNAME.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sh/first.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sh/nohead.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sh/order.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sh/orderNAME.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sh/parbefore.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sh/parborder.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sh/punctNAME.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sh/subbefore.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sm/badarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sm/twoarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sq/empty.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/St/badargs.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/St/call.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sx/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sy/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sy/punct.out_lint (1.5), "Exp", lines: +1 -0 regress/mdoc/Tn/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Ud/arg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Ux/punct.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Va/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Vt/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Xr/args.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/blank/comment.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/blank/line.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/blank/list.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/break/brokenbreaker.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/break/notopen.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/break/tail.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/break/twice.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/break/two.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/args/man.in (1.2), "Exp", lines: +1 -1 regress/roff/args/man.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/args/man.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/args/mdoc.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/args/roff.in (1.2), "Exp", lines: +1 -1 regress/roff/args/roff.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/args/roff.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/br/args.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/cc/basic.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/cond/close.out_lint (1.4), "Exp", lines: +1 -0 regress/roff/cond/if.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/de/escname.out_lint (1.4), "Exp", lines: +1 -0 regress/roff/de/indir.out_lint (1.4), "Exp", lines: +1 -0 regress/roff/de/infinite.out_lint (1.4), "Exp", lines: +1 -0 regress/roff/esc/B.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/esc/h.out_lint (1.5), "Exp", lines: +1 -0 regress/roff/esc/ignore.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/esc/l.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/esc/w.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/ft/badargs-mdoc.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/ft/badargs.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/ig/basic.out_lint (1.4), "Exp", lines: +1 -0 regress/roff/it/badarg.out_lint (1.4), "Exp", lines: +1 -0 regress/roff/nr/divzero.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/nr/escname.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/sp/badargs-man.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/string/escape.in (1.2), "Exp", lines: +1 -1 regress/roff/string/escape.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/string/name.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/string/zerolength.in (1.2), "Exp", lines: +1 -1 regress/roff/string/zerolength.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/tr/args.out_lint (1.3), "Exp", lines: +1 -0 regress/tbl/data/block_unclosed.out_lint (1.3), "Exp", lines: +1 -0 regress/tbl/data/empty.out_lint (1.3), "Exp", lines: +1 -0 regress/tbl/layout/center.in (1.3), "Exp", lines: +1 -1 regress/tbl/layout/center.out_ascii (1.3), "Exp", lines: +1 -1 regress/tbl/layout/complex.out_lint (1.2), "Exp", lines: +1 -0 regress/tbl/layout/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/tbl/layout/numbers.in (1.2), "Exp", lines: +1 -1 regress/tbl/layout/numbers.out_ascii (1.2), "Exp", lines: +1 -1 regress/tbl/layout/span.in (1.4), "Exp", lines: +1 -1 regress/tbl/layout/span.out_ascii (1.4), "Exp", lines: +1 -1 regress/tbl/macro/man.in (1.2), "Exp", lines: +1 -1 regress/tbl/macro/man.out_ascii (1.2), "Exp", lines: +1 -1 regress/tbl/macro/man.out_lint (1.2), "Exp", lines: +1 -0 regress/tbl/macro/nested.in (1.2), "Exp", lines: +1 -1 regress/tbl/macro/nested.out_ascii (1.2), "Exp", lines: +1 -1 regress/tbl/macro/nested.out_lint (1.2), "Exp", lines: +1 -0 regress/tbl/mod/badfont.out_lint (1.2), "Exp", lines: +1 -0 regress/tbl/mod/font.out_lint (1.3), "Exp", lines: +1 -0 regress/tbl/opt/box.in (1.3), "Exp", lines: +2 -2 regress/tbl/opt/box.out_ascii (1.3), "Exp", lines: +3 -3 regress/tbl/opt/invalid.out_lint (1.2), "Exp", lines: +1 -0 style message about missing RCS ids; inspired by mdoclint 2017-06-17 16:47 schwarze Added: regress/man/TP/indent.in (1.1) regress/man/TP/indent.out_ascii (1.1) Changed: man_macro.c (1.122), "Exp", lines: +2 -2 man_validate.c (1.129), "Exp", lines: +19 -2 regress/man/TP/Makefile (1.3), "Exp", lines: +1 -1 if .in is used inside the .TP head, it's always relative 2017-06-17 14:55 schwarze Changed: tbl_term.c (1.54), "Exp", lines: +12 -1 term.h (1.129), "Exp", lines: +2 -1 term_tab.c (1.4), "Exp", lines: +15 -0 regress/tbl/data/block_width.in (1.2), "Exp", lines: +4 -0 regress/tbl/data/block_width.out_ascii (1.2), "Exp", lines: +3 -0 regress/tbl/layout/center.in (1.2), "Exp", lines: +4 -0 regress/tbl/layout/center.out_ascii (1.2), "Exp", lines: +3 -0 regress/tbl/layout/span.in (1.3), "Exp", lines: +4 -0 regress/tbl/layout/span.out_ascii (1.3), "Exp", lines: +3 -0 regress/tbl/mod/expand.in (1.2), "Exp", lines: +6 -0 regress/tbl/mod/expand.out_ascii (1.2), "Exp", lines: +3 -0 regress/tbl/mod/font.in (1.2), "Exp", lines: +4 -0 regress/tbl/mod/font.out_ascii (1.2), "Exp", lines: +3 -0 regress/tbl/mod/font.out_lint (1.2), "Exp", lines: +4 -0 tables leak tab settings to subsequent text 2017-06-17 13:06 schwarze Changed: man.c (1.175), "Exp", lines: +27 -8 man_term.c (1.207), "Exp", lines: +5 -2 mdoc.c (1.267), "Exp", lines: +23 -7 regress/roff/esc/c.in (1.2), "Exp", lines: +9 -0 regress/roff/esc/c.out_ascii (1.3), "Exp", lines: +4 -0 regress/roff/esc/c_man.in (1.2), "Exp", lines: +9 -0 regress/roff/esc/c_man.out_ascii (1.2), "Exp", lines: +3 -0 correct handling of blank lines after \c 2017-06-17 01:27 schwarze Changed: man_term.c (1.206), "Exp", lines: +5 -5 properly set the default indentation such that even pages without any .SH macros get it 2017-06-16 20:01 schwarze Added: regress/tbl/layout/lines-nogroff.in (1.1) regress/tbl/layout/lines-nogroff.out_ascii (1.1) regress/tbl/layout/lines.in (1.1) regress/tbl/layout/lines.out_ascii (1.1) Changed: tbl_data.c (1.43), "Exp", lines: +80 -51 tbl_term.c (1.53), "Exp", lines: +176 -63 regress/tbl/layout/Makefile (1.2), "Exp", lines: +6 -3 Multiple tbl(7) improvements: * Do not discard data that lacks a matching layout cell but remains within the number of columns of the table as a whole. * Do not insert dummy data rows for any layout row starting with a horizontal line, but only for layout rows that would discard all the data on a matching non-empty data row. * Print horizontal lines specified in the layout even if there is no matching data cell. * Improve the logic for extending vertical lines to adjacent rows, for choosing cross marks versus line segments, and some related details. 2017-06-15 00:27 schwarze Added: regress/tbl/data/block_width.in (1.1) regress/tbl/data/block_width.out_ascii (1.1) Changed: out.c (1.69), "Exp", lines: +3 -2 regress/tbl/data/Makefile (1.3), "Exp", lines: +1 -1 round default width of tbl(7) text blocks in the same way as groff 2017-06-14 23:24 schwarze Changed: roff.7 (1.93), "Exp", lines: +6 -3 term.c (1.273), "Exp", lines: +7 -2 regress/roff/esc/h.in (1.4), "Exp", lines: +2 -0 regress/roff/esc/h.out_ascii (1.3), "Exp", lines: +1 -0 regress/roff/esc/h.out_lint (1.4), "Exp", lines: +1 -1 implement so-called absolute horizontal motion: \h'|...', used for example by zoem(1) 2017-06-14 22:51 schwarze Added: regress/roff/po/Makefile (1.1) regress/roff/po/basic-mdoc.in (1.1) regress/roff/po/basic-mdoc.out_ascii (1.1) Changed: mdoc_man.c (1.122), "Exp", lines: +2 -1 roff.7 (1.92), "Exp", lines: +10 -3 roff.c (1.312), "Exp", lines: +5 -5 roff.h (1.54), "Exp", lines: +2 -2 roff_html.c (1.10), "Exp", lines: +2 -1 roff_term.c (1.13), "Exp", lines: +25 -1 roff_validate.c (1.9), "Exp", lines: +2 -1 regress/roff/Makefile (1.4), "Exp", lines: +1 -1 Naive implementation of the roff(7) .po (page offset) request. This clearly works when .po is called on the top level, but might not be sophisticated enough if people call .po inside indentation-changing contexts, but i haven't seen that in manual pages (yet :). 2017-06-14 20:57 schwarze Changed: chars.c (1.71), "Exp", lines: +2 -1 mandoc_char.7 (1.67), "Exp", lines: +3 -2 regress/char/unicode/ascii.in (1.2), "Exp", lines: +1 -1 regress/char/unicode/ascii.out_ascii (1.2), "Exp", lines: +1 -1 regress/char/unicode/ascii.out_html (1.2), "Exp", lines: +1 -1 regress/char/unicode/ascii.out_utf8 (1.2), "Exp", lines: +1 -1 add the \(ru (0.5m baseline ruler) character escape sequence, abused by mail/nmh; groff_char(7) confirms that this really exists 2017-06-14 19:39 schwarze Changed: roff.7 (1.91), "Exp", lines: +1 -2 roff.c (1.311), "Exp", lines: +36 -5 simple implementation of the roff(7) .als (macro alias) request, sufficient for pages using po4a(1) 2017-06-14 18:23 schwarze Added: regress/roff/esc/l.in (1.1) regress/roff/esc/l.out_ascii (1.1) regress/roff/esc/l.out_lint (1.1) Changed: out.c (1.68), "Exp", lines: +2 -4 term.c (1.272), "Exp", lines: +6 -6 regress/roff/esc/Makefile (1.3), "Exp", lines: +2 -2 let \l use the right fill character 2017-06-14 17:51 schwarze Changed: man_term.c (1.205), "Exp", lines: +6 -6 mdoc_term.c (1.364), "Exp", lines: +4 -4 roff_term.c (1.12), "Exp", lines: +2 -2 tbl_term.c (1.52), "Exp", lines: +2 -2 term.c (1.271), "Exp", lines: +18 -4 term.h (1.128), "Exp", lines: +2 -1 term_tab.c (1.3), "Exp", lines: +4 -8 regress/man/HP/spacing.in (1.2), "Exp", lines: +2 -2 regress/man/IP/width.in (1.2), "Exp", lines: +2 -2 regress/man/RS/width.in (1.2), "Exp", lines: +2 -2 regress/man/TP/width.in (1.2), "Exp", lines: +4 -4 regress/mdoc/Bd/offset-neg.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Bl/offset.in (1.2), "Exp", lines: +4 -4 regress/mdoc/Bl/offset.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Bl/offset.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Bl/tag.in (1.2), "Exp", lines: +2 -2 regress/roff/esc/h.in (1.3), "Exp", lines: +2 -0 regress/roff/esc/h.out_ascii (1.2), "Exp", lines: +1 -0 regress/roff/esc/h.out_lint (1.3), "Exp", lines: +1 -1 regress/roff/ta/basic-man.in (1.2), "Exp", lines: +3 -0 regress/roff/ta/basic-man.out_ascii (1.2), "Exp", lines: +2 -0 regress/roff/ti/basic-man.in (1.2), "Exp", lines: +2 -2 regress/tbl/mod/width.in (1.2), "Exp", lines: +1 -1 improve rounding rules for scaling units in horizontal orientation in the terminal formatter 2017-06-14 14:24 schwarze Changed: term_ascii.c (1.58), "Exp", lines: +2 -2 harmless, but weird typo; found with afterstep_faq(1) 2017-06-14 14:02 schwarze Added: regress/roff/cond/string.in (1.1) regress/roff/cond/string.out_ascii (1.1) Changed: roff.7 (1.90), "Exp", lines: +10 -3 roff.c (1.310), "Exp", lines: +12 -6 regress/roff/cond/Makefile (1.2), "Exp", lines: +1 -1 implement the roff(7) d (macro or string defined) conditional 2017-06-14 13:00 schwarze Changed: mdoc_man.c (1.121), "Exp", lines: +10 -9 roff.7 (1.89), "Exp", lines: +5 -3 roff.c (1.309), "Exp", lines: +9 -9 roff.h (1.53), "Exp", lines: +2 -2 roff_html.c (1.9), "Exp", lines: +2 -1 roff_term.c (1.11), "Exp", lines: +17 -15 roff_validate.c (1.8), "Exp", lines: +2 -1 implement roff(7) .rj (right justify) request 2017-06-14 01:31 schwarze Added: regress/roff/esc/p.in (1.1) regress/roff/esc/p.out_ascii (1.1) Changed: html.c (1.214), "Exp", lines: +27 -8 mandoc.c (1.102), "Exp", lines: +3 -1 mandoc.h (1.230), "Exp", lines: +2 -1 mdoc_markdown.c (1.23), "Exp", lines: +13 -2 roff.7 (1.88), "Exp", lines: +4 -2 term.c (1.270), "Exp", lines: +33 -1 regress/roff/esc/Makefile (1.2), "Exp", lines: +1 -1 implement the roff(7) \p (break output line) escape sequence 2017-06-13 19:34 schwarze Added: regress/man/RS/an-margin.in (1.1) regress/man/RS/an-margin.out_ascii (1.1) Changed: man_macro.c (1.121), "Exp", lines: +15 -2 regress/man/RS/Makefile (1.2), "Exp", lines: +1 -1 Partial support for the \n[an-margin] number register. Manuals autogenerated from reStructuredText are reckless enough to peek at this non-portable, implementation-dependent, highly groff-specific internal register - for no good reason, because the man(7) language natively provides in a much simpler way what they are trying to emulate here with much fragility. A full implementation would be very hard because it would require access to output-device-specific formatting data at the roff(7) preprocessor stage, which mandoc doesn't support at all. So hardcode a few magic numbers as reStructuredText expects them for terminal output. For other output modes (like HTML), code using this register is utterly broken anyway. 2017-06-13 16:12 schwarze Changed: tbl_layout.c (1.43), "Exp", lines: +3 -1 If the layout is empty except for requesting a left vertical frame, record that detail in struct tbl_opts, such that term_tbl() can do correct column calculations and doesn't prematurely break lines. Fixes the tbl/layout/empty regression test that got broken when line breaking in text block cells was implemented. 2017-06-13 15:06 schwarze Changed: mandoc.1 (1.199), "Exp", lines: +3 -4 manpath.c (1.34), "Exp", lines: +2 -2 Delete the arbitrary range restriction for -Owidth. We provide users with tools. We don't attempt to prevent them from using them in stupid ways: depending on the context, not every stupid-looking use is necessarily actually stupid, and not every stupidity can be automatically detected anyway, so don't even try. 2017-06-13 14:39 schwarze Changed: tbl_term.c (1.51), "Exp", lines: +32 -17 regress/tbl/layout/span.in (1.2), "Exp", lines: +10 -0 regress/tbl/layout/span.out_ascii (1.2), "Exp", lines: +8 -0 fix the interaction of the allbox option with spanned cells in the layout 2017-06-13 13:51 schwarze Changed: roff.c (1.308), "Exp", lines: +4 -3 Explicitly ignore .br, .ce, and .sp inside tbl(7) text blocks. With the current code structure, they would appear at the wrong place in the syntax tree, so it is better to not insert them into the tree at all and issue an UNSUPP message instead. 2017-06-12 22:50 schwarze Added: regress/tbl/data/block_wrap.in (1.1) regress/tbl/data/block_wrap.out_ascii (1.1) Changed: regress/tbl/data/Makefile (1.2), "Exp", lines: +1 -1 regress/tbl/opt/box.in (1.2), "Exp", lines: +19 -0 regress/tbl/opt/box.out_ascii (1.2), "Exp", lines: +17 -0 test the new allbox and wrapping features 2017-06-12 22:49 schwarze Changed: tbl_term.c (1.50), "Exp", lines: +6 -3 Two minor fixes for the "allbox" modifier: 1. It does not reduce explicit "||" in the layout to "|". 2. It does not cause three horizontal lines at the end of a table, even if the table ends with an explicit "_" data line. 2017-06-12 22:05 schwarze Changed: out.c (1.67), "Exp", lines: +4 -3 If a tbl(7) layout contains a 'w' (minimum width) modifier for a given column, that column contains no literal or numeric cell of larger width, and all text block cells in that column can be line wrapped to fit into that minimum width, groff does not increase that column width beyond the specified minimum: so do the same. 2017-06-12 20:45 schwarze Changed: tbl_term.c (1.49), "Exp", lines: +8 -2 implement the tbl(7) "allbox" option; used for example by curs_getch(3) and GLwDrawingArea(3) 2017-06-12 20:14 schwarze Changed: out.c (1.66), "Exp", lines: +19 -12 out.h (1.30), "Exp", lines: +2 -2 tbl_html.c (1.22), "Exp", lines: +2 -2 tbl_term.c (1.48), "Exp", lines: +2 -2 fix column width calculation for text block cells 2017-06-12 19:05 schwarze Added: compat_recallocarray.c (1.1) test-recallocarray.c (1.1) Changed: LICENSE (1.16), "Exp", lines: +2 -2 Makefile (1.513), "Exp", lines: +4 -1 configure (1.63), "Exp", lines: +9 -2 configure.local.example (1.31), "Exp", lines: +2 -1 mandoc_aux.c (1.10), "Exp", lines: +11 -4 mandoc_aux.h (1.7), "Exp", lines: +3 -2 tbl_term.c (1.47), "Exp", lines: +163 -63 term.c (1.269), "Exp", lines: +40 -25 term.h (1.127), "Exp", lines: +4 -2 regress/char/unicode/input.out_ascii (1.2), "Exp", lines: +1 -1 Implement automatic line breaking inside individual table cells that contain text blocks. This cures overlong lines in various Xenocara manuals. 2017-06-11 20:03 schwarze Changed: mdoc_validate.c (1.338), "Exp", lines: +2 -2 ooops, fix a glitch in the previous commit... 2017-06-11 19:45 schwarze Changed: regress/mdoc/Oo/punct.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Op/break.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Op/broken.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Op/punct.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Pa/punct.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Pf/spacing.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Pp/arg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Qq/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Rs/allch.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Rs/args.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Rs/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Rv/noname.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Rv/nostd.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/badNAME.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/before.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/emptyNAME.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/first.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/nohead.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/order.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/orderNAME.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/parbefore.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/parborder.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/punctNAME.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/subbefore.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sm/badarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sm/twoarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sq/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/St/badargs.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/St/call.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sx/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sy/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sy/punct.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Tn/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Ud/arg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Ux/punct.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Va/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Vt/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Xr/args.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/blank/comment.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/blank/line.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/blank/list.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/break/brokenbreaker.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/break/notopen.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/break/tail.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/break/twice.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/break/two.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/args/mdoc.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/de/escname.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/de/indir.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/de/infinite.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/esc/B.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/esc/h.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/esc/ignore.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/esc/w.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/ft/badargs-mdoc.out_lint (1.2), "Exp", lines: +1 -0 regress/roff/ig/basic.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/it/badarg.out_lint (1.3), "Exp", lines: +1 -0 regress/roff/string/name.out_lint (1.2), "Exp", lines: +1 -0 Style message about legacy man(7) date format in mdoc(7) documents and operating system dependent messages about missing or unexpected Mdocdate; inspired by mdoclint(1). 2017-06-11 19:37 schwarze Changed: libmandoc.h (1.68), "Exp", lines: +2 -2 man_validate.c (1.128), "Exp", lines: +2 -3 mandoc.c (1.101), "Exp", lines: +11 -7 mandoc.h (1.229), "Exp", lines: +4 -1 mdoc_validate.c (1.337), "Exp", lines: +28 -6 read.c (1.176), "Exp", lines: +4 -1 regress/char/space/esct-mdoc.out_lint (1.2), "Exp", lines: +1 -0 regress/char/space/tab.out_lint (1.2), "Exp", lines: +1 -0 regress/char/space/trailing-mdoc.out_lint (1.2), "Exp", lines: +1 -0 regress/char/unicode/invalid.out_lint (1.2), "Exp", lines: +1 -0 regress/eqn/define/infinite.out_lint (1.3), "Exp", lines: +1 -0 regress/eqn/define/invalid.out_lint (1.3), "Exp", lines: +1 -0 regress/eqn/over/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Ad/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/An/break.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Aq/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Ar/punct.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/At/invalid.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bd/badargs.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bd/beforeNAME.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bd/blank.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bd/break.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bd/broken.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bd/nested.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bd/unclosed.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bf/badargs.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bf/break.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bf/broken.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bf/multiargs.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bk/badarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bk/broken.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/badargs.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/bareIt.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/bareTa.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/break.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/breakingIt.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/broken.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/column.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/emptyhead.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/emptyitem.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/emptytag.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/noIt.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/notype.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/tag.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Brq/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Bx/args.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Cd/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Cm/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/D1/spacing.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Db/args.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dd/badarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dd/dupe.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dd/long.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dd/manarg.out_lint (1.2), "Exp", lines: +2 -0 regress/mdoc/Dd/order.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dl/spacing.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dq/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dt/badsec.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dt/case.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dt/dupe.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dt/fourargs.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dt/late.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dt/missing.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dt/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dt/nobody.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dt/nosec.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dt/order.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dv/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Em/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Em/punct.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Eo/break.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Eo/obsolete.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Eo/unclosed.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Er/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Ev/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Ex/noname.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Ex/nostd.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Fd/empty.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Fl/punct.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Fo/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Fo/nohead.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Fo/obsolete.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Fo/punct.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Fo/warn.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Ic/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/In/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Lb/badargs.out_lint (1.5), "Exp", lines: +1 -0 regress/mdoc/Li/punct.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Lk/noarg.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Ms/noarg.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Mt/simple.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Nd/broken.out_lint (1.4), "Exp", lines: +1 -0 regress/mdoc/Nd/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Nm/badNAME.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Nm/badNAMEuse.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Nm/break.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Nm/broken.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Nm/punct.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/No/punct.out_lint (1.5), "Exp", lines: +1 -0 regress/mdoc/Ns/position.out_lint (1.2), "Exp", lines: +1 -0 Style message about legacy man(7) date format in mdoc(7) documents and operating system dependent messages about missing or unexpected Mdocdate; inspired by mdoclint(1). 2017-06-11 17:16 schwarze Changed: mandoc.1 (1.198), "Exp", lines: +11 -2 mandoc.h (1.228), "Exp", lines: +2 -1 mdoc_validate.c (1.336), "Exp", lines: +25 -8 read.c (1.175), "Exp", lines: +2 -1 style message about missing .Fn markup; inspired by mdoclint 2017-06-11 14:24 schwarze Changed: mdoc_validate.c (1.335), "Exp", lines: +4 -4 regress/mdoc/No/punct.out_lint (1.4), "Exp", lines: +0 -1 Do not issue the message "no blank before trailing delimiter" for .No. In practice, that message only matters inside .Bf, and even there, it can occasionally be a false positive. In all other cases, it usually is a false positive, so it is better to drop it outright. Suggested by jmc@. 2017-06-11 14:23 schwarze Added: regress/mdoc/Dq/empty.out_lint (1.1) add forgotten file 2017-06-11 14:20 schwarze Changed: regress/mdoc/Lb/badargs.out_lint (1.4), "Exp", lines: +1 -1 fix order of messages 2017-06-10 16:54 schwarze Changed: mdoc_validate.c (1.334), "Exp", lines: +76 -3 Reduce false positives for the "no blank before trailing delimiter" message. This brings us down to one false positive for about every 18 pages. 2017-06-10 16:32 schwarze Changed: mdoc.7 (1.265), "Exp", lines: +2 -2 roff.7 (1.87), "Exp", lines: +3 -3 minor markup simplifications 2017-06-10 01:48 schwarze Added: regress/mdoc/Aq/empty.out_lint (1.1) regress/mdoc/Ar/punct.out_lint (1.1) regress/mdoc/Brq/empty.out_lint (1.1) regress/mdoc/Bx/args.out_lint (1.1) regress/mdoc/Fl/punct.out_lint (1.1) regress/mdoc/Fo/punct.out_lint (1.1) regress/mdoc/Mt/simple.out_lint (1.1) regress/mdoc/Nm/punct.out_lint (1.1) regress/mdoc/Oo/punct.out_lint (1.1) regress/mdoc/Op/punct.out_lint (1.1) regress/mdoc/Pa/punct.out_lint (1.1) regress/mdoc/Qq/empty.out_lint (1.1) regress/mdoc/Sq/empty.out_lint (1.1) regress/mdoc/Ux/punct.in (1.1) regress/mdoc/Ux/punct.out_ascii (1.1) regress/mdoc/Ux/punct.out_lint (1.1) regress/mdoc/Ux/punct.out_markdown (1.1) Changed: mandoc.1 (1.197), "Exp", lines: +7 -2 mandoc.h (1.227), "Exp", lines: +2 -1 mdoc_validate.c (1.333), "Exp", lines: +75 -39 read.c (1.174), "Exp", lines: +2 -1 regress/mdoc/Ad/noarg.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Ad/noarg.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Ad/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Ad/noarg.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/An/break.in (1.3), "Exp", lines: +1 -1 regress/mdoc/An/break.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Aq/Makefile (1.5), "Exp", lines: +1 -0 regress/mdoc/Aq/empty.in (1.3), "Exp", lines: +3 -3 regress/mdoc/Aq/empty.out_ascii (1.3), "Exp", lines: +2 -2 regress/mdoc/Aq/empty.out_markdown (1.3), "Exp", lines: +3 -3 regress/mdoc/Aq/empty.out_utf8 (1.3), "Exp", lines: +2 -2 regress/mdoc/Ar/Makefile (1.4), "Exp", lines: +1 -0 regress/mdoc/Ar/punct.in (1.3), "Exp", lines: +4 -1 regress/mdoc/Ar/punct.out_ascii (1.3), "Exp", lines: +3 -1 regress/mdoc/Ar/punct.out_markdown (1.3), "Exp", lines: +4 -1 regress/mdoc/Bl/breakingIt.in (1.2), "Exp", lines: +4 -4 regress/mdoc/Bl/breakingIt.out_ascii (1.2), "Exp", lines: +4 -4 regress/mdoc/Bl/breakingIt.out_markdown (1.2), "Exp", lines: +4 -4 regress/mdoc/Bl/noIt.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Bl/noIt.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Bl/noIt.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Brq/Makefile (1.4), "Exp", lines: +1 -0 regress/mdoc/Brq/empty.in (1.3), "Exp", lines: +3 -3 regress/mdoc/Brq/empty.out_ascii (1.3), "Exp", lines: +2 -2 regress/mdoc/Brq/empty.out_markdown (1.3), "Exp", lines: +3 -3 regress/mdoc/Bx/Makefile (1.4), "Exp", lines: +1 -0 regress/mdoc/Bx/args.in (1.3), "Exp", lines: +2 -2 regress/mdoc/Bx/args.out_ascii (1.3), "Exp", lines: +2 -2 regress/mdoc/Bx/args.out_markdown (1.3), "Exp", lines: +2 -2 regress/mdoc/Cm/noarg.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Cm/noarg.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Cm/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Cm/noarg.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Dq/Makefile (1.4), "Exp", lines: +1 -0 regress/mdoc/Dq/empty.in (1.3), "Exp", lines: +3 -3 regress/mdoc/Dq/empty.out_ascii (1.4), "Exp", lines: +2 -2 regress/mdoc/Dq/empty.out_markdown (1.3), "Exp", lines: +3 -3 regress/mdoc/Dv/noarg.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Dv/noarg.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Dv/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Dv/noarg.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Em/punct.in (1.3), "Exp", lines: +4 -1 regress/mdoc/Em/punct.out_ascii (1.3), "Exp", lines: +3 -1 regress/mdoc/Em/punct.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Em/punct.out_markdown (1.3), "Exp", lines: +4 -1 regress/mdoc/Er/noarg.in (1.3), "Exp", lines: +2 -1 regress/mdoc/Er/noarg.out_ascii (1.3), "Exp", lines: +2 -2 regress/mdoc/Er/noarg.out_lint (1.2), "Exp", lines: +2 -1 regress/mdoc/Er/noarg.out_markdown (1.3), "Exp", lines: +2 -1 regress/mdoc/Ev/noarg.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Ev/noarg.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Ev/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Ev/noarg.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Fl/Makefile (1.5), "Exp", lines: +1 -0 regress/mdoc/Fl/punct.in (1.3), "Exp", lines: +4 -1 regress/mdoc/Fl/punct.out_ascii (1.3), "Exp", lines: +3 -1 regress/mdoc/Fl/punct.out_markdown (1.3), "Exp", lines: +4 -1 regress/mdoc/Fo/Makefile (1.4), "Exp", lines: +1 -1 regress/mdoc/Fo/punct.in (1.3), "Exp", lines: +3 -3 regress/mdoc/Fo/punct.out_ascii (1.3), "Exp", lines: +3 -3 regress/mdoc/Fo/punct.out_markdown (1.3), "Exp", lines: +3 -3 regress/mdoc/Ic/noarg.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Ic/noarg.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Ic/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Ic/noarg.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/In/noarg.in (1.2), "Exp", lines: +1 -1 regress/mdoc/In/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/In/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/In/noarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Lb/badargs.in (1.2), "Exp", lines: +3 -3 regress/mdoc/Lb/badargs.out_ascii (1.3), "Exp", lines: +3 -3 regress/mdoc/Lb/badargs.out_lint (1.3), "Exp", lines: +2 -0 regress/mdoc/Lb/badargs.out_markdown (1.2), "Exp", lines: +3 -3 regress/mdoc/Li/punct.in (1.3), "Exp", lines: +4 -1 regress/mdoc/Li/punct.out_ascii (1.3), "Exp", lines: +3 -1 regress/mdoc/Li/punct.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Li/punct.out_markdown (1.3), "Exp", lines: +4 -1 regress/mdoc/Lk/noarg.in (1.4), "Exp", lines: +3 -3 regress/mdoc/Lk/noarg.out_ascii (1.3), "Exp", lines: +3 -3 regress/mdoc/Lk/noarg.out_lint (1.3), "Exp", lines: +2 -0 regress/mdoc/Lk/noarg.out_markdown (1.4), "Exp", lines: +3 -3 regress/mdoc/Ms/noarg.in (1.2), "Exp", lines: +4 -4 regress/mdoc/Ms/noarg.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Ms/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Ms/noarg.out_markdown (1.2), "Exp", lines: +4 -4 regress/mdoc/Mt/Makefile (1.4), "Exp", lines: +1 -0 regress/mdoc/Mt/simple.in (1.3), "Exp", lines: +4 -1 regress/mdoc/Mt/simple.out_ascii (1.3), "Exp", lines: +3 -1 regress/mdoc/Mt/simple.out_markdown (1.4), "Exp", lines: +4 -1 regress/mdoc/Nm/Makefile (1.5), "Exp", lines: +1 -1 regress/mdoc/Nm/punct.in (1.2), "Exp", lines: +4 -1 regress/mdoc/Nm/punct.out_ascii (1.2), "Exp", lines: +3 -1 regress/mdoc/Nm/punct.out_markdown (1.2), "Exp", lines: +4 -1 regress/mdoc/No/punct.in (1.3), "Exp", lines: +4 -1 regress/mdoc/No/punct.out_ascii (1.3), "Exp", lines: +3 -1 regress/mdoc/No/punct.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/No/punct.out_markdown (1.3), "Exp", lines: +4 -1 regress/mdoc/Oo/Makefile (1.4), "Exp", lines: +1 -0 regress/mdoc/Oo/punct.in (1.3), "Exp", lines: +5 -1 regress/mdoc/Oo/punct.out_ascii (1.3), "Exp", lines: +3 -1 regress/mdoc/Oo/punct.out_markdown (1.3), "Exp", lines: +4 -1 regress/mdoc/Op/Makefile (1.4), "Exp", lines: +1 -1 regress/mdoc/Op/punct.in (1.3), "Exp", lines: +4 -1 regress/mdoc/Op/punct.out_ascii (1.2), "Exp", lines: +3 -1 regress/mdoc/Op/punct.out_markdown (1.2), "Exp", lines: +4 -1 regress/mdoc/Pa/Makefile (1.4), "Exp", lines: +1 -0 regress/mdoc/Pa/punct.in (1.3), "Exp", lines: +4 -1 regress/mdoc/Pa/punct.out_ascii (1.3), "Exp", lines: +3 -1 regress/mdoc/Pa/punct.out_markdown (1.3), "Exp", lines: +4 -1 regress/mdoc/Qq/Makefile (1.4), "Exp", lines: +1 -0 regress/mdoc/Qq/empty.in (1.3), "Exp", lines: +3 -3 regress/mdoc/Qq/empty.out_ascii (1.3), "Exp", lines: +2 -2 regress/mdoc/Qq/empty.out_markdown (1.3), "Exp", lines: +3 -3 regress/mdoc/Sq/Makefile (1.4), "Exp", lines: +1 -0 regress/mdoc/Sq/empty.in (1.3), "Exp", lines: +3 -3 regress/mdoc/Sq/empty.out_ascii (1.3), "Exp", lines: +2 -2 regress/mdoc/Sq/empty.out_markdown (1.3), "Exp", lines: +3 -3 regress/mdoc/Sy/punct.in (1.3), "Exp", lines: +4 -1 regress/mdoc/Sy/punct.out_ascii (1.3), "Exp", lines: +3 -1 regress/mdoc/Sy/punct.out_lint (1.3), "Exp", lines: +1 -0 regress/mdoc/Sy/punct.out_markdown (1.3), "Exp", lines: +4 -1 regress/mdoc/Ux/Makefile (1.4), "Exp", lines: +2 -1 regress/mdoc/Va/noarg.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Va/noarg.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Va/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Va/noarg.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Vt/noarg.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Vt/noarg.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Vt/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Vt/noarg.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Xr/args.in (1.3), "Exp", lines: +6 -2 regress/mdoc/Xr/args.out_ascii (1.3), "Exp", lines: +3 -2 regress/mdoc/Xr/args.out_lint (1.2), "Exp", lines: +6 -3 regress/mdoc/Xr/args.out_markdown (1.3), "Exp", lines: +6 -2 style message about missing blank before trailing delimiter; inspired by mdoclint(1), and jmc@ considers it useful 2017-06-10 01:28 schwarze Changed: mdoc_man.c (1.120), "Exp", lines: +19 -10 do not break the line between Bsx/Bx/Fx/Nx/Ox/Dx and its arguments 2017-06-08 19:35 schwarze Changed: roff.c (1.307), "Exp", lines: +5 -1 Properly reinitialize roffce_node between parses, or this may crash with use-after-free in makewhatis(8); reported by jmc@, thanks! 2017-06-08 18:11 schwarze Added: regress/tbl/mod/width.in (1.1) regress/tbl/mod/width.out_ascii (1.1) Changed: mandoc.h (1.226), "Exp", lines: +7 -4 out.c (1.65), "Exp", lines: +39 -15 out.h (1.29), "Exp", lines: +4 -2 tbl.7 (1.27), "Exp", lines: +6 -7 tbl.c (1.41), "Exp", lines: +2 -1 tbl_data.c (1.42), "Exp", lines: +3 -2 tbl_html.c (1.21), "Exp", lines: +30 -3 tbl_layout.c (1.42), "Exp", lines: +19 -3 tbl_term.c (1.46), "Exp", lines: +9 -3 regress/tbl/mod/Makefile (1.3), "Exp", lines: +1 -1 Implement w layout specifier (minimum column width). Improve width calculation of text blocks. Reduces the groff/mandoc diff in Base+Xenocara by about 800 lines. 2017-06-08 12:54 schwarze Changed: html.c (1.213), "Exp", lines: +5 -2 man_html.c (1.143), "Exp", lines: +2 -6 man_term.c (1.204), "Exp", lines: +7 -7 mdoc_man.c (1.119), "Exp", lines: +15 -9 mdoc_term.c (1.363), "Exp", lines: +4 -2 out.c (1.64), "Exp", lines: +7 -8 out.h (1.28), "Exp", lines: +3 -2 roff_html.c (1.8), "Exp", lines: +2 -2 roff_term.c (1.10), "Exp", lines: +3 -3 term.c (1.268), "Exp", lines: +5 -14 term_tab.c (1.2), "Exp", lines: +1 -1 make the internal a2roffsu() interface more powerful by returning a pointer to the end of the parsed data, making it easier to parse subsequent bytes 2017-06-08 00:23 schwarze Changed: mandoc.1 (1.196), "Exp", lines: +8 -2 mandoc.h (1.225), "Exp", lines: +2 -1 mdoc_validate.c (1.332), "Exp", lines: +4 -1 read.c (1.173), "Exp", lines: +2 -1 regress/mdoc/Lb/badargs.out_lint (1.2), "Exp", lines: +2 -0 warning about unknown .Lb arguments; inspired by mdoclint(1) 2017-06-07 23:29 schwarze Changed: mandoc.1 (1.195), "Exp", lines: +32 -2 mandoc.h (1.224), "Exp", lines: +3 -1 mdoc_validate.c (1.331), "Exp", lines: +37 -3 read.c (1.172), "Exp", lines: +3 -1 roff.h (1.52), "Exp", lines: +8 -1 style checks related to .Er; inspired by mdoclint(1) 2017-06-07 20:58 schwarze Changed: mdoc.c (1.266), "Exp", lines: +13 -7 Also catch "new sentence, new line" if there are three blanks between the sentences. Thomas Klausner says he has seen some of these, and i don't see any false positives. 2017-06-07 20:30 schwarze Changed: mdoc.c (1.265), "Exp", lines: +2 -2 Make "new sentence, new line" detection stricter: Also catch cases where the new sentence starts with a one-letter word and the input line is broken right after that word. Suggested by Thomas Klausner <wiz @ NetBSD>. It's merely a three-bit diff, changing one byte from 0x34 to 0x33, so what can possibly go wrong... 2017-06-07 20:01 schwarze Changed: term.c (1.267), "Exp", lines: +40 -25 term.h (1.126), "Exp", lines: +4 -2 Prepare the terminal driver for filling multiple columns in parallel, second step: make the per-column byte pointer persistent across term_flushln() calls, such that a subsequent call can continue at the point where the previous call left. If more than one column is in use, return from term_flushln() when the column is full, rather than breaking the output line. No functional change, because nothing sets up multiple columns yet. 2017-06-07 17:38 schwarze Changed: man_term.c (1.203), "Exp", lines: +61 -59 mdoc_term.c (1.362), "Exp", lines: +76 -74 roff_term.c (1.9), "Exp", lines: +15 -15 tbl_term.c (1.45), "Exp", lines: +7 -7 term.c (1.266), "Exp", lines: +70 -68 term.h (1.125), "Exp", lines: +15 -9 term_ascii.c (1.57), "Exp", lines: +10 -8 term_ps.c (1.85), "Exp", lines: +8 -5 Prepare the terminal driver for filling multiple columns in parallel, first step: split column data out of the terminal state struct into a new column state struct and use an array of such column state structs. No functional change. 2017-06-07 02:14 schwarze Changed: term.c (1.265), "Exp", lines: +28 -15 term.h (1.124), "Exp", lines: +3 -2 The \h escape sequence provides another method for moving backwards, and after that, previously written output gets overwritten, but overwriting with blanks does *not* erase previously written content. Yes, manual pages exist that are crazy enough to rely on that... 2017-06-07 00:50 schwarze Changed: roff.7 (1.86), "Exp", lines: +13 -4 roff.c (1.306), "Exp", lines: +98 -6 roff.h (1.51), "Exp", lines: +2 -1 Implement the roff(7) .rn (rename macro or string) request. Renaming a user-defined macro is very simple: just copy the definition to the new name and delete the old name. Renaming high-level macros is a bit tricky: use a dedicated key-value-table, with non-standard names as keys and standard names as values. When a macro is found that is not user-defined, look it up in the "renamed" table and translate it back to the standard name before passing it on to the high-level parsers. 2017-06-06 15:03 schwarze Changed: roff.7 (1.85), "Exp", lines: +5 -2 document the new .ce implementation 2017-06-06 15:01 schwarze Changed: mandoc.1 (1.194), "Exp", lines: +7 -2 mandoc.h (1.223), "Exp", lines: +2 -1 mdoc_man.c (1.118), "Exp", lines: +5 -1 read.c (1.171), "Exp", lines: +2 -1 roff.c (1.305), "Exp", lines: +61 -10 roff.h (1.50), "Exp", lines: +2 -2 roff_html.c (1.7), "Exp", lines: +21 -2 roff_term.c (1.8), "Exp", lines: +40 -1 roff_validate.c (1.7), "Exp", lines: +2 -1 Minimal implementation of the roff(7) .ce request (center a number of input lines without filling). Contrary to groff, high-level macros abort .ce mode for now. 2017-06-04 22:44 schwarze Changed: man_term.c (1.202), "Exp", lines: +7 -12 mdoc_man.c (1.117), "Exp", lines: +2 -1 mdoc_term.c (1.361), "Exp", lines: +9 -23 roff.7 (1.84), "Exp", lines: +5 -3 roff.c (1.304), "Exp", lines: +5 -5 roff.h (1.49), "Exp", lines: +2 -2 roff_html.c (1.6), "Exp", lines: +2 -1 roff_term.c (1.7), "Exp", lines: +19 -2 roff_validate.c (1.6), "Exp", lines: +2 -1 tbl_term.c (1.44), "Exp", lines: +9 -18 term.c (1.264), "Exp", lines: +61 -40 term.h (1.123), "Exp", lines: +6 -3 Implement the roff(7) .mc (right margin character) request. The Tcl/Tk manual pages use this extensively. Delete the TERM_MAXMARGIN hack, it breaks .mc inside .nf; instead, implement a proper TERMP_BRNEVER flag. 2017-06-04 18:50 schwarze Changed: man_term.c (1.201), "Exp", lines: +1 -2 mdoc_term.c (1.360), "Exp", lines: +12 -41 term.c (1.263), "Exp", lines: +25 -62 term.h (1.122), "Exp", lines: +4 -4 Make term_flushln() simpler and more robust: Eliminate the "overstep" state variable. The information is already contained in "viscol". Minus 60 lines of code, no functional change intended. 2017-06-04 00:13 schwarze Changed: read.c (1.170), "Exp", lines: +4 -70 roff.7 (1.83), "Exp", lines: +7 -5 roff.c (1.303), "Exp", lines: +100 -14 Pure preprocessor implementation of the roff(7) .ec and .eo requests (escape character control), touching nothing after the preprocessing stage and keeping even the state variable local to the preprocessor. Since the escape character is also used for line continuation, this requires pulling the implementation of line continuation from the input reader to the preprocessor, which also considerably shortens the code required for that. When the escape character is changed, simply let the preprocessor replace bare by escaped backslashes and instances of the non-standard escape character with bare backslashes - that's all we need. Oh, and if anybody dares to use these requests in OpenBSD manuals, sending a medium-sized pack of axe-murderers after them might be a worthwhile part of the punishment, but probably insuffient on its own. 2017-06-03 15:55 schwarze Added: regress/man/B/blank.in (1.1) regress/man/B/blank.out_ascii (1.1) regress/man/B/blank.out_lint (1.1) Changed: man.c (1.174), "Exp", lines: +7 -6 mandoc.h (1.222), "Exp", lines: +2 -1 read.c (1.169), "Exp", lines: +2 -1 regress/man/B/Makefile (1.2), "Exp", lines: +6 -2 regress/man/SH/Makefile (1.2), "Exp", lines: +1 -0 regress/man/SH/noarg.in (1.2), "Exp", lines: +4 -0 regress/man/SH/noarg.out_ascii (1.2), "Exp", lines: +3 -0 regress/man/SH/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/man/SS/Makefile (1.2), "Exp", lines: +1 -0 regress/man/SS/noarg.in (1.2), "Exp", lines: +4 -0 regress/man/SS/noarg.out_ascii (1.2), "Exp", lines: +3 -0 regress/man/SS/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/man/TP/Makefile (1.2), "Exp", lines: +1 -0 regress/man/TP/broken.in (1.2), "Exp", lines: +4 -0 regress/man/TP/broken.out_ascii (1.2), "Exp", lines: +2 -0 regress/man/TP/broken.out_lint (1.2), "Exp", lines: +1 -0 ignore blank lines in man(7) next line scope; strange groff edge case behaviour found in multimedia/mjpegtools 2017-06-03 12:17 schwarze Changed: main.c (1.292), "Exp", lines: +2 -2 mandoc.1 (1.193), "Exp", lines: +4 -4 enable -Wstyle by default in -Tlint; OK jmc@ 2017-06-02 19:21 schwarze Changed: mandoc.c (1.100), "Exp", lines: +13 -3 mandoc.h (1.221), "Exp", lines: +2 -1 roff.7 (1.82), "Exp", lines: +7 -5 term.c (1.262), "Exp", lines: +58 -2 Partial implementation of \h (horizontal line drawing function). A full implementation would require access to output device properties and state variables (both only available after the main parser has finalized the parse tree) before numerical expansions in the roff preprocessor (i.e., before the main parser is even started). Not trying to pull that stunt right now because the static-width implementation committed here is sufficient for tcl-style manual pages and already more complicated than i would have suspected. 2017-06-02 12:43 schwarze Changed: chars.c (1.70), "Exp", lines: +18 -2 gmdiff (1.7), "Exp", lines: +7 -4 mandoc_char.7 (1.66), "Exp", lines: +26 -6 regress/char/unicode/latin1.in (1.2), "Exp", lines: +5 -5 regress/char/unicode/latin1.out_ascii (1.2), "Exp", lines: +5 -5 regress/char/unicode/latin1.out_html (1.2), "Exp", lines: +5 -5 regress/char/unicode/latin1.out_utf8 (1.2), "Exp", lines: +5 -5 regress/char/unicode/named.in (1.2), "Exp", lines: +5 -0 regress/char/unicode/named.out_ascii (1.2), "Exp", lines: +5 -0 regress/char/unicode/named.out_html (1.2), "Exp", lines: +5 -0 regress/char/unicode/named.out_utf8 (1.2), "Exp", lines: +5 -0 regress/char/unicode/namediff.in (1.2), "Exp", lines: +6 -1 regress/char/unicode/namediff.out_ascii (1.2), "Exp", lines: +6 -1 regress/char/unicode/namediff.out_html (1.2), "Exp", lines: +6 -1 regress/char/unicode/namediff.out_utf8 (1.2), "Exp", lines: +6 -1 add about 15 missing character escape sequences found in groff_char(7); triggered by multimedia/mkvtoolnix mkvmerge(1) using \(S2 2017-06-01 19:05 schwarze Changed: mandoc.c (1.99), "Exp", lines: +2 -2 mandoc.h (1.220), "Exp", lines: +2 -1 mdoc_term.c (1.359), "Exp", lines: +3 -2 roff.7 (1.81), "Exp", lines: +5 -4 term.c (1.261), "Exp", lines: +23 -1 regress/roff/esc/h.in (1.2), "Exp", lines: +2 -2 Minimal implementation of the \h (horizontal motion) escape sequence. Good enough to cope with the average DocBook insanity. 2017-06-01 15:25 schwarze Changed: mandoc.1 (1.192), "Exp", lines: +7 -2 mandoc.h (1.219), "Exp", lines: +2 -1 mdoc_validate.c (1.330), "Exp", lines: +7 -1 read.c (1.168), "Exp", lines: +2 -1 STYLE message about full stop at the end of .Nd; inspired by mdoclint(1) 2017-05-31 15:31 schwarze Changed: mandoc.1 (1.191), "Exp", lines: +11 -1 mandoc.h (1.218), "Exp", lines: +2 -1 mdoc_validate.c (1.329), "Exp", lines: +33 -1 read.c (1.167), "Exp", lines: +2 -1 STYLE message about missing use of Ox/Nx/Fx/Dx; OK jmc@ wiz@ 2017-05-30 20:25 schwarze Changed: mandoc.1 (1.190), "Exp", lines: +4 -4 tweak previous; from jmc@ 2017-05-30 19:30 schwarze Changed: mandoc.1 (1.189), "Exp", lines: +13 -1 mandoc.h (1.217), "Exp", lines: +3 -1 mdoc_validate.c (1.328), "Exp", lines: +14 -2 read.c (1.166), "Exp", lines: +4 -1 regress/regress.pl (1.6), "Exp", lines: +3 -3 regress/mdoc/Tn/noarg.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Ud/arg.out_lint (1.2), "Exp", lines: +6 -0 STYLE message about useless macros we don't want (Bt Tn Ud); not a WARNING because they don't endanger portability 2017-05-30 16:31 schwarze Changed: mdoc_html.c (1.289), "Exp", lines: +18 -10 mdoc_man.c (1.116), "Exp", lines: +13 -7 mdoc_markdown.c (1.22), "Exp", lines: +13 -7 mdoc_term.c (1.358), "Exp", lines: +15 -7 regress/mdoc/Lk/noarg.in (1.3), "Exp", lines: +1 -1 fix formatting of intermediate punctuation in .Lk 2017-05-30 16:22 schwarze Added: regress/mdoc/Cd/punct.in (1.1) regress/mdoc/Cd/punct.out_ascii (1.1) regress/mdoc/Cd/punct.out_markdown (1.1) regress/mdoc/Cm/punct.in (1.1) regress/mdoc/Cm/punct.out_ascii (1.1) regress/mdoc/Cm/punct.out_markdown (1.1) regress/mdoc/Ic/punct.in (1.1) regress/mdoc/Ic/punct.out_ascii (1.1) regress/mdoc/Ic/punct.out_markdown (1.1) regress/mdoc/Va/punct.in (1.1) regress/mdoc/Va/punct.out_ascii (1.1) regress/mdoc/Va/punct.out_markdown (1.1) Changed: libmdoc.h (1.112), "Exp", lines: +1 -2 mdoc_argv.c (1.115), "Exp", lines: +4 -4 mdoc_macro.c (1.224), "Exp", lines: +17 -23 regress/mdoc/Ad/font.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Ad/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ad/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/An/break.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Ap/middle.in (1.2), "Exp", lines: +4 -1 regress/mdoc/Ap/middle.out_ascii (1.2), "Exp", lines: +3 -1 regress/mdoc/Ap/middle.out_markdown (1.2), "Exp", lines: +4 -1 regress/mdoc/Aq/empty.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Aq/empty.out_ascii (1.2), "Exp", lines: +2 -1 regress/mdoc/Aq/empty.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Aq/empty.out_utf8 (1.2), "Exp", lines: +2 -1 regress/mdoc/Ar/punct.in (1.2), "Exp", lines: +3 -0 regress/mdoc/Ar/punct.out_ascii (1.2), "Exp", lines: +2 -0 regress/mdoc/Ar/punct.out_markdown (1.2), "Exp", lines: +3 -0 regress/mdoc/At/invalid.in (1.2), "Exp", lines: +1 -1 regress/mdoc/At/invalid.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/At/invalid.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Brq/empty.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Brq/empty.out_ascii (1.2), "Exp", lines: +2 -1 regress/mdoc/Brq/empty.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Bx/args.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Bx/args.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Bx/args.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Cd/Makefile (1.4), "Exp", lines: +1 -1 regress/mdoc/Cm/Makefile (1.4), "Exp", lines: +1 -1 regress/mdoc/Dq/empty.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Dq/empty.out_ascii (1.3), "Exp", lines: +2 -1 regress/mdoc/Dq/empty.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Dv/font.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Dv/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Dv/font.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Em/punct.in (1.2), "Exp", lines: +7 -6 regress/mdoc/Em/punct.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Em/punct.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Em/punct.out_markdown (1.2), "Exp", lines: +2 -1 regress/mdoc/Eo/empty.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Eo/empty.out_ascii (1.2), "Exp", lines: +3 -3 regress/mdoc/Eo/empty.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Eo/obsolete.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Eo/obsolete.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Eo/obsolete.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Er/noarg.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Er/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Er/noarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ev/font.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Ev/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ev/font.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/Fl/punct.in (1.2), "Exp", lines: +3 -0 regress/mdoc/Fl/punct.out_ascii (1.2), "Exp", lines: +2 -0 regress/mdoc/Fl/punct.out_markdown (1.2), "Exp", lines: +3 -0 regress/mdoc/Fo/font.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Fo/punct.in (1.2), "Exp", lines: +7 -3 regress/mdoc/Fo/punct.out_ascii (1.2), "Exp", lines: +7 -3 regress/mdoc/Fo/punct.out_markdown (1.2), "Exp", lines: +7 -3 regress/mdoc/Ic/Makefile (1.4), "Exp", lines: +1 -1 regress/mdoc/In/font.in (1.2), "Exp", lines: +1 -1 regress/mdoc/In/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/In/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Li/punct.in (1.2), "Exp", lines: +5 -5 regress/mdoc/Li/punct.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Li/punct.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Li/punct.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Ms/font.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Ms/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Ms/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Mt/simple.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Mt/simple.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Mt/simple.out_markdown (1.3), "Exp", lines: +1 -1 regress/mdoc/No/punct.in (1.2), "Exp", lines: +5 -5 regress/mdoc/No/punct.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/No/punct.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/No/punct.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ns/punct.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Oo/punct.in (1.2), "Exp", lines: +3 -3 regress/mdoc/Oo/punct.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Oo/punct.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Op/punct.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Pa/punct.in (1.2), "Exp", lines: +3 -0 regress/mdoc/Pa/punct.out_ascii (1.2), "Exp", lines: +2 -0 regress/mdoc/Pa/punct.out_markdown (1.2), "Exp", lines: +3 -0 regress/mdoc/Qq/empty.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Qq/empty.out_ascii (1.2), "Exp", lines: +2 -1 regress/mdoc/Qq/empty.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Sq/empty.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Sq/empty.out_ascii (1.2), "Exp", lines: +2 -1 regress/mdoc/Sq/empty.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/St/call.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Sx/noarg.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Sx/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sx/noarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Sy/punct.in (1.2), "Exp", lines: +5 -4 regress/mdoc/Sy/punct.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Sy/punct.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Sy/punct.out_markdown (1.2), "Exp", lines: +2 -1 regress/mdoc/Tn/noarg.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Tn/noarg.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Tn/noarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Va/Makefile (1.4), "Exp", lines: +1 -1 regress/mdoc/Xr/args.in (1.2), "Exp", lines: +2 -2 regress/mdoc/Xr/args.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Xr/args.out_markdown (1.2), "Exp", lines: +2 -2 Macro argument quoting does not prevent recognition of punctuation and of called macros. This bug affects almost all macros, and fixing it simplifies the code. It is amazing that the bogus ARGS_QWORD feature got implemented in the first place, and then carrier along for more than eight years without anybody ever noticing that it was pointless. Reported by Leah Neukirchen <leah at vuxu dot org>, found on Void Linux. 2017-05-18 14:45 schwarze Changed: gmdiff (1.6), "Exp", lines: +1 -1 Use [ rather than [[ for portability, in particular since it makes no difference in the case at hand. Reported by Leah Neukirchen <leah at vuxu dot org> (Void Linux). 2017-05-17 23:39 schwarze Changed: main.c (1.291), "Exp", lines: +1 -3 mandoc.1 (1.188), "Exp", lines: +1 -4 mandoc.3 (1.39), "Exp", lines: +4 -6 mandoc_char.7 (1.65), "Exp", lines: +3 -5 Delete the -T xhtml command line option. It has been obsolete for more than two years. Use -T html. 2017-05-17 23:23 schwarze Changed: man.1 (1.29), "Exp", lines: +2 -2 Fix documentation bug: man(1) does not ignore manpath directories lacking mandoc.db(5) files; instead, it uses filename lookup to find manuals in such directories. 2017-05-17 23:20 schwarze Changed: mandoc.1 (1.187), "Exp", lines: +3 -4 Modernize an example showing antiquated syntax, and delete an example showing the arcane -W stop option. 2017-05-17 22:43 schwarze Changed: mandoc.1 (1.186), "Exp", lines: +3 -3 missing space between macro arg and punctuation; from jmc@ 2017-05-17 22:27 schwarze Changed: makewhatis.8 (1.6), "Exp", lines: +5 -2 mandocdb.c (1.250), "Exp", lines: +23 -1 Never create empty databases. When pkg_add(1)ing packages installing manual pages into some directory, the database in that directory automatically gets created or updated, no change so far. This patch causes the database file to be automatically unlinked when pkg_delete(1)ing the last package having manual pages in that directory, to leave less cruft behind. Suggested by ajacoutot@. 2017-05-17 21:19 schwarze Changed: mansearch.c (1.73), "Exp", lines: +2 -1 Do not warn if a database file does not exist because that is simply equivalent to an empty database. Suggested by ajacoutot@ 2017-05-17 17:54 schwarze Changed: mdoc_html.c (1.288), "Exp", lines: +1 -18 Delete pointless width calculation for SYNOPSIS .Nm block heads. Just let HTML <table> do its work of selecting the needed width. <Anton dot Lindqvist at gmail dot com> reported that the manually calculated width was insufficient in some manual pages. 2017-05-16 19:06 schwarze Changed: TODO (1.237), "Exp", lines: +1 -15 main.c (1.290), "Exp", lines: +14 -11 mandoc.1 (1.185), "Exp", lines: +31 -12 mandoc.h (1.216), "Exp", lines: +4 -2 read.c (1.165), "Exp", lines: +4 -3 Introduce a new mandoc(1) message level, -W style, below -W warning. Switch -W all from meaning -W warning to meaning -W style. The meaning of -T lint does *not* change, it still implies -W warning. No messages on the new level yet, but they will come. Usually, i do not lightly make the user interface larger. But this has been planned for years, and EXIT STATUS 1 was reserved for it all the time. The message system is now stable enough to finally implement it. jmc@ regarding the concept: "really good idea" 2017-05-14 14:00 schwarze Changed: mdoc_validate.c (1.327), "Exp", lines: +2 -2 warn about punctuation between .Xr and .Rs in SEE ALSO; inspired by mdoclint 2017-05-14 12:27 schwarze Changed: html.c (1.212), "Exp", lines: +2 -2 Tweak previous: tb@ noticed that some browser/font combinations have so amazingly wide bold fonts (for the same nominal font size) that adding 15% to the column width still isn't sufficient to make text reliably fit, so go for 20%. 2017-05-12 17:58 schwarze Changed: html.c (1.211), "Exp", lines: +11 -5 mandoc_html.3 (1.8), "Exp", lines: +15 -7 mdoc_html.c (1.287), "Exp", lines: +5 -5 Make the tag column in .Bl -tag lists wider: 1. I forgot about the 2n padding between tag and body. 2. The factor 1.1 was too small for bold fold, make it *1.15 + 1n. Ugliness spotted by tb@. 2017-05-09 14:10 schwarze Changed: man_html.c (1.142), "Exp", lines: +3 -2 man_term.c (1.200), "Exp", lines: +4 -3 mdoc_html.c (1.286), "Exp", lines: +4 -4 mdoc_term.c (1.357), "Exp", lines: +3 -2 Trailing \c suppresses the output line break even if the next line is a text line starting with whitespace. Quirk found in the sysutils/rancid port. 2017-05-08 20:33 schwarze Changed: man.c (1.173), "Exp", lines: +6 -7 roff.c (1.302), "Exp", lines: +8 -2 Line-breaking roff(7) requests also break man(7) next-line scope. Considering that real roff implements next-line scope using input line traps, that isn't all that surprising. Issue found in the games/xbattle port. 2017-05-08 15:34 schwarze Added: regress/roff/ti/Makefile (1.1) regress/roff/ti/basic-man.in (1.1) regress/roff/ti/basic-man.out_ascii (1.1) regress/roff/ti/basic-mdoc.in (1.1) regress/roff/ti/basic-mdoc.out_ascii (1.1) Changed: mdoc_man.c (1.115), "Exp", lines: +9 -5 roff.7 (1.80), "Exp", lines: +12 -6 roff.c (1.301), "Exp", lines: +4 -4 roff.h (1.48), "Exp", lines: +2 -2 roff_html.c (1.5), "Exp", lines: +1 -0 roff_term.c (1.6), "Exp", lines: +42 -0 roff_validate.c (1.5), "Exp", lines: +1 -0 term.h (1.121), "Exp", lines: +2 -1 term_ascii.c (1.56), "Exp", lines: +6 -2 term_ps.c (1.84), "Exp", lines: +5 -2 regress/roff/Makefile (1.3), "Exp", lines: +1 -1 Basic implementation of the roff(7) .ti (temporary indent) request. Needed by about four dozen ports (thanks to naddy@ for the research). 2017-05-08 03:55 schwarze Changed: roff.7 (1.79), "Exp", lines: +414 -429 Convert REQUEST REFERENCE from using .Ss to .Bl -tag, allowing to specify request arguments and supporting tag searching in less(1). Improve some entries and document .ta. 2017-05-07 21:44 schwarze Changed: man.7 (1.135), "Exp", lines: +7 -3 man_term.c (1.199), "Exp", lines: +12 -2 implement .DT in terms of .ta; needed for print/ghostview, for example 2017-05-07 17:31 schwarze Added: term_tab.c (1.1) regress/roff/ta/Makefile (1.1) regress/roff/ta/basic-man.in (1.1) regress/roff/ta/basic-man.out_ascii (1.1) regress/roff/ta/basic-mdoc.in (1.1) regress/roff/ta/basic-mdoc.out_ascii (1.1) Changed: Makefile (1.512), "Exp", lines: +3 -1 Makefile.depend (1.31), "Exp", lines: +1 -0 man_term.c (1.198), "Exp", lines: +4 -2 mdoc_man.c (1.114), "Exp", lines: +12 -2 mdoc_term.c (1.356), "Exp", lines: +29 -11 roff.c (1.300), "Exp", lines: +28 -4 roff.h (1.47), "Exp", lines: +2 -2 roff_html.c (1.4), "Exp", lines: +1 -0 roff_term.c (1.5), "Exp", lines: +11 -1 roff_validate.c (1.4), "Exp", lines: +1 -0 term.c (1.260), "Exp", lines: +15 -12 term.h (1.120), "Exp", lines: +4 -2 term_ascii.c (1.55), "Exp", lines: +1 -2 regress/roff/Makefile (1.2), "Exp", lines: +1 -1 Basic implementation of the roff(7) .ta (define tab stops) request. This is the first feature made possible by the parser reorganization. Improves the formatting of the SYNOPSIS in many Xenocara GL manuals. Also important for ports, as reported by many, including naddy@. 2017-05-05 15:54 schwarze Changed: man.7 (1.134), "Exp", lines: +3 -28 mdoc.7 (1.264), "Exp", lines: +2 -19 roff.7 (1.78), "Exp", lines: +12 -2 Shorten the description of .sp and move it to roff(7). If is not a macro but a low-level roff request and not recommended for use in manual pages. 2017-05-05 15:17 schwarze Changed: man.c (1.172), "Exp", lines: +2 -2 man_html.c (1.141), "Exp", lines: +2 -22 man_macro.c (1.120), "Exp", lines: +2 -4 man_term.c (1.197), "Exp", lines: +1 -52 man_validate.c (1.127), "Exp", lines: +4 -1 mandocdb.c (1.249), "Exp", lines: +1 -2 mdoc.c (1.264), "Exp", lines: +2 -2 mdoc_argv.c (1.114), "Exp", lines: +1 -2 mdoc_html.c (1.285), "Exp", lines: +3 -27 mdoc_macro.c (1.223), "Exp", lines: +3 -5 mdoc_man.c (1.113), "Exp", lines: +9 -15 mdoc_markdown.c (1.21), "Exp", lines: +4 -2 mdoc_state.c (1.8), "Exp", lines: +1 -2 mdoc_term.c (1.355), "Exp", lines: +9 -37 mdoc_validate.c (1.326), "Exp", lines: +5 -5 roff.c (1.299), "Exp", lines: +7 -5 roff.h (1.46), "Exp", lines: +2 -4 roff_html.c (1.3), "Exp", lines: +21 -1 roff_term.c (1.4), "Exp", lines: +25 -1 roff_validate.c (1.3), "Exp", lines: +1 -0 regress/man/blank/line.out_lint (1.2), "Exp", lines: +4 -0 regress/mdoc/Pp/arg.out_lint (1.3), "Exp", lines: +1 -1 regress/roff/cond/close.out_lint (1.3), "Exp", lines: +1 -0 Move .sp to the roff modules. Enough infrastructure is in place now that this actually saves code: -70 LOC. 2017-05-05 13:17 schwarze Changed: man_html.c (1.140), "Exp", lines: +1 -2 man_macro.c (1.119), "Exp", lines: +1 -2 man_term.c (1.196), "Exp", lines: +1 -11 man_validate.c (1.126), "Exp", lines: +0 -1 mandocdb.c (1.248), "Exp", lines: +1 -2 mdoc_argv.c (1.113), "Exp", lines: +1 -2 mdoc_html.c (1.284), "Exp", lines: +1 -2 mdoc_macro.c (1.222), "Exp", lines: +2 -3 mdoc_man.c (1.112), "Exp", lines: +24 -26 mdoc_markdown.c (1.20), "Exp", lines: +2 -6 mdoc_state.c (1.7), "Exp", lines: +1 -2 mdoc_term.c (1.354), "Exp", lines: +5 -20 mdoc_validate.c (1.325), "Exp", lines: +1 -2 roff.c (1.298), "Exp", lines: +5 -4 roff.h (1.45), "Exp", lines: +2 -4 roff_term.c (1.3), "Exp", lines: +10 -1 roff_validate.c (1.2), "Exp", lines: +1 -0 move .ll to the roff modules 2017-05-05 02:31 schwarze Changed: man.7 (1.133), "Exp", lines: +5 -11 mdoc.7 (1.263), "Exp", lines: +2 -12 roff.7 (1.77), "Exp", lines: +4 -10 Clean up docs after today's .br and .ft code cleanup; simpler. 2017-05-05 02:06 schwarze Added: roff_validate.c (1.1) regress/roff/ft/badargs-mdoc.in (1.1) regress/roff/ft/badargs-mdoc.out_ascii (1.1) regress/roff/ft/badargs-mdoc.out_lint (1.1) Changed: Makefile (1.511), "Exp", lines: +3 -1 Makefile.depend (1.30), "Exp", lines: +3 -0 man_html.c (1.139), "Exp", lines: +1 -2 man_macro.c (1.118), "Exp", lines: +2 -3 man_term.c (1.195), "Exp", lines: +1 -38 man_validate.c (1.125), "Exp", lines: +2 -44 mandoc_headers.3 (1.13), "Exp", lines: +2 -1 mdoc_html.c (1.283), "Exp", lines: +2 -1 mdoc_man.c (1.111), "Exp", lines: +18 -5 mdoc_markdown.c (1.19), "Exp", lines: +5 -2 mdoc_term.c (1.353), "Exp", lines: +2 -1 mdoc_validate.c (1.324), "Exp", lines: +3 -2 roff.c (1.297), "Exp", lines: +33 -3 roff.h (1.44), "Exp", lines: +3 -3 roff_html.c (1.2), "Exp", lines: +4 -1 roff_term.c (1.2), "Exp", lines: +29 -1 regress/roff/ft/Makefile (1.2), "Exp", lines: +4 -2 Move handling of the roff(7) .ft request from the man(7) modules to the new roff(7) modules. As a side effect, mdoc(7) now handles .ft, too. Of course, do not use that. 2017-05-04 22:16 schwarze Added: roff_html.c (1.1) roff_term.c (1.1) Changed: Makefile (1.510), "Exp", lines: +5 -1 html.h (1.85), "Exp", lines: +3 -1 man_html.c (1.138), "Exp", lines: +8 -18 man_term.c (1.194), "Exp", lines: +3 -11 mandoc_headers.3 (1.12), "Exp", lines: +16 -0 mdoc_html.c (1.282), "Exp", lines: +8 -18 mdoc_term.c (1.352), "Exp", lines: +2 -8 term.h (1.119), "Exp", lines: +7 -5 Start roff formatter modules for HTML and termininal output, used by both the mdoc and man formatters, with the ultimate goal of reducing code duplication between the two macro formatters. Made possible by the parser unification. Add the first formatting function (for the .br request). 2017-05-04 17:48 schwarze Changed: man_html.c (1.137), "Exp", lines: +13 -2 man_macro.c (1.117), "Exp", lines: +2 -4 man_term.c (1.193), "Exp", lines: +14 -3 man_validate.c (1.124), "Exp", lines: +11 -1 mandocdb.c (1.247), "Exp", lines: +5 -3 mdoc_argv.c (1.112), "Exp", lines: +1 -2 mdoc_html.c (1.281), "Exp", lines: +15 -4 mdoc_macro.c (1.221), "Exp", lines: +6 -7 mdoc_man.c (1.110), "Exp", lines: +11 -2 mdoc_markdown.c (1.18), "Exp", lines: +13 -7 mdoc_state.c (1.6), "Exp", lines: +4 -3 mdoc_term.c (1.351), "Exp", lines: +17 -5 mdoc_validate.c (1.323), "Exp", lines: +18 -7 roff.c (1.296), "Exp", lines: +22 -11 roff.h (1.43), "Exp", lines: +4 -5 regress/eqn/define/infinite.out_lint (1.2), "Exp", lines: +4 -4 regress/eqn/define/invalid.out_lint (1.2), "Exp", lines: +5 -5 regress/eqn/over/noarg.out_lint (1.2), "Exp", lines: +1 -1 regress/mdoc/Pp/arg.out_lint (1.2), "Exp", lines: +1 -1 regress/roff/cond/close.out_lint (1.2), "Exp", lines: +1 -1 regress/roff/cond/if.out_lint (1.2), "Exp", lines: +2 -2 regress/roff/de/escname.out_lint (1.2), "Exp", lines: +2 -2 regress/roff/de/indir.out_lint (1.2), "Exp", lines: +2 -2 regress/roff/ig/basic.out_lint (1.2), "Exp", lines: +2 -2 regress/roff/it/badarg.out_lint (1.2), "Exp", lines: +2 -2 regress/roff/tr/args.out_lint (1.2), "Exp", lines: +1 -1 regress/tbl/data/block_unclosed.out_lint (1.2), "Exp", lines: +2 -2 regress/tbl/data/empty.out_lint (1.2), "Exp", lines: +1 -1 Parser reorg: Generate the first node on the roff level: .br Fix some column numbers in diagnostic messages while here. 2017-05-01 23:27 schwarze Changed: man.c (1.171), "Exp", lines: +16 -2 A few days ago, a patch from <G dot Branden dot Robinson at gmail dot com> got committed to groff which changed .TP from using .it to using .itc, such that groff now supports more than one man(7) macro line in the .TP head if all but the last line in the head end with \c. Of course, relying on that behaviour is utterly non-portable, but if authors are reckless enough to use that idiom, let's do what they want. 2017-05-01 20:54 schwarze Added: regress/tbl/mod/expand-toowide.in (1.1) regress/tbl/mod/expand-toowide.out_ascii (1.1) Changed: out.c (1.63), "Exp", lines: +6 -3 regress/tbl/mod/Makefile (1.2), "Exp", lines: +1 -1 When trying to expand some columns in a table where the sum of the widths of the remaining columns is already wider than the line length, underflowing size_t and dying from ENOMEM is the wrong plan. Instead, simply refrain from expanding anything in such a situation, avoiding a crash that tb@ found with afl. 2017-04-29 12:45 schwarze Deleted: man_hash.c (1.37) mdoc_hash.c (1.29) Changed: Makefile (1.509), "Exp", lines: +1 -5 Makefile.depend (1.29), "Exp", lines: +3 -4 libman.h (1.81), "Exp", lines: +1 -2 libmandoc.h (1.67), "Exp", lines: +1 -3 libmdoc.h (1.111), "Exp", lines: +1 -2 man.c (1.170), "Exp", lines: +11 -18 mandoc_headers.3 (1.11), "Exp", lines: +23 -6 mdoc.c (1.263), "Exp", lines: +10 -17 mdoc_macro.c (1.220), "Exp", lines: +2 -2 mdoc_validate.c (1.322), "Exp", lines: +8 -8 read.c (1.164), "Exp", lines: +12 -7 roff.c (1.295), "Exp", lines: +300 -306 roff.h (1.42), "Exp", lines: +8 -1 Parser unification: use nice ohashes for all three request and macro tables; no functional change, minus two source files, minus 200 lines of code. 2017-04-28 16:25 schwarze Added: regress/mdoc/Sh/first.out_ascii (1.1) regress/mdoc/Sh/parbefore.in (1.1) regress/mdoc/Sh/parbefore.out_ascii (1.1) regress/mdoc/Sh/parbefore.out_lint (1.1) regress/mdoc/Sh/parbefore.out_markdown (1.1) regress/mdoc/Sh/parborder.in (1.1) regress/mdoc/Sh/parborder.out_ascii (1.1) regress/mdoc/Sh/parborder.out_lint (1.1) regress/mdoc/Sh/parborder.out_markdown (1.1) Changed: mdoc_validate.c (1.321), "Exp", lines: +4 -1 regress/mdoc/Sh/Makefile (1.4), "Exp", lines: +9 -4 Delete .Pp right before the first .Sh and right before any .Ss, and warn about it; mdoclint(1) does so, and it makes sense. 2017-04-27 17:08 schwarze Changed: TODO (1.236), "Exp", lines: +8 -1 ASCII characters that are special to roff 2017-04-24 23:32 schwarze Deleted: manpage.c (1.15) Changed: Makefile (1.508), "Exp", lines: +1 -10 Makefile.depend (1.28), "Exp", lines: +0 -1 Delete the manpage(1) utility. It was never enabled in any release, nor was a manual ever written. In general, we want to simplify the user interface rather than succumb to featurism. Consequently, integrating manpage(1) into the main binary would seem like a dubious direction. 2017-04-24 23:06 schwarze Changed: libman.h (1.80), "Exp", lines: +3 -3 libmdoc.h (1.110), "Exp", lines: +12 -11 man.c (1.169), "Exp", lines: +5 -20 man.h (1.78), "Exp", lines: +1 -45 man_hash.c (1.36), "Exp", lines: +7 -9 man_html.c (1.136), "Exp", lines: +4 -3 man_macro.c (1.116), "Exp", lines: +15 -18 man_term.c (1.192), "Exp", lines: +4 -3 man_validate.c (1.123), "Exp", lines: +12 -12 mandoc_headers.3 (1.10), "Exp", lines: +11 -0 mandocdb.c (1.246), "Exp", lines: +9 -10 mdoc.c (1.262), "Exp", lines: +9 -47 mdoc.h (1.145), "Exp", lines: +1 -130 mdoc_argv.c (1.111), "Exp", lines: +7 -5 mdoc_hash.c (1.28), "Exp", lines: +7 -7 mdoc_html.c (1.280), "Exp", lines: +8 -5 mdoc_macro.c (1.219), "Exp", lines: +42 -43 mdoc_man.c (1.109), "Exp", lines: +4 -4 mdoc_markdown.c (1.17), "Exp", lines: +4 -4 mdoc_state.c (1.5), "Exp", lines: +5 -4 mdoc_term.c (1.350), "Exp", lines: +7 -5 mdoc_validate.c (1.320), "Exp", lines: +37 -42 roff.c (1.294), "Exp", lines: +132 -281 roff.h (1.41), "Exp", lines: +413 -3 tree.c (1.74), "Exp", lines: +7 -7 Continue parser unification: * Make enum rofft an internal interface as enum roff_tok in "roff.h". * Represent mdoc and man macros in enum roff_tok. * Make TOKEN_NONE a proper enum value and use it throughout. * Put the prologue macros first in the macro tables. * Unify mdoc_macroname[] and man_macroname[] into roff_name[]. 2017-04-19 01:00 schwarze Changed: cgi.c (1.154), "Exp", lines: +3 -2 More thoroughly reject direct access to unintended files, such that URIs like http://man.openbsd.org/OpenBSD-current/mandoc.db and http://man.openbsd.org/OpenBSD-current/man1/ do not cause display of garbage. 2017-04-18 16:01 schwarze Changed: main.c (1.289), "Exp", lines: +7 -3 Now that global -i is gone, pass -i through to the apropos(1) expression parser, such that "apropos -i 'Nm~dump\>'" finds kdump(1) and WCOREDUMP(2) and you don't need to type the counter-intuitive "apropos -- -i 'Nm~dump\>'". 2017-04-18 15:27 schwarze Changed: main.c (1.288), "Exp", lines: +1 -5 Delete the undocumented and unimplemented man(1) -i (interactive apropos) option. It will not be implemented. Featurism isn't the plan for the future; simplicity is. 2017-04-18 15:06 schwarze Changed: mansearch.c (1.72), "Exp", lines: +6 -1 The apropos(1) manual still documents the unary -i operator for regular expression search terms, but it appears that somewhere along the way, the implementation got lost, so restore it. Bug found while investigating other reports from Gonzalo Tornaria. 2017-04-18 13:57 schwarze Changed: mansearch.c (1.71), "Exp", lines: +2 -0 Fix previous: i forgot explicit NUL termination; noticed by Gonzalo <Tornaria at cmat dot edu dot uy>, thanks! 2017-04-17 20:05 schwarze Changed: mansearch.c (1.70), "Exp", lines: +52 -24 mansearch.h (1.28), "Exp", lines: +5 -2 Restore -kO Nd, -kO Nm, -kO sec, and -kO arch to working order. They got broken in the SQLite removal. As opposed to the rest of -kO, they are no longer very useful, but they are certainly not supposed to fail assertions. Issue reported by Gonzalo Tornaria <tornaria at cmat dot edu dot uy>. 2017-04-17 13:37 schwarze Changed: regress/mdoc/Lk/font.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Lk/link.out_ascii (1.2), "Exp", lines: +4 -4 regress/mdoc/Lk/noarg.in (1.2), "Exp", lines: +4 -0 regress/mdoc/Lk/noarg.out_ascii (1.2), "Exp", lines: +6 -2 regress/mdoc/Lk/noarg.out_lint (1.2), "Exp", lines: +1 -1 regress/mdoc/Lk/noarg.out_markdown (1.3), "Exp", lines: +4 -0 adjust tests to recent .Lk improvements 2017-04-17 13:26 schwarze Changed: mdoc_man.c (1.108), "Exp", lines: +58 -5 implement display of long .Lk URIs to match -Tascii 2017-04-17 12:53 schwarze Changed: mdoc_html.c (1.279), "Exp", lines: +15 -9 mdoc_macro.c (1.218), "Exp", lines: +6 -2 mdoc_man.c (1.107), "Exp", lines: +12 -4 mdoc_markdown.c (1.16), "Exp", lines: +15 -4 mdoc_term.c (1.349), "Exp", lines: +12 -6 Fix handling of trailing punctuation in .Lk. This macro is unusual in so far as trailing punction needs to remain inside the scope because it must be inside, not after the display of long URIs in terminal output mode. Improves formatting of fw_update(1), help(1), less(1), sendbug(1), acx(4), inet6(4), ipsec(4), oce(4), isakmpd.conf(5), afterboot(8), release(8), traceroute(8). 2017-04-14 19:35 schwarze Changed: mdoc_term.c (1.348), "Exp", lines: +11 -1 Show long .Lk URIs in like an indented display, similar to groff. Suggested by bentley@. 2017-04-14 18:25 schwarze Changed: mdoc_man.c (1.106), "Exp", lines: +2 -2 mdoc_term.c (1.347), "Exp", lines: +2 -2 Do not make the colon after the .Lk link text italic. I just pushed the same change to GNU troff. 2017-03-30 22:22 schwarze Changed: mandoc_headers.3 (1.9), "Exp", lines: +5 -5 mansearch.3 (1.5), "Exp", lines: +10 -118 delete documentation of some stuff that no longer exists, mostly about SQLite3; noticed by Jan Stary <hans at stare dor cz> 2017-03-27 18:51 schwarze Changed: apropos.1 (1.45), "Exp", lines: +3 -3 main.c (1.287), "Exp", lines: +8 -10 man.1 (1.28), "Exp", lines: +3 -9 mandoc.1 (1.184), "Exp", lines: +4 -4 simplify the SYNOPSIS as well, just like the option lists; suggested by and OK jmc@ 2017-03-27 15:17 schwarze Changed: mandoc.1 (1.183), "Exp", lines: +6 -16 For some options that are rarely needed in mandoc(1), delete the descriptions and point to man(1) instead. Inspired by apropos.1 rev. 1.43. 2017-03-27 14:40 schwarze Changed: apropos.1 (1.44), "Exp", lines: +5 -12 man.1 (1.27), "Exp", lines: +7 -19 mandoc.1 (1.182), "Exp", lines: +5 -17 Simplify: mention at one place that -fkl override each other, rather than stating it separately for each option. Suggested, OKed, and tweaked by jmc@. 2017-03-25 12:46 schwarze Changed: apropos.1 (1.43), "Exp", lines: +7 -29 man.1 (1.26), "Exp", lines: +7 -66 For some options that are rarely needed in apropos(1) and man(1), delete the verbose descriptions and point to man(1) and mandoc(1), respectively, instead. That shortens the pages and makes them easier to read. Tweaks and OK jmc@, based in part on ideas from tedu@. 2017-03-22 13:31 schwarze Changed: man.1 (1.25), "Exp", lines: +8 -13 simplify description of -S and -w, point from EXIT STATUS to mandoc(1) for details, and remove duplicate .Xr to whatis(1); OK jmc@ 2017-03-21 18:25 schwarze Changed: mandoc.1 (1.181), "Exp", lines: +3 -3 simplify .Nd; to display manuals, use man(1) instead; OK jmc@ 2017-03-21 18:06 schwarze Changed: man.1 (1.24), "Exp", lines: +3 -9 delete documentation of a hack that was removed years ago 2017-03-20 14:32 schwarze Changed: main.c (1.286), "Exp", lines: +8 -16 mandoc.1 (1.180), "Exp", lines: +31 -61 Silently ignore invalid -m input formats rather than erroring out. As observed by Jan Stary <hans at stare dot cz>, this is useful such that after 'alias man="man -m $HOME/man"', 'man -l foo.1' still works. Simplify and shorten the description of -m, and use .Ic for macros. 2017-03-18 19:56 schwarze Changed: catman.8 (1.8), "Exp", lines: +3 -3 mandocd.8 (1.2), "Exp", lines: +3 -3 soelim.1 (1.4), "Exp", lines: +3 -3 minor issues found with mandoc -Tlint 2017-03-18 19:51 schwarze Changed: apropos.1 (1.42), "Exp", lines: +24 -19 makewhatis.8 (1.5), "Exp", lines: +13 -3 man.1 (1.23), "Exp", lines: +26 -7 mandoc.1 (1.179), "Exp", lines: +18 -5 Correct description of MANPATH, and a few more improvements to the ENVIRONMENT section; OK jmc@ 2017-03-18 16:48 schwarze Changed: cgi.c (1.153), "Exp", lines: +12 -11 cgi.h.example (1.6), "Exp", lines: +0 -1 man.cgi.8 (1.22), "Exp", lines: +2 -7 Simplify: write HTTP 303 redirects with relative locations. Suggested by bentley@. Delete the HTTP_HOST configuration variable that is now obsolete. 2017-03-18 16:19 schwarze Changed: cgi.c (1.152), "Exp", lines: +3 -2 Bugfix: use SCRIPT_NAME for .Xr hyperlinks. Patch from <andreas at AndreasVoegele dot com>. 2017-03-17 17:24 schwarze Changed: apropos.1 (1.41), "Exp", lines: +25 -4 man.1 (1.22), "Exp", lines: +7 -3 Document man(1) section selection priority, and correct description of apropos(1) output search order. Suggested by tb@. 2017-03-17 12:56 schwarze Changed: man.cgi.8 (1.21), "Exp", lines: +9 -8 Update HISTORY and AUTHORS: we no longer use SQLite. Outdated information reported by an Anonymous Coward on undeadly.org. 2017-03-17 12:10 schwarze Changed: man_html.c (1.135), "Exp", lines: +5 -3 mdoc_html.c (1.278), "Exp", lines: +5 -3 Fix regression in mdoc_html.c 1.275, man_html 1.134: For .Sh, .Ss, .SH, .SS, only write selflink if an id could be constructed. Crash reported by Raf Czlonka <rczlonka at gmail dot com>, analysis of root cause by natano@ 2017-03-15 13:49 schwarze Changed: cgi.c (1.151), "Exp", lines: +7 -4 In URIs in apropos(1) result tables, only write the manpath if it does not match the default. 2017-03-15 13:18 schwarze Changed: cgi.c (1.150), "Exp", lines: +49 -34 man.cgi.3 (1.4), "Exp", lines: +9 -4 Mention the manual page name and section in the HTML page <title>. Based on a patch from <Anton dot Lindqvist at gmail dot com>, but simplified and also covering apropos(1) search results. 2017-03-15 11:29 schwarze Changed: html.c (1.210), "Exp", lines: +25 -2 html.h (1.84), "Exp", lines: +3 -1 man_html.c (1.134), "Exp", lines: +18 -6 mandoc_html.3 (1.7), "Exp", lines: +30 -3 mdoc_html.c (1.277), "Exp", lines: +6 -29 Minimal support for deep linking into man(7) pages. As the man(7) language does not provide semantic markup, only .SH, .SS, and .UR become anchors for now. 2017-03-15 10:17 schwarze Changed: cgi.c (1.149), "Exp", lines: +25 -3 man.cgi.3 (1.3), "Exp", lines: +21 -3 It's annoying that people keep writing URIs including redundant parts like "/OpenBSD-current/manN/". To discourage that, let man.cgi(8) redirect search form results to nice, concise URIs. 2017-03-14 01:35 schwarze Changed: html.c (1.209), "Exp", lines: +3 -1 mdoc_html.c (1.276), "Exp", lines: +3 -2 Slightly increase widths calculated from string lengths (mainly for .Bl -tag lists and SYNOPSIS .Nm blocks), such that the text still fits even if it is printed in bold font. This is an ugly band aid - but implementing font-dependent width measurements would be a major project and even more difficult for HTML than for PostScript. Issue reported by Jan Stary <hans at stare dot cz>. 2017-03-13 20:22 schwarze Changed: mandoc.css (1.18), "Exp", lines: +6 -1 mdoc_html.c (1.275), "Exp", lines: +81 -11 Port ctags-style, less(1) :t internal searching from terminal output to HTML output. For certain macros appearing at the beginning of .It heads, write HTML id="..." attributes such that deep linking works. Write HTML <a> attributes such that you can easily copy out link targets with the mouse. Try: http://man.openbsd.org/vmctl.8#create Feature suggested by <guettliml at Thomas dash Guettler dot de>, some details of the design and implementation by me. 2017-03-13 19:01 schwarze Changed: html.c (1.208), "Exp", lines: +13 -6 mandoc_html.3 (1.6), "Exp", lines: +7 -2 mdoc_html.c (1.274), "Exp", lines: +43 -43 Print title="..." in addition to id="..." attributes for macro keys that can be searched for by apropos(1), such that you see the semantic function in a tooltip when hovering with the mouse. 2017-03-11 16:04 schwarze Added: regress/eqn/define/infinite.in (1.1) regress/eqn/define/infinite.out_ascii (1.1) regress/eqn/define/infinite.out_lint (1.1) Changed: regress/eqn/define/Makefile (1.2), "Exp", lines: +2 -2 test infinite recursion in eqn(7) "define" statements 2017-03-11 15:43 schwarze Changed: eqn.c (1.62), "Exp", lines: +8 -3 Improve detection of recursive eqn(7) "define" statements: Do not only catch "define key 'key other stuff'", but also "define key 'other stuff key'". Fixing infinite loop found by tb@ with afl(1). 2017-03-11 12:35 schwarze Changed: mdoc_markdown.c (1.15), "Exp", lines: +49 -22 regress/mdoc/Aq/author.out_markdown (1.2), "Exp", lines: +3 -3 regress/mdoc/Lk/noarg.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Mt/simple.out_markdown (1.2), "Exp", lines: +2 -2 regress/mdoc/Rs/allch.out_markdown (1.3), "Exp", lines: +2 -2 In markdown, autolinks are dangerous. Different compilers disagree with respect to what constitutes a valid autolink, and if a compiler deems an autolink invalid, the input turns into an unintended and potentially harmful raw HTML tag. So, never write autolinks. Instead of <link>, write [link](link). Instead of <addr>, write [addr](mailto:addr). Issue pointed out by bentley@, who also agrees with the general direction of the change. 2017-03-09 15:33 schwarze Changed: regress/mdoc/Op/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Os/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Ox/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Pa/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Pf/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Pp/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Qq/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Rs/Makefile (1.4), "Exp", lines: +0 -1 regress/mdoc/Rv/Makefile (1.3), "Exp", lines: +4 -1 regress/mdoc/Sh/Makefile (1.3), "Exp", lines: +0 -2 regress/mdoc/Sm/Makefile (1.4), "Exp", lines: +0 -1 regress/mdoc/Sq/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/St/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Sx/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Sy/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Tn/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Ud/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Ux/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Va/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Vt/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Xr/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/blank/Makefile (1.3), "Exp", lines: +1 -1 regress/mdoc/break/Makefile (1.4), "Exp", lines: +0 -1 regress/roff/Makefile.inc (1.2), "Exp", lines: +1 -0 regress/tbl/Makefile.inc (1.2), "Exp", lines: +1 -0 Really commit some files that failed to get committed in this commit: Now that markdown output is tested for almost everything, test all input files in -T markdown output mode by default and only mark those files with SKIP_MARKDOWN that are not to be tested. Much easier to read, and almost minus 40 lines of Makefile code. 2017-03-09 15:29 schwarze Changed: roff.c (1.293), "Exp", lines: +3 -1 Fix blunder in previous: we must keep the line parse buffer consistent even when aborting the parsing of the line. That buffer is not our own, but owned and reused by mparse_buf_r(), read.c. Returning without cleanup leaked memory and caused write overruns of the old, typically much smaller buffer in mparse_buf_r(). Promptly noticed by tb@ with afl(1), using MALLOC_OPTIONS=C. 2017-03-08 22:54 schwarze Changed: regress/regress.pl (1.5), "Exp", lines: +9 -4 regress/char/Makefile.inc (1.2), "Exp", lines: +1 -0 regress/eqn/Makefile.inc (1.2), "Exp", lines: +1 -0 regress/man/Makefile.inc (1.2), "Exp", lines: +1 -0 regress/mdoc/Ad/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/An/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Ap/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Aq/Makefile (1.4), "Exp", lines: +0 -1 regress/mdoc/Ar/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/At/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Bd/Makefile (1.3), "Exp", lines: +0 -4 regress/mdoc/Bf/Makefile (1.2), "Exp", lines: +4 -0 regress/mdoc/Bk/Makefile (1.2), "Exp", lines: +5 -0 regress/mdoc/Bl/Makefile (1.7), "Exp", lines: +4 -6 regress/mdoc/Brq/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Bx/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Cd/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Cm/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/D1/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Db/Makefile (1.2), "Exp", lines: +4 -0 regress/mdoc/Dd/Makefile (1.3), "Exp", lines: +5 -2 regress/mdoc/Dl/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Dq/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Dt/Makefile (1.3), "Exp", lines: +1 -2 regress/mdoc/Dv/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Em/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Eo/Makefile (1.4), "Exp", lines: +0 -1 regress/mdoc/Er/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Ev/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Ex/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Fd/Makefile (1.4), "Exp", lines: +0 -1 regress/mdoc/Fl/Makefile (1.4), "Exp", lines: +0 -1 regress/mdoc/Fo/Makefile (1.3), "Exp", lines: +0 -2 regress/mdoc/Ft/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Ic/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/In/Makefile (1.4), "Exp", lines: +0 -1 regress/mdoc/Lb/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Li/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Lk/Makefile (1.3), "Exp", lines: +4 -1 regress/mdoc/Ms/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Mt/Makefile (1.3), "Exp", lines: +4 -1 regress/mdoc/Nd/Makefile (1.3), "Exp", lines: +2 -1 regress/mdoc/Nm/Makefile (1.4), "Exp", lines: +2 -3 regress/mdoc/No/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Ns/Makefile (1.3), "Exp", lines: +0 -1 regress/mdoc/Oo/Makefile (1.3), "Exp", lines: +0 -1 Now that markdown output is tested for almost everything, test all input files in -T markdown output mode by default and only mark those files with SKIP_MARKDOWN that are not to be tested. Much easier to read, and almost minus 40 lines of Makefile code. 2017-03-08 19:40 schwarze Changed: mandoc.1 (1.178), "Exp", lines: +12 -2 Document that -T markdown produces ASCII output, and the implied limitations. Of course, we could write UTF-8 output instead, but even the CommonMark specification doesn't require parsers to support that, so portability would be doubtful. While here, provide a link to the CommonMark specification. 2017-03-08 19:23 schwarze Changed: mdoc_markdown.c (1.14), "Exp", lines: +3 -10 The CommonMark specification wants that opening parentheses inside link destinations be escaped. While here, remove the obsolete ESC_PAR. 2017-03-08 18:17 schwarze Changed: mdoc_markdown.c (1.13), "Exp", lines: +5 -1 regress/mdoc/Dv/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Er/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Ev/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Li/font.out_markdown (1.2), "Exp", lines: +1 -1 regress/mdoc/Tn/font.out_markdown (1.2), "Exp", lines: +1 -1 According to the CommonMark specification, backslash escapes and markdown markup do not work inside code spans. 2017-03-08 17:51 schwarze Changed: mdoc_markdown.c (1.12), "Exp", lines: +2 -2 The CommonMark specification allows list markers fo the form "number) " as well as "number. ", so escape closing parentheses after leading digits to improve portability. 2017-03-08 17:40 schwarze Changed: mdoc_markdown.c (1.11), "Exp", lines: +4 -2 Do not increment .Bl -enum list markers beyond two digits. Otherwise, we would indent subsequent paragraphs less than the CommonMark specification requires, harming portability. 2017-03-08 15:08 schwarze Added: regress/mdoc/Bl/colNoIt.out_markdown (1.1) regress/mdoc/Bl/column.out_markdown (1.1) Changed: mdoc_markdown.c (1.10), "Exp", lines: +6 -2 regress/mdoc/Bl/Makefile (1.6), "Exp", lines: +1 -1 .Bl -column never gets blank lines between rows 2017-03-08 14:51 schwarze Added: regress/mdoc/Bl/inset.out_markdown (1.1) regress/mdoc/Fl/parsed.out_markdown (1.1) add two result files that were forgotten 2017-03-08 14:45 schwarze Added: regress/mdoc/Bd/badargs.out_markdown (1.1) regress/mdoc/Bd/beforeNAME.out_markdown (1.1) regress/mdoc/Bd/blank.out_markdown (1.1) regress/mdoc/Bd/break.out_markdown (1.1) regress/mdoc/Bd/broken.out_markdown (1.1) regress/mdoc/Bd/centered.out_markdown (1.1) regress/mdoc/Bd/empty.out_markdown (1.1) regress/mdoc/Bd/nested.out_markdown (1.1) regress/mdoc/Bd/offset-empty.out_markdown (1.1) regress/mdoc/Bd/offset-neg.out_markdown (1.1) regress/mdoc/Bd/spacing.out_markdown (1.1) regress/mdoc/Bd/unclosed.out_markdown (1.1) regress/mdoc/Bl/badargs.out_markdown (1.1) regress/mdoc/Bl/breakingIt.out_markdown (1.1) regress/mdoc/Bl/broken.out_markdown (1.1) regress/mdoc/Bl/emptyhead.out_markdown (1.1) regress/mdoc/Bl/emptytag.out_markdown (1.1) regress/mdoc/Bl/extend.out_markdown (1.1) regress/mdoc/Bl/hang.out_markdown (1.1) regress/mdoc/Bl/multitag.out_markdown (1.1) regress/mdoc/Bl/nested.out_markdown (1.1) regress/mdoc/Bl/noIt.out_markdown (1.1) regress/mdoc/Bl/offset.out_markdown (1.1) regress/mdoc/Bl/secstart.out_markdown (1.1) regress/mdoc/Bl/tag.out_markdown (1.1) regress/mdoc/D1/spacing.out_markdown (1.1) regress/mdoc/Sm/scope.out_markdown (1.1) regress/mdoc/break/tail.out_markdown (1.1) Changed: regress/mdoc/Bd/Makefile (1.2), "Exp", lines: +4 -0 regress/mdoc/Bl/Makefile (1.5), "Exp", lines: +5 -4 regress/mdoc/D1/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Sm/Makefile (1.3), "Exp", lines: +1 -1 regress/mdoc/break/Makefile (1.3), "Exp", lines: +1 -1 enable -T markdown tests of filled displays and tagged lists 2017-03-08 14:30 schwarze Changed: mdoc_markdown.c (1.9), "Exp", lines: +8 -2 Add a blank after ">" when quoting. If is allowed by markdown syntax and more human-readable. 2017-03-08 13:18 schwarze Changed: roff.c (1.292), "Exp", lines: +16 -3 regress/roff/de/infinite.in (1.2), "Exp", lines: +6 -0 regress/roff/de/infinite.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/de/infinite.out_lint (1.2), "Exp", lines: +1 -0 prevent infinite recursion while expanding the arguments of a user-defined macro; issue found by tb@ with afl(1) 2017-03-07 20:00 schwarze Added: regress/roff/de/infinite.in (1.1) regress/roff/de/infinite.out_ascii (1.1) regress/roff/de/infinite.out_lint (1.1) Changed: read.c (1.163), "Exp", lines: +13 -9 regress/roff/de/Makefile (1.2), "Exp", lines: +7 -2 If a user-defined macro is aborted because it exceeds the stack limit, usually due to infinite recursion, discard whatever remains in all those open stack levels. Otherwise, insane constructions like the following could generate macros of enormous size, causing mandoc(1) to die from memory exhaustion: .de m \" original macro definition .m \" recursion to blow up the stack .de m \" definition to be run during the call of .m marked (*) very long plain text (some kilobytes) .m \" expand the above a thousand times while unwinding the stack .. \" end of the original definition .m \" (*) recursively generate a ridiculously large macro .. \" end of recursively generated definition .m \" execute the giant macro, exhausting memory Very creative abuse found by tb@ with afl(1). 2017-03-07 15:31 schwarze Changed: mdoc_markdown.c (1.8), "Exp", lines: +23 -12 regress/mdoc/Bl/Makefile (1.4), "Exp", lines: +1 -1 Escape blanks at the end of markdown lines such that they don't look like output line breaks. 2017-03-07 14:04 schwarze Added: regress/mdoc/Eo/empty.out_markdown (1.1) Changed: mdoc_markdown.c (1.7), "Exp", lines: +5 -9 regress/mdoc/Eo/Makefile (1.3), "Exp", lines: +1 -1 fix completely empty .Eo: no blank line wanted 2017-03-07 13:28 schwarze Changed: mdoc_markdown.c (1.6), "Exp", lines: +12 -2 regress/mdoc/Fl/Makefile (1.3), "Exp", lines: +1 -1 regress/mdoc/Fl/noarg.out_markdown (1.2), "Exp", lines: +1 -1 fix spacing after empty .Fl 2017-03-07 13:09 schwarze Added: regress/mdoc/An/break.out_markdown (1.1) regress/mdoc/Aq/author.out_markdown (1.1) Changed: mdoc_markdown.c (1.5), "Exp", lines: +31 -2 regress/mdoc/An/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Aq/Makefile (1.3), "Exp", lines: +1 -1 implement .An -split and -nosplit 2017-03-07 12:39 schwarze Added: regress/mdoc/Fd/empty.out_markdown (1.1) regress/mdoc/In/break.out_markdown (1.1) regress/mdoc/In/noarg.out_markdown (1.1) Changed: mdoc_markdown.c (1.4), "Exp", lines: +7 -10 regress/mdoc/Fd/Makefile (1.3), "Exp", lines: +1 -1 regress/mdoc/In/Makefile (1.3), "Exp", lines: +1 -1 Fix .In formatting in the SYNOPSIS: No ‌ in the middle of **, please. 2017-03-06 17:26 schwarze Changed: mandoc.1 (1.177), "Exp", lines: +10 -2 mandoc.h (1.215), "Exp", lines: +2 -1 mdoc_validate.c (1.319), "Exp", lines: +5 -1 read.c (1.162), "Exp", lines: +2 -1 regress/mdoc/Nd/broken.out_lint (1.3), "Exp", lines: +2 -0 Using .Nd only makes sense in the NAME section. Warn if that macro occurs elsewhere. Triggered by a question from Dag-Erling Smoergrav <des @ FreeBSD>. 2017-03-06 14:58 schwarze Changed: mdoc_markdown.c (1.3), "Exp", lines: +13 -4 regress/mdoc/Rs/allch.out_markdown (1.2), "Exp", lines: +2 -2 URIs need different escaping; reported by reyk@ 2017-03-05 20:15 schwarze Added: regress/mdoc/break/brokenbreaker.out_markdown (1.1) regress/mdoc/break/notopen.out_markdown (1.1) regress/mdoc/break/twice.out_markdown (1.1) regress/mdoc/break/two.out_markdown (1.1) Changed: regress/mdoc/break/Makefile (1.2), "Exp", lines: +1 -0 first batch of -T markdown tests 2017-03-05 20:12 schwarze Added: regress/mdoc/Vt/child.out_markdown (1.1) regress/mdoc/Vt/font.out_markdown (1.1) regress/mdoc/Vt/noarg.out_markdown (1.1) regress/mdoc/Vt/spacing.out_markdown (1.1) regress/mdoc/Xr/args.out_markdown (1.1) regress/mdoc/blank/comment.out_markdown (1.1) regress/mdoc/blank/list.out_markdown (1.1) Changed: regress/mdoc/Vt/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Xr/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/blank/Makefile (1.2), "Exp", lines: +1 -0 first batch of -T markdown tests 2017-03-05 20:09 schwarze Added: regress/mdoc/Ud/arg.out_markdown (1.1) regress/mdoc/Ux/eos.out_markdown (1.1) regress/mdoc/Ux/spacing.out_markdown (1.1) regress/mdoc/Va/basic.out_markdown (1.1) regress/mdoc/Va/font.out_markdown (1.1) regress/mdoc/Va/noarg.out_markdown (1.1) Changed: regress/mdoc/Ud/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Ux/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Va/Makefile (1.2), "Exp", lines: +1 -0 first batch of -T markdown tests 2017-03-05 20:06 schwarze Added: regress/mdoc/Sx/font.out_markdown (1.1) regress/mdoc/Sx/noarg.out_markdown (1.1) regress/mdoc/Sy/font.out_markdown (1.1) regress/mdoc/Sy/noarg.out_markdown (1.1) regress/mdoc/Sy/punct.out_markdown (1.1) regress/mdoc/Tn/font.out_markdown (1.1) regress/mdoc/Tn/noarg.out_markdown (1.1) Changed: regress/mdoc/Sx/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Sy/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Tn/Makefile (1.2), "Exp", lines: +1 -0 first batch of -T markdown tests 2017-03-05 20:03 schwarze Added: regress/mdoc/Sm/badarg.out_markdown (1.1) regress/mdoc/Sm/noarg.out_markdown (1.1) regress/mdoc/Sm/spacing-No.out_markdown (1.1) regress/mdoc/Sm/spacing-Op.out_markdown (1.1) regress/mdoc/Sm/twoarg.out_markdown (1.1) regress/mdoc/Sq/empty.out_markdown (1.1) regress/mdoc/St/badargs.out_markdown (1.1) regress/mdoc/St/call.out_markdown (1.1) Changed: regress/mdoc/Sm/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Sq/Makefile (1.2), "Exp", lines: +2 -1 regress/mdoc/St/Makefile (1.2), "Exp", lines: +1 -0 first batch of -T markdown tests 2017-03-05 19:59 schwarze Added: regress/mdoc/Ad/font.out_markdown (1.1) regress/mdoc/Ad/noarg.out_markdown (1.1) regress/mdoc/Ap/eos.out_markdown (1.1) regress/mdoc/Ap/middle.out_markdown (1.1) regress/mdoc/Aq/empty.out_markdown (1.1) regress/mdoc/Ar/font.out_markdown (1.1) regress/mdoc/Ar/punct.out_markdown (1.1) regress/mdoc/At/invalid.out_markdown (1.1) regress/mdoc/Bl/bareIt.out_markdown (1.1) regress/mdoc/Bl/bareTa.out_markdown (1.1) regress/mdoc/Bl/breakingTa.out_markdown (1.1) regress/mdoc/Bl/bullet.out_markdown (1.1) regress/mdoc/Bl/dash.out_markdown (1.1) regress/mdoc/Bl/diag.out_markdown (1.1) regress/mdoc/Bl/empty.out_markdown (1.1) regress/mdoc/Bl/emptyitem.out_markdown (1.1) regress/mdoc/Bl/enum.out_markdown (1.1) regress/mdoc/Bl/item.out_markdown (1.1) regress/mdoc/Bl/multitype.out_markdown (1.1) regress/mdoc/Bl/notype.out_markdown (1.1) regress/mdoc/Bl/ohang.out_markdown (1.1) regress/mdoc/Bl/unclosed.out_markdown (1.1) regress/mdoc/Brq/empty.out_markdown (1.1) regress/mdoc/Bx/args.out_markdown (1.1) regress/mdoc/Cd/eos.out_markdown (1.1) regress/mdoc/Cd/font.out_markdown (1.1) regress/mdoc/Cd/noarg.out_markdown (1.1) regress/mdoc/Cm/basic.out_markdown (1.1) regress/mdoc/Cm/font.out_markdown (1.1) regress/mdoc/Cm/noarg.out_markdown (1.1) regress/mdoc/Dd/badarg.out_markdown (1.1) regress/mdoc/Dd/dupe.out_markdown (1.1) regress/mdoc/Dd/late.out_markdown (1.1) regress/mdoc/Dd/long.out_markdown (1.1) regress/mdoc/Dd/manarg.out_markdown (1.1) regress/mdoc/Dd/order.out_markdown (1.1) regress/mdoc/Dl/spacing.out_markdown (1.1) regress/mdoc/Dq/empty.out_markdown (1.1) regress/mdoc/Dt/case.out_markdown (1.1) regress/mdoc/Dt/dupe.out_markdown (1.1) regress/mdoc/Dt/fourargs.out_markdown (1.1) regress/mdoc/Dt/late.out_markdown (1.1) regress/mdoc/Dt/missing.out_markdown (1.1) regress/mdoc/Dt/noarg.out_markdown (1.1) regress/mdoc/Dt/nobody.out_markdown (1.1) regress/mdoc/Dt/nosec.out_markdown (1.1) regress/mdoc/Dt/order.out_markdown (1.1) regress/mdoc/Dv/font.out_markdown (1.1) regress/mdoc/Dv/noarg.out_markdown (1.1) regress/mdoc/Em/font.out_markdown (1.1) regress/mdoc/Em/noarg.out_markdown (1.1) regress/mdoc/Em/punct.out_markdown (1.1) regress/mdoc/Eo/break.out_markdown (1.1) regress/mdoc/Eo/obsolete.out_markdown (1.1) regress/mdoc/Eo/unclosed.out_markdown (1.1) regress/mdoc/Er/font.out_markdown (1.1) regress/mdoc/Er/noarg.out_markdown (1.1) regress/mdoc/Ev/font.out_markdown (1.1) regress/mdoc/Ev/noarg.out_markdown (1.1) regress/mdoc/Ex/args.out_markdown (1.1) regress/mdoc/Ex/noname.out_markdown (1.1) regress/mdoc/Ex/nostd.out_markdown (1.1) regress/mdoc/Fd/break.out_markdown (1.1) regress/mdoc/Fd/eos.out_markdown (1.1) regress/mdoc/Fd/font.out_markdown (1.1) regress/mdoc/Fl/font.out_markdown (1.1) regress/mdoc/Fl/multiarg.out_markdown (1.1) regress/mdoc/Fl/noarg.out_markdown (1.1) regress/mdoc/Fl/punct.out_markdown (1.1) regress/mdoc/Fo/basic.out_markdown (1.1) regress/mdoc/Fo/break.out_markdown (1.1) regress/mdoc/Fo/eos.out_markdown (1.1) regress/mdoc/Fo/font.out_markdown (1.1) regress/mdoc/Fo/noarg.out_markdown (1.1) regress/mdoc/Fo/nohead.out_markdown (1.1) regress/mdoc/Fo/obsolete.out_markdown (1.1) regress/mdoc/Fo/punct.out_markdown (1.1) regress/mdoc/Fo/section.out_markdown (1.1) regress/mdoc/Fo/warn.out_markdown (1.1) regress/mdoc/Ft/font.out_markdown (1.1) regress/mdoc/Ic/font.out_markdown (1.1) regress/mdoc/Ic/noarg.out_markdown (1.1) regress/mdoc/In/eos.out_markdown (1.1) regress/mdoc/In/font.out_markdown (1.1) regress/mdoc/Lb/badargs.out_markdown (1.1) regress/mdoc/Lb/break.out_markdown (1.1) regress/mdoc/Lb/eos.out_markdown (1.1) regress/mdoc/Li/font.out_markdown (1.1) regress/mdoc/Li/punct.out_markdown (1.1) regress/mdoc/Lk/link.out_markdown (1.1) regress/mdoc/Lk/noarg.out_markdown (1.1) regress/mdoc/Ms/font.out_markdown (1.1) regress/mdoc/Ms/noarg.out_markdown (1.1) regress/mdoc/Mt/simple.out_markdown (1.1) regress/mdoc/Nd/hyph.out_markdown (1.1) regress/mdoc/Nd/noarg.out_markdown (1.1) regress/mdoc/Nd/par.out_markdown (1.1) regress/mdoc/Nm/break.out_markdown (1.1) regress/mdoc/Nm/broken.out_markdown (1.1) regress/mdoc/Nm/empty.out_markdown (1.1) regress/mdoc/Nm/font.out_markdown (1.1) regress/mdoc/Nm/long.out_markdown (1.1) regress/mdoc/Nm/par.out_markdown (1.1) regress/mdoc/Nm/parns.out_markdown (1.1) regress/mdoc/Nm/punct.out_markdown (1.1) regress/mdoc/No/punct.out_markdown (1.1) regress/mdoc/No/spacing.out_markdown (1.1) regress/mdoc/Ns/position.out_markdown (1.1) regress/mdoc/Ns/punct.out_markdown (1.1) regress/mdoc/Oo/punct.out_markdown (1.1) regress/mdoc/Op/break.out_markdown (1.1) regress/mdoc/Op/broken.out_markdown (1.1) regress/mdoc/Op/punct.out_markdown (1.1) regress/mdoc/Os/dupe.out_markdown (1.1) regress/mdoc/Os/late.out_markdown (1.1) regress/mdoc/Os/long.out_markdown (1.1) regress/mdoc/Os/missing.out_markdown (1.1) regress/mdoc/Ox/keep.out_markdown (1.1) regress/mdoc/Pa/font.out_markdown (1.1) regress/mdoc/Pa/punct.out_markdown (1.1) regress/mdoc/Pf/spacing.out_markdown (1.1) regress/mdoc/Pp/arg.out_markdown (1.1) regress/mdoc/Qq/empty.out_markdown (1.1) regress/mdoc/Rs/allch.out_markdown (1.1) regress/mdoc/Rs/args.out_markdown (1.1) regress/mdoc/Rs/break.out_markdown (1.1) regress/mdoc/Rs/empty.out_markdown (1.1) regress/mdoc/Rs/three_authors.out_markdown (1.1) regress/mdoc/Rv/args.out_markdown (1.1) regress/mdoc/Rv/nostd.out_markdown (1.1) regress/mdoc/Sh/badNAME.out_markdown (1.1) regress/mdoc/Sh/before.out_markdown (1.1) regress/mdoc/Sh/empty.out_markdown (1.1) regress/mdoc/Sh/emptyNAME.out_markdown (1.1) regress/mdoc/Sh/first.out_markdown (1.1) regress/mdoc/Sh/nohead.out_markdown (1.1) regress/mdoc/Sh/order.out_markdown (1.1) regress/mdoc/Sh/orderNAME.out_markdown (1.1) regress/mdoc/Sh/punctNAME.out_markdown (1.1) regress/mdoc/Sh/subbefore.out_markdown (1.1) Changed: regress/mdoc/Ad/Makefile (1.2), "Exp", lines: +2 -1 regress/mdoc/Ap/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Aq/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Ar/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/At/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Bl/Makefile (1.3), "Exp", lines: +5 -0 regress/mdoc/Brq/Makefile (1.2), "Exp", lines: +2 -1 regress/mdoc/Bx/Makefile (1.2), "Exp", lines: +2 -1 regress/mdoc/Cd/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Cm/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Dd/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Dl/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Dq/Makefile (1.2), "Exp", lines: +2 -1 regress/mdoc/Dt/Makefile (1.2), "Exp", lines: +2 -0 regress/mdoc/Dv/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Em/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Eo/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Er/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Ev/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Ex/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Fd/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Fl/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Fo/Makefile (1.2), "Exp", lines: +2 -0 regress/mdoc/Ft/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Ic/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/In/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Lb/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Li/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Lk/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Ms/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Mt/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Nd/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Nm/Makefile (1.3), "Exp", lines: +3 -0 regress/mdoc/No/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Ns/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Oo/Makefile (1.2), "Exp", lines: +2 -1 regress/mdoc/Op/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Os/Makefile (1.2), "Exp", lines: +2 -0 regress/mdoc/Ox/Makefile (1.2), "Exp", lines: +2 -1 regress/mdoc/Pa/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Pf/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Pp/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Qq/Makefile (1.2), "Exp", lines: +2 -1 regress/mdoc/Rs/Makefile (1.3), "Exp", lines: +1 -0 regress/mdoc/Rv/Makefile (1.2), "Exp", lines: +1 -0 regress/mdoc/Sh/Makefile (1.2), "Exp", lines: +2 -0 first batch of -T markdown tests 2017-03-05 19:57 schwarze Changed: regress/regress.pl (1.4), "Exp", lines: +33 -5 regress/regress.pl.1 (1.2), "Exp", lines: +7 -3 Infrastructure for -T markdown tests. This is needed because -T marksdown is expected to receive less maintenance than -T ascii, so we need automation to make sure that regular parser maintenance doesn't break this output mode. 2017-03-04 21:41 schwarze Changed: mdoc_man.c (1.105), "Exp", lines: +3 -5 mdoc_markdown.c (1.2), "Exp", lines: +3 -5 Remove a redundant condition in .%T handling, no functional change. Found by jsg@ with scan-build. 2017-03-04 17:17 schwarze Changed: mandoc.1 (1.176), "Exp", lines: +21 -13 Make the description of -K autodetection easer to understand. Basic idea suggested by jmc@, OK jmc@. 2017-03-04 16:44 schwarze Changed: Makefile (1.488.2.11), "Exp", lines: +7 -7 configure (1.43.2.13), "Exp", lines: +11 -8 configure.local.example (1.14.2.9), "Exp", lines: +8 -1 Merge Makefile 1.507, configure 1.62, configure.local.example 1.30: relative symlinks for program files 2017-03-04 16:36 schwarze Changed: Makefile (1.507), "Exp", lines: +7 -7 configure (1.62), "Exp", lines: +11 -8 configure.local.example (1.30), "Exp", lines: +8 -1 Debian needs relative symlinks not only for manual pages, but also for program files. Issue reported by Michael <Stapelberg at debian dot org> and by Markus <Waldeck at gmx dot de>. 2017-03-03 15:05 schwarze Changed: mdoc_argv.c (1.110), "Exp", lines: +10 -9 Markdown output mode helped us to find the first parser bug (as such, this bug could cause wrong output in other modes as well): Do not misinterpret tab characters as .Ta macros when they appear on non-column .It lines in non-column .Bl lists that are nested inside a parent .Bl -column list. (Admittedly, such constructions are not very useful; don't use them!) Found by tb@ with afl(1) because the resulting tree corruption triggered an assertion in the markdown output module. 2017-03-03 14:23 schwarze Added: mdoc_markdown.c (1.1) Changed: Makefile (1.506), "Exp", lines: +4 -3 TODO (1.235), "Exp", lines: +1 -7 main.c (1.285), "Exp", lines: +7 -1 main.h (1.27), "Exp", lines: +3 -1 mandoc.1 (1.175), "Exp", lines: +33 -3 new -mdoc -Tmarkdown output mode; OK millert@ reyk@ tb@; thanks to reyk@ and to Vsevolod at FreeBSD for suggesting it 2017-03-03 13:55 schwarze Changed: man.c (1.168), "Exp", lines: +2 -2 mdoc.c (1.261), "Exp", lines: +2 -2 mdoc_html.c (1.273), "Exp", lines: +2 -2 roff.c (1.291), "Exp", lines: +2 -2 remove a few redundant conditions that jsg@ found with cppcheck 2017-03-03 13:41 schwarze Changed: mandocdb.c (1.245), "Exp", lines: +2 -2 Fix a copy-and-paste error that caused man(7) manuals without a section number in .TH to be misinterpreted as preformatted. Found by jsg@ with cppcheck. 2017-03-03 13:11 schwarze Changed: mansearch.c (1.69), "Exp", lines: +1 -0 A missing initialization could randomly cause regular expression searches to be case-insensitive that ought to be case sensitive. Found by jsg@ with scan-build. 2017-03-03 11:50 schwarze Changed: roff.c (1.290), "Exp", lines: +2 -2 Fix previous: do not access the byte before the string if the string is empty; found by jsg@ with afl(1). 2017-02-22 16:20 schwarze Changed: cgi.c (1.148), "Exp", lines: +17 -1 Pledge man.cgi(8). Based on a more complicated patch from semarie@. Sebastien and tb@ both agree with the simplification. 2017-02-22 14:58 schwarze Changed: main.c (1.284), "Exp", lines: +3 -3 Since SQLite is gone, we no longer need the "flock" pledge. Patch from semarie@, OK tb@. 2017-02-22 09:41 schwarze Changed: INSTALL (1.15.2.4), "Exp", lines: +8 -1 NEWS (1.21.2.1), "Exp", lines: +19 -24 warn that this is not the newest release 2017-02-22 08:54 schwarze Changed: mdoc_html.c (1.272), "Exp", lines: +2 -1 Handle an odd edge case where .It is preceded by .Sm. NULL dereference in man.cgi reported by Gabriel Guzman <gabe at guzman dash nunez dot com> on misc@. 2017-02-22 00:05 schwarze Changed: Makefile (1.488.2.10), "Exp", lines: +2 -3 merge revision 1.505: Debian wants relative, not absolute symlinks for man pages; suggested by Michael Stapelberg 2017-02-22 00:00 schwarze Changed: Makefile (1.505), "Exp", lines: +2 -3 Debian wants relative, not absolute symlinks for man pages; suggested by Michael Stapelberg 2017-02-21 23:44 schwarze Changed: roff.7 (1.76), "Exp", lines: +3 -3 fix spelling error; found by Michael <Stapelberg at debian dot org> with Lintian 2017-02-21 17:57 schwarze Changed: INSTALL (1.15.2.3), "Exp", lines: +12 -7 Makefile (1.488.2.9), "Exp", lines: +34 -2 provide the regression suite for 1.13, too 2017-02-21 17:04 schwarze Changed: INSTALL (1.15.2.2), "Exp", lines: +5 -6 Makefile (1.488.2.8), "Exp", lines: +6 -9 configure (1.43.2.12), "Exp", lines: +9 -35 configure.local.example (1.14.2.8), "Exp", lines: +1 -10 main.c (1.273.2.9), "Exp", lines: +1 -21 Drop support for building without SQLite. There whole point of the 1.13 branch is SQLite support after all. 2017-02-21 16:25 schwarze Changed: INSTALL (1.15.2.1), "Exp", lines: +5 -5 LICENSE (1.13.2.1), "Exp", lines: +2 -2 Makefile (1.488.2.7), "Exp", lines: +6 -10 configure (1.43.2.11), "Exp", lines: +3 -3 configure.local.example (1.14.2.7), "Exp", lines: +2 -2 first step of 1.13.5 release preparations 2017-02-21 00:37 tag VERSION_1_14_1 2017-02-21 00:37 schwarze Changed: LICENSE (1.15), "Exp", lines: +2 -2 NEWS (1.21), "Exp", lines: +21 -13 release 1.14.1 2017-02-18 17:33 schwarze Changed: read.c (1.150.2.8), "Exp", lines: +4 -4 merge revision 1.161: resolve trivial differences with OpenBSD 2017-02-18 17:29 schwarze Changed: read.c (1.161), "Exp", lines: +2 -4 resolve trivial differences with OpenBSD: * we include <sys/types.h> for size_t, so we don't need <stdint.h> * sort declarations in read_whole_file() 2017-02-18 15:29 schwarze Changed: Makefile (1.504), "Exp", lines: +29 -1 add some regress targets 2017-02-18 13:43 schwarze Changed: libmandoc.h (1.66), "Exp", lines: +2 -2 preconv.c (1.16), "Exp", lines: +7 -7 preconv_encode() can take a const input buffer; diff from <christos at NetBSD> 2017-02-18 13:16 schwarze Changed: Makefile (1.488.2.6), "Exp", lines: +47 -8 merge revision 1.503: uninstall target 2017-02-18 13:05 schwarze Changed: Makefile (1.503), "Exp", lines: +51 -8 Provide an uninstall target, to help cleaning up after installing with the wrong DESTDIR. Use with care. 2017-02-18 12:24 schwarze Added: test-O_DIRECTORY.c (1.1) Changed: Makefile (1.502), "Exp", lines: +2 -1 catman.c (1.21), "Exp", lines: +1 -5 compat_fts.c (1.14), "Exp", lines: +1 -7 configure (1.61), "Exp", lines: +4 -1 configure.local.example (1.29), "Exp", lines: +2 -1 proper test for O_DIRECTORY 2017-02-18 11:53 schwarze Changed: TODO (1.234), "Exp", lines: +2 -5 double quotes were fixed, finally 2017-02-17 19:15 schwarze Added: regress/mdoc/Rs/allch.out_utf8 (1.1) regress/mdoc/Rs/break.out_utf8 (1.1) regress/mdoc/Rs/empty.out_utf8 (1.1) regress/mdoc/Rs/three_authors.out_utf8 (1.1) Changed: mdoc_man.c (1.104), "Exp", lines: +3 -5 mdoc_term.c (1.346), "Exp", lines: +5 -3 regress/mdoc/Rs/Makefile (1.2), "Exp", lines: +1 -0 Use typographic quotes rather than '"' for .Rs %T (no change for -Tascii output, of course). Patch from bentley@ in November 2014. This can be committed now because groff merged Anthony's patch yesterday. 2017-02-17 18:28 schwarze Changed: chars.c (1.69), "Exp", lines: +3 -3 regress/mdoc/Dq/empty.out_ascii (1.2), "Exp", lines: +1 -2 regress/mdoc/Lb/badargs.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Lb/break.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/Lb/eos.out_ascii (1.2), "Exp", lines: +1 -1 regress/mdoc/Op/broken.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/St/badargs.out_ascii (1.2), "Exp", lines: +2 -2 regress/mdoc/St/call.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/cond/before-Dd.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/de/escname.out_ascii (1.2), "Exp", lines: +1 -1 regress/roff/esc/c.out_ascii (1.2), "Exp", lines: +1 -1 Many people have been complaining for a long time that ``...'' looks ugly in -Tascii output. For that reason, bentley@ submitted patches to render "..." instead to groff in November 2014 (yes, more than two years ago). Carsten Kunze yesterday merged them for the upcoming groff-1.22.4 release. Yay! Consequently, do the same in mandoc: Render \(Lq and \(Rq (which are used for .Do, .Dq, .Lb, and .St) as '"' in -Tascii output. All other output modes including -Tutf8 remain unchanged. 2017-02-17 17:43 schwarze Changed: regress/man/IP/literal.in (1.2), "Exp", lines: +40 -0 regress/man/IP/literal.out_ascii (1.2), "Exp", lines: +29 -2 more tests for .IP/.nf interaction that i forgot to commit 2017-02-17 14:50 schwarze Changed: configure (1.43.2.10), "Exp", lines: +5 -2 main.c (1.273.2.8), "Exp", lines: +2 -2 mandocdb.c (1.220.2.12), "Exp", lines: +3 -3 merge small style improvements from christos@ to the 1.13 branch 2017-02-17 14:45 schwarze Changed: mandocdb.c (1.244), "Exp", lines: +2 -2 No need to cast NULL when assigning it to a variable; from Christos Zoulas <christos at NetBSD>. 2017-02-17 14:43 schwarze Changed: dba.c (1.10), "Exp", lines: +7 -7 dbm_map.c (1.8), "Exp", lines: +2 -2 Improve clarity of some casts; from Christos Zoulas <christos at NetBSD>. 2017-02-17 14:40 schwarze Changed: configure (1.60), "Exp", lines: +5 -2 Make the directory explicit where source files are located. This is simple and seems to help the NetBSD build infrastructure. From Christos Zoulas <christos at NetBSD>. 2017-02-17 14:31 schwarze Changed: catman.c (1.20), "Exp", lines: +3 -3 libmandoc.h (1.65), "Exp", lines: +2 -2 main.c (1.283), "Exp", lines: +2 -2 mandoc_aux.h (1.6), "Exp", lines: +2 -2 mandocd.c (1.5), "Exp", lines: +2 -2 mandocdb.c (1.243), "Exp", lines: +2 -2 tag.c (1.18), "Exp", lines: +2 -2 term_ps.c (1.83), "Exp", lines: +2 -2 Be consistent in protecting __attribute__ attributes with __; from Christos Zoulas <christos @ NetBSD>. 2017-02-17 03:03 schwarze Changed: roff.c (1.289), "Exp", lines: +12 -4 Fix a read buffer overrun that copied random data from memory into text nodes when a string passed to deroff() ended in a backslash and the byte after the terminating NUL was non-NUL, found by tb@ with afl(1). Invalid bytes so copied with the high bit set could later sometimes trigger another out of bounds read access to static memory in roff_strdup(), so add an assertion there to abort safely in case of similar data corruption. 2017-02-16 16:21 schwarze Changed: Makefile (1.488.2.5), "Exp", lines: +7 -7 configure (1.43.2.9), "Exp", lines: +4 -2 configure.local.example (1.14.2.6), "Exp", lines: +11 -2 Merge Makefile 1.501, configure 1.59, configure.local.example 1.28: add $(LN) configuration variable 2017-02-16 16:19 schwarze Changed: main.c (1.273.2.7), "Exp", lines: +23 -18 merge revision 1.282: fix apropos -O 2017-02-16 16:09 schwarze Changed: Makefile (1.501), "Exp", lines: +6 -6 configure (1.59), "Exp", lines: +4 -2 configure.local.example (1.28), "Exp", lines: +11 -2 add $(LN) configuration variable; requested by Michael <Stapelberg@debian.org> 2017-02-16 15:19 schwarze Changed: configure.local.example (1.27), "Exp", lines: +3 -3 fix previous: stupid typo 2017-02-16 15:12 schwarze Changed: Makefile (1.500), "Exp", lines: +5 -3 catman.c (1.19), "Exp", lines: +3 -3 configure (1.58), "Exp", lines: +4 -1 configure.local.example (1.26), "Exp", lines: +7 -2 Provide a variable BINM_CATMAN. Suggested by Michael <Stapelberg@debian.org>. 2017-02-16 14:38 schwarze Changed: NEWS (1.20), "Exp", lines: +3 -1 mdoc.7 (1.262), "Exp", lines: +4 -6 mdoc_term.c (1.345), "Exp", lines: +11 -5 regress/mdoc/Bl/breakingTa.in (1.2), "Exp", lines: +1 -1 Surprisingly, groff does not support scaling units in .Bl -column column width specifiers, so stop supporting them, too. As a side effect, this fixes an assertion failure that tb@ found with afl(1), triggered by: .Bl -column -4n 2017-02-16 10:56 schwarze Changed: main.c (1.282), "Exp", lines: +23 -18 Fix rev. 1.280: -O syntax is different in default apropos(1) output mode and in other output modes, so do not error out prematurely. Also sort local variables in main() while here. 2017-02-16 09:47 schwarze Changed: mdoc_macro.c (1.217), "Exp", lines: +6 -3 regress/mdoc/break/twice.in (1.2), "Exp", lines: +14 -5 regress/mdoc/break/twice.out_ascii (1.2), "Exp", lines: +9 -5 regress/mdoc/break/twice.out_lint (1.2), "Exp", lines: +3 -0 Fix block scoping error if an explicit block is broken by two implicit blocks (.Aq Bq Po .Pc) that left the outer breaker open and could in exceptional cases, like between .Bl and .It, cause tree corruption leading to NULL dereference. Found by tb@ with afl(1). While here, do not mark intermediate ENDBODY markers as broken. 2017-02-16 03:00 schwarze Changed: libmdoc.h (1.109), "Exp", lines: +2 -2 mdoc.c (1.260), "Exp", lines: +3 -3 mdoc_html.c (1.271), "Exp", lines: +1 -3 mdoc_macro.c (1.216), "Exp", lines: +4 -4 mdoc_man.c (1.103), "Exp", lines: +1 -4 mdoc_term.c (1.344), "Exp", lines: +1 -9 roff.h (1.40), "Exp", lines: +2 -3 Remove the ENDBODY_NOSPACE flag, simplifying the code. Comparing to groff output, it appears that all cases where it was used and made a difference actually require the opposite, ENDBODY_SPACE. I have no idea why i added it back in 2010; maybe to compensate for some other bug that has long been fixed. 2017-02-15 15:58 schwarze Changed: compat_fts.c (1.13), "Exp", lines: +7 -8 Style improvement, no functional change. As reported by Yuri Pankov, some versions of GCC whine that "tmp" might be used uninitialized in fts_open(3). Clearly, that cannot actually happen, but explicitly setting it to NULL is safer anyway. While here, rename the badly named variable "tmp" and make the inner "if" easier to understand. Feedback and OK guenther@ 2017-02-15 14:10 schwarze Changed: man_term.c (1.191), "Exp", lines: +2 -2 Fix previous: I forgot that i had to change the convention how a node is marked as "not a macro" when unifying the parsers. Confirmed to work by Sevan Janiyan. 2017-02-12 14:19 schwarze Added: regress/eqn/matrix/empty.in (1.1) regress/eqn/matrix/empty.out_ascii (1.1) regress/eqn/matrix/empty.out_html (1.1) Changed: NEWS (1.19), "Exp", lines: +3 -1 eqn_term.c (1.9), "Exp", lines: +8 -5 regress/eqn/matrix/Makefile (1.2), "Exp", lines: +2 -2 regress/eqn/unary/sqrt.in (1.2), "Exp", lines: +2 -2 regress/eqn/unary/sqrt.out_ascii (1.2), "Exp", lines: +2 -2 regress/eqn/unary/sqrt.out_html (1.2), "Exp", lines: +1 -1 Do not access a NULL pointer if a matrix or square root are empty. Crashes found by tb@ with afl(1). 2017-02-11 21:49 schwarze Changed: man_term.c (1.190), "Exp", lines: +3 -2 Do not read one element past the end of the static const termacts array. Bug found by Sevan Janiyan <venture37 at geeklan dot co dot uk> who ran the OpenBSD mandoc test suite on Ubuntu on POWER8 (sic!) and reported that mdoc/Sh/before.in failed in -Tman mode. If that isn't power testing, i don't know... 2017-02-11 20:22 schwarze Added: regress/mdoc/Bl/breakingTa.in (1.1) regress/mdoc/Bl/breakingTa.out_ascii (1.1) regress/mdoc/Nm/broken.out_lint (1.1) Changed: regress/mdoc/Bl/Makefile (1.2), "Exp", lines: +8 -3 regress/mdoc/Nd/broken.in (1.2), "Exp", lines: +8 -0 regress/mdoc/Nd/broken.out_ascii (1.2), "Exp", lines: +3 -1 regress/mdoc/Nd/broken.out_lint (1.2), "Exp", lines: +1 -0 regress/mdoc/Nm/Makefile (1.2), "Exp", lines: +1 -1 regress/mdoc/Nm/broken.in (1.2), "Exp", lines: +12 -1 regress/mdoc/Nm/broken.out_ascii (1.2), "Exp", lines: +5 -2 regress/mdoc/break/tail.in (1.2), "Exp", lines: +13 -2 regress/mdoc/break/tail.out_ascii (1.2), "Exp", lines: +5 -2 regress/mdoc/break/tail.out_lint (1.2), "Exp", lines: +1 -0 new regression tests for mdoc_macro.c revs. 1.211-1.215 2017-02-11 17:53 schwarze Changed: regress/char/unicode/Makefile (1.3), "Exp", lines: +1 -1 Disable three UTF-8 tests that expose bugs in wcwidth(3) in the native C libraries of illumos, Oracle Solaris 11, and SunOS 5.10. While it is useful to catch wcwidth(3) regressions on OpenBSD, the purpose of the *portable* mandoc regression suite is not to check the C library of the host system; that would just hide genuine mandoc portability issues in the noise. The remaining UTF-8 tests are still sufficient to establish that mandoc does the right thing. Issues reported by Sevan Janiyan <venture37 at geeklan dot co dot uk> after testing on OmniOS. 2017-02-11 15:47 schwarze Changed: NEWS (1.18), "Exp", lines: +3 -1 mdoc_macro.c (1.215), "Exp", lines: +5 -4 Never look for broken blocks inside blocks that are already closed. Fixes the last the of tree corruptions sometimes causing NULL dereference reported by tb@; this one triggered in cases like: .Bl -column .It Pq Ta 2017-02-11 14:11 schwarze Changed: NEWS (1.17), "Exp", lines: +4 -2 mdoc_macro.c (1.214), "Exp", lines: +9 -3 Do not prematurely close .Nd containing a broken child. Fixes tree corruption leading to NULL dereference in insane cases like .Oo Oo .Nd .Pq Oc .Oc Oc found by tb@ with afl(1). 2017-02-11 13:24 schwarze Changed: mdoc_macro.c (1.213), "Exp", lines: +17 -10 Do not prematurely mark intermediate blocks as broken while scanning backwards. Only do so when a block is found that is actually broken. Logic error found while investigating crashes reported by tb@. 2017-02-10 22:19 schwarze Changed: mdoc_macro.c (1.212), "Exp", lines: +8 -7 For child macros of block-end macros, only scan backwards for pending breakers unless the parent of the block is already closed. While the scanning is needed in cases like ".Ac Bo" for broken Ao, it is useless and crashy in cases like ".Ac Bc" for non-broken Ao. This fixes a NULL pointer dereference that tb@ found with afl(1). 2017-02-10 16:20 schwarze Changed: NEWS (1.16), "Exp", lines: +3 -1 mdoc_macro.c (1.211), "Exp", lines: +15 -7 In the SYNOPSIS, .Nm blocks can get broken if one of their children gets broken. In that case, mark them as BROKEN and ENDED and make sure they get closed out together with the child. Fixes tree corruption leeding to a NULL dereference found by tb@ with afl(1) in: .Sh SYNOPSIS .Bl .Oo .Nm .Bk .Oc .It (where .Bk is the child and .Oo is the breaker). A simpler form of the same corruption (without crash) is visible in: .Sh SYNOPSIS .Ao .Nm .Bo .Ac .Bc text where the text ended up inside the .Nm (child .Bo, breaker .Ao). 2017-02-10 15:57 schwarze Changed: main.c (1.273.2.6), "Exp", lines: +5 -3 manpath.c (1.30.2.2), "Exp", lines: +5 -2 merge main.c 1.281, manpath.c 1.33: -Ttree -Onoval 2017-02-10 15:45 schwarze Changed: NEWS (1.15), "Exp", lines: +6 -5 main.c (1.281), "Exp", lines: +5 -3 manconf.h (1.4), "Exp", lines: +1 -0 mandoc.1 (1.174), "Exp", lines: +15 -2 manpath.c (1.33), "Exp", lines: +5 -2 tree.c (1.73), "Exp", lines: +3 -1 In -Ttree output mode, show the BROKEN node flag and provide a -Onoval output option to show the unvalidated tree. 2017-02-09 20:53 schwarze Changed: catman.c (1.18), "Exp", lines: +4 -3 same as mandocdb.c rev. 1.196: for portability, use (char *)NULL in execlp(3) as discussed on tech@ OpenBSD (didn't blow up anywhere yet, but better safe than sorry) 2017-02-09 18:46 schwarze Changed: catman.c (1.17), "Exp", lines: +5 -1 Illumos doesn't have O_DIRECTORY. Work around that for now, may fix it better after the 1.14.1 release. Portability issue reported by Sevan Janiyan <venture37 at geeklan dot co dot uk>. 2017-02-09 15:34 schwarze Changed: regress/regress.pl (1.3), "Exp", lines: +2 -2 Escape literal braces in a regular expression. Deprecated perlre(1) syntax reported by Thomas Klausner and Sevan Janiyan. 2017-02-08 16:56 schwarze Changed: regress/regress.pl (1.2), "Exp", lines: +10 -6 On some systems (e.g. Solaris 11) diff(1) does not support -a. Make it easier to get rid of it. 2017-02-08 16:16 schwarze Changed: configure.local.example (1.25), "Exp", lines: +3 -1 mention that BUILD_CATMAN doesn't work on SunOS 5.9 and 5.10 2017-02-08 16:11 schwarze Added: test-cmsg.c (1.1) test-recvmsg.c (1.1) Changed: Makefile (1.499), "Exp", lines: +3 -1 catman.c (1.16), "Exp", lines: +5 -1 configure (1.57), "Exp", lines: +37 -2 configure.local.example (1.24), "Exp", lines: +7 -1 mandocd.c (1.4), "Exp", lines: +5 -1 config glue for recvmsg(2) and CMSG_FIRSTHDR(3); needed for Solaris 11 2017-02-08 14:50 schwarze Changed: catman.c (1.15), "Exp", lines: +19 -2 sendmsg(3) may block, so retry 2017-02-08 13:36 schwarze Changed: Makefile (1.498), "Exp", lines: +3 -3 even catman needs libmandoc on systems not having fts 2017-02-08 13:34 schwarze Changed: cgi.c (1.147), "Exp", lines: +3 -1 protect <err.h> inclusion 2017-02-08 12:24 schwarze Changed: INSTALL (1.18), "Exp", lines: +31 -20 LICENSE (1.14), "Exp", lines: +2 -1 Makefile (1.497), "Exp", lines: +7 -3 Makefile.depend (1.27), "Exp", lines: +2 -0 NEWS (1.14), "Exp", lines: +4 -2 more 1.14.1 release preparations 2017-02-08 12:20 schwarze Changed: TODO (1.233), "Exp", lines: +2 -2 reference a relevant mail for one TODO item 2017-02-08 12:19 schwarze Changed: regress/char/space/esct-mdoc.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Bk/break.in (1.2), "Exp", lines: +1 -1 regress/mdoc/Bk/synopsis.in (1.2), "Exp", lines: +1 -1 remove some instances of Mdocdate 2017-02-08 12:18 schwarze Changed: regress/char/unicode/Makefile (1.2), "Exp", lines: +4 -1 disable some tests that expose wcwidth(3) differences among systems 2017-02-08 03:02 schwarze Added: regress/regress.pl (1.1) regress/regress.pl.1 (1.1) regress/char/Makefile (1.1) regress/char/Makefile.inc (1.1) regress/char/N/Makefile (1.1) regress/char/N/basic.in (1.1) regress/char/N/basic.out_ascii (1.1) regress/char/accent/Makefile (1.1) regress/char/accent/combine.in (1.1) regress/char/accent/combine.out_utf8 (1.1) regress/char/accent/nocombine.in (1.1) regress/char/accent/nocombine.out_ascii (1.1) regress/char/accent/nocombine.out_utf8 (1.1) regress/char/accent/utf8only.in (1.1) regress/char/accent/utf8only.out_utf8 (1.1) regress/char/bar/Makefile (1.1) regress/char/bar/man.in (1.1) regress/char/bar/man.out_ascii (1.1) regress/char/bar/mdoc.in (1.1) regress/char/bar/mdoc.out_ascii (1.1) regress/char/hyphen/Makefile (1.1) regress/char/hyphen/man.in (1.1) regress/char/hyphen/man.out_ascii (1.1) regress/char/hyphen/mdoc.in (1.1) regress/char/hyphen/mdoc.out_ascii (1.1) regress/char/space/Makefile (1.1) regress/char/space/break.in (1.1) regress/char/space/break.out_ascii (1.1) regress/char/space/eos-man.in (1.1) regress/char/space/eos-man.out_ascii (1.1) regress/char/space/eos.in (1.1) regress/char/space/eos.out_ascii (1.1) regress/char/space/esct-man.in (1.1) regress/char/space/esct-man.out_ascii (1.1) regress/char/space/esct-man.out_lint (1.1) regress/char/space/esct-mdoc.in (1.1) regress/char/space/esct-mdoc.out_ascii (1.1) regress/char/space/esct-mdoc.out_lint (1.1) regress/char/space/leading-man.in (1.1) regress/char/space/leading-man.out_ascii (1.1) regress/char/space/leading-mdoc.in (1.1) regress/char/space/leading-mdoc.out_ascii (1.1) regress/char/space/multiple.in (1.1) regress/char/space/multiple.out_ascii (1.1) regress/char/space/nobreak.in (1.1) regress/char/space/nobreak.out_ascii (1.1) regress/char/space/tab-man.in (1.1) regress/char/space/tab-man.out_ascii (1.1) regress/char/space/tab-man.out_lint (1.1) regress/char/space/tab.in (1.1) regress/char/space/tab.out_ascii (1.1) regress/char/space/tab.out_lint (1.1) regress/char/space/trailing-mdoc.in (1.1) regress/char/space/trailing-mdoc.out_ascii (1.1) regress/char/space/trailing-mdoc.out_lint (1.1) regress/char/space/zerowidth.in (1.1) regress/char/space/zerowidth.out_ascii (1.1) regress/char/space/zerowidth.out_html (1.1) regress/char/space/zerowidth.out_utf8 (1.1) regress/char/unicode/Makefile (1.1) regress/char/unicode/ascii.in (1.1) regress/char/unicode/ascii.out_ascii (1.1) regress/char/unicode/ascii.out_html (1.1) regress/char/unicode/ascii.out_utf8 (1.1) regress/char/unicode/input.in (1.1) regress/char/unicode/input.out_ascii (1.1) regress/char/unicode/input.out_lint (1.1) regress/char/unicode/input.out_utf8 (1.1) regress/char/unicode/invalid.in (1.1) regress/char/unicode/invalid.out_ascii (1.1) regress/char/unicode/invalid.out_html (1.1) regress/char/unicode/invalid.out_lint (1.1) regress/char/unicode/invalid.out_utf8 (1.1) regress/char/unicode/latin1.in (1.1) regress/char/unicode/latin1.out_ascii (1.1) regress/char/unicode/latin1.out_html (1.1) regress/char/unicode/latin1.out_utf8 (1.1) regress/char/unicode/latin1diff.in (1.1) regress/char/unicode/latin1diff.out_ascii (1.1) regress/char/unicode/latin1diff.out_html (1.1) regress/char/unicode/latin1diff.out_utf8 (1.1) regress/char/unicode/man.in (1.1) regress/char/unicode/man.out_utf8 (1.1) regress/char/unicode/mdoc.in (1.1) regress/char/unicode/mdoc.out_utf8 (1.1) regress/char/unicode/named.in (1.1) regress/char/unicode/named.out_ascii (1.1) regress/char/unicode/named.out_html (1.1) regress/char/unicode/named.out_utf8 (1.1) regress/char/unicode/namediff.in (1.1) regress/char/unicode/namediff.out_ascii (1.1) regress/char/unicode/namediff.out_html (1.1) regress/char/unicode/namediff.out_utf8 (1.1) regress/char/unicode/nogroff.in (1.1) regress/char/unicode/nogroff.out_ascii (1.1) regress/char/unicode/nogroff.out_html (1.1) regress/char/unicode/nogroff.out_utf8 (1.1) regress/eqn/Makefile (1.1) regress/eqn/Makefile.inc (1.1) regress/eqn/define/Makefile (1.1) regress/eqn/define/invalid.in (1.1) regress/eqn/define/invalid.out_ascii (1.1) regress/eqn/define/invalid.out_lint (1.1) regress/eqn/fromto/Makefile (1.1) regress/eqn/fromto/basic.in (1.1) regress/eqn/fromto/basic.out_ascii (1.1) regress/eqn/fromto/basic.out_html (1.1) regress/eqn/fromto/noarg.in (1.1) regress/eqn/fromto/noarg.out_ascii (1.1) regress/eqn/fromto/noarg.out_html (1.1) regress/eqn/matrix/Makefile (1.1) regress/eqn/matrix/basic.in (1.1) regress/eqn/matrix/basic.out_ascii (1.1) regress/eqn/matrix/basic.out_html (1.1) regress/eqn/nullary/Makefile (1.1) regress/eqn/nullary/roman.in (1.1) regress/eqn/nullary/roman.out_ascii (1.1) regress/eqn/nullary/roman.out_html (1.1) regress/eqn/over/Makefile (1.1) regress/eqn/over/noarg.in (1.1) regress/eqn/over/noarg.out_ascii (1.1) regress/eqn/over/noarg.out_html (1.1) regress/eqn/over/noarg.out_lint (1.1) regress/eqn/over/precedence.in (1.1) regress/eqn/over/precedence.out_ascii (1.1) regress/eqn/over/precedence.out_html (1.1) regress/eqn/size/Makefile (1.1) regress/eqn/size/basic.in (1.1) regress/eqn/size/basic.out_ascii (1.1) regress/eqn/subsup/Makefile (1.1) regress/eqn/subsup/combine.in (1.1) regress/eqn/subsup/combine.out_ascii (1.1) regress/eqn/subsup/combine.out_html (1.1) regress/eqn/subsup/noarg.in (1.1) regress/eqn/subsup/noarg.out_ascii (1.1) regress/eqn/subsup/noarg.out_html (1.1) regress/eqn/subsup/sub_group.in (1.1) regress/eqn/subsup/sub_group.out_ascii (1.1) regress/eqn/subsup/sub_group.out_html (1.1) regress/eqn/unary/Makefile (1.1) regress/eqn/unary/diacrit.in (1.1) regress/eqn/unary/diacrit.out_ascii (1.1) regress/eqn/unary/diacrit.out_html (1.1) regress/eqn/unary/sqrt.in (1.1) regress/eqn/unary/sqrt.out_ascii (1.1) regress/eqn/unary/sqrt.out_html (1.1) regress/man/Makefile (1.1) regress/man/Makefile.inc (1.1) regress/man/B/Makefile (1.1) regress/man/B/args.in (1.1) regress/man/B/args.out_ascii (1.1) regress/man/B/args.out_lint (1.1) regress/man/BI/Makefile (1.1) regress/man/BI/emptyargs.in (1.1) regress/man/BI/emptyargs.out_ascii (1.1) regress/man/BI/literal.in (1.1) regress/man/BI/literal.out_ascii (1.1) regress/man/EX/Makefile (1.1) regress/man/EX/args.in (1.1) regress/man/EX/args.out_ascii (1.1) regress/man/EX/nested.in (1.1) regress/man/EX/nested.out_ascii (1.1) regress/man/EX/spacing.in (1.1) regress/man/EX/spacing.out_ascii (1.1) regress/man/HP/Makefile (1.1) regress/man/HP/break.in (1.1) regress/man/HP/break.out_ascii (1.1) regress/man/HP/literal.in (1.1) regress/man/HP/literal.out_ascii (1.1) regress/man/HP/macrotag.in (1.1) regress/man/HP/macrotag.out_ascii (1.1) regress/man/HP/manyargs.in (1.1) regress/man/HP/manyargs.out_ascii (1.1) regress/man/HP/spacing.in (1.1) regress/man/HP/spacing.out_ascii (1.1) regress/man/IP/Makefile (1.1) regress/man/IP/empty.in (1.1) regress/man/IP/empty.out_ascii (1.1) regress/man/IP/empty.out_lint (1.1) regress/man/IP/literal.in (1.1) regress/man/IP/literal.out_ascii (1.1) regress/man/IP/longhead.in (1.1) regress/man/IP/longhead.out_ascii (1.1) regress/man/IP/manyargs.in (1.1) regress/man/IP/manyargs.out_ascii (1.1) regress/man/IP/spacing.in (1.1) regress/man/IP/spacing.out_ascii (1.1) regress/man/IP/width.in (1.1) regress/man/IP/width.out_ascii (1.1) regress/man/OP/Makefile (1.1) regress/man/OP/args.in (1.1) regress/man/OP/args.out_ascii (1.1) regress/man/OP/args.out_lint (1.1) regress/man/PD/Makefile (1.1) regress/man/PD/args.in (1.1) regress/man/PD/args.out_ascii (1.1) regress/man/PD/args.out_lint (1.1) regress/man/PD/nextline.in (1.1) regress/man/PD/nextline.out_ascii (1.1) regress/man/PD/spacing.in (1.1) regress/man/PD/spacing.out_ascii (1.1) regress/man/PP/Makefile (1.1) regress/man/PP/args.in (1.1) regress/man/PP/args.out_ascii (1.1) regress/man/PP/args.out_lint (1.1) regress/man/PP/empty.in (1.1) regress/man/PP/empty.out_ascii (1.1) regress/man/PP/empty.out_lint (1.1) regress/man/RS/Makefile (1.1) regress/man/RS/REarg.in (1.1) regress/man/RS/REarg.out_ascii (1.1) regress/man/RS/REarg.out_lint (1.1) regress/man/RS/breaking.in (1.1) regress/man/RS/breaking.out_ascii (1.1) regress/man/RS/broken.in (1.1) regress/man/RS/broken.out_ascii (1.1) regress/man/RS/empty.in (1.1) regress/man/RS/empty.out_ascii (1.1) regress/man/RS/empty.out_lint (1.1) regress/man/RS/literal.in (1.1) regress/man/RS/literal.out_ascii (1.1) regress/man/RS/lonelyRE.in (1.1) regress/man/RS/lonelyRE.out_ascii (1.1) regress/man/RS/lonelyRE.out_lint (1.1) regress/man/RS/nested.in (1.1) regress/man/RS/nested.out_ascii (1.1) regress/man/RS/noRE.in (1.1) regress/man/RS/noRE.out_ascii (1.1) regress/man/RS/noRE.out_lint (1.1) regress/man/RS/nowidth.in (1.1) regress/man/RS/nowidth.out_ascii (1.1) regress/man/RS/width.in (1.1) regress/man/RS/width.out_ascii (1.1) regress/man/SH/Makefile (1.1) regress/man/SH/broken.in (1.1) regress/man/SH/broken.out_ascii (1.1) regress/man/SH/broken.out_lint (1.1) regress/man/SH/broken_eline.in (1.1) regress/man/SH/broken_eline.out_ascii (1.1) regress/man/SH/broken_eline.out_lint (1.1) regress/man/SH/empty_before.in (1.1) regress/man/SH/empty_before.out_ascii (1.1) regress/man/SH/empty_before.out_lint (1.1) regress/man/SH/longarg.in (1.1) regress/man/SH/longarg.out_ascii (1.1) regress/man/SH/noarg.in (1.1) regress/man/SH/noarg.out_ascii (1.1) regress/man/SH/noarg.out_lint (1.1) regress/man/SS/Makefile (1.1) regress/man/SS/broken.in (1.1) regress/man/SS/broken.out_ascii (1.1) regress/man/SS/broken.out_lint (1.1) regress/man/SS/broken_eline.in (1.1) regress/man/SS/broken_eline.out_ascii (1.1) regress/man/SS/broken_eline.out_lint (1.1) regress/man/SS/longarg.in (1.1) regress/man/SS/longarg.out_ascii (1.1) regress/man/SS/noarg.in (1.1) regress/man/SS/noarg.out_ascii (1.1) regress/man/SS/noarg.out_lint (1.1) regress/man/TH/Makefile (1.1) regress/man/TH/baddate.in (1.1) regress/man/TH/baddate.out_ascii (1.1) regress/man/TH/baddate.out_lint (1.1) regress/man/TH/case.in (1.1) regress/man/TH/case.out_ascii (1.1) regress/man/TH/case.out_lint (1.1) regress/man/TH/emptydate.in (1.1) regress/man/TH/emptydate.out_ascii (1.1) regress/man/TH/emptydate.out_lint (1.1) regress/man/TH/isodate.in (1.1) regress/man/TH/isodate.out_ascii (1.1) regress/man/TH/longdate.in (1.1) regress/man/TH/longdate.out_ascii (1.1) regress/man/TH/longdate.out_lint (1.1) regress/man/TH/longtit.in (1.1) regress/man/TH/longtit.out_ascii (1.1) regress/man/TH/longvol.in (1.1) regress/man/TH/longvol.out_ascii (1.1) regress/man/TH/mdocdate.in (1.1) regress/man/TH/mdocdate.out_ascii (1.1) regress/man/TH/noTH.in (1.1) regress/man/TH/noTH.out_lint (1.1) regress/man/TH/noarg.in (1.1) regress/man/TH/noarg.out_ascii (1.1) regress/man/TH/noarg.out_lint (1.1) regress/man/TH/nobody.in (1.1) regress/man/TH/nobody.out_ascii (1.1) regress/man/TH/nobody.out_lint (1.1) regress/man/TH/onearg.in (1.1) regress/man/TH/onearg.out_ascii (1.1) regress/man/TH/onearg.out_lint (1.1) regress/man/TH/onlyyear.in (1.1) regress/man/TH/onlyyear.out_ascii (1.1) regress/man/TH/sixargs.in (1.1) regress/man/TH/sixargs.out_ascii (1.1) regress/man/TH/sixargs.out_lint (1.1) regress/man/TH/twoargs.in (1.1) regress/man/TH/twoargs.out_ascii (1.1) regress/man/TH/twoargs.out_lint (1.1) regress/man/TP/Makefile (1.1) regress/man/TP/badarg.in (1.1) regress/man/TP/badarg.out_ascii (1.1) regress/man/TP/broken.in (1.1) regress/man/TP/broken.out_ascii (1.1) regress/man/TP/broken.out_lint (1.1) regress/man/TP/double.in (1.1) regress/man/TP/double.out_ascii (1.1) regress/man/TP/double.out_lint (1.1) regress/man/TP/eof.in (1.1) regress/man/TP/eof.out_ascii (1.1) regress/man/TP/eof.out_lint (1.1) regress/man/TP/fill.in (1.1) regress/man/TP/fill.out_ascii (1.1) regress/man/TP/literal.in (1.1) regress/man/TP/literal.out_ascii (1.1) regress/man/TP/longhead.in (1.1) regress/man/TP/longhead.out_ascii (1.1) regress/man/TP/macrotag.in (1.1) regress/man/TP/macrotag.out_ascii (1.1) regress/man/TP/manyargs.in (1.1) regress/man/TP/manyargs.out_ascii (1.1) regress/man/TP/sameline.in (1.1) regress/man/TP/sameline.out_ascii (1.1) regress/man/TP/spacing.in (1.1) regress/man/TP/spacing.out_ascii (1.1) regress/man/TP/width.in (1.1) regress/man/TP/width.out_ascii (1.1) regress/man/TS/Makefile (1.1) regress/man/TS/break.in (1.1) regress/man/TS/break.out_ascii (1.1) regress/man/TS/break.out_lint (1.1) regress/man/TS/vspace.in (1.1) regress/man/TS/vspace.out_ascii (1.1) regress/man/UR/Makefile (1.1) regress/man/UR/args.in (1.1) regress/man/UR/args.out_ascii (1.1) regress/man/UR/args.out_lint (1.1) regress/man/UR/noUE.in (1.1) regress/man/UR/noUE.out_ascii (1.1) regress/man/UR/noUE.out_lint (1.1) regress/man/blank/Makefile (1.1) regress/man/blank/afterSH.in (1.1) regress/man/blank/afterSH.out_ascii (1.1) regress/man/blank/afterSH.out_lint (1.1) regress/man/blank/afterSS.in (1.1) regress/man/blank/afterSS.out_ascii (1.1) regress/man/blank/afterSS.out_lint (1.1) regress/man/blank/line.in (1.1) regress/man/blank/line.out_ascii (1.1) regress/man/blank/line.out_lint (1.1) regress/man/nf/Makefile (1.1) regress/man/nf/args.in (1.1) regress/man/nf/args.out_ascii (1.1) regress/man/nf/args.out_lint (1.1) regress/man/nf/dupe.in (1.1) regress/man/nf/dupe.out_ascii (1.1) regress/man/nf/dupe.out_lint (1.1) regress/man/nf/indent.in (1.1) regress/man/nf/indent.out_ascii (1.1) regress/man/nf/userdef.in (1.1) regress/man/nf/userdef.out_ascii (1.1) regress/man/nf/vert.in (1.1) regress/man/nf/vert.out_ascii (1.1) regress/mdoc/Makefile (1.1) regress/mdoc/Makefile.inc (1.1) regress/mdoc/Ad/Makefile (1.1) regress/mdoc/Ad/font.in (1.1) regress/mdoc/Ad/font.out_ascii (1.1) regress/mdoc/Ad/noarg.in (1.1) regress/mdoc/Ad/noarg.out_ascii (1.1) regress/mdoc/Ad/noarg.out_lint (1.1) regress/mdoc/An/Makefile (1.1) regress/mdoc/An/break.in (1.1) regress/mdoc/An/break.out_ascii (1.1) regress/mdoc/An/break.out_lint (1.1) regress/mdoc/Ap/Makefile (1.1) regress/mdoc/Ap/eos.in (1.1) regress/mdoc/Ap/eos.out_ascii (1.1) regress/mdoc/Ap/middle.in (1.1) regress/mdoc/Ap/middle.out_ascii (1.1) regress/mdoc/Aq/Makefile (1.1) regress/mdoc/Aq/author.in (1.1) regress/mdoc/Aq/author.out_ascii (1.1) regress/mdoc/Aq/author.out_utf8 (1.1) regress/mdoc/Aq/empty.in (1.1) regress/mdoc/Aq/empty.out_ascii (1.1) regress/mdoc/Aq/empty.out_utf8 (1.1) regress/mdoc/Ar/Makefile (1.1) regress/mdoc/Ar/font.in (1.1) regress/mdoc/Ar/font.out_ascii (1.1) regress/mdoc/Ar/punct.in (1.1) regress/mdoc/Ar/punct.out_ascii (1.1) regress/mdoc/At/Makefile (1.1) regress/mdoc/At/invalid.in (1.1) regress/mdoc/At/invalid.out_ascii (1.1) regress/mdoc/At/invalid.out_lint (1.1) regress/mdoc/Bd/Makefile (1.1) regress/mdoc/Bd/badargs.in (1.1) regress/mdoc/Bd/badargs.out_ascii (1.1) regress/mdoc/Bd/badargs.out_lint (1.1) regress/mdoc/Bd/beforeNAME.in (1.1) regress/mdoc/Bd/beforeNAME.out_ascii (1.1) regress/mdoc/Bd/beforeNAME.out_lint (1.1) regress/mdoc/Bd/blank.in (1.1) regress/mdoc/Bd/blank.out_ascii (1.1) regress/mdoc/Bd/blank.out_lint (1.1) regress/mdoc/Bd/break.in (1.1) regress/mdoc/Bd/break.out_ascii (1.1) regress/mdoc/Bd/break.out_lint (1.1) regress/mdoc/Bd/broken.in (1.1) regress/mdoc/Bd/broken.out_ascii (1.1) regress/mdoc/Bd/broken.out_lint (1.1) regress/mdoc/Bd/centered.in (1.1) regress/mdoc/Bd/centered.out_ascii (1.1) regress/mdoc/Bd/empty.in (1.1) regress/mdoc/Bd/empty.out_ascii (1.1) regress/mdoc/Bd/nested.in (1.1) regress/mdoc/Bd/nested.out_ascii (1.1) regress/mdoc/Bd/nested.out_lint (1.1) regress/mdoc/Bd/offset-empty.in (1.1) regress/mdoc/Bd/offset-empty.out_ascii (1.1) regress/mdoc/Bd/offset-neg.in (1.1) regress/mdoc/Bd/offset-neg.out_ascii (1.1) regress/mdoc/Bd/spacing.in (1.1) regress/mdoc/Bd/spacing.out_ascii (1.1) regress/mdoc/Bd/unclosed.in (1.1) regress/mdoc/Bd/unclosed.out_ascii (1.1) regress/mdoc/Bd/unclosed.out_lint (1.1) regress/mdoc/Bf/Makefile (1.1) regress/mdoc/Bf/badargs.in (1.1) regress/mdoc/Bf/badargs.out_ascii (1.1) regress/mdoc/Bf/badargs.out_lint (1.1) regress/mdoc/Bf/break.in (1.1) regress/mdoc/Bf/break.out_ascii (1.1) regress/mdoc/Bf/break.out_lint (1.1) regress/mdoc/Bf/broken.in (1.1) regress/mdoc/Bf/broken.out_ascii (1.1) regress/mdoc/Bf/broken.out_lint (1.1) regress/mdoc/Bf/multiargs.in (1.1) regress/mdoc/Bf/multiargs.out_ascii (1.1) regress/mdoc/Bf/multiargs.out_lint (1.1) regress/mdoc/Bf/nest.in (1.1) regress/mdoc/Bf/nest.out_ascii (1.1) regress/mdoc/Bk/Makefile (1.1) regress/mdoc/Bk/badarg.in (1.1) regress/mdoc/Bk/badarg.out_ascii (1.1) regress/mdoc/Bk/badarg.out_lint (1.1) regress/mdoc/Bk/break.in (1.1) regress/mdoc/Bk/break.out_ascii (1.1) regress/mdoc/Bk/broken.in (1.1) regress/mdoc/Bk/broken.out_ascii (1.1) regress/mdoc/Bk/broken.out_lint (1.1) regress/mdoc/Bk/inputlines.in (1.1) regress/mdoc/Bk/inputlines.out_ascii (1.1) regress/mdoc/Bk/lines.in (1.1) regress/mdoc/Bk/lines.out_ascii (1.1) regress/mdoc/Bk/synopsis.in (1.1) regress/mdoc/Bk/synopsis.out_ascii (1.1) regress/mdoc/Bl/Makefile (1.1) regress/mdoc/Bl/badargs.in (1.1) regress/mdoc/Bl/badargs.out_ascii (1.1) regress/mdoc/Bl/badargs.out_lint (1.1) regress/mdoc/Bl/bareIt.in (1.1) regress/mdoc/Bl/bareIt.out_ascii (1.1) regress/mdoc/Bl/bareIt.out_lint (1.1) regress/mdoc/Bl/bareTa.in (1.1) regress/mdoc/Bl/bareTa.out_ascii (1.1) regress/mdoc/Bl/bareTa.out_lint (1.1) regress/mdoc/Bl/break.in (1.1) regress/mdoc/Bl/break.out_ascii (1.1) regress/mdoc/Bl/break.out_lint (1.1) regress/mdoc/Bl/breakingIt.in (1.1) regress/mdoc/Bl/breakingIt.out_ascii (1.1) regress/mdoc/Bl/breakingIt.out_lint (1.1) regress/mdoc/Bl/broken.in (1.1) regress/mdoc/Bl/broken.out_ascii (1.1) regress/mdoc/Bl/broken.out_lint (1.1) regress/mdoc/Bl/bullet.in (1.1) regress/mdoc/Bl/bullet.out_ascii (1.1) regress/mdoc/Bl/colNoIt.in (1.1) regress/mdoc/Bl/colNoIt.out_ascii (1.1) regress/mdoc/Bl/column.in (1.1) regress/mdoc/Bl/column.out_ascii (1.1) regress/mdoc/Bl/column.out_lint (1.1) regress/mdoc/Bl/dash.in (1.1) regress/mdoc/Bl/dash.out_ascii (1.1) regress/mdoc/Bl/dash.out_utf8 (1.1) regress/mdoc/Bl/diag.in (1.1) regress/mdoc/Bl/diag.out_ascii (1.1) regress/mdoc/Bl/empty.in (1.1) regress/mdoc/Bl/empty.out_ascii (1.1) regress/mdoc/Bl/empty.out_lint (1.1) regress/mdoc/Bl/emptyhead.in (1.1) regress/mdoc/Bl/emptyhead.out_ascii (1.1) regress/mdoc/Bl/emptyhead.out_lint (1.1) regress/mdoc/Bl/emptyitem.in (1.1) regress/mdoc/Bl/emptyitem.out_ascii (1.1) regress/mdoc/Bl/emptyitem.out_lint (1.1) regress/mdoc/Bl/emptytag.in (1.1) regress/mdoc/Bl/emptytag.out_ascii (1.1) regress/mdoc/Bl/emptytag.out_lint (1.1) regress/mdoc/Bl/enum.in (1.1) regress/mdoc/Bl/enum.out_ascii (1.1) regress/mdoc/Bl/extend.in (1.1) regress/mdoc/Bl/extend.out_ascii (1.1) regress/mdoc/Bl/hang.in (1.1) regress/mdoc/Bl/hang.out_ascii (1.1) regress/mdoc/Bl/inset.in (1.1) regress/mdoc/Bl/inset.out_ascii (1.1) regress/mdoc/Bl/item.in (1.1) regress/mdoc/Bl/item.out_ascii (1.1) regress/mdoc/Bl/multitag.in (1.1) regress/mdoc/Bl/multitag.out_ascii (1.1) regress/mdoc/Bl/multitype.in (1.1) regress/mdoc/Bl/multitype.out_ascii (1.1) regress/mdoc/Bl/nested.in (1.1) regress/mdoc/Bl/nested.out_ascii (1.1) regress/mdoc/Bl/noIt.in (1.1) regress/mdoc/Bl/noIt.out_ascii (1.1) regress/mdoc/Bl/noIt.out_lint (1.1) regress/mdoc/Bl/notype.in (1.1) regress/mdoc/Bl/notype.out_ascii (1.1) regress/mdoc/Bl/notype.out_lint (1.1) regress/mdoc/Bl/offset.in (1.1) regress/mdoc/Bl/offset.out_ascii (1.1) regress/mdoc/Bl/ohang.in (1.1) regress/mdoc/Bl/ohang.out_ascii (1.1) regress/mdoc/Bl/secstart.in (1.1) regress/mdoc/Bl/secstart.out_ascii (1.1) regress/mdoc/Bl/tag.in (1.1) regress/mdoc/Bl/tag.out_ascii (1.1) regress/mdoc/Bl/tag.out_lint (1.1) regress/mdoc/Bl/unclosed.in (1.1) regress/mdoc/Bl/unclosed.out_ascii (1.1) regress/mdoc/Brq/Makefile (1.1) regress/mdoc/Brq/empty.in (1.1) regress/mdoc/Brq/empty.out_ascii (1.1) regress/mdoc/Bx/Makefile (1.1) regress/mdoc/Bx/args.in (1.1) regress/mdoc/Bx/args.out_ascii (1.1) regress/mdoc/Cd/Makefile (1.1) regress/mdoc/Cd/eos.in (1.1) regress/mdoc/Cd/eos.out_ascii (1.1) regress/mdoc/Cd/font.in (1.1) regress/mdoc/Cd/font.out_ascii (1.1) regress/mdoc/Cd/noarg.in (1.1) regress/mdoc/Cd/noarg.out_ascii (1.1) regress/mdoc/Cd/noarg.out_lint (1.1) regress/mdoc/Cm/Makefile (1.1) regress/mdoc/Cm/basic.in (1.1) regress/mdoc/Cm/basic.out_ascii (1.1) regress/mdoc/Cm/font.in (1.1) regress/mdoc/Cm/font.out_ascii (1.1) regress/mdoc/Cm/noarg.in (1.1) regress/mdoc/Cm/noarg.out_ascii (1.1) regress/mdoc/Cm/noarg.out_lint (1.1) regress/mdoc/D1/Makefile (1.1) regress/mdoc/D1/spacing.in (1.1) regress/mdoc/D1/spacing.out_ascii (1.1) regress/mdoc/D1/spacing.out_lint (1.1) regress/mdoc/Db/Makefile (1.1) regress/mdoc/Db/args.in (1.1) regress/mdoc/Db/args.out_ascii (1.1) regress/mdoc/Db/args.out_lint (1.1) regress/mdoc/Dd/Makefile (1.1) regress/mdoc/Dd/badarg.in (1.1) regress/mdoc/Dd/badarg.out_ascii (1.1) regress/mdoc/Dd/badarg.out_lint (1.1) regress/mdoc/Dd/dupe.in (1.1) regress/mdoc/Dd/dupe.out_ascii (1.1) regress/mdoc/Dd/dupe.out_lint (1.1) regress/mdoc/Dd/late.in (1.1) regress/mdoc/Dd/late.out_ascii (1.1) regress/mdoc/Dd/late.out_lint (1.1) regress/mdoc/Dd/long.in (1.1) regress/mdoc/Dd/long.out_ascii (1.1) regress/mdoc/Dd/long.out_lint (1.1) regress/mdoc/Dd/manarg.in (1.1) regress/mdoc/Dd/manarg.out_ascii (1.1) regress/mdoc/Dd/manarg.out_lint (1.1) regress/mdoc/Dd/noarg.in (1.1) regress/mdoc/Dd/noarg.out_lint (1.1) regress/mdoc/Dd/order.in (1.1) regress/mdoc/Dd/order.out_ascii (1.1) regress/mdoc/Dd/order.out_lint (1.1) regress/mdoc/Dl/Makefile (1.1) regress/mdoc/Dl/spacing.in (1.1) regress/mdoc/Dl/spacing.out_ascii (1.1) regress/mdoc/Dl/spacing.out_lint (1.1) regress/mdoc/Dq/Makefile (1.1) regress/mdoc/Dq/empty.in (1.1) regress/mdoc/Dq/empty.out_ascii (1.1) regress/mdoc/Dt/Makefile (1.1) regress/mdoc/Dt/badsec.in (1.1) regress/mdoc/Dt/badsec.out_lint (1.1) regress/mdoc/Dt/case.in (1.1) regress/mdoc/Dt/case.out_ascii (1.1) regress/mdoc/Dt/case.out_lint (1.1) regress/mdoc/Dt/dupe.in (1.1) regress/mdoc/Dt/dupe.out_ascii (1.1) regress/mdoc/Dt/dupe.out_lint (1.1) regress/mdoc/Dt/fourargs.in (1.1) regress/mdoc/Dt/fourargs.out_ascii (1.1) regress/mdoc/Dt/fourargs.out_lint (1.1) regress/mdoc/Dt/late.in (1.1) regress/mdoc/Dt/late.out_ascii (1.1) regress/mdoc/Dt/late.out_lint (1.1) regress/mdoc/Dt/missing.in (1.1) regress/mdoc/Dt/missing.out_ascii (1.1) regress/mdoc/Dt/missing.out_lint (1.1) regress/mdoc/Dt/noarg.in (1.1) regress/mdoc/Dt/noarg.out_ascii (1.1) regress/mdoc/Dt/noarg.out_lint (1.1) regress/mdoc/Dt/nobody.in (1.1) regress/mdoc/Dt/nobody.out_ascii (1.1) regress/mdoc/Dt/nobody.out_lint (1.1) regress/mdoc/Dt/nosec.in (1.1) regress/mdoc/Dt/nosec.out_ascii (1.1) regress/mdoc/Dt/nosec.out_lint (1.1) regress/mdoc/Dt/order.in (1.1) regress/mdoc/Dt/order.out_ascii (1.1) regress/mdoc/Dt/order.out_lint (1.1) regress/mdoc/Dv/Makefile (1.1) regress/mdoc/Dv/font.in (1.1) regress/mdoc/Dv/font.out_ascii (1.1) regress/mdoc/Dv/noarg.in (1.1) regress/mdoc/Dv/noarg.out_ascii (1.1) regress/mdoc/Dv/noarg.out_lint (1.1) regress/mdoc/Em/Makefile (1.1) regress/mdoc/Em/font.in (1.1) regress/mdoc/Em/font.out_ascii (1.1) regress/mdoc/Em/noarg.in (1.1) regress/mdoc/Em/noarg.out_ascii (1.1) regress/mdoc/Em/noarg.out_lint (1.1) regress/mdoc/Em/punct.in (1.1) regress/mdoc/Em/punct.out_ascii (1.1) regress/mdoc/Em/punct.out_lint (1.1) regress/mdoc/Eo/Makefile (1.1) regress/mdoc/Eo/break.in (1.1) regress/mdoc/Eo/break.out_ascii (1.1) regress/mdoc/Eo/break.out_lint (1.1) regress/mdoc/Eo/empty.in (1.1) regress/mdoc/Eo/empty.out_ascii (1.1) regress/mdoc/Eo/obsolete.in (1.1) regress/mdoc/Eo/obsolete.out_ascii (1.1) regress/mdoc/Eo/obsolete.out_lint (1.1) regress/mdoc/Eo/unclosed.in (1.1) regress/mdoc/Eo/unclosed.out_ascii (1.1) regress/mdoc/Eo/unclosed.out_lint (1.1) regress/mdoc/Er/Makefile (1.1) regress/mdoc/Er/font.in (1.1) regress/mdoc/Er/font.out_ascii (1.1) regress/mdoc/Er/noarg.in (1.1) regress/mdoc/Er/noarg.out_ascii (1.1) regress/mdoc/Er/noarg.out_lint (1.1) regress/mdoc/Ev/Makefile (1.1) regress/mdoc/Ev/font.in (1.1) regress/mdoc/Ev/font.out_ascii (1.1) regress/mdoc/Ev/noarg.in (1.1) regress/mdoc/Ev/noarg.out_ascii (1.1) regress/mdoc/Ev/noarg.out_lint (1.1) regress/mdoc/Ex/Makefile (1.1) regress/mdoc/Ex/args.in (1.1) regress/mdoc/Ex/args.out_ascii (1.1) regress/mdoc/Ex/noname.in (1.1) regress/mdoc/Ex/noname.out_ascii (1.1) regress/mdoc/Ex/noname.out_lint (1.1) regress/mdoc/Ex/nostd.in (1.1) regress/mdoc/Ex/nostd.out_ascii (1.1) regress/mdoc/Ex/nostd.out_lint (1.1) regress/mdoc/Fd/Makefile (1.1) regress/mdoc/Fd/break.in (1.1) regress/mdoc/Fd/break.out_ascii (1.1) regress/mdoc/Fd/empty.in (1.1) regress/mdoc/Fd/empty.out_ascii (1.1) regress/mdoc/Fd/empty.out_lint (1.1) regress/mdoc/Fd/eos.in (1.1) regress/mdoc/Fd/eos.out_ascii (1.1) regress/mdoc/Fd/font.in (1.1) regress/mdoc/Fd/font.out_ascii (1.1) regress/mdoc/Fl/Makefile (1.1) regress/mdoc/Fl/font.in (1.1) regress/mdoc/Fl/font.out_ascii (1.1) regress/mdoc/Fl/multiarg.in (1.1) regress/mdoc/Fl/multiarg.out_ascii (1.1) regress/mdoc/Fl/noarg.in (1.1) regress/mdoc/Fl/noarg.out_ascii (1.1) regress/mdoc/Fl/parsed.in (1.1) regress/mdoc/Fl/parsed.out_ascii (1.1) regress/mdoc/Fl/punct.in (1.1) regress/mdoc/Fl/punct.out_ascii (1.1) regress/mdoc/Fo/Makefile (1.1) regress/mdoc/Fo/basic.in (1.1) regress/mdoc/Fo/basic.out_ascii (1.1) regress/mdoc/Fo/break.in (1.1) regress/mdoc/Fo/break.out_ascii (1.1) regress/mdoc/Fo/eos.in (1.1) regress/mdoc/Fo/eos.out_ascii (1.1) regress/mdoc/Fo/font.in (1.1) regress/mdoc/Fo/font.out_ascii (1.1) regress/mdoc/Fo/noarg.in (1.1) regress/mdoc/Fo/noarg.out_ascii (1.1) regress/mdoc/Fo/noarg.out_lint (1.1) regress/mdoc/Fo/nohead.in (1.1) regress/mdoc/Fo/nohead.out_ascii (1.1) regress/mdoc/Fo/nohead.out_lint (1.1) regress/mdoc/Fo/obsolete.in (1.1) regress/mdoc/Fo/obsolete.out_ascii (1.1) regress/mdoc/Fo/obsolete.out_lint (1.1) regress/mdoc/Fo/punct.in (1.1) regress/mdoc/Fo/punct.out_ascii (1.1) regress/mdoc/Fo/section.in (1.1) regress/mdoc/Fo/section.out_ascii (1.1) regress/mdoc/Fo/warn.in (1.1) regress/mdoc/Fo/warn.out_ascii (1.1) regress/mdoc/Fo/warn.out_lint (1.1) regress/mdoc/Ft/Makefile (1.1) regress/mdoc/Ft/font.in (1.1) regress/mdoc/Ft/font.out_ascii (1.1) regress/mdoc/Ic/Makefile (1.1) regress/mdoc/Ic/font.in (1.1) regress/mdoc/Ic/font.out_ascii (1.1) regress/mdoc/Ic/noarg.in (1.1) regress/mdoc/Ic/noarg.out_ascii (1.1) regress/mdoc/Ic/noarg.out_lint (1.1) regress/mdoc/In/Makefile (1.1) regress/mdoc/In/break.in (1.1) regress/mdoc/In/break.out_ascii (1.1) regress/mdoc/In/eos.in (1.1) regress/mdoc/In/eos.out_ascii (1.1) regress/mdoc/In/font.in (1.1) regress/mdoc/In/font.out_ascii (1.1) regress/mdoc/In/noarg.in (1.1) regress/mdoc/In/noarg.out_ascii (1.1) regress/mdoc/In/noarg.out_lint (1.1) regress/mdoc/Lb/Makefile (1.1) regress/mdoc/Lb/badargs.in (1.1) regress/mdoc/Lb/badargs.out_ascii (1.1) regress/mdoc/Lb/badargs.out_lint (1.1) regress/mdoc/Lb/break.in (1.1) regress/mdoc/Lb/break.out_ascii (1.1) regress/mdoc/Lb/eos.in (1.1) regress/mdoc/Lb/eos.out_ascii (1.1) regress/mdoc/Li/Makefile (1.1) regress/mdoc/Li/font.in (1.1) regress/mdoc/Li/font.out_ascii (1.1) regress/mdoc/Li/punct.in (1.1) regress/mdoc/Li/punct.out_ascii (1.1) regress/mdoc/Li/punct.out_lint (1.1) regress/mdoc/Lk/Makefile (1.1) regress/mdoc/Lk/font.in (1.1) regress/mdoc/Lk/font.out_ascii (1.1) regress/mdoc/Lk/link.in (1.1) regress/mdoc/Lk/link.out_ascii (1.1) regress/mdoc/Lk/noarg.in (1.1) regress/mdoc/Lk/noarg.out_ascii (1.1) regress/mdoc/Lk/noarg.out_lint (1.1) regress/mdoc/Ms/Makefile (1.1) regress/mdoc/Ms/font.in (1.1) regress/mdoc/Ms/font.out_ascii (1.1) regress/mdoc/Ms/noarg.in (1.1) regress/mdoc/Ms/noarg.out_ascii (1.1) regress/mdoc/Ms/noarg.out_lint (1.1) regress/mdoc/Mt/Makefile (1.1) regress/mdoc/Mt/font.in (1.1) regress/mdoc/Mt/font.out_ascii (1.1) regress/mdoc/Mt/simple.in (1.1) regress/mdoc/Mt/simple.out_ascii (1.1) regress/mdoc/Nd/Makefile (1.1) regress/mdoc/Nd/broken.in (1.1) regress/mdoc/Nd/broken.out_ascii (1.1) regress/mdoc/Nd/broken.out_lint (1.1) regress/mdoc/Nd/hyph.in (1.1) regress/mdoc/Nd/hyph.out_ascii (1.1) regress/mdoc/Nd/noarg.in (1.1) regress/mdoc/Nd/noarg.out_ascii (1.1) regress/mdoc/Nd/noarg.out_lint (1.1) regress/mdoc/Nd/par.in (1.1) regress/mdoc/Nd/par.out_ascii (1.1) regress/mdoc/Nm/Makefile (1.1) regress/mdoc/Nm/badNAME.in (1.1) regress/mdoc/Nm/badNAME.out_ascii (1.1) regress/mdoc/Nm/badNAME.out_lint (1.1) regress/mdoc/Nm/badNAMEuse.in (1.1) regress/mdoc/Nm/badNAMEuse.out_ascii (1.1) regress/mdoc/Nm/badNAMEuse.out_lint (1.1) regress/mdoc/Nm/break.in (1.1) regress/mdoc/Nm/break.out_ascii (1.1) regress/mdoc/Nm/break.out_lint (1.1) regress/mdoc/Nm/broken.in (1.1) regress/mdoc/Nm/broken.out_ascii (1.1) regress/mdoc/Nm/empty.in (1.1) regress/mdoc/Nm/empty.out_ascii (1.1) regress/mdoc/Nm/emptyNAME.in (1.1) regress/mdoc/Nm/emptyNAME.out_ascii (1.1) regress/mdoc/Nm/emptyNAMEuse.in (1.1) regress/mdoc/Nm/emptyNAMEuse.out_ascii (1.1) regress/mdoc/Nm/font.in (1.1) regress/mdoc/Nm/font.out_ascii (1.1) regress/mdoc/Nm/long.in (1.1) regress/mdoc/Nm/long.out_ascii (1.1) regress/mdoc/Nm/par.in (1.1) regress/mdoc/Nm/par.out_ascii (1.1) regress/mdoc/Nm/parns.in (1.1) regress/mdoc/Nm/parns.out_ascii (1.1) regress/mdoc/Nm/punct.in (1.1) regress/mdoc/Nm/punct.out_ascii (1.1) regress/mdoc/No/Makefile (1.1) regress/mdoc/No/punct.in (1.1) regress/mdoc/No/punct.out_ascii (1.1) regress/mdoc/No/punct.out_lint (1.1) regress/mdoc/No/spacing.in (1.1) regress/mdoc/No/spacing.out_ascii (1.1) regress/mdoc/Ns/Makefile (1.1) regress/mdoc/Ns/position.in (1.1) regress/mdoc/Ns/position.out_ascii (1.1) regress/mdoc/Ns/position.out_lint (1.1) regress/mdoc/Ns/punct.in (1.1) regress/mdoc/Ns/punct.out_ascii (1.1) regress/mdoc/Oo/Makefile (1.1) regress/mdoc/Oo/punct.in (1.1) regress/mdoc/Oo/punct.out_ascii (1.1) regress/mdoc/Op/Makefile (1.1) regress/mdoc/Op/break.in (1.1) regress/mdoc/Op/break.out_lint (1.1) regress/mdoc/Op/broken.in (1.1) regress/mdoc/Op/broken.out_ascii (1.1) regress/mdoc/Op/broken.out_lint (1.1) regress/mdoc/Op/punct.in (1.1) regress/mdoc/Op/punct.out_ascii (1.1) regress/mdoc/Os/Makefile (1.1) regress/mdoc/Os/dupe.in (1.1) regress/mdoc/Os/dupe.out_ascii (1.1) regress/mdoc/Os/dupe.out_lint (1.1) regress/mdoc/Os/late.in (1.1) regress/mdoc/Os/late.out_ascii (1.1) regress/mdoc/Os/late.out_lint (1.1) regress/mdoc/Os/long.in (1.1) regress/mdoc/Os/long.out_ascii (1.1) regress/mdoc/Os/missing.in (1.1) regress/mdoc/Os/missing.out_ascii (1.1) regress/mdoc/Os/missing.out_lint (1.1) regress/mdoc/Ox/Makefile (1.1) regress/mdoc/Ox/keep.in (1.1) regress/mdoc/Ox/keep.out_ascii (1.1) regress/mdoc/Pa/Makefile (1.1) regress/mdoc/Pa/font.in (1.1) regress/mdoc/Pa/font.out_ascii (1.1) regress/mdoc/Pa/punct.in (1.1) regress/mdoc/Pa/punct.out_ascii (1.1) regress/mdoc/Pf/Makefile (1.1) regress/mdoc/Pf/spacing.in (1.1) regress/mdoc/Pf/spacing.out_ascii (1.1) regress/mdoc/Pf/spacing.out_lint (1.1) regress/mdoc/Pp/Makefile (1.1) regress/mdoc/Pp/arg.in (1.1) regress/mdoc/Pp/arg.out_ascii (1.1) regress/mdoc/Pp/arg.out_lint (1.1) regress/mdoc/Qq/Makefile (1.1) regress/mdoc/Qq/empty.in (1.1) regress/mdoc/Qq/empty.out_ascii (1.1) regress/mdoc/Rs/Makefile (1.1) regress/mdoc/Rs/allch.in (1.1) regress/mdoc/Rs/allch.out_ascii (1.1) regress/mdoc/Rs/allch.out_lint (1.1) regress/mdoc/Rs/args.in (1.1) regress/mdoc/Rs/args.out_ascii (1.1) regress/mdoc/Rs/args.out_lint (1.1) regress/mdoc/Rs/break.in (1.1) regress/mdoc/Rs/break.out_ascii (1.1) regress/mdoc/Rs/empty.in (1.1) regress/mdoc/Rs/empty.out_ascii (1.1) regress/mdoc/Rs/empty.out_lint (1.1) regress/mdoc/Rs/three_authors.out_ascii (1.1) regress/mdoc/Rv/Makefile (1.1) regress/mdoc/Rv/args.in (1.1) regress/mdoc/Rv/args.out_ascii (1.1) regress/mdoc/Rv/noname.in (1.1) regress/mdoc/Rv/noname.out_ascii (1.1) regress/mdoc/Rv/noname.out_lint (1.1) regress/mdoc/Rv/nostd.in (1.1) regress/mdoc/Rv/nostd.out_ascii (1.1) regress/mdoc/Rv/nostd.out_lint (1.1) regress/mdoc/Sh/Makefile (1.1) regress/mdoc/Sh/badNAME.in (1.1) regress/mdoc/Sh/badNAME.out_ascii (1.1) regress/mdoc/Sh/badNAME.out_lint (1.1) regress/mdoc/Sh/before.in (1.1) regress/mdoc/Sh/before.out_ascii (1.1) regress/mdoc/Sh/before.out_lint (1.1) regress/mdoc/Sh/empty.in (1.1) regress/mdoc/Sh/empty.out_ascii (1.1) regress/mdoc/Sh/empty.out_lint (1.1) regress/mdoc/Sh/emptyNAME.in (1.1) regress/mdoc/Sh/emptyNAME.out_ascii (1.1) regress/mdoc/Sh/emptyNAME.out_lint (1.1) regress/mdoc/Sh/first.in (1.1) regress/mdoc/Sh/first.out_lint (1.1) regress/mdoc/Sh/nohead.in (1.1) regress/mdoc/Sh/nohead.out_ascii (1.1) regress/mdoc/Sh/nohead.out_lint (1.1) regress/mdoc/Sh/order.in (1.1) regress/mdoc/Sh/order.out_ascii (1.1) regress/mdoc/Sh/order.out_lint (1.1) regress/mdoc/Sh/orderNAME.in (1.1) regress/mdoc/Sh/orderNAME.out_ascii (1.1) regress/mdoc/Sh/orderNAME.out_lint (1.1) regress/mdoc/Sh/punctNAME.in (1.1) regress/mdoc/Sh/punctNAME.out_ascii (1.1) regress/mdoc/Sh/punctNAME.out_lint (1.1) regress/mdoc/Sh/subbefore.in (1.1) regress/mdoc/Sh/subbefore.out_ascii (1.1) regress/mdoc/Sh/subbefore.out_lint (1.1) regress/mdoc/Sm/Makefile (1.1) regress/mdoc/Sm/badarg.in (1.1) regress/mdoc/Sm/badarg.out_ascii (1.1) regress/mdoc/Sm/badarg.out_lint (1.1) regress/mdoc/Sm/noarg.in (1.1) regress/mdoc/Sm/noarg.out_ascii (1.1) regress/mdoc/Sm/scope.in (1.1) regress/mdoc/Sm/scope.out_ascii (1.1) regress/mdoc/Sm/spacing-No.in (1.1) regress/mdoc/Sm/spacing-No.out_ascii (1.1) regress/mdoc/Sm/spacing-Op.in (1.1) regress/mdoc/Sm/spacing-Op.out_ascii (1.1) regress/mdoc/Sm/twoarg.in (1.1) regress/mdoc/Sm/twoarg.out_ascii (1.1) regress/mdoc/Sm/twoarg.out_lint (1.1) regress/mdoc/Sq/Makefile (1.1) regress/mdoc/Sq/empty.in (1.1) regress/mdoc/Sq/empty.out_ascii (1.1) regress/mdoc/St/Makefile (1.1) regress/mdoc/St/badargs.in (1.1) regress/mdoc/St/badargs.out_ascii (1.1) regress/mdoc/St/badargs.out_lint (1.1) regress/mdoc/St/call.in (1.1) regress/mdoc/St/call.out_ascii (1.1) regress/mdoc/St/call.out_lint (1.1) regress/mdoc/Sx/Makefile (1.1) regress/mdoc/Sx/font.in (1.1) regress/mdoc/Sx/font.out_ascii (1.1) regress/mdoc/Sx/noarg.in (1.1) regress/mdoc/Sx/noarg.out_ascii (1.1) regress/mdoc/Sx/noarg.out_lint (1.1) regress/mdoc/Sy/Makefile (1.1) regress/mdoc/Sy/font.in (1.1) regress/mdoc/Sy/font.out_ascii (1.1) regress/mdoc/Sy/noarg.in (1.1) regress/mdoc/Sy/noarg.out_ascii (1.1) regress/mdoc/Sy/noarg.out_lint (1.1) regress/mdoc/Sy/punct.in (1.1) regress/mdoc/Sy/punct.out_ascii (1.1) regress/mdoc/Sy/punct.out_lint (1.1) regress/mdoc/Tn/Makefile (1.1) regress/mdoc/Tn/font.in (1.1) regress/mdoc/Tn/font.out_ascii (1.1) regress/mdoc/Tn/noarg.in (1.1) regress/mdoc/Tn/noarg.out_ascii (1.1) regress/mdoc/Tn/noarg.out_lint (1.1) regress/mdoc/Ud/Makefile (1.1) regress/mdoc/Ud/arg.in (1.1) regress/mdoc/Ud/arg.out_ascii (1.1) regress/mdoc/Ud/arg.out_lint (1.1) regress/mdoc/Ux/Makefile (1.1) regress/mdoc/Ux/eos.in (1.1) regress/mdoc/Ux/eos.out_ascii (1.1) regress/mdoc/Ux/spacing.in (1.1) regress/mdoc/Ux/spacing.out_ascii (1.1) regress/mdoc/Va/Makefile (1.1) regress/mdoc/Va/basic.in (1.1) regress/mdoc/Va/basic.out_ascii (1.1) regress/mdoc/Va/font.in (1.1) regress/mdoc/Va/font.out_ascii (1.1) regress/mdoc/Va/noarg.in (1.1) regress/mdoc/Va/noarg.out_ascii (1.1) regress/mdoc/Va/noarg.out_lint (1.1) regress/mdoc/Vt/Makefile (1.1) regress/mdoc/Vt/child.in (1.1) regress/mdoc/Vt/child.out_ascii (1.1) regress/mdoc/Vt/font.in (1.1) regress/mdoc/Vt/font.out_ascii (1.1) regress/mdoc/Vt/noarg.in (1.1) regress/mdoc/Vt/noarg.out_ascii (1.1) regress/mdoc/Vt/noarg.out_lint (1.1) regress/mdoc/Vt/spacing.in (1.1) regress/mdoc/Vt/spacing.out_ascii (1.1) regress/mdoc/Xr/Makefile (1.1) regress/mdoc/Xr/args.in (1.1) regress/mdoc/Xr/args.out_ascii (1.1) regress/mdoc/Xr/args.out_lint (1.1) regress/mdoc/blank/Makefile (1.1) regress/mdoc/blank/comment.in (1.1) regress/mdoc/blank/comment.out_ascii (1.1) regress/mdoc/blank/comment.out_lint (1.1) regress/mdoc/blank/line.in (1.1) regress/mdoc/blank/line.out_ascii (1.1) regress/mdoc/blank/line.out_lint (1.1) regress/mdoc/blank/list.in (1.1) regress/mdoc/blank/list.out_ascii (1.1) regress/mdoc/blank/list.out_lint (1.1) regress/mdoc/break/Makefile (1.1) regress/mdoc/break/brokenbreaker.in (1.1) regress/mdoc/break/brokenbreaker.out_ascii (1.1) regress/mdoc/break/brokenbreaker.out_lint (1.1) regress/mdoc/break/notopen.in (1.1) regress/mdoc/break/notopen.out_ascii (1.1) regress/mdoc/break/notopen.out_lint (1.1) regress/mdoc/break/tail.in (1.1) regress/mdoc/break/tail.out_ascii (1.1) regress/mdoc/break/tail.out_lint (1.1) regress/mdoc/break/twice.in (1.1) regress/mdoc/break/twice.out_ascii (1.1) regress/mdoc/break/twice.out_lint (1.1) regress/mdoc/break/two.in (1.1) regress/mdoc/break/two.out_ascii (1.1) regress/mdoc/break/two.out_lint (1.1) regress/roff/Makefile (1.1) regress/roff/Makefile.inc (1.1) regress/roff/args/Makefile (1.1) regress/roff/args/man.in (1.1) regress/roff/args/man.out_ascii (1.1) regress/roff/args/man.out_lint (1.1) regress/roff/args/mdoc.in (1.1) regress/roff/args/mdoc.out_ascii (1.1) regress/roff/args/mdoc.out_lint (1.1) regress/roff/args/roff.in (1.1) regress/roff/args/roff.out_ascii (1.1) regress/roff/args/roff.out_lint (1.1) regress/roff/br/Makefile (1.1) regress/roff/br/args.in (1.1) regress/roff/br/args.out_ascii (1.1) regress/roff/br/args.out_lint (1.1) regress/roff/cc/Makefile (1.1) regress/roff/cc/basic.in (1.1) regress/roff/cc/basic.out_ascii (1.1) regress/roff/cc/basic.out_lint (1.1) regress/roff/cond/Makefile (1.1) regress/roff/cond/before-Dd.in (1.1) regress/roff/cond/before-Dd.out_ascii (1.1) regress/roff/cond/close.in (1.1) regress/roff/cond/close.out_ascii (1.1) regress/roff/cond/close.out_lint (1.1) regress/roff/cond/ie.in (1.1) regress/roff/cond/ie.out_ascii (1.1) regress/roff/cond/if.in (1.1) regress/roff/cond/if.out_ascii (1.1) regress/roff/cond/if.out_lint (1.1) regress/roff/cond/numeric.in (1.1) regress/roff/cond/numeric.out_ascii (1.1) regress/roff/cond/register.in (1.1) regress/roff/cond/register.out_ascii (1.1) regress/roff/cond/strcmp.in (1.1) regress/roff/cond/strcmp.out_ascii (1.1) regress/roff/de/Dd.in (1.1) regress/roff/de/Dd.out_ascii (1.1) regress/roff/de/Makefile (1.1) regress/roff/de/TH.in (1.1) regress/roff/de/TH.out_ascii (1.1) regress/roff/de/append.in (1.1) regress/roff/de/append.out_ascii (1.1) regress/roff/de/cond.in (1.1) regress/roff/de/cond.out_ascii (1.1) regress/roff/de/escname.in (1.1) regress/roff/de/escname.out_ascii (1.1) regress/roff/de/escname.out_lint (1.1) regress/roff/de/factorial.in (1.1) regress/roff/de/factorial.out_ascii (1.1) regress/roff/de/indir.in (1.1) regress/roff/de/indir.out_ascii (1.1) regress/roff/de/indir.out_lint (1.1) regress/roff/de/startde.in (1.1) regress/roff/de/startde.out_ascii (1.1) regress/roff/ds/Makefile (1.1) regress/roff/ds/append.in (1.1) regress/roff/ds/append.out_ascii (1.1) regress/roff/ds/escname.in (1.1) regress/roff/ds/escname.out_ascii (1.1) regress/roff/ds/nested.in (1.1) regress/roff/ds/nested.out_ascii (1.1) regress/roff/ds/quoting.in (1.1) regress/roff/ds/quoting.out_ascii (1.1) regress/roff/esc/B.in (1.1) regress/roff/esc/B.out_ascii (1.1) regress/roff/esc/B.out_lint (1.1) regress/roff/esc/Makefile (1.1) regress/roff/esc/c.in (1.1) regress/roff/esc/c.out_ascii (1.1) regress/roff/esc/c_man.in (1.1) regress/roff/esc/c_man.out_ascii (1.1) regress/roff/esc/e.in (1.1) regress/roff/esc/e.out_ascii (1.1) regress/roff/esc/f.in (1.1) regress/roff/esc/f.out_ascii (1.1) regress/roff/esc/h.in (1.1) regress/roff/esc/h.out_ascii (1.1) regress/roff/esc/h.out_lint (1.1) regress/roff/esc/ignore.in (1.1) regress/roff/esc/ignore.out_ascii (1.1) regress/roff/esc/ignore.out_lint (1.1) regress/roff/esc/multi.in (1.1) regress/roff/esc/multi.out_ascii (1.1) regress/roff/esc/o.in (1.1) regress/roff/esc/o.out_ascii (1.1) regress/roff/esc/one.in (1.1) regress/roff/esc/one.out_ascii (1.1) regress/roff/esc/two.in (1.1) regress/roff/esc/two.out_ascii (1.1) regress/roff/esc/w.in (1.1) regress/roff/esc/w.out_ascii (1.1) regress/roff/esc/w.out_lint (1.1) regress/roff/esc/z.in (1.1) regress/roff/esc/z.out_ascii (1.1) regress/roff/ft/Makefile (1.1) regress/roff/ft/badargs.in (1.1) regress/roff/ft/badargs.out_ascii (1.1) regress/roff/ft/badargs.out_lint (1.1) regress/roff/ig/Makefile (1.1) regress/roff/ig/basic.in (1.1) regress/roff/ig/basic.out_ascii (1.1) regress/roff/ig/basic.out_lint (1.1) regress/roff/it/Makefile (1.1) regress/roff/it/badarg.in (1.1) regress/roff/it/badarg.out_ascii (1.1) regress/roff/it/badarg.out_lint (1.1) regress/roff/it/double.in (1.1) regress/roff/it/double.out_ascii (1.1) regress/roff/it/text.in (1.1) regress/roff/it/text.out_ascii (1.1) regress/roff/ll/Makefile (1.1) regress/roff/ll/basic.in (1.1) regress/roff/ll/basic.out_ascii (1.1) regress/roff/na/Makefile (1.1) regress/roff/na/args.in (1.1) regress/roff/na/args.out_ascii (1.1) regress/roff/nr/Makefile (1.1) regress/roff/nr/argc.in (1.1) regress/roff/nr/argc.out_ascii (1.1) regress/roff/nr/divzero.in (1.1) regress/roff/nr/divzero.out_ascii (1.1) regress/roff/nr/divzero.out_lint (1.1) regress/roff/nr/escname.in (1.1) regress/roff/nr/escname.out_ascii (1.1) regress/roff/nr/escname.out_lint (1.1) regress/roff/nr/eval.in (1.1) regress/roff/nr/eval.out_ascii (1.1) regress/roff/nr/int.in (1.1) regress/roff/nr/int.out_ascii (1.1) regress/roff/nr/predef.in (1.1) regress/roff/nr/predef.out_ascii (1.1) regress/roff/nr/rr.in (1.1) regress/roff/nr/rr.out_ascii (1.1) regress/roff/nr/scale.in (1.1) regress/roff/nr/scale.out_ascii (1.1) regress/roff/ps/Makefile (1.1) regress/roff/ps/ignore.in (1.1) regress/roff/ps/ignore.out_ascii (1.1) regress/roff/rm/Makefile (1.1) regress/roff/rm/basic.in (1.1) regress/roff/rm/basic.out_ascii (1.1) regress/roff/scale/Makefile (1.1) regress/roff/scale/horiz.in (1.1) regress/roff/scale/horiz.out_ascii (1.1) regress/roff/sp/Makefile (1.1) regress/roff/sp/badargs-man.in (1.1) regress/roff/sp/badargs-man.out_ascii (1.1) regress/roff/sp/badargs-man.out_lint (1.1) regress/roff/sp/badargs-mdoc.in (1.1) regress/roff/sp/badargs-mdoc.out_ascii (1.1) regress/roff/sp/negative.in (1.1) regress/roff/sp/negative.out_ascii (1.1) regress/roff/sp/scaling-man.in (1.1) regress/roff/sp/scaling-man.out_ascii (1.1) regress/roff/sp/scaling-mdoc.in (1.1) regress/roff/sp/scaling-mdoc.out_ascii (1.1) regress/roff/string/Makefile (1.1) regress/roff/string/escape.in (1.1) regress/roff/string/escape.out_ascii (1.1) regress/roff/string/infinite.in (1.1) regress/roff/string/infinite.out_ascii (1.1) regress/roff/string/name.in (1.1) regress/roff/string/name.out_ascii (1.1) regress/roff/string/name.out_lint (1.1) regress/roff/string/zerolength.in (1.1) regress/roff/string/zerolength.out_ascii (1.1) regress/roff/tr/Makefile (1.1) regress/roff/tr/args.in (1.1) regress/roff/tr/args.out_ascii (1.1) regress/roff/tr/args.out_lint (1.1) regress/tbl/Makefile (1.1) regress/tbl/Makefile.inc (1.1) regress/tbl/data/Makefile (1.1) regress/tbl/data/blankline.in (1.1) regress/tbl/data/blankline.out_ascii (1.1) regress/tbl/data/block_unclosed.in (1.1) regress/tbl/data/block_unclosed.out_ascii (1.1) regress/tbl/data/block_unclosed.out_lint (1.1) regress/tbl/data/empty.in (1.1) regress/tbl/data/empty.out_ascii (1.1) regress/tbl/data/empty.out_lint (1.1) regress/tbl/layout/Makefile (1.1) regress/tbl/layout/center.in (1.1) regress/tbl/layout/center.out_ascii (1.1) regress/tbl/layout/complex.in (1.1) regress/tbl/layout/complex.out_ascii (1.1) regress/tbl/layout/complex.out_lint (1.1) regress/tbl/layout/empty.in (1.1) regress/tbl/layout/empty.out_ascii (1.1) regress/tbl/layout/empty.out_lint (1.1) regress/tbl/layout/emptyline.in (1.1) regress/tbl/layout/emptyline.out_ascii (1.1) regress/tbl/layout/numbers.in (1.1) regress/tbl/layout/numbers.out_ascii (1.1) regress/tbl/layout/span.in (1.1) regress/tbl/layout/span.out_ascii (1.1) regress/tbl/macro/Makefile (1.1) regress/tbl/macro/column.in (1.1) regress/tbl/macro/column.out_ascii (1.1) regress/tbl/macro/man.in (1.1) regress/tbl/macro/man.out_ascii (1.1) regress/tbl/macro/man.out_lint (1.1) regress/tbl/macro/nested.in (1.1) regress/tbl/macro/nested.out_ascii (1.1) regress/tbl/macro/nested.out_lint (1.1) regress/tbl/mod/Makefile (1.1) regress/tbl/mod/badfont.in (1.1) regress/tbl/mod/badfont.out_ascii (1.1) regress/tbl/mod/badfont.out_lint (1.1) regress/tbl/mod/expand.in (1.1) regress/tbl/mod/expand.out_ascii (1.1) regress/tbl/mod/font.in (1.1) regress/tbl/mod/font.out_ascii (1.1) regress/tbl/mod/font.out_lint (1.1) regress/tbl/mod/misalign.in (1.1) regress/tbl/mod/misalign.out_ascii (1.1) regress/tbl/opt/Makefile (1.1) regress/tbl/opt/box.in (1.1) regress/tbl/opt/box.out_ascii (1.1) regress/tbl/opt/center.in (1.1) regress/tbl/opt/center.out_ascii (1.1) regress/tbl/opt/invalid.in (1.1) regress/tbl/opt/invalid.out_ascii (1.1) regress/tbl/opt/invalid.out_lint (1.1) Changed: regress/mdoc/Rs/three_authors.in (1.3), "Exp", lines: +9 -13 Finally port the OpenBSD regression suite. Both kristaps@ and wiz@ repeated asked for this, literally for years. 2017-02-07 01:30 schwarze Changed: NEWS (1.13), "Exp", lines: +108 -1 first draft of NEWS for 1.14.1 2017-02-06 19:04 schwarze Added: mandocd.8 (1.1) Changed: Makefile (1.496), "Exp", lines: +8 -2 catman.8 (1.7), "Exp", lines: +153 -78 new manual pages for catman(8) and mandocd(8) 2017-02-06 19:02 schwarze Changed: catman.c (1.14), "Exp", lines: +41 -16 mandocd.c (1.3), "Exp", lines: +14 -4 Polishing: * support -Ios= * create missing directories * fix output file permissions * error out on comminication failures I now consider this good enough for a first release. Bugs and missing features are still likely, though. 2017-02-06 03:48 schwarze Changed: gmdiff (1.5), "Exp", lines: +2 -2 explicitly pass -Tascii to mandoc(1), such that LC_CTYPE does not get into the way, and fix the usage() while here 2017-02-06 03:44 schwarze Changed: mdoc_html.c (1.270), "Exp", lines: +1 -3 mdoc_man.c (1.102), "Exp", lines: +3 -5 mdoc_term.c (1.343), "Exp", lines: +2 -4 mdoc_validate.c (1.318), "Exp", lines: +11 -1 The .Nm macro does not only use the default name when it has no argument, but also when the first argument is a child macro. Arcane issue found in the FreeBSD cxgbetool(8) manual that Baptiste Daroussin <bapt at FreeBSD> sent me long ago for a different reason. While solving this, switch to the new technique of doing text production in the validator, reducing code duplication in the formatters, which also makes -Ttree output clearer. 2017-02-05 22:51 schwarze Changed: mandocd.c (1.2), "Exp", lines: +2 -1 uint8_t requires <stdint.h>; from Michael Stapelberg 2017-02-05 22:30 schwarze Changed: mdoc.7 (1.261), "Exp", lines: +5 -3 document output spacing near delimiters 2017-02-05 22:25 schwarze Changed: TODO (1.232), "Exp", lines: +1 -26 remove several things that were taken care of in the past 2017-02-05 22:24 schwarze Changed: Makefile (1.488.2.4), "Exp", lines: +2 -1 merge rev. 1.495: add missing file man.options.1 2017-02-05 22:22 schwarze Changed: Makefile (1.495), "Exp", lines: +2 -1 add missing file man.options.1 2017-02-05 21:41 schwarze Changed: mandoc_char.7 (1.64), "Exp", lines: +26 -2 document hyphenation 2017-02-05 21:00 schwarze Changed: mandoc.css (1.17), "Exp", lines: +2 -1 mdoc_html.c (1.269), "Exp", lines: +11 -3 Wrap .St content in a <span class="St">. Also add forgotten <span class="Ux"> to .At rendering. 2017-02-05 20:34 schwarze Changed: mdoc_html.c (1.268), "Exp", lines: +2 -2 fix font selection for .Bf without argument 2017-02-05 20:22 schwarze Changed: TODO (1.231), "Exp", lines: +1 -4 html.c (1.207), "Exp", lines: +2 -1 html.h (1.83), "Exp", lines: +2 -1 mandoc.css (1.16), "Exp", lines: +11 -6 mdoc_html.c (1.267), "Exp", lines: +10 -10 mark up .Ar, .Fa, .Va, .Ft, and .Vt with <var> rather than <i>; suggested by bentley@ long ago, but needed lots of cleanup first 2017-02-05 19:29 schwarze Changed: html.c (1.206), "Exp", lines: +2 -1 html.h (1.82), "Exp", lines: +2 -1 mandoc.css (1.15), "Exp", lines: +3 -2 mdoc_html.c (1.266), "Exp", lines: +2 -2 for .Rs, use <cite> 2017-02-05 18:15 schwarze Changed: html.c (1.205), "Exp", lines: +2 -2 html.h (1.81), "Exp", lines: +2 -2 man_html.c (1.133), "Exp", lines: +1 -2 mdoc_html.c (1.265), "Exp", lines: +13 -9 tbl_html.c (1.20), "Exp", lines: +4 -3 Improve <table> syntax: The <col> element can only appear inside <colgroup>, so use <colgroup>. The <tbody> element is optional and useless, so don't use it. Even if we would ever need <thead> or <tfoot>, <tbody> would still be optional and useless; besides, we will likely never need <thead> or <tfoot>, simply because our languages don't support such functionality. 2017-02-04 12:03 schwarze Added: mandocd.c (1.1) Changed: Makefile (1.494), "Exp", lines: +24 -9 catman.c (1.13), "Exp", lines: +156 -455 configure (1.56), "Exp", lines: +7 -2 configure.local.example (1.23), "Exp", lines: +8 -1 experimental mandocd(8) and catman(8) for development in the tree, not yet ready for production 2017-02-04 11:58 schwarze Changed: man_term.c (1.189), "Exp", lines: +5 -2 mdoc_term.c (1.342), "Exp", lines: +4 -1 Do not fix the default indent for all subsequent files; some may use a different macro language and hence require a different indent. You can see the effect with "man -a 1 host hostname". 2017-02-03 18:22 schwarze Changed: read.c (1.150.2.7), "Exp", lines: +8 -7 merge rev.s 1.159 and 1.160: gzip bugfix and struct mparse cleanup 2017-02-03 18:18 schwarze Changed: read.c (1.160), "Exp", lines: +7 -7 Minor cleanup, no functional change: We always have a roff parser, so mparse_free() does not need to check for existence before freeing it. Also arrange code in struct mparse, mparse_reset(), and mparse_free() in the same order for readability. 2017-02-03 17:59 schwarze Changed: TODO (1.230), "Exp", lines: +18 -2 more work found in old mails 2017-02-03 17:56 schwarze Changed: read.c (1.159), "Exp", lines: +2 -1 If an application parses multiple files with mparse_readfd(3) but without using mparse_open(3) to open the files, and if one of the files includes a gzip'ed file with .so, then the gzip flag remains set and the next main file will be expected to be gzip'ed. Fix this by clearing the gzip flag in mparse_reset(3). Bug found and patch provided by Michael <Stapelberg at debian dot org>. 2017-02-02 20:10 schwarze Changed: man.options.1 (1.6), "Exp", lines: +1 -6 even man-1.6g does *not* have apropos -C, maybe it is MacOS X specific, i don't know... 2017-02-02 19:59 schwarze Changed: man.options.1 (1.5), "Exp", lines: +43 -40 correct information about early groff (up to 1.02) 2017-02-02 18:10 schwarze Changed: man.options.1 (1.4), "Exp", lines: +4 -1 mention groff git, and one minor fix 2017-02-02 16:58 schwarze Changed: man.options.1 (1.3), "Exp", lines: +95 -75 more info about man-1.6 and man-db 2017-02-02 02:30 schwarze Changed: man.options.1 (1.2), "Exp", lines: +5 -7 minor fixes 2017-02-02 02:17 schwarze Added: man.options.1 (1.1) new page, not to be installed 2017-01-31 19:44 schwarze Changed: apropos.1 (1.40), "Exp", lines: +6 -2 man.1 (1.21), "Exp", lines: +18 -4 mandoc.1 (1.173), "Exp", lines: +15 -2 add missing HISTORY information 2017-01-30 20:24 schwarze Changed: man_html.c (1.132), "Exp", lines: +134 -69 Rework fill mode handling for -man -Thtml. Basically, open <pre> whenever printing text in no-fill mode and it is not already open, and close it whenever printing something that cannot be inside <pre>. This fixes a crash reported by Michael <Stapelberg at debian dot org> in the French Linux chroot(2) manual and also improves rendering for OpenBSD pages like DPMSGetTimeouts(3) and GLwDrawingArea(3). These changes also permitted retiring struct mhtml. 2017-01-29 14:02 schwarze Changed: html.c (1.204), "Exp", lines: +10 -10 html.h (1.80), "Exp", lines: +2 -6 man_html.c (1.131), "Exp", lines: +3 -3 mdoc_html.c (1.264), "Exp", lines: +3 -3 eliminate one useless struct and one level of indirection; no functional change 2017-01-28 23:35 schwarze Changed: read.c (1.150.2.6), "Exp", lines: +2 -1 merge rev. 1.158: new sentence, new line 2017-01-28 23:30 schwarze Changed: mandoc.1 (1.172), "Exp", lines: +6 -2 mandoc.h (1.214), "Exp", lines: +2 -1 mdoc.c (1.259), "Exp", lines: +18 -2 read.c (1.158), "Exp", lines: +2 -1 Add a warning "new sentence, new line". This does not attempt to pinpoint each and every offender, but instead tries very hard to avoid false positives: Currently, there are only two false positives in the whole OpenBSD base system. Only do this in mdoc(7), not in man(7), because manuals written in man(7) typically have much worse problems than this. OK jmc@ on a previous version of the patch 2017-01-28 22:36 schwarze Changed: html.c (1.203), "Exp", lines: +51 -33 mandoc_html.3 (1.5), "Exp", lines: +16 -5 mdoc_html.c (1.263), "Exp", lines: +21 -48 Simplify usage of print_otag() even more: accept NULL to skip the attribute or format. 2017-01-28 22:32 schwarze Changed: TODO (1.229), "Exp", lines: +1 -9 MANDOCERR_BADTAB no longer exists, and i checked that MANDOCERR_FI_TAB is used correctly. 2017-01-28 18:43 schwarze Changed: mdoc_html.c (1.262), "Exp", lines: +17 -17 .Bl -column with zero columns is legal, so don't segfalt on it. Bug introduced in rev. 1.248 triggered for example in gssapi(3), analyzed and reported by Michael <Stapelberg at debian dot org>. Simplify the code a bit more while here. 2017-01-27 14:41 schwarze Changed: main.c (1.273.2.5), "Exp", lines: +10 -4 manpath.c (1.30.2.1), "Exp", lines: +69 -30 merge manpath.c 1.32, main.c 1.280: warn about invalid output options 2017-01-27 14:32 schwarze Changed: mandocdb.c (1.220.2.11), "Exp", lines: +9 -5 merge rev 1.242: warn about missing one-line description 2017-01-27 14:23 schwarze Changed: mandocdb.c (1.220.2.10), "Exp", lines: +31 -14 merge rev. 1.241: parse section number from the content of preformatted pages 2017-01-27 14:18 schwarze Changed: mandocdb.c (1.220.2.9), "Exp", lines: +20 -15 merge rev. 1.240: default to preformatted, not to man(7) 2017-01-27 13:59 schwarze Changed: mandocdb.c (1.220.2.8), "Exp", lines: +15 -1 merge rev. 1.239: fix base directory detection for makewhatis -t 2017-01-27 13:47 schwarze Changed: TODO (1.228), "Exp", lines: +1 -8 main.c (1.280), "Exp", lines: +10 -4 manconf.h (1.3), "Exp", lines: +1 -1 manpath.c (1.32), "Exp", lines: +68 -29 warn about invalid output options and error out if they occur on the command line; missing feature found in the TODO file 2017-01-27 11:33 schwarze Changed: mandocdb.c (1.242), "Exp", lines: +9 -4 warn about missing one-line description; missing feature found in the TODO file 2017-01-27 01:14 schwarze Changed: TODO (1.227), "Exp", lines: +1 -6 mandocdb.c (1.241), "Exp", lines: +31 -14 Parse the section number from the content of preformatted pages and warn if it doesn't match the directory where the file was found. 2017-01-27 01:09 schwarze Changed: mandocdb.c (1.240), "Exp", lines: +17 -13 If parsing a page reveals that it is neither mdoc(7) nor man(7), fall back to treating it as preformatted rather than treating it as man(7) anyway. 2017-01-27 01:04 schwarze Changed: mandocdb.c (1.239), "Exp", lines: +15 -1 fix base directory detection for makewhatis -t 2017-01-27 00:56 schwarze Changed: mandocdb.c (1.238), "Exp", lines: +7 -5 Always register names taken from file names in the names ohash. Bug found by makewhatis -p crashing in mlink_check(). 2017-01-26 19:32 schwarze Changed: TODO (1.226), "Exp", lines: +4 -1 more info on man(7) .Xr hyperlinking 2017-01-26 18:28 schwarze Changed: TODO (1.225), "Exp", lines: +1 -10 html.c (1.202), "Exp", lines: +2 -3 html.h (1.79), "Exp", lines: +2 -1 man_html.c (1.130), "Exp", lines: +47 -58 Fix -man -Thtml formatting after .nf (which has nothing to do with "literal", by the way, it means "no fill"): * Use <pre> such that whitespace is preserved. * Preserve lines breaks. * For font alternating macros, avoid node recursion which required scary juggling with the fill state. Instead, simply print the text children directly. Missing feature first noticed by kristaps@ in 2011, the again reported by afresh1@ in 2016, and finally reported here: https://github.com/Debian/debiman/issues/21 , which i only found because of Shane Kerr's comment here: https://plus.google.com/110314300533310775053/posts/H1eaw9Yskoc 2017-01-25 03:49 schwarze Changed: cgi.c (1.146), "Exp", lines: +2 -2 add arm64 architecture; from deraadt@ 2017-01-25 02:14 schwarze Changed: TODO (1.224), "Exp", lines: +1 -7 cgi.c (1.145), "Exp", lines: +3 -1 html.c (1.201), "Exp", lines: +4 -1 mandoc.css (1.14), "Exp", lines: +13 -4 mandoc_html.3 (1.4), "Exp", lines: +5 -1 mdoc_html.c (1.261), "Exp", lines: +46 -4 Improve HTML formatting of .Bl -tag. In particular, when using the style sheet, put the body on the same line as the head for short heads, or on the next line for long heads, in a way that preserves both correct indentation and correct vertical spacing with and without -compact, and with one or more heads per body (hi, Zaphod) - eight use cases so far - and with and without -tag, and with and without -offset, 32 use cases grand total. Using many ideas from zhuk@, from <David dot Dahlberg at fkie dot fraunhofer dot de>, and from Benny Lofgren <bl dash lists at lofgren dot biz>, and a few of my own. This is an excellent demonstration that CSS is an extremely hostile language, much more trapful and much harder to use than, say, C. When matthew@ reported this in July 2014 (!), it was already a known issue, and i no longer remember for how long. My first serious attempt at fixing it (in November 2015) failed miserably. I'd love to see simplifications of both the generated HTML code and of the style sheet, but without breaking any of the 32 use cases, please. 2017-01-21 02:32 schwarze Changed: mandoc.1 (1.171), "Exp", lines: +2 -11 bug was fixed, delete the BUGS section 2017-01-21 02:29 schwarze Changed: html.c (1.200), "Exp", lines: +1 -5 mandoc.css (1.13), "Exp", lines: +7 -8 slightly simplify header and footer styles 2017-01-21 02:09 schwarze Changed: mandoc.css (1.12), "Exp", lines: +7 -4 mdoc_html.c (1.260), "Exp", lines: +15 -10 Avoid writing constant style attributes over and over again. Move them to the style sheet. 2017-01-21 01:20 schwarze Changed: cgi.c (1.144), "Exp", lines: +9 -14 man_html.c (1.129), "Exp", lines: +4 -4 mandoc.css (1.11), "Exp", lines: +14 -27 mdoc_html.c (1.259), "Exp", lines: +8 -8 clean up the remaining class attributes 2017-01-20 23:51 schwarze Changed: man_html.c (1.128), "Exp", lines: +3 -3 mandoc.css (1.10), "Exp", lines: +42 -26 mdoc_html.c (1.258), "Exp", lines: +44 -43 Standardize class attributes for semantic macros. Correct markup for .Va and iprove markup for .Dv, .Er, .Ev while here. 2017-01-20 21:37 schwarze Changed: mandoc.css (1.9), "Exp", lines: +17 -16 mdoc_html.c (1.257), "Exp", lines: +18 -24 standardize .Rs class attributes 2017-01-20 19:58 schwarze Changed: mandoc.css (1.8), "Exp", lines: +36 -47 mdoc_html.c (1.256), "Exp", lines: +104 -72 standardize .Bl and .It class attributes 2017-01-19 16:56 schwarze Changed: mandoc.css (1.7), "Exp", lines: +12 -4 html.c (1.199), "Exp", lines: +1 -2 html.h (1.78), "Exp", lines: +1 -2 mdoc_html.c (1.255), "Exp", lines: +10 -14 clean up markup of .Bd, .D1, .Dl, .Li, and .Ql; in particular, stop abuse of <blockquote> 2017-01-19 15:48 schwarze Changed: mandoc.css (1.6), "Exp", lines: +3 -4 mdoc_html.c (1.254), "Exp", lines: +7 -7 clean up .Sx and .Xr HTML markup 2017-01-19 15:27 schwarze Changed: html.c (1.198), "Exp", lines: +3 -3 man_html.c (1.127), "Exp", lines: +9 -13 mandoc.css (1.5), "Exp", lines: +14 -8 mdoc_html.c (1.253), "Exp", lines: +8 -10 Clean up CSS rules for sections and paragraphs. Start using real macro names for CSS classes. 2017-01-19 14:29 schwarze Changed: mandoc.css (1.4), "Exp", lines: +22 -13 Clean up and fix rules for header and footer lines. In particular, horizontal alignment was missing. 2017-01-19 13:55 schwarze Changed: cgi.c (1.143), "Exp", lines: +27 -27 Adjust indentation of the HTML output to the conventions established by html.c. No semantic change. 2017-01-19 13:35 schwarze Changed: cgi.c (1.142), "Exp", lines: +5 -10 man_html.c (1.126), "Exp", lines: +8 -10 mandoc.css (1.3), "Exp", lines: +20 -23 mdoc_html.c (1.252), "Exp", lines: +8 -10 Start cleanup: trim useless HTML comments, <div> elements, and CSS rules on the <html> and <body> levels. 2017-01-19 01:00 schwarze Changed: html.c (1.197), "Exp", lines: +171 -65 html.h (1.77), "Exp", lines: +6 -3 man_html.c (1.125), "Exp", lines: +1 -3 mdoc_html.c (1.251), "Exp", lines: +1 -3 Implement line breaking of the generated HTML code at space characters in filled text. This does not affect HTML semantics, but makes the HTML code even more humanly readable. While here, - collapse multiple consecutive space characters in filled text - and insert a blank between style entries. 2017-01-18 19:22 schwarze Changed: html.c (1.196), "Exp", lines: +144 -77 html.h (1.76), "Exp", lines: +4 -1 man_html.c (1.124), "Exp", lines: +1 -2 mdoc_html.c (1.250), "Exp", lines: +1 -2 Make HTML output more human readable by overhauling line break logic around tags and by introducing some simple indentation. No change of HTML semantics intended. 2017-01-17 15:32 schwarze Changed: TODO (1.223), "Exp", lines: +1 -10 html.c (1.195), "Exp", lines: +73 -155 html.h (1.75), "Exp", lines: +1 -16 man_html.c (1.123), "Exp", lines: +5 -6 mandoc_html.3 (1.3), "Exp", lines: +23 -27 mdoc_html.c (1.249), "Exp", lines: +78 -74 Completely delete the buf field of struct html and all the buf*() interfaces. Such a static buffer was a bad idea in the first place, causing unfixable truncation that was only prevented by triggering an assertion failure. Instead, let the small number of remaining users allocate and free their own, temporary dynamic buffers, or for the case of .Xr and .In, pass the original data to be assembled in print_otag(). 2017-01-17 01:47 schwarze Changed: eqn_html.c (1.11), "Exp", lines: +29 -35 html.c (1.194), "Exp", lines: +135 -50 html.h (1.74), "Exp", lines: +3 -36 man_html.c (1.122), "Exp", lines: +47 -92 mandoc_html.3 (1.2), "Exp", lines: +114 -19 mdoc_html.c (1.248), "Exp", lines: +159 -403 tbl_html.c (1.19), "Exp", lines: +9 -21 Simplify the usage of print_otag() by making it accept a variable number of arguments. Delete struct htmlpair and all the PAIR_*() macros. Delete enum htmlattr, handle that in print_otag() instead. Minus 190 lines of code; no functional change except better ordering of attributes (class before style) in three cases. 2017-01-15 15:28 schwarze Changed: Makefile.depend (1.26), "Exp", lines: +1 -1 dba.c (1.9), "Exp", lines: +131 -63 When looking up macro values while the macro tables are being built in makewhatis(8), use ohash rather than linear searches. This was identified as the main makewhatis(8) performance bottleneck by Baptiste Daroussin <bapt at FreeBSD>, who also suggested part of the improved algorithm. This reduces the run time of "makewhatis /usr/share/man" from eleven to five seconds on my notebook. Note that the changed code is not used in apropos(1), so don't expect speedups there. While here, sort macro values asciibetically, to improve reproducibility - which still isn't perfect, but getting better. 2017-01-12 18:02 schwarze Changed: roff.c (1.288), "Exp", lines: +5 -9 Skipping all escape sequences at the beginning of strings in deroff() was too aggressive. There are strings that legitimately begin with an escape sequence. Only skip leading escape sequences representing whitespace. Bug reported by martijn@. 2017-01-12 17:29 schwarze Changed: mandoc.1 (1.170), "Exp", lines: +11 -3 tree.c (1.72), "Exp", lines: +28 -4 show meta data for -Ttree output 2017-01-12 15:47 schwarze Changed: configure (1.43.2.8), "Exp", lines: +3 -3 merge rev. 1.55: gcc 6 fix from Alpine Linux 2017-01-12 15:45 schwarze Changed: configure (1.55), "Exp", lines: +3 -3 Put compiler arguments that may contain -l at the end; according to the people at Alpine Linux, gcc 6 seems to fail when it's at the beginning. From Daniel Sabogal via http://git.alpinelinux.org. 2017-01-11 17:46 schwarze Changed: mandocdb.c (1.220.2.7), "Exp", lines: +3 -3 merge rev. 1.237: completion of NODE_NOSRC work 2017-01-11 17:39 schwarze Changed: mandocdb.c (1.237), "Exp", lines: +3 -3 mdoc_html.c (1.247), "Exp", lines: +5 -113 mdoc_man.c (1.101), "Exp", lines: +11 -101 mdoc_term.c (1.341), "Exp", lines: +5 -107 mdoc_validate.c (1.317), "Exp", lines: +188 -82 Do text production for .Bt, .Ex, .Rv, .Ud at the validation stage rather than in the formatters. Use NODE_NOSRC flag for .Lb and NODE_NOSRC and NODE_NOPRT for .St. Results in a more rigorous syntax tree and in 135 lines less code. This work was triggered by a question from Abhinav Upadhyay <er dot abhinav dot upadhyay at gmail dot com> (NetBSD) on discuss@. 2017-01-10 23:40 schwarze Changed: mandocdb.c (1.220.2.6), "Exp", lines: +3 -3 merge rev. 1.236: NODE_NOSRC and NODE_NOPRT for .Bx and .At 2017-01-10 23:36 schwarze Changed: mandocdb.c (1.236), "Exp", lines: +3 -3 mdoc_html.c (1.246), "Exp", lines: +2 -30 mdoc_man.c (1.100), "Exp", lines: +2 -23 mdoc_term.c (1.340), "Exp", lines: +2 -26 mdoc_validate.c (1.316), "Exp", lines: +46 -22 Use new NODE_NOSRC and NODE_NOPRT flags for .Bx and .At. More rigorous AST and 40 lines less code. 2017-01-10 22:04 schwarze Changed: mandocdb.c (1.220.2.5), "Exp", lines: +136 -131 merge rev. 1.235: use NODE_NOSRC for .Ux, .Ox, and friends 2017-01-10 21:59 schwarze Changed: mandocdb.c (1.235), "Exp", lines: +136 -131 mdoc_html.c (1.245), "Exp", lines: +2 -35 mdoc_man.c (1.99), "Exp", lines: +7 -7 mdoc_term.c (1.339), "Exp", lines: +18 -42 mdoc_validate.c (1.315), "Exp", lines: +43 -7 roff.c (1.287), "Exp", lines: +7 -3 For the .Ux/.Ox family of macros, do text production at the validation stage rather than in each and every individual formatter, using the new NODE_NOSRC flag. More rigorous and also ten lines less code. 2017-01-10 14:09 schwarze Changed: roff.c (1.286), "Exp", lines: +3 -9 simplify; NODE_ENDED does no harm in man(7) 2017-01-10 13:47 schwarze Changed: demandoc.c (1.28), "Exp", lines: +3 -3 man.c (1.167), "Exp", lines: +5 -5 man_html.c (1.121), "Exp", lines: +4 -4 man_macro.c (1.115), "Exp", lines: +6 -6 man_term.c (1.188), "Exp", lines: +9 -9 mdoc.c (1.258), "Exp", lines: +5 -5 mdoc_html.c (1.244), "Exp", lines: +19 -19 mdoc_macro.c (1.210), "Exp", lines: +31 -31 mdoc_man.c (1.98), "Exp", lines: +18 -18 mdoc_state.c (1.4), "Exp", lines: +2 -2 mdoc_term.c (1.338), "Exp", lines: +24 -24 mdoc_validate.c (1.314), "Exp", lines: +4 -4 roff.c (1.285), "Exp", lines: +9 -9 roff.h (1.39), "Exp", lines: +9 -12 tree.c (1.71), "Exp", lines: +7 -7 unify names of AST node flags; no change of cpp output 2017-01-10 12:53 schwarze Changed: mandoc.1 (1.169), "Exp", lines: +8 -2 mdoc_html.c (1.243), "Exp", lines: +4 -1 mdoc_man.c (1.97), "Exp", lines: +5 -2 mdoc_term.c (1.337), "Exp", lines: +13 -2 mdoc_validate.c (1.313), "Exp", lines: +16 -15 roff.h (1.38), "Exp", lines: +4 -2 tree.c (1.70), "Exp", lines: +5 -1 Introduce flags NODE_NOSRC and NODE_NOPRT for AST nodes. Use them to mark generated nodes and nodes that shall not produce output. Let -Ttree output mode display these new flags. Use NODE_NOSRC for .Ar, .Mt, and .Pa default arguments. Use NODE_NOPRT for .Dd, .Dt, and .Os. These will help to make handling of text production macros more rigorous. 2017-01-09 17:57 schwarze Changed: main.c (1.273.2.4), "Exp", lines: +6 -6 merge rev. 1.279: make "cat foo.mdoc | man -l" work 2017-01-09 17:49 schwarze Changed: main.c (1.279), "Exp", lines: +6 -6 tag.c (1.17), "Exp", lines: +3 -3 Use stdout rather than stdin for controlling the terminal such that "cat foo.mdoc | man -l" works. Issue reported by Christian Neukirchen <chneukirchen at gmail dot com> and also tested by him on Void Linux with both glibc and musl. The patch makes sense to millert@. 2017-01-09 14:10 schwarze Changed: mdoc.7 (1.260), "Exp", lines: +20 -8 Clarify how tabs after .It work because this is a really nasty trap for the unwary. Triggered by a question from Abhinav Upadhyay <er dot abhinav dot upadhyay at gmail dot com> (NetBSD) on discuss@. 2017-01-09 12:48 schwarze Changed: mdoc_html.c (1.242), "Exp", lines: +2 -2 The .No macro is not supposed to produce fixed-width font, it is not the same as .Li, so don't use <code>. Bug reported by <Anton dot Lindqvist at gmail dot com> on tech@. 2017-01-09 02:27 schwarze Changed: main.c (1.273.2.3), "Exp", lines: +3 -2 merge rev. 1.278: call new function mparse_updaterc() 2017-01-09 02:25 schwarze Changed: read.c (1.150.2.5), "Exp", lines: +8 -1 merge rev. 1.157: new function mparse_updaterc() 2017-01-09 02:24 schwarze Changed: read.c (1.150.2.4), "Exp", lines: +5 -3 merge rev.s 1.155 and 1.156: changes to the message catalogue 2017-01-09 02:21 schwarze Changed: read.c (1.150.2.3), "Exp", lines: +4 -2 merge rev. 1.154: improve message "whitespace at end of input line" 2017-01-09 01:37 schwarze Changed: main.c (1.278), "Exp", lines: +3 -2 mandoc.3 (1.38), "Exp", lines: +29 -4 mandoc.h (1.213), "Exp", lines: +2 -1 read.c (1.157), "Exp", lines: +8 -1 Warnings and errors that occur during mdoc_validate() or during man_validate() have to affect the mandoc(1) EXIT STATUS. Many thanks to <Yuri dot Pankov at gmail dot com> (illumos developer) for reporting this regression. 2017-01-08 22:51 schwarze Changed: mdoc_html.c (1.241), "Exp", lines: +9 -9 Indentation must be measured in units of the surrounding text, not in units of the contained text. Consequently, "display" and "lit" class tags must not be on the same element: First, "display" must set up the indentation, still using the outer units, and only after that, "lit" may change the font. This fixes .Bd -literal which got the wrong indentation. Bug reported by tb@. 2017-01-08 18:16 schwarze Changed: term.c (1.259), "Exp", lines: +15 -3 Fix an assertion failure caused by \z\[u00FF] with -Tps/-Tpdf. Reported by jsg@ after an afl(1) run long ago. 2017-01-08 16:38 schwarze Changed: html.c (1.193), "Exp", lines: +2 -2 style: missing blank between case statement and label; from Tiago Silva <tiagofilipesilva at icloud dot com> long ago 2017-01-08 02:01 schwarze Changed: mdoc_validate.c (1.312), "Exp", lines: +3 -2 Tolerate bare tabs in SYNOPSIS .Cd for now. It's used in half a dozen pages. Even though i have been thinking about it for years, i still can't suggest anything better. The false positives are annoying. 2017-01-08 00:11 schwarze Changed: mandoc.1 (1.168), "Exp", lines: +14 -7 mandoc.h (1.212), "Exp", lines: +4 -3 mdoc_validate.c (1.311), "Exp", lines: +19 -11 read.c (1.156), "Exp", lines: +4 -3 Stricter validation of the NAME section, in particular: - require a comma between names - reject all other text nodes - reject all empty Nm below NAME, not only in the leading position - reject Nm after Nd 2017-01-06 01:34 schwarze Changed: man.1 (1.20), "Exp", lines: +8 -8 mandoc.1 (1.167), "Exp", lines: +5 -5 sort options list; from jmc@ 2016-12-28 22:52 schwarze Changed: man.conf.5 (1.4), "Exp", lines: +2 -2 escape a macro name that is not intended to be called 2016-12-28 21:51 schwarze Changed: mandoc.1 (1.166), "Exp", lines: +3 -3 correct spelling error; from jmc@ 2016-12-28 17:34 schwarze Changed: mandoc.1 (1.165), "Exp", lines: +9 -2 mandoc.h (1.211), "Exp", lines: +2 -1 mdoc.7 (1.259), "Exp", lines: +5 -6 mdoc_validate.c (1.310), "Exp", lines: +19 -3 read.c (1.155), "Exp", lines: +2 -1 Make the second, section number argument of .Xr mandatory. In fact, we have been requiring it for many years. The only reason to not warn when it was missing was excessive traditionalism - it was optional in 4.4BSD. 2016-12-07 22:59 schwarze Changed: read.c (1.154), "Exp", lines: +4 -2 When reporting "whitespace at end of input line" on lines ending with roff(7) comments, let the column number in the message point to the end of the line rather than to the beginning of the comment. Improvement suggested by bluhm@. 2016-11-23 20:22 schwarze Changed: lib.in (1.19), "Exp", lines: +5 -1 sync with NetBSD: add four new libraries; triggered by a smaller patch from kamil@ via wiz@ 2016-11-19 15:24 schwarze Changed: Makefile (1.493), "Exp", lines: +11 -9 configure (1.54), "Exp", lines: +4 -2 configure.local.example (1.22), "Exp", lines: +16 -3 Do not install libmandoc.a by default. The only environment where it is ever needed is NetBSD base. Even NetBSD ports and pkgsrc should better not install it. Triggered by a question from bentley@. 2016-11-10 12:52 schwarze Changed: read.c (1.150.2.2), "Exp", lines: +12 -6 merge rev. 1.153: warn about trailing whitespace at the end of comments 2016-11-10 12:47 schwarze Changed: read.c (1.153), "Exp", lines: +12 -6 warn about trailing whitespace at the end of comments; missing feature noticed by jmc@ 2016-11-08 17:05 schwarze Changed: man.1 (1.19), "Exp", lines: +15 -3 document improved tagging functionality 2016-11-08 16:38 schwarze Changed: mdoc_term.c (1.336), "Exp", lines: +2 -2 use .Fn in custom sections for tagging, in addition to in DESCRIPTION; written on the TGV Paris-Strassbourg 2016-11-08 16:29 schwarze Changed: mdoc_term.c (1.335), "Exp", lines: +2 -1 tag leading .Dv, .Li, and .No in .It; written on the TGV Paris-Strassbourg 2016-11-08 16:23 schwarze Changed: mdoc_term.c (1.334), "Exp", lines: +25 -3 tag.c (1.16), "Exp", lines: +12 -4 implement tag priority 0, which will tag only keys that appear as tag candidates exactly once, and use it for .Em and .Sy; written on the TGV Toulouse-Paris 2016-11-08 16:04 schwarze Changed: mdoc_term.c (1.333), "Exp", lines: +4 -2 generate two tag entries from list entries of the form .It Macro tag1 ... | Macro tag2 ... written on the TGV Toulouse-Paris 2016-11-08 15:57 schwarze Changed: tag.c (1.15), "Exp", lines: +8 -2 skip leading \& and \e in tags 2016-11-08 15:28 schwarze Changed: tag.c (1.14), "Exp", lines: +39 -8 support more than one tag entry for the same search term; general idea discussed with bcook@ during l2k16 2016-10-22 10:13 schwarze Changed: mandocdb.c (1.220.2.4), "Exp", lines: +3 -2 merge 1.234: cast off_t and uint64_t for printf(3) 2016-10-22 10:09 schwarze Changed: dbm_map.c (1.7), "Exp", lines: +2 -2 mandocdb.c (1.234), "Exp", lines: +3 -2 cast off_t and uint64_t for printf(3) to make sure that widths match on all platforms; from Ed Maste <emaste at freebsd dot org>; OK guenther@ 2016-10-20 19:34 schwarze Changed: configure (1.43.2.7), "Exp", lines: +2 -1 fix sqlite3_errstr() autodetection if sqlite3 is in /usr/local 2016-10-20 18:52 schwarze Changed: configure (1.43.2.6), "Exp", lines: +27 -18 configure.local.example (1.14.2.5), "Exp", lines: +3 -2 mandocdb.c (1.220.2.3), "Exp", lines: +32 -15 merge reproducible build support including compat glue to 1.13 branch: mandocdb.c 1.231 & 1.232; configure 1.52 & 1.53; configure.local.example 1.21 2016-10-20 18:47 schwarze Changed: configure (1.53), "Exp", lines: +2 -2 typo in informational message: s/UTF_LOCALE/UTF8_LOCALE/ 2016-10-20 18:06 schwarze Changed: Makefile (1.488.2.3), "Exp", lines: +2 -1 add test-EFTYPE.c, related to configure rev. 1.43.2.5 2016-10-20 17:57 schwarze Changed: configure.local.example (1.14.2.4), "Exp", lines: +2 -1 add EFTYPE, corresponding to configure rev. 1.43.2.5 2016-10-20 17:51 schwarze Changed: configure (1.43.2.5), "Exp", lines: +4 -1 merge rev. 1.46: work around the lack of EFTYPE 2016-10-20 17:40 schwarze Changed: mandocdb.c (1.220.2.2), "Exp", lines: +2 -2 merge rev. 1.233: 0x%llu is a bad idea, make that 0x%llx 2016-10-20 17:35 schwarze Changed: mandocdb.c (1.220.2.1), "Exp", lines: +2 -2 merge rev. 1.226: fix a typo that prevented names from .Dt from getting priority over names from .Sh NAME 2016-10-20 16:31 schwarze Changed: mandocdb.c (1.233), "Exp", lines: +2 -2 0x%llu is a bad idea, make that 0x%llx; noticed while investigating a report from Ed Maste 2016-10-20 16:12 schwarze Changed: dbm_map.c (1.6), "Exp", lines: +2 -2 st_size is off_t, which is signed, so use %lld rather than %llu; noticed by Ed Maste when compiling on FreeBSD 2016-10-19 22:20 schwarze Changed: man.1 (1.18), "Exp", lines: +4 -8 Avoid the confusion that -a might require a section argument; it does not. Triggered by a question from <jmates at ee dot washington at edu>. OK jmc@. 2016-10-18 23:58 schwarze Changed: compat_fts.c (1.12), "Exp", lines: +61 -8 compat_fts.h (1.4), "Exp", lines: +5 -1 bring back support for sorting 2016-10-18 23:13 schwarze Changed: compat_fts.c (1.11), "Exp", lines: +12 -17 sync with OpenBSD 2016-10-18 22:44 schwarze Changed: read.c (1.150.2.1), "Exp", lines: +2 -2 merge ".Bl -tag without -width" fix to 1.13 branch 2016-10-18 22:27 schwarze Changed: dbm.c (1.5), "Exp", lines: +23 -19 The termination condition of the iteration logic in page_bymacro() was overzealous. Consequently, macro=substr and macro~regexp searches only returned all pages containing the first matching macro value, rather than all pages containing any of the matching macro values. Bug reported by tb@ - thanks! 2016-10-18 16:06 schwarze Changed: configure (1.52), "Exp", lines: +24 -15 configure.local.example (1.21), "Exp", lines: +3 -2 mandocdb.c (1.232), "Exp", lines: +9 -1 test-fts.c (1.4), "Exp", lines: +18 -1 Compat glue for the FreeBSD comparison function prototype for fts_open(3) which differs from what most other systems use. While here, improve diagnostic output of ./configure tests. 2016-10-18 16:01 schwarze Changed: Makefile.depend (1.25), "Exp", lines: +1 -1 update after rev. 1.5 of dba.c 2016-10-18 14:15 schwarze Changed: LICENSE (1.13), "Exp", lines: +4 -3 mandocdb.c (1.231), "Exp", lines: +26 -36 Simplify and correct support for reproducible builds, such that database entries come in a well-defined order even in the presence of MLINKS. Do this by using the compar() argument of fts_open(3) rather than trying to sort later, which missed some cases. This also shortens the code by a few lines. Diff from Ed Maste <emaste @ FreeBSD>, adapted to our tree and tweaked a bit by me, final version confirmed by Ed. 2016-10-11 17:30 schwarze Changed: mdoc.7 (1.258), "Exp", lines: +8 -2 link to http://mdocml.bsd.lv/mdoc/ below SEE ALSO; tweak and OK jmc@ 2016-10-09 18:16 schwarze Changed: mandoc.h (1.210), "Exp", lines: +2 -2 mdoc_term.c (1.332), "Exp", lines: +2 -2 mdoc_validate.c (1.309), "Exp", lines: +1 -82 read.c (1.152), "Exp", lines: +2 -2 Delete complicated code dealing with .Bl -tag without -width, and just let it default to -width 6n, which agrees with the traditional -width Ds that is still in widespread use. I just pushed a patch upstream to GNU roff that does the same for groff_mdoc(7). Before, groff contained code that was even more complicated than mandoc, but both resulted in quite different user-visible output. Now, both agree, and output is nicer for both. Useless complication noticed by Carsten Kunze (Heirloom roff). 2016-09-18 16:13 schwarze Changed: main.c (1.273.2.2), "Exp", lines: +49 -32 merge wide stream fixes from HEAD to 1.13, rev. 1.276 and 1.277 2016-09-18 15:47 schwarze Changed: main.c (1.277), "Exp", lines: +15 -5 We cannot use fputs(3) in passthrough() because the stdout stream might be in stdio wide orientation due to prior formatting of an unformatted manual in man -aTutf8 mode. So for now, use fflush(3) followed by unbuffered write(2) instead. Fixes output corruption on glibc discovered on Linux while testing a diff to fix a loosely related bug reported by <jmates at ee dot washington dot edu>. I detest the concept of stdio stream orientation. One day, i will rewrite term_ascii.c to always use narrow streams, even in UTF-8 output mode. But that's too much work for today. 2016-09-18 15:22 schwarze Changed: main.c (1.276), "Exp", lines: +35 -28 Make sure an output device is allocated before calling terminal_sepline(), fixing a NULL pointer access that happened when the first of multiple pages shown was preformatted, as in "man -a groff troff". Crash reported by <jmates at ee dot washington dot edu> on bugs@, thanks! 2016-09-13 12:09 schwarze Changed: TODO (1.222), "Exp", lines: +8 -1 minor tbl(7) column spacing and wrapping issues in lftp(1) 2016-09-12 00:06 schwarze Changed: cgi.c (1.141), "Exp", lines: +2 -2 use the proper HTML escape for double quote ("): " not "e; patch from bentley@ 2016-09-03 21:24 schwarze Changed: cgi.c (1.140), "Exp", lines: +4 -4 move zaurus down to the discontinued architectures 2016-09-02 14:03 schwarze Changed: mandocdb.c (1.230), "Exp", lines: +4 -4 When "makewhatis -d" tries to add to a database that doesn't (yet) exist, silently create it from scratch instead of printing a warning. The annoying warning message was reported by ajacoutot@, and espie@ convincingly argues that a non-existing database can be considered equivalent to an empty one. 2016-09-01 15:08 schwarze Changed: mandocdb.c (1.229), "Exp", lines: +2 -2 remove "sparc" from a comment 2016-09-01 15:07 schwarze Changed: cgi.c (1.139), "Exp", lines: +4 -4 move "sparc" down to discontinued architectures 2016-08-30 22:01 schwarze Changed: dbm.c (1.4), "Exp", lines: +16 -2 When the database is corrupt in the sense of containing invalid pointers in the pages table, do not access NULL pointers, but gracefully handle the errors. Similar patches will be needed for the macro tables, too. <attila at stalphonsos dot com> audited the code and pointed out to me that dbm_get() can return NULL for corrupted databases, but that isn't handled properly at various places. 2016-08-30 21:37 schwarze Changed: dbm_map.c (1.5), "Exp", lines: +6 -2 less confusing warning message about negative offsets 2016-08-28 16:15 schwarze Changed: mdoc_argv.c (1.109), "Exp", lines: +2 -2 If a line inside .Bl -column starts with a tab character and there was no preceding .It macro, do not read the byte before the beginning of the line buffer. Found by tb@ with afl@. 2016-08-22 16:15 schwarze Changed: mandocdb.c (1.228), "Exp", lines: +5 -5 When trying to edit an existing database with makewhatis(8) -d or -u but reading the database fails, report the full path to the database on standard error, and mention that the database is automatically recreated from scratch. Suggested by espie@. 2016-08-22 16:07 schwarze Changed: dbm_map.c (1.4), "Exp", lines: +9 -3 When running into a mandoc.db(5) file still using the obsolete format based on SQLite 3, say so in words that mortals can understand rather than babbling about hex magic. Suggested by espie@. 2016-08-20 17:59 schwarze Changed: mdoc_macro.c (1.209), "Exp", lines: +23 -14 When a mismatching end macro occurs while at least two nested blocks are open, all except the innermost open block got a bogus MDOC_ENDED marker, in some situations triggering segfaults down the road which tb@ found with afl(1). Fix the logic error by figuring out up front whether an end macro has a matching body, and if it hasn't, don't mark any blocks as broken. 2016-08-20 15:58 schwarze Changed: mdoc_macro.c (1.208), "Exp", lines: +2 -2 When scanning upwards for a column list to put a .Ta macro in, ignore body end markers of lists breaking other blocks. Fixing a logical error that caused a NULL deref found by tb@ with afl(1). 2016-08-20 14:43 schwarze Changed: mdoc.c (1.257), "Exp", lines: +20 -43 mdoc_validate.c (1.308), "Exp", lines: +34 -6 If a column list starts with implicit rows (that is, rows without .It) and roff-level nodes (e.g. tbl or eqn) follow, don't run into an assertion. Instead, wrap the roff-level nodes in their own row. Issue found by tb@ with afl(1). 2016-08-18 09:02 schwarze Changed: cgi.c (1.138), "Exp", lines: +2 -1 fix an fd leak; patch from jsg@ 2016-08-17 20:46 schwarze Changed: dba.c (1.8), "Exp", lines: +3 -6 dba.h (1.2), "Exp", lines: +2 -3 dba_read.c (1.4), "Exp", lines: +4 -5 mandocdb.c (1.227), "Exp", lines: +3 -2 When the content of a manual page does not specify a section, the empty string got added to the list of sections, breaking the database format slightly and causing the page to not be considered part of any section, not even if a section could be deduced from the directory or from the file name. Bug found due to the bogus pcredemo(3) "manual" in the pcre-8.38p0 package. 2016-08-17 18:59 schwarze Changed: dba.c (1.7), "Exp", lines: +3 -2 dba_read.c (1.3), "Exp", lines: +3 -4 When reading back a mandoc.db(5) file in order to apply incremental changes, do not prepend a stray NAME_FILE (0x10) byte to the first names of pages. Bug found while investigating another issue reported by sthen@. 2016-08-17 18:10 schwarze Changed: dba.c (1.6), "Exp", lines: +2 -2 Make sure manuals in architecture-independent directories are treated as architecture-independent even if they abuse the third (architecture) argument of the .Dt macro for random stuff like "freetds reference manual". While the .Dt syntax is not the same as the .TH syntax in man(7), punishing offenders by treating them as architecture-dependent and hence completely excluding them from searches is too severe. Problem reported by sthen@. 2016-08-11 13:30 schwarze Changed: mdoc_macro.c (1.207), "Exp", lines: +2 -2 Even after switching from a pending head to the body, we have to continue scanning upwards, because the enclosing block might already be pending as well, e.g. .Bl .Bl .It Bo .El .It. Tree corruption leading to a later NULL deref found by tb@ with afl(1). 2016-08-11 11:39 schwarze Changed: mdoc_validate.c (1.307), "Exp", lines: +3 -2 oops, fix stupid typo in previous 2016-08-11 10:47 schwarze Changed: mdoc_validate.c (1.306), "Exp", lines: +5 -4 If a .Bd display is on the one hand doomed to be deleted because it has no type, but is on the other hand breaking another block, delete its end marker as well, or the end marker may remain behind as an orphan, triggering an assertion in the terminal formatter. Problem found by tb@ with afl(1). 2016-08-10 20:17 schwarze Changed: mdoc_validate.c (1.305), "Exp", lines: +8 -5 Don't deref NULL if the only child of the first .Sh is an empty in-line macro, and don't printf("%s", NULL) if the first child of the first .Sh is a macro; again found by tb@ with afl(1). (No, you should never use macros in any .Sh at all, please.) 2016-08-10 18:39 schwarze Changed: cgi.c (1.137), "Exp", lines: +6 -5 move armish and hppa64 down in the dropdown box; reminded by jmc@ 2016-08-10 12:54 schwarze Changed: configure (1.43.2.4), "Exp", lines: +2 -2 merge tentative 'entering directory' fix for gmake to 1.13 branch 2016-08-10 12:50 schwarze Changed: configure (1.51), "Exp", lines: +2 -2 When trying to figure out which C compiler make(1) wants to use, pass it the POSIX -s option. On most systems, this won't make a difference, but Bdale Garbee reported that the make(1) on his Debian system, most likely some version of gmake, breaks Makefile.local by printing some 'entering directory' messages. I failed to reproduce and Bdale didn't report back, but judging from gmake source code, this is likely to help and unlikely to do harm elsewhere. 2016-08-10 12:29 schwarze Changed: mdoc_validate.c (1.304), "Exp", lines: +4 -3 Don't printf("%s", NULL) if .It has a macro as an argument in a list of a type where items don't takes arguments. Issue found by tb@ with afl(1). 2016-08-10 12:06 schwarze Changed: mdoc_validate.c (1.303), "Exp", lines: +2 -1 When validating a .Bl list that defaults to -item for want of a type, don't let a subsequent -width access mdoc_argnames[] out of bounds. Found by tb@ with afl(1). 2016-08-10 11:03 schwarze Changed: term.c (1.258), "Exp", lines: +6 -4 term_ps.c (1.82), "Exp", lines: +46 -58 Fix assertion failures caused by whitespace inside \o'' (overstrike) sequences that jsg@ found with afl(1): * Avoid writing \t\b in term.c. * Handle trailing \b in term_ps.c. 2016-08-09 15:15 schwarze Changed: main.c (1.273.2.1), "Exp", lines: +3 -2 backport to 1.13: fix printf("%s", NULL) 2016-08-09 15:09 schwarze Changed: main.c (1.275), "Exp", lines: +3 -2 mdoc_validate.c (1.302), "Exp", lines: +5 -4 fix printf("%s", NULL); found while investigating an unrelated bug report from jsg@ 2016-08-05 23:15 schwarze Added: test-be32toh.c (1.1) test-ntohl.c (1.1) Changed: Makefile (1.492), "Exp", lines: +4 -2 configure (1.50), "Exp", lines: +22 -1 configure.local.example (1.20), "Exp", lines: +4 -1 dba.c (1.5), "Exp", lines: +9 -1 dba_write.c (1.3), "Exp", lines: +7 -1 dbm.c (1.3), "Exp", lines: +7 -1 dbm_map.c (1.3), "Exp", lines: +7 -1 The concept of endianness seems to be somewhat newfangled, so the respective conversion functions are not yet properly standardized. Rumour has it that POSIX is working on it, though. For now, sprinkle some configuration glue. 2016-08-05 23:08 schwarze Changed: mansearch.c (1.68), "Exp", lines: +2 -0 Really protect <err.h> as already promised in the previous commit message. 2016-08-05 21:38 schwarze Changed: dba.c (1.4), "Exp", lines: +2 -1 missing <endian.h> reported by Bapt@iste Daroussin, found on FreeBSD 2016-08-05 17:22 schwarze Changed: mandocdb.c (1.226), "Exp", lines: +2 -2 fix a typo that prevented names from .Dt from getting priority over names from .Sh NAME 2016-08-04 09:33 schwarze Changed: dba_read.c (1.2), "Exp", lines: +2 -2 Fix an assertion failure that happened when trying to add a page with makewhatis -d to a completely empty database. Reported by Mark Patruck <mark at wrapped dot cx>, thanks! 2016-08-02 11:19 schwarze Changed: Makefile (1.488.2.2), "Exp", lines: +2 -1 configure (1.43.2.3), "Exp", lines: +3 -1 configure.local.example (1.14.2.3), "Exp", lines: +2 -1 1.13 backport: handle absence of PATH_MAX 2016-08-02 11:09 schwarze Added: test-PATH_MAX.c (1.1) Changed: Makefile (1.491), "Exp", lines: +3 -1 TODO (1.221), "Exp", lines: +8 -1 compat_fts.c (1.10), "Exp", lines: +4 -1 configure (1.49), "Exp", lines: +4 -1 configure.local.example (1.19), "Exp", lines: +3 -1 POSIX allows PATH_MAX to not be defined, meaning "unlimited". Found by Aaron M. Ucko <amu at alum dot mit dot edu> on the GNU Hurd, via Bdale Garbee, https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=829624 Also add EFTYPE at two places where it was forgotten. 2016-08-01 20:53 schwarze Changed: mandocdb.c (1.225), "Exp", lines: +4 -3 Repair makewhatis -t, regression in rev. 1.221 reported by naddy@. 2016-08-01 12:31 schwarze Changed: mansearch.h (1.27), "Exp", lines: +3 -3 Adjust MANDOC_DB and bump MANDOCDB_VERSION now that this was put into production in OpenBSD-current. 2016-08-01 12:27 schwarze Changed: mandoc.db.5 (1.5), "Exp", lines: +156 -84 document the new file format 2016-07-31 23:37 schwarze Changed: cgi.c (1.136), "Exp", lines: +3 -2 Some base system pages, for example perl(1), contain non-ASCII characters in their source code, so switch on charset autodetection in the same way as in man(1) itself. Issue reported by Pavan Maddamsetti at gmail dot com on bugs@. 2016-07-31 09:47 schwarze Changed: configure (1.43.2.2), "Exp", lines: +29 -2 configure.local.example (1.14.2.2), "Exp", lines: +8 -1 1.13 backport: autodetect UTF8_LOCALE 2016-07-31 09:29 schwarze Changed: TODO (1.220), "Exp", lines: +1 -11 configure (1.48), "Exp", lines: +29 -2 configure.local.example (1.18), "Exp", lines: +8 -1 term_ascii.c (1.54), "Exp", lines: +2 -2 test-wchar.c (1.4), "Exp", lines: +4 -4 Autodetect a suitable locale for -Tutf8 mode, and allow overriding it manually. Based on a patch from Svyatoslav Mishyn <juef at openmailbox dot org> tweaked by me. The idea originally came up in a conversation with Markus Waldeck. 2016-07-29 15:29 schwarze Changed: dba.c (1.3), "Exp", lines: +19 -7 Sort sections and architectures in the pages table. 2016-07-29 15:26 schwarze Changed: mandocdb.c (1.224), "Exp", lines: +27 -8 Sort pages in the pages table by file names. 2016-07-29 15:23 schwarze Changed: dba.c (1.2), "Exp", lines: +5 -2 mandocdb.c (1.223), "Exp", lines: +8 -25 No need to populate the TYPE_arch and TYPE_sec bits, the information is provided directly to dba_page_add() in dbadd_mlink() and to dba_page_new() in dbadd(). No need for a dedicated loop for NAME_FILE. It's done in dbadd_mlink() anyway. In this context, also record section numbers taken from filenames and from .Dt and .TH macros, architectures taken from .Dt macros, and fix the filtering of duplicate filename entries. 2016-07-20 14:14 schwarze Changed: Makefile (1.488.2.1), "Exp", lines: +2 -1 configure (1.43.2.1), "Exp", lines: +19 -1 configure.local.example (1.14.2.1), "Exp", lines: +11 -5 1.13 backport: Autodetect if -lrt is needed for nanosleep(3). 2016-07-20 14:03 schwarze Added: test-nanosleep.c (1.1) Changed: Makefile (1.490), "Exp", lines: +2 -1 configure (1.47), "Exp", lines: +19 -1 configure.local.example (1.17), "Exp", lines: +11 -5 Autodetect if -lrt is needed for nanosleep(3). Helpful for Solaris 9 and 10. Reminded by Thomas Klausner. 2016-07-20 13:03 schwarze Changed: tag.c (1.13), "Exp", lines: +2 -2 tag_signal() is dead; from LLVM via Christos Zoulas 2016-07-20 00:23 schwarze Added: test-EFTYPE.c (1.1) Changed: Makefile.depend (1.24), "Exp", lines: +9 -9 configure (1.46), "Exp", lines: +3 -0 dba_write.c (1.2), "Exp", lines: +5 -1 dbm.c (1.2), "Exp", lines: +5 -1 dbm_map.c (1.2), "Exp", lines: +5 -1 mansearch.c (1.67), "Exp", lines: +2 -1 mansearch.h (1.26), "Exp", lines: +2 -2 Linux compatibility: Work around the lack of EFTYPE and protect <err.h>. 2016-07-19 22:40 schwarze Changed: INSTALL (1.17), "Exp", lines: +10 -13 configure (1.45), "Exp", lines: +1 -19 configure.local.example (1.16), "Exp", lines: +4 -17 makewhatis.8 (1.4), "Exp", lines: +2 -4 mandocdb.c (1.222), "Exp", lines: +2 -3 manpath.c (1.31), "Exp", lines: +1 -52 Now that our man.conf(5) format is mature and extremely simple, delete manpath(1) support. With the mandoc-based man(1), manpath(1) is utterly useless. Just set MANPATH_DEFAULT in configure.local for sane operating system defaults, use man.conf(5) for machine- specific modifications, and use ${MANPATH}, -m, and -M for user preferences. 2016-07-19 21:31 schwarze Deleted: compat_sqlite3_errstr.c (1.5) mansearch_const.c (1.8) test-mmap.c (1.7) test-sqlite3.c (1.3) test-sqlite3_errstr.c (1.3) Added: dba.c (1.1) dba.h (1.1) dba_array.c (1.1) dba_array.h (1.1) dba_read.c (1.1) dba_write.c (1.1) dba_write.h (1.1) dbm.c (1.1) dbm.h (1.1) dbm_map.c (1.1) dbm_map.h (1.1) Changed: INSTALL (1.16), "Exp", lines: +5 -16 Makefile (1.489), "Exp", lines: +43 -38 Makefile.depend (1.23), "Exp", lines: +12 -8 TODO (1.219), "Exp", lines: +1 -7 configure (1.44), "Exp", lines: +5 -65 configure.local.example (1.15), "Exp", lines: +19 -48 main.c (1.274), "Exp", lines: +4 -25 mandocdb.c (1.221), "Exp", lines: +91 -368 mansearch.c (1.66), "Exp", lines: +469 -573 mansearch.h (1.25), "Exp", lines: +14 -7 read.c (1.151), "Exp", lines: +1 -7 Remove the dependency on SQLite without loss of functionality. Stop supporting systems that don't have mmap(3). Drop the obsolete names_check() now that we deleted MLINKS. 2016-07-19 17:56 schwarze Changed: configure.local.example (1.14), "Exp", lines: +2 -4 Remove one outdated comment and fix one typo noted by Jan Stary <hans at stare dot cz>. 2016-07-19 16:22 schwarze Changed: read.c (1.150), "Exp", lines: +3 -25 Since the mdoc/man parser unification, the parser is always allocated in mparse_alloc(), so delete all the curp->man == NULL checks. Triggered by a patch from Christos Zoulas suggesting to add yet another such check. 2016-07-19 13:36 schwarze Changed: configure (1.43), "Exp", lines: +3 -5 html.h (1.73), "Exp", lines: +3 -5 libmandoc.h (1.64), "Exp", lines: +3 -5 main.c (1.273), "Exp", lines: +1 -7 mandoc_aux.h (1.5), "Exp", lines: +3 -2 mandocdb.c (1.220), "Exp", lines: +5 -4 term_ps.c (1.81), "Exp", lines: +3 -5 Use __attribute__((__format__ throughout. Triggered by a smaller patch from Christos Zoulas. While here, unify style, move several config tests to config.h, and delete the useless MANDOC_CONFIG_H. 2016-07-18 18:35 schwarze Changed: test-ohash.c (1.5), "Exp", lines: +21 -3 test-vasprintf.c (1.4), "Exp", lines: +5 -2 cope with -Wmissing-prototypes 2016-07-15 19:33 schwarze Changed: main.c (1.272), "Exp", lines: +2 -2 main.h (1.26), "Exp", lines: +1 -3 To remove the const qualifier from a pointer to an object - either because we know it is actually mutable or because we are passing it to a function that doesn't accept a const object but won't actually attempt to modify it - simply casting from (const type *) to (type *) is legal C and clearly expresses the intent. So get rid of the obfuscating UNCONST macro. Basic idea discussed with guenther@. 2016-07-15 18:50 schwarze Changed: main.c (1.271), "Exp", lines: +3 -4 Fix previous: the mandocdb() prototype was already there, it just hid among static functions, as noticed by tedu@ (my bad). 2016-07-15 18:03 schwarze Changed: Makefile.depend (1.22), "Exp", lines: +3 -3 configure (1.42), "Exp", lines: +2 -1 main.c (1.270), "Exp", lines: +4 -1 man_hash.c (1.35), "Exp", lines: +3 -1 mandocdb.c (1.219), "Exp", lines: +4 -1 mdoc_argv.c (1.108), "Exp", lines: +2 -1 mdoc_hash.c (1.27), "Exp", lines: +3 -1 add missing prototypes, no code change; noticed by Christos Zoulas with -Wmissing-prototypes 2016-07-15 15:08 schwarze Changed: configure (1.41), "Exp", lines: +1 -1 Sanitize the environment when calling make(1) to autodetect ${CC}. Sevan Janiyan found during testing on AIX that ${CC} could leak in. 2016-07-14 11:09 tag VERSION_1_13_4 2016-07-14 11:09 schwarze Changed: INSTALL (1.15), "Exp", lines: +2 -2 NEWS (1.12), "Exp", lines: +29 -19 configure.local.example (1.13), "Exp", lines: +9 -1 final 1.13.4 release notes 2016-07-12 05:18 kristaps Added: test-sandbox_init.c (1.1) Changed: Makefile (1.488), "Exp", lines: +2 -1 configure (1.40), "Exp", lines: +3 -0 main.c (1.269), "Exp", lines: +9 -1 mandocdb.c (1.218), "Exp", lines: +11 -1 Add support for Mac OS X's sandbox_init(3) sandbox functionality, which is marked as DEPRECATED in OS X after 2011 or so, but has not been removed and has no replacement. ok schwarze@ 2016-07-11 22:48 schwarze Changed: cgi.c (1.135), "Exp", lines: +42 -17 man.cgi.8 (1.20), "Exp", lines: +5 -3 Make all components of the URI individually optional, independent of each other, as in: http://man.openbsd.org[/manpath][/mansec][/arch]/name[.sec] The restrictions in the past kept confusing people. Triggered by a question from RafaelNeves at gmail dot com. 2016-07-10 18:24 schwarze Changed: Makefile (1.487), "Exp", lines: +6 -6 configure (1.39), "Exp", lines: +2 -0 configure.local.example (1.12), "Exp", lines: +9 -2 support LDFLAGS; suggested by Christian Neukirchen <chneukirchen at gmail dot com> 2016-07-10 14:05 schwarze Changed: main.c (1.268), "Exp", lines: +3 -3 On OpenBSD, more(1) is actually less(1) with a small number of compatibility features - so we can safely use more -T on OpenBSD. But don't do that in the portable version: more -T is unlikely to work elsewhere. Issue reported by Svyatoslav Mishyn <juef at openmailbox dot org>. 2016-07-10 13:34 schwarze Changed: read.c (1.149), "Exp", lines: +2 -2 Fix a nasty typo that prevented .so links to gziped manuals from working in the absence of a mandoc.db(5) database. Found the hard way by Svyatoslav Mishyn on Crux Linux. 2016-07-10 10:05 schwarze Changed: Makefile (1.486), "Exp", lines: +1 -5 cgi.c (1.134), "Exp", lines: +4 -12 man.cgi.8 (1.19), "Exp", lines: +12 -13 Simplify the code and the server setup by deleting the pseudo-manpath "mandoc" that was used for man.cgi(8) documentation and by assuming that the apropos(1) and man.cgi(8) manuals are simply installed in the default manpath. Even though man.cgi(8) is not installed by default when installing OpenBSD, it is easy to copy it into the default manpath used for man.cgi(8). Idea found when considering a question asked by wrant dot com. 2016-07-09 19:58 schwarze Changed: cgi.c (1.133), "Exp", lines: +2 -2 Do not treat PATH_INFO as a complete path if it doesn't contain a manpath. For example, this makes http://man.openbsd.org/mandoc work as expected. Bug reported by tb@, reminded by Svyatoslav Mishyn. 2016-07-09 15:24 schwarze Changed: demandoc.c (1.27), "Exp", lines: +1 -2 mandocdb.c (1.217), "Exp", lines: +1 -2 manpage.c (1.14), "Exp", lines: +1 -2 mansearch.c (1.65), "Exp", lines: +1 -2 getopt(3) is declared in <unistd.h>, and <getopt.h> is not needed; from Joerg Sonnenberger via Thomas Klausner, NetBSD. 2016-07-08 22:29 schwarze Changed: main.c (1.267), "Exp", lines: +2 -2 main.h (1.25), "Exp", lines: +2 -2 term_ascii.c (1.53), "Exp", lines: +6 -7 ISO C99 7.19.2.5 doesn't like mixing putchar(3) and putwchar(3) on the same stream, and actually, it fails spectacularly on glibc. Portability issue pointed out by Svyatoslav Mishyn <juef at openmailbox dot org> after testing on Void Linux. 2016-07-08 20:46 schwarze Changed: Makefile (1.485), "Exp", lines: +6 -1 A some missing files to TESTSRCS and DISTFILES and add a trivial "dist" target for convenience. 2016-07-08 20:42 schwarze Changed: tag.c (1.12), "Exp", lines: +19 -7 POSIX requires that a process calling tcsetpgrp(3) from the background gets a SIGTTOU signal. In that case, do not stop. Portability issue found while testing on commercial Solaris 9/10/11. Thanks to opencsw.org for providing me with a testing environment. 2016-07-07 23:46 schwarze Changed: INSTALL (1.14), "Exp", lines: +3 -3 LICENSE (1.12), "Exp", lines: +2 -2 Makefile (1.484), "Exp", lines: +2 -2 NEWS (1.11), "Exp", lines: +124 -1 some 1.13.4 release preparations 2016-07-07 19:19 schwarze Changed: libmandoc.h (1.63), "Exp", lines: +1 -2 man.cgi.3 (1.2), "Exp", lines: +14 -9 mandoc.3 (1.37), "Exp", lines: +87 -96 mandoc_headers.3 (1.8), "Exp", lines: +92 -84 mandoc_malloc.3 (1.2), "Exp", lines: +10 -16 mchars_alloc.3 (1.4), "Exp", lines: +4 -3 update developer documentation 2016-07-07 14:35 schwarze Changed: mandoc.db.5 (1.4), "Exp", lines: +2 -3 sync with OpenBSD: do not mention mansearch(3), which is not installed, in a manual which is installed 2016-07-07 14:34 schwarze Changed: man.cgi.8 (1.18), "Exp", lines: +3 -5 sync with OpenBSD: do not talk about nginx(8) 2016-07-01 20:24 schwarze Changed: man.1 (1.17), "Exp", lines: +7 -31 Update and simplify the documentation of the -s option, which was forgotten when implementing the new man.conf(5) format. The outdated information was originally pointed out by Andy Bradford <amb dash openbsd at bradfords dot org> on misc@. OK jmc@ 2016-06-05 21:06 schwarze Changed: TODO (1.218), "Exp", lines: +1 -6 delete two entries that are done 2016-05-28 13:44 schwarze Changed: manpath.c (1.30), "Exp", lines: +5 -6 Trim trailing whitespace from man.conf lines; patch from millert@. 2016-05-28 13:40 schwarze Changed: cgi.c (1.132), "Exp", lines: +9 -28 man.cgi.8 (1.17), "Exp", lines: +11 -16 Simplify search form: minus two visible control elements, minus one table, minus twenty lines of code, no loss of functionality. No idea why i didn't do this earlier... 2016-05-18 23:51 schwarze Changed: Makefile (1.483), "Exp", lines: +7 -7 Delete useless variables that could sneak into the Makefile behind the user's back, dangerously bypassing ./configure. Leakage reported by Peter Bray <pdb_ml at yahoo dot com dot au>. 2016-05-18 22:36 schwarze Changed: main.c (1.266), "Exp", lines: +3 -3 Do not hardcode "makewhatis" in a warning message, use BINM_MAKEWHATIS. Patch from Peter Bray <pdb_ml at yahoo dot com dot au>. 2016-05-18 21:37 schwarze Changed: Makefile (1.482), "Exp", lines: +6 -6 configure (1.38), "Exp", lines: +33 -32 configure.local.example (1.11), "Exp", lines: +34 -13 Various people (among others Maxim Belooussov and Carsten Kunze) reported that the build system still assumed that ohash is only needed if sqlite3 is also in use, which is no longer true: The ohash library is now required no matter what. Rework sqlite3 and ohash library autodetection such that both work independently of each other. Provide LDADD for additional linker flags. Add some missing variables to configure.local.example. 2016-05-18 20:43 schwarze Changed: test-rewb-bsd.c (1.2), "Exp", lines: +1 -0 test-rewb-sysv.c (1.2), "Exp", lines: +1 -0 Linux needs <stddef.h>, or NULL isn't defined. 2016-04-29 10:45 schwarze Changed: cgi.c (1.131), "Exp", lines: +18 -9 Only focus on the query input box when no manual page is displayed, that is, for the index page, for the noresult page, and for the result of an apropos(1) query with more than one page. As noted by bentley@, when a manual page is displayed, it is more important that people can quickly use the space bar for paging and Ctrl-F for searching. 2016-04-28 17:59 schwarze Changed: cgi.c (1.130), "Exp", lines: +2 -2 Set the "autofocus" attribute on the query text box. Patch from Fabian dot Raetz at gmail dot com. 2016-04-15 21:20 schwarze Changed: Makefile (1.481), "Exp", lines: +3 -1 set up man.cgi(3) for inclusion in the web site 2016-04-15 21:16 schwarze Added: man.cgi.3 (1.1) document the internals of cgi.c for developers; not intended to be installed 2016-04-15 21:14 schwarze Changed: cgi.c (1.129), "Exp", lines: +16 -16 Rename five static functions to make the classification of functions as parsers, page generators, and result generators more obvious. No functional change. 2016-04-15 16:42 schwarze Changed: cgi.c (1.128), "Exp", lines: +19 -23 prefer warn[x](3) over fprintf(3) where appropriate 2016-04-15 15:13 schwarze Changed: cgi.c (1.127), "Exp", lines: +14 -18 Fix parsing of PATH_INFO if both a section directory and an architecture subdirectory are specified. Issue reported by tb@. 2016-04-15 01:34 schwarze Changed: cgi.c (1.126), "Exp", lines: +97 -97 Make HTML tags lower case for better stylistic agreement with what html.c does. 2016-04-15 00:51 schwarze Changed: cgi.c (1.125), "Exp", lines: +10 -10 In the architectures dropdown, move aviion, ia64, solbourne, and vax down to the currently unsupported entries. 2016-04-15 00:37 schwarze Changed: cgi.c (1.124), "Exp", lines: +4 -3 If PATH_INFO contains a complete and correct path to a manual page file, for example "/OpenBSD-5.9/man2/pledge.2", no database query is needed and the file is delivered directly. But even in this case, let's parse the PATH_INFO and fill the query structure such that the search form at the top of the result page gets pre-filled with useful values. 2016-04-15 00:14 schwarze Changed: cgi.c (1.123), "Exp", lines: +24 -21 omit list of other results when there is only one match 2016-04-14 23:48 schwarze Changed: cgi.c (1.122), "Exp", lines: +3 -7 for .Xr links, use short PATH_INFO style URIs 2016-04-14 20:55 schwarze Changed: main.c (1.265), "Exp", lines: +9 -3 Fix a process group race. It could occasionally happen that the child process spawned less(1) before the parent process passed the control of the terminal to the child, and in that case, less(1) sometimes complained "Stopped (tty output)". Issue reported by naddy@. 2016-04-14 20:40 schwarze Changed: cgi.c (1.121), "Exp", lines: +5 -2 do not rewrite short queries 2016-04-14 11:16 schwarze Changed: TODO (1.217), "Exp", lines: +6 -1 in -man -Thtml, .nf does not preserve indentation 2016-04-13 15:38 schwarze Changed: cgi.c (1.120), "Exp", lines: +15 -13 Give manuals in purely numerical sections priority over manuals of the same name in sections with an alphabetical suffix; same logic as in main.c rev. 1.264. 2016-04-13 12:26 schwarze Changed: main.c (1.264), "Exp", lines: +11 -9 Give manuals in purely numerical sections priority over manuals of the same name in sections with an alphabetical suffix (on OpenBSD, mostly 3p), restoring behaviour of the traditional BSD man(1) that got lost in the switch to the mandoc-based implementation. Issue reported by jsg@, using an idea by mikeb@ for the solution, and at least afresh1@ and jasper@ also seem in favour of the direction. 2016-04-13 10:19 schwarze Changed: mandoc.css (1.2), "Exp", lines: +3 -2 fix error page indentation: negative indent for h1 only in div.section issue reported by mikeb@ 2016-04-12 15:30 schwarze Changed: term.c (1.257), "Exp", lines: +2 -2 sed 's/the the/the/' in a comment; from krw@ 2016-03-19 13:29 schwarze Changed: man.cgi.8 (1.16), "Exp", lines: +2 -2 double word; from jmc@ 2016-03-18 13:22 schwarze Changed: cgi.c (1.119), "Exp", lines: +16 -24 cgi.h.example (1.5), "Exp", lines: +2 -1 man.cgi.8 (1.15), "Exp", lines: +51 -42 Make the SCRIPT_NAME logic simpler, safer, and make it actually work; in part based on ideas by bentley@. While here, improve the documentation. 2016-03-18 01:22 schwarze Changed: man.cgi.8 (1.14), "Exp", lines: +11 -2 document short URIs 2016-03-17 22:06 schwarze Changed: cgi.c (1.118), "Exp", lines: +3 -2 make man(1) mode the default rather than apropos(1) mode 2016-03-17 21:26 schwarze Changed: mandocdb.c (1.216), "Exp", lines: +2 -2 'accomodate' -> 'accommodate' in a comment. From krw@, started by a diff from Mical Mazurek. 2016-03-17 21:22 schwarze Changed: cgi.c (1.117), "Exp", lines: +69 -9 support short URIs for man.openbsd.org 2016-01-16 22:30 schwarze Changed: main.c (1.263), "Exp", lines: +2 -2 unbreak reading from stdin after recent parse() restructuring; patch from florian@ 2016-01-08 17:48 schwarze Changed: man_html.c (1.120), "Exp", lines: +3 -3 man_macro.c (1.114), "Exp", lines: +2 -2 man_term.c (1.187), "Exp", lines: +2 -2 man_validate.c (1.122), "Exp", lines: +10 -10 mandoc.3 (1.36), "Exp", lines: +3 -3 mandocdb.c (1.215), "Exp", lines: +10 -9 mdoc_html.c (1.240), "Exp", lines: +26 -25 mdoc_man.c (1.96), "Exp", lines: +25 -26 mdoc_term.c (1.331), "Exp", lines: +26 -25 mdoc_validate.c (1.301), "Exp", lines: +12 -14 roff.c (1.284), "Exp", lines: +1 -4 roff.h (1.37), "Exp", lines: +0 -1 Delete the redundant "nchild" member of struct roff_node, replacing most uses by one, a few by two pointer checks, and only one by a tiny loop - not only making data smaller, but code shorter as well. This gets rid of an implicit invariant that confused both static analysis tools and human auditors. No functional change. 2016-01-08 15:02 schwarze Changed: mandocdb.c (1.214), "Exp", lines: +4 -4 mansearch.c (1.64), "Exp", lines: +6 -6 Prefer warn(3) over perror(3) at the few places where it was used. It is useful to see the program name, and we have err.h compat in place anyway. Suggested by Christos Zoulas (NetBSD). 2016-01-08 02:53 schwarze Changed: demandoc.c (1.26), "Exp", lines: +2 -2 main.c (1.262), "Exp", lines: +5 -9 mandoc.3 (1.35), "Exp", lines: +4 -7 mandoc.h (1.209), "Exp", lines: +3 -3 mandocdb.c (1.213), "Exp", lines: +2 -3 read.c (1.148), "Exp", lines: +12 -12 Simplify the mparse_open() interface. Just return the file descriptor or -1 on error; there is just one kind of error anyway. Suggested by Christos Zoulas (NetBSD). 2016-01-08 02:13 schwarze Changed: demandoc.c (1.25), "Exp", lines: +2 -1 main.c (1.261), "Exp", lines: +4 -2 mandoc.3 (1.34), "Exp", lines: +7 -2 mandocdb.c (1.212), "Exp", lines: +2 -1 read.c (1.147), "Exp", lines: +2 -5 It was very surprising that a function called mparse_readfd() closed the file descriptor passed to it after completing its work, in particular considering the fact that it required its callers to call open(2) or mparse_open() beforehand. Change mparse_readfd() to not call close(2) and change the callers to call close(2) afterwards, more or less bringing open and close to the same level of the code and making review easier. Note that man.cgi(8) already did that, even though it was wrong in the past. Small restructuring suggested by Christos Zoulas (NetBSD). 2016-01-08 01:37 schwarze Changed: TODO (1.216), "Exp", lines: +6 -1 would be nice to warn about broken .Xr links... 2016-01-08 00:50 schwarze Changed: eqn.c (1.61), "Exp", lines: +2 -2 The root of an .EQ tree is always EQN_ROOT, never EQN_LIST, so delete a redundant NULL check that confused Coverity in CID 1257471; issue reported by wiz@, patch differs from what christos@ did in NetBSD. No functional change. 2016-01-07 21:03 schwarze Changed: term.c (1.256), "Exp", lines: +2 -2 This code wasted memory by allocating sizeof(enum termfont *) where only sizeof(enum termfont) is needed. Fixes CID 1288941. From christos@ via wiz@, both at NetBSD. 2016-01-07 20:19 schwarze Changed: eqn.c (1.60), "Exp", lines: +2 -1 Recursive "define" was not detected because "lim" was never incremented, causing infinite loops. Fixing CID 1288962. From christos@ via wiz@, both at NetBSD. 2016-01-04 14:44 schwarze Changed: mandocdb.c (1.211), "Exp", lines: +29 -14 Improve handling of .Va and .Vt macros. tedu@ noticed that no Vt= database entries were generated. Serguey Parkhomovsky suggested the deletion of parse_mdoc_body(). tb@ noticed that the fix requires more than just adding TYPE_Vt to the MDOC_Vt mask in the mdoc_handler array. 2016-01-04 12:45 schwarze Changed: html.c (1.192), "Exp", lines: +4 -4 mdoc_html.c (1.239), "Exp", lines: +2 -4 Generate simpler in-page links: just replace spaces with underscores. Patch from bentley@. 2016-01-04 12:36 schwarze Changed: cgi.c (1.116), "Exp", lines: +3 -56 Don't retain the search query in the resulting manual links. Clean, simple URLs are best. Patch from bentley@. 2015-12-23 20:50 schwarze Changed: term_ps.c (1.80), "Exp", lines: +3 -5 remove NULL-checks before free(); from mmcc@ 2015-12-15 17:38 schwarze Changed: main.c (1.260), "Exp", lines: +11 -6 mandocdb.c (1.210), "Exp", lines: +12 -9 pledge(2) style: Make sure to always use the idiom 'if (pledge("' such that it can easily be searched for. No functional change. Requested by deraadt@ some time ago. 2015-11-26 07:42 schwarze Changed: compat_err.c (1.4), "Exp", lines: +13 -1 configure (1.37), "Exp", lines: +1 -0 mansearch.c (1.63), "Exp", lines: +10 -7 No point in trying to go on when elementary database operations like preparing queries or binding variables fail; that won't yield useful results anyway but may generate huge pointless error messages. Issue reported by deraadt@. 2015-11-20 21:59 schwarze Changed: main.c (1.259), "Exp", lines: +42 -19 tag.c (1.11), "Exp", lines: +22 -5 tag.h (1.7), "Exp", lines: +3 -1 Fix multiple issues regarding process group and signal mask handling found by tb@ and millert@; parts of the code, in particular in tag.c, by millert@; OK millert@. 2015-11-14 23:57 schwarze Changed: main.c (1.258), "Exp", lines: +35 -5 Fix an issue reported by deraadt@: When hitting Ctrl-Backslash (= SIGQUIT) in the less(1) spawned by man(1), man(1) died uncleanly, leaving behind its temp files, and killed less(1) uncleanly as well with SIGPIPE, leaving the terminal in the wrong state. Fix this by giving less(1) its own process group and handing it control of the terminal, but in such a way that Ctrl-z (= SIGSTOP) still works: In that case, let man(1) stop itself, too, and let it continue the pager when it continues itself. Joint work with millert@ who contributed most of the expertise required, and also most parts of the code. OK deraadt@ millert@ 2015-11-12 22:44 schwarze Changed: mandoc.c (1.98), "Exp", lines: +32 -16 Simplify the logic in mandoc_normdate() and add some comments. Also add a comment in time2a() explaining why it isn't possible to use just one single call to strftime(). Do some style cleanup while here. No functional change. Triggered by a very different patch from des@FreeBSD. 2015-11-12 21:50 schwarze Changed: term_ascii.c (1.52), "Exp", lines: +10 -2 Never use LC_ALL. On the one hand, it can cause misformatting. On the other hand, it is a security risk because it might cause buffer overflows. Use LC_CTYPE only, that's all we need. 2015-11-07 21:53 schwarze Changed: Makefile (1.480), "Exp", lines: +4 -3 move compat_reallocarray.o into SOELIM_OBJS, no functional change 2015-11-07 21:38 schwarze Changed: Makefile (1.479), "Exp", lines: +6 -2 soelim(1) use getline(3) and err(3), and err(3) uses getprogname(3); found on Solaris 10 at OpenCSW 2015-11-07 21:31 schwarze Changed: configure (1.36), "Exp", lines: +3 -3 The sh(1) "test" builtin on Solaris 10 doesn't have -e, even though that's required by POSIX. Use -w and -r, that's just as good. 2015-11-07 20:52 schwarze Added: compat_getline.c (1.1) test-getline.c (1.1) Changed: Makefile (1.478), "Exp", lines: +4 -1 Makefile.depend (1.21), "Exp", lines: +1 -0 configure (1.35), "Exp", lines: +8 -1 provide a simple stand-alone implementation of getline(3) for systems lacking it 2015-11-07 17:58 schwarze Deleted: compat_fgetln.c (1.5) test-fgetln.c (1.4) Changed: LICENSE (1.11), "Exp", lines: +1 -4 Makefile (1.477), "Exp", lines: +1 -4 Makefile.depend (1.20), "Exp", lines: +1 -1 cgi.c (1.115), "Exp", lines: +23 -12 configure (1.34), "Exp", lines: +1 -8 main.c (1.257), "Exp", lines: +20 -24 mandocdb.c (1.209), "Exp", lines: +22 -18 manpage.c (1.13), "Exp", lines: +12 -7 manpath.c (1.29), "Exp", lines: +16 -10 Modernization, no functional change intended: Use the POSIX function getline(3) rather than the slightly dangerous BSD function fgetln(3). Remove the related compatibility code. 2015-11-07 14:22 schwarze Changed: compat_err.c (1.3), "Exp", lines: +1 -2 compat_stringlist.c (1.6), "Exp", lines: +3 -1 main.c (1.256), "Exp", lines: +3 -1 mandoc_aux.c (1.9), "Exp", lines: +3 -1 mandocdb.c (1.208), "Exp", lines: +3 -1 manpath.c (1.28), "Exp", lines: +3 -1 mansearch.c (1.62), "Exp", lines: +3 -1 read.c (1.146), "Exp", lines: +3 -1 soelim.c (1.5), "Exp", lines: +3 -1 term_ps.c (1.79), "Exp", lines: +3 -1 Without HAVE_ERR, don't try to include <err.h>, it probably isn't there. In that case, the required prototypes are in "config.h". Patch from Peter Bray <pdb_ml at yahoo dot com dot au>. 2015-11-07 14:01 schwarze Changed: INSTALL (1.13), "Exp", lines: +6 -1 compat_fts.h (1.3), "Exp", lines: +1 -2 compat_ohash.h (1.6), "Exp", lines: +1 -2 compat_stringlist.h (1.4), "Exp", lines: +2 -3 configure (1.33), "Exp", lines: +4 -15 html.h (1.72), "Exp", lines: +1 -4 libman.h (1.79), "Exp", lines: +1 -4 libmandoc.h (1.62), "Exp", lines: +1 -4 libmdoc.h (1.108), "Exp", lines: +1 -4 libroff.h (1.39), "Exp", lines: +1 -4 main.h (1.24), "Exp", lines: +1 -5 man.h (1.77), "Exp", lines: +1 -4 manconf.h (1.2), "Exp", lines: +0 -3 mandoc.h (1.208), "Exp", lines: +1 -4 mandoc_aux.h (1.4), "Exp", lines: +1 -5 mandoc_ohash.h (1.2), "Exp", lines: +1 -5 mansearch.h (1.24), "Exp", lines: +1 -4 mdoc.h (1.144), "Exp", lines: +1 -4 out.h (1.27), "Exp", lines: +1 -4 roff.h (1.36), "Exp", lines: +0 -3 roff_int.h (1.7), "Exp", lines: +1 -5 tag.h (1.6), "Exp", lines: +1 -4 term.h (1.118), "Exp", lines: +1 -4 In private header files, __BEGIN_DECLS and __END_DECLS are pointless. Because these work slightly differently on different systems, they are becoming a maintenance burden in the portable version, so delete them. Besides, one of the chief design goals of the mandoc toolbox is to make sure that nothing related to documentation requires C++. Consequently, linking mandoc against any kind of C++ program would defeat the purpose and is not supported. I don't understand why kristaps@ added them in the first place. 2015-11-07 13:14 schwarze Changed: Makefile (1.476), "Exp", lines: +1 -2 configure (1.32), "Exp", lines: +0 -3 configure.local.example (1.10), "Exp", lines: +1 -2 garbage collect unused EXAMPLEDIR, forgotten in the CSS cleanup; noticed by Peter Bray <pdb_ml at yahoo dot com dot au> 2015-11-07 13:05 schwarze Changed: Makefile (1.475), "Exp", lines: +5 -3 Install the soelim(1) binary and manual to the right places. Bug reported by Peter Bray <pdb_ml at yahoo dot com dot au>. 2015-11-06 21:19 schwarze Added: test-rewb-bsd.c (1.1) test-rewb-sysv.c (1.1) Changed: TODO (1.215), "Exp", lines: +1 -7 configure (1.31), "Exp", lines: +6 -0 mansearch.c (1.61), "Exp", lines: +8 -1 In ./configure, select a RE syntax for word boundaries supported by libc; issue reported by Svyatoslav Mishyn, Peter Bray, and Daniel Levai. 2015-11-06 17:33 schwarze Added: test-pledge.c (1.1) Changed: Makefile (1.474), "Exp", lines: +2 -1 configure (1.30), "Exp", lines: +3 -0 main.c (1.255), "Exp", lines: +21 -1 mandocdb.c (1.207), "Exp", lines: +23 -1 merge pledge(2) support from OpenBSD 2015-11-06 16:30 schwarze Added: compat_progname.c (1.1) Changed: Makefile (1.473), "Exp", lines: +3 -1 compat_err.c (1.2), "Exp", lines: +2 -4 configure (1.29), "Exp", lines: +5 -1 main.c (1.254), "Exp", lines: +19 -16 mandoc_aux.c (1.8), "Exp", lines: +1 -4 mandocdb.c (1.206), "Exp", lines: +4 -6 test-progname.c (1.2), "Exp", lines: +5 -4 Use getprogname(3) rather than __progname. Suggested by Joerg@ Sonnenberger (NetBSD). Last year, deraadt@ confirmed on tech@ that this "has the potential to be more portable", and micro-optimizing for speed is not relevant here. Also gets rid of one global variable. 2015-11-05 20:55 schwarze Changed: cgi.c (1.114), "Exp", lines: +20 -2 cgi.h.example (1.4), "Exp", lines: +0 -2 man.cgi.8 (1.13), "Exp", lines: +9 -9 Use include files "header.html" and "footer.html" rather than a compiled-in string. This is not a security risk, we read the file manpath.conf from the same directory, anyway. No error handling is needed; even if the files are absent, that's not an error. This is more flexible without causing complication of the code or the user interface. It helps the upcoming revamp of the online manual pages on man.NetBSD.org. Based on an idea by Jean-Yves Migeon <jeanyves dot migeon at free dot fr>, but implemented in a much simpler way. 2015-11-05 17:47 schwarze Deleted: example.style.css (1.56) man-cgi.css (1.8) style.css (1.32) Added: mandoc.css (1.1) Changed: Makefile (1.472), "Exp", lines: +5 -9 cgi.c (1.113), "Exp", lines: +3 -5 man.cgi.8 (1.12), "Exp", lines: +7 -9 mandoc.1 (1.164), "Exp", lines: +5 -5 Unify the three stylesheets into a single CSS file. Many thanks to bentley@ for doing this work. 2015-11-05 17:16 schwarze Changed: Makefile (1.471), "Exp", lines: +2 -2 demandoc(1) needs to link against -lutil, too 2015-11-05 16:58 schwarze Changed: NEWS (1.10), "Exp", lines: +2 -2 remove a stray iso-latin-1 character; noticed by bentley@ 2015-11-05 12:06 schwarze Changed: mdoc.7 (1.257), "Exp", lines: +7 -2 specify option ordering in the DESCRIPTION section; from guenther@, ok and tweaks jmc@ 2015-10-30 19:04 schwarze Changed: mandoc.1 (1.163), "Exp", lines: +9 -2 mandoc.h (1.207), "Exp", lines: +2 -1 mdoc.c (1.256), "Exp", lines: +2 -1 mdoc_validate.c (1.300), "Exp", lines: +11 -1 read.c (1.145), "Exp", lines: +2 -1 If a .Bd block has no arguments at all, drop the block and only keep its contents. Removing a gratuitious difference to groff output found after a related bug report from krw@. 2015-10-30 18:53 schwarze Changed: mdoc_state.c (1.3), "Exp", lines: +4 -1 Do not access a NULL pointer when a .Bd macro has no arguments at all. Bug reported by krw@. 2015-10-23 14:50 schwarze Changed: term.c (1.255), "Exp", lines: +2 -2 apply bold and italic to all non-ASCII Unicode codepoints, fixing input like \fB\('e; issue reported by bentley@ 2015-10-22 22:06 schwarze Changed: Makefile.depend (1.19), "Exp", lines: +1 -1 cgi.c (1.112), "Exp", lines: +5 -2 demandoc.c (1.24), "Exp", lines: +4 -2 mandocdb.c (1.205), "Exp", lines: +2 -1 use the new function man_validate() here, too 2015-10-22 21:54 schwarze Changed: libman.h (1.78), "Exp", lines: +3 -2 main.c (1.253), "Exp", lines: +2 -1 man.c (1.166), "Exp", lines: +36 -1 man.h (1.76), "Exp", lines: +3 -2 man_macro.c (1.113), "Exp", lines: +5 -19 man_validate.c (1.121), "Exp", lines: +17 -32 roff.c (1.283), "Exp", lines: +3 -3 roff_int.h (1.6), "Exp", lines: +1 -2 move man(7) validation into the dedicated validation phase, too 2015-10-22 21:03 schwarze Changed: main.c (1.252), "Exp", lines: +18 -16 If no output device was allocated because no file wanted to produce output, refrain from dereferencing a NULL pointer during final deallocation. Fixing a recent regression reported by czarkoff@ 2015-10-21 23:51 schwarze Changed: mdoc_state.c (1.2), "Exp", lines: +22 -2 mdoc_validate.c (1.299), "Exp", lines: +212 -242 roff.c (1.282), "Exp", lines: +13 -29 roff_int.h (1.5), "Exp", lines: +1 -3 Move all mdoc(7) node validation done before child parsing to the new separate validation pass, except for a tiny bit needed by the parser which goes to the new mdoc_state() module; cleaner, simpler, and surprisingly also shorter by 15 lines. 2015-10-20 02:01 schwarze Added: mdoc_state.c (1.1) Changed: Makefile (1.470), "Exp", lines: +3 -1 Makefile.depend (1.18), "Exp", lines: +2 -1 cgi.c (1.111), "Exp", lines: +5 -3 demandoc.c (1.23), "Exp", lines: +4 -3 libmdoc.h (1.107), "Exp", lines: +6 -2 main.c (1.251), "Exp", lines: +2 -1 mandocdb.c (1.204), "Exp", lines: +2 -1 mdoc.c (1.255), "Exp", lines: +11 -20 mdoc.h (1.143), "Exp", lines: +7 -1 mdoc_macro.c (1.206), "Exp", lines: +7 -13 mdoc_validate.c (1.298), "Exp", lines: +65 -130 roff.c (1.281), "Exp", lines: +9 -4 roff_int.h (1.4), "Exp", lines: +1 -2 In order to become able to generate syntax tree nodes on the roff(7) level, validation must be separated from parsing and rewinding. This first big step moves calling of the mdoc(7) post_*() functions out of the parser loop into their own mdoc_validate() pass, while using a new mdoc_state() module to make syntax tree state handling available to both the parser loop and the validation pass. 2015-10-19 20:04 schwarze Changed: mdoc_validate.c (1.297), "Exp", lines: +59 -56 style cleanup, no functional change 2015-10-19 19:51 schwarze Changed: main.c (1.250), "Exp", lines: +52 -36 Simplify, no functional change: Delete the outmdoc, outman, and outfree function pointers. 2015-10-19 18:58 schwarze Changed: mandoc_ohash.c (1.2), "Exp", lines: +2 -1 including <ohash.h> requires including <stdint.h> beforehand; noticed by Svyatoslav Mishyn <juef at openmailbox dot org> 2015-10-17 00:21 schwarze Changed: libmdoc.h (1.106), "Exp", lines: +2 -4 mdoc_argv.c (1.107), "Exp", lines: +46 -16 mdoc_macro.c (1.205), "Exp", lines: +29 -23 roff.h (1.35), "Exp", lines: +5 -2 Very tricky diff to fix macro interpretation and spacing around tabs in .Bl -column; it took me more than a day to get this right. Triggered by a loosely related bug report from tim@. The lesson for you is: Use .Ta macros in .Bl -column, avoid tabs, or you are in for surprises: The last word before a tab is not interpreted as a macro (unless there is a blank in between), the first word after a tab isn't either (unless there is a blank in between), and a blank after a tab causes a leading blank in the respective output cell. Yes, "blank", "tab", "blank tab" and "tab blank" all have different semantics; if you write code relying on that, good luck maintaining it afterwards... 2015-10-15 23:35 schwarze Changed: mandoc.c (1.97), "Exp", lines: +1 -3 roff.c (1.280), "Exp", lines: +1 -4 Delete two preprocessor constants that are no longer used. Patch from Michael Reed <m dot reed at mykolab dot com>. 2015-10-15 22:45 schwarze Changed: mdoc_argv.c (1.106), "Exp", lines: +28 -73 Simplify the part of args() that is handling .Bl -column phrases: Delete manual "Ta" handling because macro handling should not be done in an argument parser but should be left to the macro parsers, which exist anyway and work well. No functional change, minus 40 lines of code. Confusing and redundant code found while investigating an old bug report from tim@. 2015-10-15 22:27 schwarze Changed: mdoc_macro.c (1.204), "Exp", lines: +6 -1 When blk_full() handles an .It line in .Bl -column and indirectly calls phrase_ta() to handle a .Ta child macro, advance the body pointer accordingly, such that a subsequent tab character rewinds the right body block and doesn't fail an assertion. That happened when there was nothing between the .Ta and the tab character. Bug reported by tim@ some time ago. 2015-10-13 23:30 schwarze Changed: mandoc.c (1.96), "Exp", lines: +4 -1 Reject the escape sequences \[uD800] to \[uDFFF] in the parser. These surrogates are not valid Unicode codepoints, so treat them just like any other undefined character escapes: Warn about them and do not produce output. Issue noticed while talking to stsp@, semarie@, and bentley@. 2015-10-13 22:59 schwarze Deleted: chars.in (1.53) Changed: Makefile (1.469), "Exp", lines: +1 -2 Makefile.depend (1.17), "Exp", lines: +1 -1 cgi.c (1.110), "Exp", lines: +6 -8 chars.c (1.68), "Exp", lines: +400 -81 demandoc.c (1.22), "Exp", lines: +4 -5 html.c (1.191), "Exp", lines: +3 -5 html.h (1.71), "Exp", lines: +1 -2 libmandoc.h (1.61), "Exp", lines: +2 -3 main.c (1.249), "Exp", lines: +10 -18 main.h (1.23), "Exp", lines: +7 -14 mandoc.3 (1.33), "Exp", lines: +2 -12 mandoc.h (1.206), "Exp", lines: +6 -10 mandoc_headers.3 (1.7), "Exp", lines: +2 -19 mandocdb.c (1.203), "Exp", lines: +6 -8 mchars_alloc.3 (1.3), "Exp", lines: +11 -20 read.c (1.144), "Exp", lines: +3 -5 roff.c (1.279), "Exp", lines: +3 -5 term.c (1.254), "Exp", lines: +5 -8 term.h (1.117), "Exp", lines: +1 -2 term_ascii.c (1.51), "Exp", lines: +9 -12 term_ps.c (1.78), "Exp", lines: +7 -9 Major character table cleanup: * Use ohash(3) rather than a hand-rolled hash table. * Make the character table static in the chars.c module: There is no need to pass a pointer around, we most certainly never want to use two different character tables concurrently. * No need to keep the characters in a separate file chars.in; that merely encourages downstream porters to mess with them. * Sort the characters to agree with the mandoc_chars(7) manual page. * Specify Unicode codepoints in hex, not decimal (that's the detail that originally triggered this patch). No functional change, minus 100 LOC, and i don't see a performance change. 2015-10-13 15:53 schwarze Added: mandoc_ohash.c (1.1) mandoc_ohash.h (1.1) Changed: Makefile (1.468), "Exp", lines: +4 -1 Makefile.depend (1.16), "Exp", lines: +4 -3 mandocdb.c (1.202), "Exp", lines: +10 -52 mansearch.c (1.60), "Exp", lines: +3 -38 tag.c (1.10), "Exp", lines: +3 -41 Reduce the amount of code by moving the three copies of the ohash callback functions into one common place, preparing for the use of ohash for some additional purposes. No functional change. 2015-10-12 21:26 schwarze Changed: mdoc_validate.c (1.296), "Exp", lines: +1 -2 Delete an assignment that is unconditionally overwritten two lines later; found by Svyatoslav Mishyn <juef at openmailbox dot org> with the clang static analyzer. 2015-10-12 21:17 schwarze Changed: mandocdb.c (1.201), "Exp", lines: +3 -4 Garbage collect an unused variable, no functional change; found by Svyatoslav Mishyn <juef at openmailbox dot org> with cppcheck. 2015-10-12 21:09 schwarze Changed: mandoc_aux.c (1.7), "Exp", lines: +2 -2 Check the right pointer against NULL; fixing a pasto introduced in the previous commit; found by Svyatoslav Mishyn <juef at openmailbox dot org> with cppcheck. 2015-10-12 15:29 schwarze Changed: mdoc_term.c (1.330), "Exp", lines: +2 -2 Use "-" rather than "\(hy" for the heads of .Bl -dash and -hyphen lists. In UTF-8 output, that renders as ASCII HYPHEN-MINUS (U+002D) rather than HYPHEN (U+2010), which looks better and matches groff. In ASCII output, it makes no difference. Suggested by naddy@. 2015-10-12 00:32 schwarze Changed: mandocdb.c (1.200), "Exp", lines: +23 -20 Clear dform and dsec when exiting a first-level directory in treescan(). Fixes a segfault reported by bentley@. While here, do some style cleanup in the same function. 2015-10-12 00:15 schwarze Changed: html.c (1.190), "Exp", lines: +2 -2 Fix an obvious bug found during the /* FALLTHROUGH */ cleanup: ASCII_NBRSP has to be rendered as " ", not "-". 2015-10-12 00:08 schwarze Changed: html.c (1.189), "Exp", lines: +2 -11 main.c (1.248), "Exp", lines: +1 -6 man_term.c (1.186), "Exp", lines: +1 -11 man_validate.c (1.120), "Exp", lines: +0 -8 mandoc.c (1.95), "Exp", lines: +1 -32 mandocdb.c (1.199), "Exp", lines: +1 -7 mdoc.c (1.254), "Exp", lines: +1 -13 mdoc_html.c (1.238), "Exp", lines: +1 -55 mdoc_macro.c (1.203), "Exp", lines: +1 -11 mdoc_man.c (1.95), "Exp", lines: +1 -15 mdoc_term.c (1.329), "Exp", lines: +4 -55 mdoc_validate.c (1.295), "Exp", lines: +2 -23 out.c (1.62), "Exp", lines: +1 -5 roff.c (1.278), "Exp", lines: +1 -25 tbl_html.c (1.18), "Exp", lines: +1 -2 tbl_layout.c (1.41), "Exp", lines: +1 -5 tbl_term.c (1.43), "Exp", lines: +1 -6 term.c (1.253), "Exp", lines: +1 -5 term_ascii.c (1.50), "Exp", lines: +1 -3 term_ps.c (1.77), "Exp", lines: +1 -3 tree.c (1.69), "Exp", lines: +1 -6 To make the code more readable, delete 283 /* FALLTHROUGH */ comments that were right between two adjacent case statement. Keep only those 24 where the first case actually executes some code before falling through to the next case. 2015-10-11 22:00 schwarze Changed: tag.c (1.9), "Exp", lines: +2 -2 Drop tags containing a blank character: They don't work, they break other tags in weird ways, and even if they could be made to work, they would be mostly useless. Issue reported by naddy@, thanks. 2015-10-11 21:12 schwarze Added: compat_err.c (1.1) test-err.c (1.1) test-progname.c (1.1) Changed: LICENSE (1.10), "Exp", lines: +2 -2 Makefile (1.467), "Exp", lines: +6 -2 Makefile.depend (1.15), "Exp", lines: +2 -1 configure (1.28), "Exp", lines: +13 -0 main.c (1.247), "Exp", lines: +33 -50 mandoc_aux.c (1.6), "Exp", lines: +18 -25 mandocdb.c (1.198), "Exp", lines: +10 -17 manpath.c (1.27), "Exp", lines: +6 -9 mansearch.c (1.59), "Exp", lines: +17 -18 read.c (1.143), "Exp", lines: +9 -13 term_ps.c (1.76), "Exp", lines: +3 -2 Finally use __progname, err(3) and warn(3). That's more readable and less error-prone than fumbling around with argv[0], fprintf(3), strerror(3), perror(3), and exit(3). It's a bad idea to boycott good interfaces merely because standards committees ignore them. Instead, let's provide compatibility modules for archaic systems (like commercial Solaris) that still don't have them. The compat module has an UCB Copyright (c) 1993... 2015-10-11 18:56 schwarze Changed: mdoc.7 (1.256), "Exp", lines: +10 -6 Mention that the first argument of .Pf does not need escaping. While here, make the first sentence regarding .Pf more concise. OK jmc@ 2015-10-10 13:21 schwarze Changed: main.c (1.246), "Exp", lines: +6 -4 Decide whether to use_pager as early as possible, in preparation for pledge(2); no functional change intended. 2015-10-06 18:32 schwarze Changed: att.c (1.15), "Exp", lines: +2 -2 cgi.c (1.109), "Exp", lines: +19 -19 chars.c (1.67), "Exp", lines: +12 -12 compat_isblank.c (1.2), "Exp", lines: +2 -2 compat_mkdtemp.c (1.2), "Exp", lines: +5 -5 compat_sqlite3_errstr.c (1.4), "Exp", lines: +1 -1 compat_vasprintf.c (1.3), "Exp", lines: +3 -3 demandoc.c (1.21), "Exp", lines: +3 -3 eqn.c (1.59), "Exp", lines: +21 -21 html.c (1.188), "Exp", lines: +8 -8 lib.c (1.13), "Exp", lines: +2 -2 main.c (1.245), "Exp", lines: +21 -21 man.c (1.165), "Exp", lines: +11 -11 man_hash.c (1.34), "Exp", lines: +7 -6 man_html.c (1.119), "Exp", lines: +31 -31 man_macro.c (1.112), "Exp", lines: +3 -3 man_term.c (1.185), "Exp", lines: +33 -33 mandoc.c (1.94), "Exp", lines: +27 -26 mandoc_aux.c (1.5), "Exp", lines: +8 -8 mandocdb.c (1.197), "Exp", lines: +43 -43 manpage.c (1.12), "Exp", lines: +6 -6 mansearch.c (1.58), "Exp", lines: +24 -24 mdoc.c (1.253), "Exp", lines: +25 -25 mdoc_argv.c (1.105), "Exp", lines: +17 -17 mdoc_hash.c (1.26), "Exp", lines: +8 -7 mdoc_html.c (1.237), "Exp", lines: +96 -96 mdoc_macro.c (1.202), "Exp", lines: +25 -25 mdoc_man.c (1.94), "Exp", lines: +72 -72 mdoc_term.c (1.328), "Exp", lines: +79 -79 mdoc_validate.c (1.294), "Exp", lines: +47 -47 msec.c (1.15), "Exp", lines: +2 -2 out.c (1.61), "Exp", lines: +4 -4 preconv.c (1.15), "Exp", lines: +10 -10 read.c (1.142), "Exp", lines: +14 -14 roff.c (1.277), "Exp", lines: +129 -129 st.c (1.13), "Exp", lines: +2 -2 tag.c (1.8), "Exp", lines: +5 -5 tbl.c (1.40), "Exp", lines: +9 -9 tbl_data.c (1.41), "Exp", lines: +5 -5 tbl_html.c (1.17), "Exp", lines: +4 -3 tbl_layout.c (1.40), "Exp", lines: +2 -2 tbl_term.c (1.42), "Exp", lines: +3 -3 term.c (1.252), "Exp", lines: +7 -7 term_ascii.c (1.49), "Exp", lines: +10 -10 term_ps.c (1.75), "Exp", lines: +6 -6 test-dirent-namlen.c (1.2), "Exp", lines: +1 -1 test-fgetln.c (1.3), "Exp", lines: +1 -1 test-fts.c (1.3), "Exp", lines: +5 -5 test-getsubopt.c (1.4), "Exp", lines: +3 -3 test-isblank.c (1.2), "Exp", lines: +1 -1 test-mkdtemp.c (1.2), "Exp", lines: +2 -2 test-mmap.c (1.6), "Exp", lines: +1 -1 test-ohash.c (1.4), "Exp", lines: +2 -2 test-reallocarray.c (1.2), "Exp", lines: +1 -1 test-sqlite3.c (1.2), "Exp", lines: +5 -5 test-sqlite3_errstr.c (1.2), "Exp", lines: +1 -1 test-strcasestr.c (1.3), "Exp", lines: +1 -1 test-stringlist.c (1.2), "Exp", lines: +6 -6 test-strlcat.c (1.3), "Exp", lines: +2 -2 test-strlcpy.c (1.3), "Exp", lines: +2 -2 test-strptime.c (1.3), "Exp", lines: +2 -2 test-strsep.c (1.2), "Exp", lines: +1 -1 test-strtonum.c (1.2), "Exp", lines: +10 -10 test-vasprintf.c (1.3), "Exp", lines: +5 -5 test-wchar.c (1.3), "Exp", lines: +7 -7 modernize style: "return" is not a function 2015-10-06 15:33 schwarze Changed: mandoc.1 (1.162), "Exp", lines: +5 -4 improve wording and start a new sentence on a new line; from jmc@ 2015-09-29 18:45 schwarze Changed: TODO (1.214), "Exp", lines: +7 -1 Theo found a stray blank in HTML output. 2015-09-26 12:56 schwarze Changed: mandoc.1 (1.161), "Exp", lines: +42 -2 briefly document -T tree output 2015-09-26 12:55 schwarze Changed: tree.c (1.68), "Exp", lines: +18 -8 Show the flags MDOC_DELIMO, MDOC_DELIMC, MDOC_EOS, and MAN_EOS. Drop the "block-" prefixes from the node type names. 2015-09-26 00:54 schwarze Changed: html.c (1.187), "Exp", lines: +1 -2 man_html.c (1.118), "Exp", lines: +1 -2 man_macro.c (1.111), "Exp", lines: +1 -2 mdoc_html.c (1.236), "Exp", lines: +1 -6 mdoc_macro.c (1.201), "Exp", lines: +1 -2 mdoc_term.c (1.327), "Exp", lines: +1 -5 mdoc_validate.c (1.293), "Exp", lines: +1 -4 out.c (1.60), "Exp", lines: +1 -2 roff.c (1.276), "Exp", lines: +3 -4 tbl_opts.c (1.21), "Exp", lines: +1 -2 tbl_term.c (1.41), "Exp", lines: +1 -2 term.c (1.251), "Exp", lines: +1 -2 term_ascii.c (1.48), "Exp", lines: +1 -2 tree.c (1.67), "Exp", lines: +1 -5 /* NOTREACHED */ after abort() is silly, delete it 2015-09-26 00:32 schwarze Changed: mdoc_html.c (1.235), "Exp", lines: +5 -9 resolve code duplication and do style cleanup in mdoc_nm_pre(), no functional change 2015-09-26 00:22 schwarze Changed: mdoc_html.c (1.234), "Exp", lines: +4 -3 Fix multiple aspects of SYNOPSIS .Nm formatting: * Don't break lines before non-block .Nm elements. * Use proper <b> markup for the heads of .Nm blocks. * Make the width measurements work by doing them on the head children. 2015-09-24 18:41 schwarze Changed: mdoc.7 (1.255), "Exp", lines: +3 -3 roff.7 (1.75), "Exp", lines: +6 -6 typos; found and fixed by sobrado@ 2015-09-21 13:25 schwarze Changed: man_term.c (1.184), "Exp", lines: +3 -3 mdoc_term.c (1.326), "Exp", lines: +3 -3 term.c (1.250), "Exp", lines: +7 -1 term.h (1.116), "Exp", lines: +8 -7 Trailing whitespace is significant when determining the width of a tag in mdoc(7) .Bl -tag and man(7) .TP, but not in man(7) .IP. Quirk reported by Jan Stary <hans at stare dot cz> on ports@. 2015-09-21 09:59 schwarze Changed: man.1 (1.16), "Exp", lines: +2 -20 no more _subdir; Jan Stary <hans at stare dot cz> 2015-09-16 09:50 schwarze Changed: mandocdb.c (1.196), "Exp", lines: +3 -3 for portability, use (char *)NULL in execlp(3) as discussed on tech@ OpenBSD (didn't blow up anywhere yet, but better safe than sorry) 2015-09-14 20:10 schwarze Changed: mdoc.7 (1.254), "Exp", lines: +3 -3 Avoid .Ns right after .Pf, it's pointless. 2015-09-14 15:36 schwarze Changed: mandoc.1 (1.160), "Exp", lines: +2 -9 mandoc.h (1.205), "Exp", lines: +1 -2 mdoc_validate.c (1.292), "Exp", lines: +2 -25 read.c (1.141), "Exp", lines: +1 -2 Remove the warning about children of .Vt blocks because actually, .Vt type global_variable No = Dv defined_constant ; is the best way to specify in the SYNOPSIS how a global variable is initialized in the rare case where that matters. Issue noticed by jmc@. 2015-09-14 12:57 schwarze Changed: mdoc_term.c (1.325), "Exp", lines: +2 -2 The .Dv macro actually forces normal font. 2015-09-04 21:25 schwarze Changed: man.c (1.164), "Exp", lines: +15 -1 man_macro.c (1.110), "Exp", lines: +3 -3 Fill mode changes don't break next-line scope in all cases, in particular not for tagged paragraphs. Issue found by Christian Neukirchen <chneukirchen at gmail dot com> in the exiv2(1) manual page. 2015-09-02 15:38 schwarze Changed: mandoc_char.7 (1.63), "Exp", lines: +7 -7 Recommend an unambiguous escape for minus signs instead of \-. Historically, \- was used in troff for three cases: flags/pathnames, en dashes, and minus signs. mandoc_char(7) currently recommends it for minus signs, recommends \(en for en dashes, and doesn't mention flags/pathnames. In the old days, nroff rendered \- as ASCII '-', and troff rendered it as en dash/minus (which were visually indistinguishable). In Unicode, en dashes and minus signs are semantically distinct and encoded differently (U+2013 for en dash, U+2212 for minus), and often rendered differently too. Meanwhile ASCII '-' has been renamed "hyphen-minus" and fonts typically render it closest to a hyphen, not a minus. There is very little consistency across roff implementations and output formats for what Unicode character \- corresponds to. So at least for minus signs, change the recommendation to the unambiguous \(mi escape. from bentley@, ok jmc@ (after reams of discussion) 2015-08-30 21:10 schwarze Changed: term.c (1.249), "Exp", lines: +8 -2 Drop leading, internal, and trailing blank characters in \o (overstrike) escape sequences; that's cleaner for all output modes, and it's required to prevent the PostScript/PDF formatter from dying on assertions. Bug found by jsg@ with afl. 2015-08-30 19:00 schwarze Changed: mdoc_html.c (1.233), "Exp", lines: +3 -4 If an .Fo macro lacks its mandatory argument, don't die on an assertion. Bug found by jsg@ with afl. 2015-08-29 23:56 schwarze Changed: roff.c (1.275), "Exp", lines: +18 -17 If we have to reparse the text line because we spring an input line trap, we must not escape breakable hyphens yet, or mparse_buf_r() in read.c will complain and replace the escaped hyphens with question marks. Bug found in ocserv(8) following a report from Kurt Jaeger <pi at FreeBSD>. 2015-08-29 22:40 schwarze Changed: mandoc.c (1.93), "Exp", lines: +5 -1 roff.7 (1.74), "Exp", lines: +9 -3 Parse and ignore the escape sequences \, and \/ (italic corrections). Actually using these is very stupid because they are groff extensions and other roff(7) implementations typically print unintended characters at the places where they are used. Nevertheless, some manuals contain them, for example ocserv(8). Problem reported by Kurt Jaeger <pi at FreeBSD>. 2015-08-29 21:37 schwarze Changed: roff.7 (1.73), "Exp", lines: +4 -2 roff.c (1.274), "Exp", lines: +27 -16 Implement the escape sequence \\$*, expanding to all arguments of the current user-defined macro. This is another missing feature required for ocserv(8). Problem reported by Kurt Jaeger <pi at FreeBSD>. 2015-08-29 20:26 schwarze Changed: roff.c (1.273), "Exp", lines: +19 -9 Minimal implementation of the read-only number register \n(.$ which returns the number of arguments of the current macro. This is one of the missing features required for ocserv(8). Problem reported by Kurt Jaeger <pi at FreeBSD>. 2015-08-29 15:28 schwarze Changed: tag.c (1.7), "Exp", lines: +4 -1 Including <ohash.h> requires including <stdint.h> before, and "config.h" was missing as well. Patch from Svyatoslav Mishyn <juef and openmailbox dot org>, Crux Linux. 2015-08-29 15:10 schwarze Changed: TODO (1.213), "Exp", lines: +15 -1 tedu@ reports tbl(7) issues in synaptics(4) 2015-07-28 18:38 schwarze Changed: main.c (1.244), "Exp", lines: +33 -62 tag.c (1.6), "Exp", lines: +57 -20 tag.h (1.5), "Exp", lines: +9 -2 Remove the hack of scrolling forward and backward with +G1G that many (jmc@, millert@, espie@, deraadt@) considered revolting. Instead, when using a pager, since we are using a temporary file for tags anyway, use another temporary file for the formatted page(s), as suggested by millert@ and similar to what the traditional BSD man(1) did, except that we use only one single temporary output file rather than one for each formatted manual page, such that searching (both with / and :t) works across all the displayed files. 2015-07-25 14:28 schwarze Changed: mdoc_term.c (1.324), "Exp", lines: +7 -11 tag.c (1.5), "Exp", lines: +10 -32 tag.h (1.4), "Exp", lines: +2 -3 Simplify and make tag_put() more efficient by integrating tag_get() into it and by only handling NUL-terminated strings. Minus 25 lines of code, no functional change. 2015-07-25 14:23 schwarze Changed: mdoc_term.c (1.323), "Exp", lines: +16 -2 implement tagging for .Er 2015-07-25 14:18 schwarze Changed: mdoc_term.c (1.322), "Exp", lines: +18 -3 basic tag support for function names; written at YYC 2015-07-25 14:02 schwarze Changed: mdoc_term.c (1.321), "Exp", lines: +3 -3 tag.c (1.4), "Exp", lines: +6 -4 tag.h (1.3), "Exp", lines: +3 -3 basic support for tag priorities; written at YYC 2015-07-21 03:26 schwarze Changed: main.c (1.243), "Exp", lines: +12 -9 tag.c (1.3), "Exp", lines: +3 -9 tag.h (1.2), "Exp", lines: +2 -3 When creation of the temporary tags file fails, call the pager without the -T option, because otherwise the pager won't even start. Fixing a bug reported by jca@. While here, shorten the code by two lines and delete one internal interface function. 2015-07-19 06:05 schwarze Changed: INSTALL (1.12), "Exp", lines: +5 -4 Makefile (1.466), "Exp", lines: +2 -2 configure (1.27), "Exp", lines: +2 -2 main.c (1.242), "Exp", lines: +1 -5 mandoc.3 (1.32), "Exp", lines: +8 -44 mandoc.h (1.204), "Exp", lines: +1 -2 mandocdb.c (1.195), "Exp", lines: +1 -5 read.c (1.140), "Exp", lines: +33 -83 Do not fork and exec gunzip(1), just link with libz instead. As discussed with deraadt@, that's cleaner and will help tame(2). Something like this was also suggested earlier by bapt at FreeBSD. Minus 50 lines of code, deleting one interface function (mparse_wait), no functional change intended. 2015-07-19 00:07 schwarze Changed: main.c (1.241), "Exp", lines: +6 -3 If we aren't on a tty, clear the pager flag up front. Just to clean up code structure, no functional change. 2015-07-18 05:47 schwarze Changed: main.c (1.240), "Exp", lines: +2 -2 Insist that manual page file name extensions must begin with a digit, lest pkg.conf(5) be shown when pkg(5) is asked for; issue reported by Michael Reed <m dot reed at mykolab dot com>. 2015-07-18 03:43 schwarze Changed: TODO (1.212), "Exp", lines: +8 -1 another portability todo 2015-07-18 03:41 schwarze Changed: tag.c (1.2), "Exp", lines: +17 -1 clean up the temporary file when the process dies from a signal 2015-07-17 22:38 schwarze Added: tag.c (1.1) tag.h (1.1) Changed: Makefile (1.465), "Exp", lines: +4 -1 Makefile.depend (1.14), "Exp", lines: +3 -2 main.c (1.239), "Exp", lines: +44 -27 man.1 (1.15), "Exp", lines: +9 -2 mdoc_term.c (1.320), "Exp", lines: +22 -2 term.h (1.115), "Exp", lines: +2 -1 term_ascii.c (1.47), "Exp", lines: +5 -1 Initial, still somewhat experimental implementation to leverage less(1) -T and :t ctags(1)-like functionality to jump to the definitions of various terms inside manual pages. To be polished in the tree, so bear with me and report issues. Technically, if less(1) is used as a pager, information is collected by the mdoc(7) terminal formatter, first stored using the ohash library, then ultimately written to a temporary file which is passed to less via -T. No change intended for other output formatters or when running without a pager. Based on an idea from Kristaps using feedback from many, in particular phessler@ nicm@ millert@ halex@ doug@ kspillner@ deraadt@. 2015-07-14 23:16 schwarze Changed: Makefile (1.464), "Exp", lines: +4 -4 Makefile.depend (1.13), "Exp", lines: +4 -21 Fix the "depend" target and regenerate Makefile.depend: * do not process the test-*.c files, they are not built via make * add the missing compat_stringlist.c and soelim.c * read.c now uses roff_int.h * roff.c no longer uses libmdoc.h 2015-07-14 19:40 schwarze Changed: TODO (1.211), "Exp", lines: +5 -1 headers should not contain macros 2015-06-27 13:29 schwarze Changed: roff.c (1.272), "Exp", lines: +3 -1 Ignore blank characters at the beginning of a conditional block, that is, after "\{". Issue found by Markus <Waldeck at gmx dot de> in bash(1). 2015-06-26 16:56 schwarze Changed: TODO (1.210), "Exp", lines: +11 -23 delete some TODO entries that were already fixed 2015-06-18 01:02 schwarze Changed: TODO (1.209), "Exp", lines: +6 -1 nice idea for eqn(7) from CDBUG. 2015-06-10 22:26 schwarze Changed: TODO (1.208), "Exp", lines: +11 -1 two new tasks i heard about at BSDCan 2015-06-10 19:26 schwarze Changed: manpath.c (1.26), "Exp", lines: +5 -1 Avoid warning "defined but not used" when compiling with HAVE_MANPATH. Issue found on Debian by Markus <Waldeck at gmx dot de>. 2015-06-10 19:17 schwarze Changed: term_ascii.c (1.46), "Exp", lines: +3 -1 Avoid warning "unused variable" when compiling without HAVE_WCHAR. Issue found on Debian by Markus <Waldeck at gmx dot de>. 2015-05-31 23:13 schwarze Changed: roff.7 (1.72), "Exp", lines: +7 -4 roff.c (1.271), "Exp", lines: +32 -6 Implement the roff(7) `r' (register exists) conditional. Missing feature found by Markus <Waldeck at gmx dot de> in Debian's bash(1) manual page. 2015-05-21 00:18 schwarze Changed: soelim.c (1.4), "Exp", lines: +2 -1 This one needs config.h too, if only for __BEGIN_DECLS. Found on Solaris 11 in the OpenCSW cluster. 2015-05-21 00:13 schwarze Changed: compat_stringlist.c (1.5), "Exp", lines: +11 -1 add forgotten glue 2015-05-21 00:04 schwarze Changed: Makefile (1.463), "Exp", lines: +3 -3 Link compat_reallocarray.o into soelim; needed on platforms having neither stringlist nor compat_reallocarray. 2015-05-20 23:43 schwarze Changed: LICENSE (1.9), "Exp", lines: +3 -4 compat_stringlist.c (1.4), "Exp", lines: +1 -3 compat_stringlist.h (1.3), "Exp", lines: +1 -6 Remove clauses 3 and 4 from Christos Zoulas' BSD license. This is safe because Christos did that himself in NetBSD in 2008. No code change. 2015-05-20 23:00 schwarze Changed: compat_stringlist.c (1.3), "Exp", lines: +4 -3 fix integer overflows by using reallocarray(3) 2015-05-20 22:59 schwarze Changed: soelim.1 (1.3), "Exp", lines: +9 -5 * fix roff terminology in .Nd * remove .Xr to self * add AUTHORS section 2015-05-20 22:57 schwarze Changed: soelim.c (1.3), "Exp", lines: +3 -3 Use PATH_MAX rather than the non-standard MAXPATHLEN. 2015-05-20 22:22 schwarze Added: test-stringlist.c (1.1) Changed: LICENSE (1.8), "Exp", lines: +12 -3 Makefile (1.462), "Exp", lines: +16 -4 compat_stringlist.c (1.2), "Exp", lines: +6 -14 compat_stringlist.h (1.2), "Exp", lines: +2 -8 configure (1.26), "Exp", lines: +9 -3 configure.local.example (1.9), "Exp", lines: +7 -6 soelim.1 (1.2), "Exp", lines: +3 -3 soelim.c (1.2), "Exp", lines: +10 -9 * remove FreeBSDisms * purge and sort headers * add build and compat glue * and LICENSE information for soelim(1) 2015-05-20 20:55 tag bapt_150504 2015-05-20 20:55 schwarze Added: compat_stringlist.c (1.1) compat_stringlist.h (1.1) soelim.1 (1.1) soelim.c (1.1) Initial revision 2015-05-20 20:55 schwarze Changed: compat_stringlist.c (1.1.1.1), "Exp", lines: +0 -0 compat_stringlist.h (1.1.1.1), "Exp", lines: +0 -0 soelim.1 (1.1.1.1), "Exp", lines: +0 -0 soelim.c (1.1.1.1), "Exp", lines: +0 -0 import bapt's original soelim(1) sources 2015-05-07 12:08 schwarze Changed: manpath.c (1.25), "Exp", lines: +8 -6 Do not let the -m option or MANPATH with leading, trailing, or double colon override the default manpath, let them add to the default manpath. Only override the default manpath by the -M option, by MANPATH without leading, trailing, or double colon, or by "manpath" in man.conf(5). Problem reported by Jan Stary <hans at stare dot cz>. Patch OK'ed by millert@. 2015-05-01 16:58 schwarze Changed: mdoc_macro.c (1.200), "Exp", lines: +2 -2 mdoc_valid_post() may indirectly call roff_node_unlink() which may set ROFF_NEXT_CHILD, which is desirable for the final call to mdoc_valid_post() - in case the target itself gets deleted, the parse point may need this adjustment - but not for the intermediate calls - if intermediate nodes get deleted, that mustn't clobber the parse point. So move setting ROFF_NEXT_SIBLING to the proper place in rew_last(). This fixes the assertion failure in jsg@'s afl test case 108/Apr27. 2015-05-01 16:02 schwarze Changed: mdoc_macro.c (1.199), "Exp", lines: +2 -4 roff.c (1.270), "Exp", lines: +2 -1 Setting the "last" member of struct roff_node was done at an extremely weird place. Move it to the obviously correct place. Surprisingly, this didn't cause any misformatting in the test suite or in any base system manuals, but i cannot believe the code was really correct for all conceivable input, and it would be very hard to verify. At the very least, it cannot have worked for man(7). 2015-05-01 15:27 schwarze Changed: mdoc_macro.c (1.198), "Exp", lines: +2 -2 Minor bug fix: When .Pp rewinds .Nm, rewind the whole block, not just the body. In some unusual edge cases, this caused the .Pp to become a sibling of the .Nm body inside the .Nm block. 2015-04-29 21:58 schwarze Changed: mdoc_macro.c (1.197), "Exp", lines: +4 -2 If a block body gets broken, that's no good reason to extend the scope of the end macro. Instead, only keep the tail scope open if the end macro macro calls an explicit macro and actually breaks that. This corrects syntax tree structure and fixes an assertion found by jsg@ with afl (test case 098/Apr27). 2015-04-29 18:35 schwarze Changed: roff.7 (1.71), "Exp", lines: +3 -6 term.c (1.248), "Exp", lines: +27 -43 term.h (1.114), "Exp", lines: +9 -8 Replace the kludge for the \z escape sequence by an actual implementation. As a side effect, minus ten lines of code. As another side effect, this also fixes the assertion failure that used to be triggered by "\z\o'ab'c" at the beginning of an output line, found by jsg@ with afl (test case 022/Apr27). 2015-04-29 14:48 schwarze Changed: mdoc_macro.c (1.196), "Exp", lines: +3 -1 Do not mark a block with the MDOC_BROKEN flag if it merely contains a mismatching explicit end macro without actually being broken. Avoids a subsequent upward search for the non-existent breaker ending up in a NULL pointer access; afl test case 005/Apr27 from jsg@. 2015-04-29 12:44 schwarze Changed: tbl_layout.c (1.39), "Exp", lines: +2 -1 When the last line of a table layout turns out to be empty, it is deleted. Do not just free the struct tbl_row but also make sure that no pointer to it remains. Fixing a use after free found by jsg@ with afl. 2015-04-29 11:04 schwarze Changed: main.c (1.238), "Exp", lines: +3 -3 Improve the error message in case somebody has configured an invalid PAGER. Suggested by Lorenzo Beretta <lory dot fulgi at infinito dot it>. 2015-04-28 16:13 schwarze Changed: manpath.c (1.24), "Exp", lines: +2 -2 Fix the HAVE_MANPATH case, got broken in rev. 1.23. Patch from Steffen Nurpmeso <sdaoden at yandex dot com>, thanks. 2015-04-23 16:17 schwarze Changed: man.c (1.163), "Exp", lines: +1 -47 man.h (1.75), "Exp", lines: +1 -2 mandocdb.c (1.194), "Exp", lines: +3 -3 mdoc.c (1.252), "Exp", lines: +1 -40 mdoc.h (1.142), "Exp", lines: +1 -9 mdoc_validate.c (1.291), "Exp", lines: +5 -5 roff.c (1.269), "Exp", lines: +47 -1 roff.h (1.34), "Exp", lines: +6 -0 Unify mdoc_deroff() and man_deroff() into a common function deroff(). No functional change except that for mdoc(7), it now skips leading escape sequences just like it already did for man(7). Escape sequences rarely occur in mdoc(7) code and if they do, skipping them is an improvement in this context. Minus 30 lines of code. 2015-04-23 15:35 schwarze Changed: libman.h (1.77), "Exp", lines: +1 -2 libmdoc.h (1.105), "Exp", lines: +1 -2 man.c (1.162), "Exp", lines: +1 -8 man_macro.c (1.109), "Exp", lines: +2 -3 mdoc.c (1.251), "Exp", lines: +1 -8 mdoc_macro.c (1.195), "Exp", lines: +2 -2 Get rid of two empty wrapper functions. No functional change. 2015-04-21 16:14 schwarze Changed: mdoc_macro.c (1.194), "Exp", lines: +16 -13 Avoid a use after free when the target node is deleted during validation. Bug reported by jsg@. 2015-04-20 09:54 schwarze Changed: main.c (1.237), "Exp", lines: +10 -6 Fix previous: Don't let man(1) warn twice about non-existant names. Again noticed by deraadt@. 2015-04-20 09:48 schwarze Changed: mdoc_validate.c (1.290), "Exp", lines: +3 -2 Avoid out-of-bounds read access before the beginning of the mdoc_macros[] array. This sometimes prevented proper warnings about text nodes preceding the first section header. 2015-04-19 20:35 schwarze Changed: tbl_data.c (1.40), "Exp", lines: +3 -2 More than one data field may follow T} on the same input line. Issue found by Christian Neukirchen <chneukirchen at gmail dot com> in the socket(2) manual on Linux. Also fixes major rendering bugs (including partial loss of content) in XkbChangeControls(3), XkbFreeClientMap(3), XkbGetMap(3), XkbKeyNumGroups(3), and XkbSetMap(3). 2015-04-19 19:44 schwarze Changed: man_term.c (1.183), "Exp", lines: +12 -1 If an explicit line break request (.br or .sp) occurs within an .HP block, the next line doesn't hang, but is simply indented. Issue found by Christian Neukirchen <chneukirchen at gmail dot com> in the dmsetup(8) manual on Linux. This patch also improves the indentation of XDGA(3) and XrmGetResource(3). 2015-04-19 15:10 schwarze Changed: main.c (1.236), "Exp", lines: +3 -1 If apropos(1) finds no match, print "nothing appropriate" to stderr similar to what the old apropos did. Requested by and OK deraadt@. 2015-04-19 14:57 schwarze Changed: libman.h (1.76), "Exp", lines: +1 -3 man.c (1.161), "Exp", lines: +2 -22 man_macro.c (1.108), "Exp", lines: +4 -5 mdoc.c (1.250), "Exp", lines: +2 -2 mdoc_macro.c (1.193), "Exp", lines: +4 -4 roff.c (1.268), "Exp", lines: +22 -1 roff_int.h (1.3), "Exp", lines: +3 -1 Unify trickier node handling functions. * man_elem_alloc() -> roff_elem_alloc() * man_block_alloc() -> roff_block_alloc() The functions mdoc_elem_alloc() and mdoc_block_alloc() remain for now because they need to do mdoc(7)-specific argument processing. 2015-04-19 14:25 schwarze Changed: libman.h (1.75), "Exp", lines: +1 -3 libmandoc.h (1.60), "Exp", lines: +1 -5 libmdoc.h (1.104), "Exp", lines: +1 -6 man.c (1.160), "Exp", lines: +3 -59 man_macro.c (1.107), "Exp", lines: +5 -5 mdoc.c (1.249), "Exp", lines: +2 -54 mdoc_macro.c (1.192), "Exp", lines: +3 -3 mdoc_validate.c (1.289), "Exp", lines: +6 -6 read.c (1.139), "Exp", lines: +7 -12 roff.c (1.267), "Exp", lines: +62 -3 roff_int.h (1.2), "Exp", lines: +19 -2 Unify some node handling functions that use TOKEN_NONE. * mdoc_word_alloc(), man_word_alloc() -> roff_word_alloc() * mdoc_word_append(), man_word_append() -> roff_word_append() * mdoc_addspan(), man_addspan() -> roff_addtbl() * mdoc_addeqn(), man_addeqn() -> roff_addeqn() Minus 50 lines of code, no functional change. 2015-04-19 14:00 schwarze Changed: man.c (1.159), "Exp", lines: +11 -11 man_hash.c (1.33), "Exp", lines: +5 -7 man_term.c (1.182), "Exp", lines: +2 -2 man_validate.c (1.119), "Exp", lines: +1 -1 mdoc.c (1.248), "Exp", lines: +11 -10 mdoc_argv.c (1.104), "Exp", lines: +2 -2 mdoc_hash.c (1.25), "Exp", lines: +6 -6 mdoc_macro.c (1.191), "Exp", lines: +19 -18 mdoc_validate.c (1.288), "Exp", lines: +3 -3 read.c (1.138), "Exp", lines: +5 -6 roff.h (1.33), "Exp", lines: +1 -0 Decouple the token code for "no request or macro" from the individual high-level parsers to allow further unification of functions that only need to recognize this code, but that don't care about different high-level macrosets beyond that. 2015-04-19 13:50 schwarze Added: roff_int.h (1.1) Changed: Makefile.depend (1.12), "Exp", lines: +8 -8 libman.h (1.74), "Exp", lines: +1 -3 libmandoc.h (1.59), "Exp", lines: +1 -3 libmdoc.h (1.103), "Exp", lines: +1 -3 man.c (1.158), "Exp", lines: +18 -180 man_macro.c (1.106), "Exp", lines: +9 -7 man_validate.c (1.118), "Exp", lines: +5 -4 mdoc.c (1.247), "Exp", lines: +20 -216 mdoc_macro.c (1.190), "Exp", lines: +18 -17 mdoc_validate.c (1.287), "Exp", lines: +16 -15 roff.c (1.266), "Exp", lines: +205 -7 Unify node handling functions: * node_alloc() for mdoc and man_node_alloc() -> roff_node_alloc() * node_append() for mdoc and man_node_append() -> roff_node_append() * mdoc_head_alloc() and man_head_alloc() -> roff_head_alloc() * mdoc_body_alloc() and man_body_alloc() -> roff_body_alloc() * mdoc_node_unlink() and man_node_unlink() -> roff_node_unlink() * mdoc_node_free() and man_node_free() -> roff_node_free() * mdoc_node_delete() and man_node_delete() -> roff_node_delete() Minus 130 lines of code, no functional change. 2015-04-18 17:53 schwarze Changed: demandoc.c (1.20), "Exp", lines: +3 -3 man.c (1.157), "Exp", lines: +1 -15 man.h (1.74), "Exp", lines: +1 -3 man_html.c (1.117), "Exp", lines: +8 -14 man_term.c (1.181), "Exp", lines: +6 -10 mandocdb.c (1.193), "Exp", lines: +8 -9 mdoc.c (1.246), "Exp", lines: +1 -15 mdoc.h (1.141), "Exp", lines: +1 -3 mdoc_html.c (1.232), "Exp", lines: +11 -18 mdoc_man.c (1.93), "Exp", lines: +6 -12 mdoc_term.c (1.319), "Exp", lines: +7 -9 tree.c (1.66), "Exp", lines: +3 -3 Delete the wrapper functions mdoc_meta(), man_meta(), mdoc_node(), man_node() from the mandoc(3) semi-public interface and the internal wrapper functions print_mdoc() and print_man() from the HTML formatters. Minus 60 lines of code, no functional change. 2015-04-18 17:28 schwarze Changed: libman.h (1.73), "Exp", lines: +1 -2 libmandoc.h (1.58), "Exp", lines: +8 -9 libmdoc.h (1.102), "Exp", lines: +1 -2 man.c (1.156), "Exp", lines: +1 -63 mdoc.c (1.245), "Exp", lines: +1 -85 read.c (1.137), "Exp", lines: +25 -39 roff.c (1.265), "Exp", lines: +70 -2 Unify {mdoc,man}_{alloc,reset,free}() into roff_man_{alloc,reset,free}(). Minus 80 lines of code, no functional change. Written on the train from Koeln to Wolfsburg returning from p2k15. 2015-04-18 17:01 schwarze Changed: libman.h (1.72), "Exp", lines: +1 -2 libmandoc.h (1.57), "Exp", lines: +3 -1 libmdoc.h (1.101), "Exp", lines: +1 -2 man.c (1.155), "Exp", lines: +1 -3 man_hash.c (1.32), "Exp", lines: +4 -5 mdoc.c (1.244), "Exp", lines: +1 -2 mdoc_hash.c (1.24), "Exp", lines: +4 -5 read.c (1.136), "Exp", lines: +9 -3 Move mdoc_hash_init() and man_hash_init() to libmandoc.h and call them from mparse_alloc() and choose_parser(), preparing unified allocation of struct roff_man. 2015-04-18 16:34 schwarze Changed: cgi.c (1.108), "Exp", lines: +7 -7 demandoc.c (1.19), "Exp", lines: +7 -8 main.c (1.235), "Exp", lines: +7 -6 man.c (1.154), "Exp", lines: +2 -1 mandoc.h (1.203), "Exp", lines: +2 -2 mandocdb.c (1.192), "Exp", lines: +9 -11 mdoc.c (1.243), "Exp", lines: +2 -1 read.c (1.135), "Exp", lines: +40 -52 roff.h (1.32), "Exp", lines: +7 -0 Profit from the unified struct roff_man and reduce the number of arguments of mparse_result() by one. No functional change. Written on the ICE Bruxelles-Koeln on the way back from p2k15. 2015-04-18 16:06 schwarze Changed: cgi.c (1.107), "Exp", lines: +3 -3 demandoc.c (1.18), "Exp", lines: +3 -3 libman.h (1.71), "Exp", lines: +12 -33 libmandoc.h (1.56), "Exp", lines: +19 -20 libmdoc.h (1.100), "Exp", lines: +17 -47 main.c (1.234), "Exp", lines: +5 -5 main.h (1.22), "Exp", lines: +10 -11 man.c (1.153), "Exp", lines: +54 -52 man.h (1.73), "Exp", lines: +5 -5 man_html.c (1.116), "Exp", lines: +2 -2 man_macro.c (1.105), "Exp", lines: +9 -9 man_term.c (1.180), "Exp", lines: +2 -2 man_validate.c (1.117), "Exp", lines: +2 -2 mandoc.h (1.202), "Exp", lines: +6 -7 mandocdb.c (1.191), "Exp", lines: +3 -3 mdoc.c (1.242), "Exp", lines: +52 -52 mdoc.h (1.140), "Exp", lines: +4 -4 mdoc_argv.c (1.103), "Exp", lines: +10 -10 mdoc_html.c (1.231), "Exp", lines: +2 -2 mdoc_macro.c (1.189), "Exp", lines: +22 -21 mdoc_man.c (1.92), "Exp", lines: +3 -3 mdoc_term.c (1.318), "Exp", lines: +2 -2 mdoc_validate.c (1.286), "Exp", lines: +15 -15 read.c (1.134), "Exp", lines: +7 -7 roff.h (1.31), "Exp", lines: +35 -1 tree.c (1.65), "Exp", lines: +3 -3 Replace the structs mdoc and man by a unified struct roff_man. Almost completely mechanical, no functional change. Written on the train from Exeter to London returning from p2k15. 2015-04-18 16:05 schwarze Changed: TODO (1.207), "Exp", lines: +5 -2 look at COHERENT troff 2015-04-16 20:36 schwarze Changed: TODO (1.206), "Exp", lines: +5 -1 florian want <img> tags for https://tlakh.xyz/p2k15.7.html 2015-04-16 20:22 schwarze Changed: mdoc_html.c (1.230), "Exp", lines: +3 -7 Restore the page headers and page footers that accidentally got lost in rev. 1.225. Regression reported by florian@. 2015-04-16 16:36 schwarze Changed: main.c (1.233), "Exp", lines: +3 -5 shorten "outdated mandoc.db" warning message; requested by deraadt@ 2015-04-06 22:06 schwarze Changed: TODO (1.205), "Exp", lines: +6 -1 man_term.c (1.179), "Exp", lines: +5 -2 Do not mistreat empty arguments to font alternating macros as vertical spacing requests. Bug found with xmahjongg(6). 2015-04-06 14:59 schwarze Changed: man_term.c (1.178), "Exp", lines: +2 -2 On a new RS nesting level, the saved width starts from the default width, not from the saved width of the previous level. Improves xterm(1) and XSetEventQueueOwner(3); found in transcode_filter(1). 2015-04-06 13:35 schwarze Changed: man_term.c (1.177), "Exp", lines: +4 -2 Use the default width for .RS without arguments. Reduces groff-mandoc differences in base and Xenocara by about 4%. Found while looking at wpa_supplicant(8). 2015-04-05 23:04 schwarze Changed: mdoc_macro.c (1.188), "Exp", lines: +16 -4 If a partial explicit block extending to the next input line follows the end macro of a broken block, put all of it into the breaking block. Needed for example by mutella(1). 2015-04-05 22:44 schwarze Changed: mdoc_macro.c (1.187), "Exp", lines: +45 -51 Reduce code duplication, no functional change: Both partial and full implicit blocks can break explicit blocks. Put the code to handle both cases into a common function. 2015-04-05 14:43 schwarze Changed: mdoc_macro.c (1.186), "Exp", lines: +8 -10 Arguments to end macros of broken partial explicit blocks must go inside the breaking block. For example, in .It Ic cmd Oo .Ar optional_arg Oc Ar mandatory_arg the mandatory_arg is still inside the .It block. Used for example by mutella(1). 2015-04-05 09:30 schwarze Changed: gmdiff (1.4), "Exp", lines: +2 -1 allow using an alternate mandoc binary 2015-04-04 18:52 schwarze Changed: man_term.c (1.176), "Exp", lines: +13 -1 Give man(7) section and subsection headers hanging indentation. Reduces groff-mandoc differences in base by about 2.5% due to various Perl manuals having long section titles. Quirk found in argtable2(3). 2015-04-04 17:47 schwarze Changed: man_term.c (1.175), "Exp", lines: +6 -6 mdoc_term.c (1.317), "Exp", lines: +2 -2 term.c (1.247), "Exp", lines: +6 -6 term.h (1.113), "Exp", lines: +3 -3 term_ascii.c (1.45), "Exp", lines: +19 -25 term_ps.c (1.74), "Exp", lines: +8 -8 Rounding rules for horizontal scaling widths are more complicated. There is a first rounding to basic units on the input side. After that, rounding rules differ between requests and macros. Requests round to the nearest possible character position. Macros round to the next character position to the left. Implement that by changing the return value of term_hspan() to basic units and leaving the second scaling and rounding stage to the formatters instead of doing it in the terminal handler. Improves for example argtable2(3). 2015-04-04 13:53 schwarze Changed: roff.c (1.264), "Exp", lines: +3 -1 Don't allow breaking the output line after hyphens following escape sequences. Improves tic(1), sxpm(1), and a few Perl manuals. Quirk found by naddy@ in milter-greylist(8). 2015-04-04 11:44 schwarze Changed: man_term.c (1.174), "Exp", lines: +12 -1 Fix a quirk with respect to empty .HP. Found while writing a regression test for man_macro.c rev. 1.66. Incidentally, this brings rendering of XFreeEventData(3) closer to groff. 2015-04-03 23:19 schwarze Changed: man_macro.c (1.104), "Exp", lines: +34 -119 Vastly simplify man(7) block unwinding, similar to mdoc_macro.c 1.171. Drop one enum type, two static functions, 70 lines of code. Also fixes the mpeg_encode(1) manual reported broken by naddy@. 2015-04-03 17:00 schwarze Changed: man_macro.c (1.103), "Exp", lines: +2 -2 It turns out the man(7) parser suffers from unintelligible handling of block rewinding, just like then mdoc(7) parser did. First step in getting rid of rew_scope(): Replace the only call where the target block is known. This commit is analogous to mdoc_macro.c rev. 1.167. One down, three to go. 2015-04-03 12:41 schwarze Changed: TODO (1.204), "Exp", lines: +9 -1 portability: word boundaries in regular expressions 2015-04-03 08:46 schwarze Changed: apropos.1 (1.39), "Exp", lines: +4 -3 main.c (1.232), "Exp", lines: +2 -2 man.1 (1.14), "Exp", lines: +4 -3 mandoc.1 (1.159), "Exp", lines: +4 -3 No need to hardcode /usr/bin/ as the path to more(1); helps portability. We don't hardcode the paths to gunzip(1) and cmp(1) either. Discussed with ajacoutot@. 2015-04-02 23:48 schwarze Changed: libman.h (1.70), "Exp", lines: +2 -2 libmdoc.h (1.99), "Exp", lines: +2 -2 man.c (1.152), "Exp", lines: +4 -4 man.h (1.72), "Exp", lines: +2 -11 man_html.c (1.115), "Exp", lines: +4 -4 man_term.c (1.173), "Exp", lines: +16 -18 man_validate.c (1.116), "Exp", lines: +13 -13 mandoc_headers.3 (1.6), "Exp", lines: +17 -8 mandocdb.c (1.190), "Exp", lines: +24 -24 mdoc.c (1.241), "Exp", lines: +5 -5 mdoc.h (1.139), "Exp", lines: +2 -12 mdoc_html.c (1.229), "Exp", lines: +2 -2 mdoc_man.c (1.91), "Exp", lines: +3 -3 mdoc_term.c (1.316), "Exp", lines: +7 -13 roff.h (1.30), "Exp", lines: +11 -0 term.c (1.246), "Exp", lines: +4 -4 term.h (1.112), "Exp", lines: +7 -6 Third step towards parser unification: Replace struct mdoc_meta and struct man_meta by a unified struct roff_meta. Written of the train from London to Exeter on the way to p2k15. 2015-04-02 22:48 schwarze Changed: demandoc.c (1.17), "Exp", lines: +5 -5 libman.h (1.69), "Exp", lines: +13 -13 libmdoc.h (1.98), "Exp", lines: +24 -24 man.c (1.151), "Exp", lines: +34 -35 man.h (1.71), "Exp", lines: +46 -71 man_hash.c (1.31), "Exp", lines: +4 -4 man_html.c (1.114), "Exp", lines: +9 -9 man_macro.c (1.102), "Exp", lines: +17 -18 man_term.c (1.172), "Exp", lines: +9 -9 man_validate.c (1.115), "Exp", lines: +4 -4 mandoc_headers.3 (1.5), "Exp", lines: +17 -14 mandocdb.c (1.189), "Exp", lines: +29 -29 mdoc.c (1.240), "Exp", lines: +42 -42 mdoc.h (1.138), "Exp", lines: +129 -211 mdoc_argv.c (1.102), "Exp", lines: +4 -4 mdoc_hash.c (1.23), "Exp", lines: +3 -3 mdoc_html.c (1.228), "Exp", lines: +7 -7 mdoc_macro.c (1.185), "Exp", lines: +38 -40 mdoc_man.c (1.90), "Exp", lines: +11 -11 mdoc_term.c (1.315), "Exp", lines: +14 -14 mdoc_validate.c (1.285), "Exp", lines: +56 -56 roff.h (1.29), "Exp", lines: +77 -0 tree.c (1.64), "Exp", lines: +5 -5 Second step towards parser unification: Replace struct mdoc_node and struct man_node by a unified struct roff_node. To be able to use the tok member for both mdoc(7) and man(7) without defining all the macros in roff.h, sacrifice a tiny bit of type safety and make tok an int rather than an enum. Almost mechanical, no functional change. Written on the Eurostar from Bruxelles to London on the way to p2k15. 2015-04-02 21:36 schwarze Changed: Makefile (1.461), "Exp", lines: +5 -3 Makefile.depend (1.11), "Exp", lines: +25 -25 att.c (1.14), "Exp", lines: +2 -1 demandoc.c (1.16), "Exp", lines: +4 -3 lib.c (1.12), "Exp", lines: +2 -1 main.c (1.231), "Exp", lines: +4 -3 man.c (1.150), "Exp", lines: +32 -31 man.h (1.70), "Exp", lines: +2 -13 man_hash.c (1.30), "Exp", lines: +2 -1 man_html.c (1.113), "Exp", lines: +28 -27 man_macro.c (1.101), "Exp", lines: +30 -29 man_term.c (1.171), "Exp", lines: +48 -47 man_validate.c (1.114), "Exp", lines: +22 -19 mandoc_headers.3 (1.4), "Exp", lines: +20 -4 mandocdb.c (1.188), "Exp", lines: +24 -23 mdoc.c (1.239), "Exp", lines: +38 -37 mdoc.h (1.137), "Exp", lines: +4 -16 mdoc_argv.c (1.101), "Exp", lines: +7 -6 mdoc_hash.c (1.22), "Exp", lines: +2 -1 mdoc_html.c (1.227), "Exp", lines: +55 -54 mdoc_macro.c (1.184), "Exp", lines: +21 -20 mdoc_man.c (1.89), "Exp", lines: +35 -34 mdoc_term.c (1.314), "Exp", lines: +82 -81 mdoc_validate.c (1.284), "Exp", lines: +50 -49 read.c (1.133), "Exp", lines: +6 -5 roff.h (1.28), "Exp", lines: +16 -11 st.c (1.12), "Exp", lines: +2 -1 tree.c (1.63), "Exp", lines: +40 -39 First step towards parser unification: Replace enum mdoc_type and enum man_type by a unified enum roff_type. Almost mechanical, no functional change. Written on the ICE train from Frankfurt to Bruxelles on the way to p2k15. 2015-04-01 12:48 schwarze Changed: mansearch.c (1.57), "Exp", lines: +34 -36 Let man(1) and apropos(1) work even when the current directory is unusable: Only change back to the current directory when the directory was changed before and the next path is relative. This is now more similar to what makewhatis(8) does. Issue reported by espie@. 2015-03-30 16:06 schwarze Changed: apropos.1 (1.38), "Exp", lines: +8 -8 eqn.7 (1.35), "Exp", lines: +5 -5 mandoc.1 (1.158), "Exp", lines: +2 -2 mandoc_char.7 (1.62), "Exp", lines: +37 -41 Escape punctuation characters that have a different meaning in -Tpdf. ~, `, and ' get translated to non-ASCII characters by most troff implementations when generating PostScript/PDF output. When the original ASCII character is meant, it needs to be manually escaped. Patch from bentley@. 2015-03-27 21:40 schwarze Changed: mandoc.1 (1.157), "Exp", lines: +3 -3 refering -> referring; patch from jmc@ 2015-03-27 21:33 schwarze Changed: cgi.c (1.106), "Exp", lines: +8 -7 html.c (1.186), "Exp", lines: +10 -29 main.c (1.230), "Exp", lines: +10 -9 main.h (1.21), "Exp", lines: +17 -10 man.conf.5 (1.3), "Exp", lines: +21 -1 term_ascii.c (1.44), "Exp", lines: +22 -49 term_ps.c (1.73), "Exp", lines: +10 -23 Actually use the new man.conf(5) "output" directive. Additional functionality, yet minus 45 lines of code. 2015-03-27 17:37 schwarze Deleted: manpath.h (1.8) Added: manconf.h (1.1) Changed: Makefile (1.460), "Exp", lines: +3 -3 Makefile.depend (1.10), "Exp", lines: +6 -6 cgi.c (1.105), "Exp", lines: +4 -4 main.c (1.229), "Exp", lines: +13 -11 mandoc_headers.3 (1.3), "Exp", lines: +10 -18 mandocdb.c (1.187), "Exp", lines: +23 -23 manpage.c (1.11), "Exp", lines: +7 -7 manpath.c (1.23), "Exp", lines: +96 -27 mansearch.3 (1.4), "Exp", lines: +4 -4 mansearch.c (1.56), "Exp", lines: +4 -4 Parse the new man.conf(5) "output" directive. The next step will be to actually use the parsed data. 2015-03-27 16:36 schwarze Changed: main.c (1.228), "Exp", lines: +4 -4 mandoc.1 (1.156), "Exp", lines: +55 -58 Modernize documentation by inserting blanks between option letters and option arguments, except for -m because "-m an" and "-m andoc" look just too weird. Of course, the traditional form without the blank will continue to work. 2015-03-27 16:28 schwarze Changed: man.conf.5 (1.2), "Exp", lines: +19 -26 various tweaks from jmc@ 2015-03-27 01:01 schwarze Changed: mandoc_char.7 (1.61), "Exp", lines: +24 -2 oops, forgot to apply the actual patch... 2015-03-27 00:57 schwarze Changed: mandoc_char.7 (1.60), "Exp", lines: +3 -3 Document that certain stand-alone accents need escaping in rare cases to prevent them from being converted to Unicode replacements in PDF output. Issue found by bentley@, OK jmc@ bentley@. 2015-03-27 00:18 schwarze Added: man.conf.5 (1.1) Changed: Makefile (1.459), "Exp", lines: +5 -1 configure (1.25), "Exp", lines: +3 -0 configure.local.example (1.8), "Exp", lines: +6 -1 Add man.conf(5). After adding some additional functionality, one of the next steps will be to use it in addition to manpath(1) rather than as an alternative to it. 2015-03-26 22:42 schwarze Changed: manpath.c (1.22), "Exp", lines: +42 -26 Add a new directive "manpath path" to replace the legacy "_whatdb path/whatis.db". Keep _whatdb support for backward compat, for now. Discussed with many, jmc@ and ajacoutot@ agree with the general direction. 2015-03-22 18:14 schwarze Changed: configure (1.24), "Exp", lines: +2 -0 configure.local.example (1.7), "Exp", lines: +8 -1 manpath.c (1.21), "Exp", lines: +1 -2 make MANPATH_DEFAULT compile-time configurable 2015-03-21 17:19 schwarze Changed: manpath.c (1.20), "Exp", lines: +6 -2 when there is no -m, no -M, no MANPATH and no /etc/man.conf, fall back to /usr/share/man:/usr/X11R6/man:/usr/local/man 2015-03-20 15:32 schwarze Changed: test-vasprintf.c (1.2), "Exp", lines: +5 -1 vasprintf(3) needs _GNU_SOURCE on Linux; pointed out by Christian Neukirchen <chneukirchen at gmail dot com>. 2015-03-20 15:25 schwarze Changed: compat_vasprintf.c (1.2), "Exp", lines: +7 -3 Patch from Christian Neukirchen <chneukirchen at gmail dot com>: He reports that on some platforms, it is not possible to use the same va_list twice. So use va_copy(3) for additional safety. 2015-03-20 14:47 schwarze Changed: man_macro.c (1.100), "Exp", lines: +2 -2 The .PD macro can occur in next-line scope. Fixes zshmisc(1). Issue reported by Christian Neukirchen <chneukirchen at gmail dot com>. 2015-03-20 12:54 schwarze Changed: libman.h (1.68), "Exp", lines: +6 -9 man_macro.c (1.99), "Exp", lines: +18 -16 Simplify by almost halving the number of macro flags: 1. MAN_EXPLICIT was used iff fp == blk_exp, so just test fp. 2. MAN_FSCOPED was used only for TP, so just test for TP. 3. MAN_NOCLOSE was completely unused. No functional change. 2015-03-19 14:57 schwarze Added: compat_isblank.c (1.1) compat_mkdtemp.c (1.1) compat_vasprintf.c (1.1) test-isblank.c (1.1) test-mkdtemp.c (1.1) test-vasprintf.c (1.1) Changed: INSTALL (1.11), "Exp", lines: +3 -1 Makefile (1.458), "Exp", lines: +11 -2 Makefile.depend (1.9), "Exp", lines: +6 -0 configure (1.23), "Exp", lines: +19 -0 Compat glue needed for Solaris 9 and 10. Thanks to Sevan Janiyan <venture37 at geeklan dot co dot uk> for reporting the Solaris 10 issues, to Jan Holzhueter <jh at opencsw dot org> for some additional insight, and to OpenCSW in general for providing me with a Solaris 9/10/11 testing environment. 2015-03-18 19:29 schwarze Changed: compat_fts.c (1.9), "Exp", lines: +15 -166 compat_fts.h (1.2), "Exp", lines: +1 -5 We always use FTS_NOCHDIR, so delete the directory changing code. This not only simplifies matters, but also helps operating systems lacking dirfd(3), for example Solaris 10. Solaris dirfd issue reported by Sevan Janiyan <venture37 at geeklan dot co dot uk>. 2015-03-18 17:13 schwarze Changed: configure (1.22), "Exp", lines: +1 -0 Pass the CC set in configure.local to Makefile.local. Issue found while testing on opencsw.org. 2015-03-17 13:35 schwarze Changed: main.c (1.227), "Exp", lines: +20 -27 Simplify: Now that rc is global anyway, no need to pass it around as an argument. No functional change. 2015-03-17 07:33 schwarze Changed: main.c (1.226), "Exp", lines: +13 -2 read.c (1.132), "Exp", lines: +3 -1 When the user exits the pager before the pager has drained all input from man(1), man(1) dies from SIGPIPE. Exiting man(1) is fine in this case, generating more output would be pointless, but without handling SIGPIPE, the exit code from man(1) was wrong and csh(1) printed an ugly message "Broken pipe". Fix this by handling SIGPIPE explicitly. Issue noticed by deraadt@. 2015-03-16 14:51 schwarze Changed: TODO (1.203), "Exp", lines: +14 -1 naddy@ found a tough problem - fittingly, in cobfusc(1)... 2015-03-15 16:53 schwarze Changed: man_term.c (1.170), "Exp", lines: +3 -2 Avoid off-by-one read access to the termacts array, which could sometimes result in missing line breaks before subsection headers. Found by carsten dot kunze at arcor dot de on SuSE 13.2. 2015-03-13 20:20 schwarze Changed: mdoc.7 (1.253), "Exp", lines: +3 -3 Remove the first comma from constructs like ", and," and ", or,": You can use "and" and "or" to join sentence clauses, and you can use commas, but both hinders reading; patch from jmc@. 2015-03-13 12:35 tag VERSION_1_13_3 2015-03-13 12:35 schwarze Changed: Makefile (1.457), "Exp", lines: +3 -3 NEWS (1.9), "Exp", lines: +116 -1 release 1.13.3 2015-03-13 00:19 schwarze Changed: mandocdb.c (1.186), "Exp", lines: +2 -1 Fix hardlink detection on platforms having padding in struct inodev, typically 64bit platforms. This was basically broken since forever. Not only is the padding used, but it was used uninitialized. Problem reported by jmc@. 2015-03-11 13:15 schwarze Changed: configure (1.21), "Exp", lines: +1 -3 When manpath(1) is available, enable HAVE_MANPATH even when building without database support. Required now that we have man(1) even without database support. 2015-03-11 13:11 schwarze Changed: TODO (1.202), "Exp", lines: +6 -1 mansearch.c (1.55), "Exp", lines: +4 -3 When interpreting the -O argument as a macro name fails, fall back to showing Nd rather than not showing anything. Issue reported by jmc@. 2015-03-11 13:05 schwarze Changed: read.c (1.131), "Exp", lines: +2 -2 Fix previous: size_t is often narrower than off_t. Cluestick applied by joerg at NetBSD. 2015-03-10 14:17 schwarze Changed: read.c (1.130), "Exp", lines: +2 -2 The st_size member of struct stat is off_t, which is signed, all required by POSIX. So don't compare it against against an unsigned constant. 2015-03-10 13:50 schwarze Changed: main.c (1.225), "Exp", lines: +23 -27 We can keep track of the pager PID without additional complexity. No functional change for now, but more robust in case anybody should ever add additional child processes. 2015-03-10 03:02 schwarze Changed: main.c (1.224), "Exp", lines: +22 -4 Fix a regression caused in rev. 1.212, reported by kristaps@: When using a pager and the first manual shown is gzip'ed, the gunzip(1) process ended up as a child of the pager process such that the man(1) process couldn't wait for it, preventing proper display of the manual. Solve this by making the pager a child of the man(1) process (instead of the other way round), which requires being a bit more careful about properly closing file descriptors after use and waiting for the pager before exiting man(1). 2015-03-09 21:00 schwarze Changed: INSTALL (1.10), "Exp", lines: +27 -92 update for 1.13.3 2015-03-09 20:17 schwarze Changed: eqn.7 (1.34), "Exp", lines: +24 -24 use \(dq rather than \*q; patch from bentley@ 2015-03-06 15:48 schwarze Changed: man_term.c (1.169), "Exp", lines: +3 -7 mdoc_term.c (1.313), "Exp", lines: +3 -1 tbl_term.c (1.40), "Exp", lines: +1 -4 Fix vertical spacing at the beginning of tables. man(7) always prints a blank line, mdoc(7) doesn't. Problem in mdoc(7) reported by kristaps@. mdoc(7) part of the patch tested by kristaps@. 2015-03-06 13:09 schwarze Changed: mdoc_term.c (1.312), "Exp", lines: +7 -4 In mdoc(7), don't mistreat negative .sp arguments as large positive ones. Instead, use the same logic as for man(7). 2015-03-06 13:02 schwarze Changed: term.c (1.245), "Exp", lines: +2 -1 prevent the skipvsp flag from creeping past actual text 2015-03-06 11:03 schwarze Changed: tbl_term.c (1.39), "Exp", lines: +4 -3 Flush the line preceding a table before clearing the right margin, such that that line isn't output with unlimited width. Problem reported and fix OK by kristaps@. 2015-03-06 09:24 kristaps Changed: main.c (1.223), "Exp", lines: +5 -3 preconv.c (1.14), "Exp", lines: +2 -2 Allow compilation on Mac OS X, which doesn't have MACHINE defined. While there, specify some casts to satisfy the compiler warnings. OK schwarze@ 2015-03-04 12:19 schwarze Changed: eqn.c (1.58), "Exp", lines: +4 -2 in eqn, "prime" is equivalent to \(fm, and - is equivalent to \(mi; patch from bentley@ 2015-03-03 21:11 schwarze Changed: man_html.c (1.112), "Exp", lines: +3 -1 mdoc_html.c (1.226), "Exp", lines: +3 -1 If an eqn(7) starts on a new input line, be sure to output whitespace in front of it. Issue found by tedu@ in glOrtho(3). There are also cases of excessive whitespace before and after equations. This patch neither fixes them nor makes them worse. 2015-03-02 14:50 schwarze Changed: read.c (1.129), "Exp", lines: +2 -1 If a non-gz manual is read after a gzipped manual, refrain from throwing a bogus error "wait: No child processes". As reported by Baptiste Daroussin <bapt at FreeBSD dot org>, clearing the state variable curp->child after use was forgotten. 2015-02-27 16:22 schwarze Changed: mandocdb.c (1.185), "Exp", lines: +3 -2 When makewhatis(8) scans a tree, ignore trailing garbage on filenames. This is relevant because some ports install files like man1/xsel.1x, as reported by patrick keshishian <pkeshish at gmail dot com> on misc@. We can probably improve functionality and simplify the code by ignoring file name extensions altogether; we already know the section number from the name of the directory. But so close to lock, i'm keeping the fix minimal. 2015-02-27 16:02 schwarze Changed: main.c (1.222), "Exp", lines: +20 -9 mansearch.c (1.54), "Exp", lines: +29 -4 When man(1) and apropos(1) look for a file man1/foo.1 but it's unavailable, fall back to glob(man1/foo.*), which is more like what old man(1) did. Do this both for file names from the database and for fs_lookup(). This is relevant because some ports install files like man1/xset.1x. Regression reported by patrick keshishian <pkeshish at gmail dot com>. 2015-02-23 13:55 schwarze Changed: mdoc_validate.c (1.283), "Exp", lines: +5 -1 oops, in NAME, don't nag about the comma after .Nm 2015-02-23 13:31 schwarze Changed: mandoc.1 (1.155), "Exp", lines: +19 -9 mandoc.h (1.201), "Exp", lines: +5 -2 mdoc.7 (1.252), "Exp", lines: +5 -7 mdoc_validate.c (1.282), "Exp", lines: +25 -25 read.c (1.128), "Exp", lines: +5 -2 improve NAME section diagnostics; confusing messages reported by Jan Stary <hans at stare dot cz> 2015-02-21 14:46 schwarze Changed: roff.c (1.263), "Exp", lines: +77 -17 Escape quotes when expanding macro arguments. This fixes a bug naddy@ found in plan9/rc(1). 2015-02-20 23:55 schwarze Changed: mandoc.c (1.92), "Exp", lines: +9 -1 For selecting a two-digit font size, support the historic syntax \s12 in addition to the classic syntax \s(12, the modern syntax \s[12], and the alternative syntax \s'12'. The historic syntax only works for the font sizes 10-39. Real-world usage found by naddy@ in plan9/rc. 2015-02-20 22:40 schwarze Changed: read.c (1.127), "Exp", lines: +3 -2 Completely delete all carriage return characters from the input. No change to messages about them (ignore them right before line feeds, report errors elsewhere). naddy@ found a manual in the wild containing lots of these (ysm(1)), and i can't imagine a situation where dropping them could be problematic. 2015-02-20 13:47 schwarze Changed: TODO (1.201), "Exp", lines: +5 -1 \n(.$ 2015-02-17 20:41 schwarze Changed: TODO (1.200), "Exp", lines: +7 -5 naddy@ scoured the ports tree for remaining mandoc issues and identified two top priority issues 2015-02-17 20:37 schwarze Changed: chars.c (1.66), "Exp", lines: +2 -2 chars.in (1.52), "Exp", lines: +5 -3 mdoc_man.c (1.88), "Exp", lines: +3 -3 mdoc_term.c (1.311), "Exp", lines: +3 -3 mdoc_validate.c (1.281), "Exp", lines: +2 -2 st.in (1.28), "Exp", lines: +45 -45 Render \(lq and \(rq as '"' in -Tascii mode but leave the rendering of .Do/.Dc, .Dq, .Lb, and .St untouched. Reduces groff-mandoc differences in OpenBSD base by about 7%. Reminded of the issue by naddy@. 2015-02-17 18:09 schwarze Changed: roff.c (1.262), "Exp", lines: +12 -3 Cope with another one of the many kinds of DocBook stupidity: Instead of just using .br, DocBook sometimes fiddles with the utterly unportable internal register \n[an-break-flag] that is only available in the GNU implementation of man(7) and then arms an input line trap to call the equally unportable internal macro .an-trap that, in the GNU implementation, inspects that variable; all the world is GNU, isn't it? Since naddy@ reports that quite a few ports manuals suffer from this insanity, let's just translate it to the intended .br. Et ceterum censeo DocBookem esse delendam. 2015-02-17 17:16 schwarze Changed: roff.7 (1.70), "Exp", lines: +11 -6 roff.c (1.261), "Exp", lines: +42 -37 Let .it accept numerical expressions, not just numerical constants. For .it, ignore scaling units in roff_getnum(). Inside parentheses, skip whitespace after a sign in roff_getnum(). Parse and ignore unary plus in roff_getnum(). As a bonus, get rid of the only call to mandoc_strntoi() in roff.c. 2015-02-16 19:02 schwarze Changed: mandoc.1 (1.154), "Exp", lines: +5 -2 mdoc_validate.c (1.280), "Exp", lines: +41 -43 clean up post_dt() validation function; improved diagnostics, minus six lines of code 2015-02-16 16:23 schwarze Changed: Makefile (1.456), "Exp", lines: +3 -1 apropos.1 (1.37), "Exp", lines: +3 -5 configure (1.20), "Exp", lines: +0 -6 main.c (1.221), "Exp", lines: +5 -17 man.1 (1.13), "Exp", lines: +4 -6 mandoc.1 (1.153), "Exp", lines: +3 -5 Delete the -V option. It serves no purpose but keeps confusing people. Keeping track of the versions of installed software is the job of the package manager, not of the individual binaries. If individual binaries include version numbers, that tends to goad people into writing broken configuration tests that inspect version numbers instead of properly testing for features. 2015-02-16 14:56 schwarze Added: compat_strtonum.c (1.1) test-strtonum.c (1.1) Changed: LICENSE (1.7), "Exp", lines: +3 -2 Makefile (1.455), "Exp", lines: +5 -2 Makefile.depend (1.8), "Exp", lines: +3 -1 configure (1.19), "Exp", lines: +6 -0 configure.local.example (1.6), "Exp", lines: +2 -1 strtonum(3) compat glue 2015-02-16 14:11 schwarze Changed: term_ascii.c (1.43), "Exp", lines: +9 -3 Clamp width and indent settings to sensible values. Ignore errors for now. Patch from tedu@. 2015-02-15 17:57 schwarze Changed: mdoc.7 (1.251), "Exp", lines: +8 -7 Tweak the wording to avoid the possible misunderstanding that .In could only be used in the SYNOPSIS section. It is fine anywhere. Issue noticed by bentley@. 2015-02-14 13:23 schwarze Changed: mdoc_validate.c (1.279), "Exp", lines: +3 -2 shut up about tabs in SYNOPSIS .Fd lines, there is no good way to avoid them 2015-02-12 13:54 schwarze Changed: TODO (1.199), "Exp", lines: +1 -5 After almost five years and 99 revisions, mdoc_macro.c rev. 1.182 finally fixed the four issues explained in the mdoc_macro.c rev. 1.83 commit message. 2015-02-12 13:00 schwarze Changed: mdoc.c (1.238), "Exp", lines: +5 -5 Do not confuse .Bl -column lists that just broken another block with newly opened .Bl -column lists; fixing an assertion failure jsg@ found with afl: test case #481, Bl It Bl -column It Bd El text text El 2015-02-12 12:24 schwarze Changed: mdoc.c (1.237), "Exp", lines: +5 -3 mdoc.h (1.136), "Exp", lines: +5 -5 mdoc_html.c (1.225), "Exp", lines: +6 -5 mdoc_macro.c (1.183), "Exp", lines: +78 -110 mdoc_man.c (1.87), "Exp", lines: +11 -8 mdoc_term.c (1.310), "Exp", lines: +4 -3 mdoc_validate.c (1.278), "Exp", lines: +6 -40 Delete the mdoc_node.pending pointer and the function calculating it, make_pending(), which was the most difficult function of the whole mdoc(7) parser. After almost five years of maintaining this hellhole, i just noticed the pointer isn't needed after all. Blocks are always rewound in the reverse order they were opened; that even holds for broken blocks. Consequently, it is sufficient to just mark broken blogs with the flag MDOC_BROKEN and breaking blocks with the flag MDOC_ENDED. When rewinding, instead of iterating the pending pointers, just iterate from each broken block to its parents, rewinding all that are MDOC_ENDED and stopping after processing the first ancestor that it not MDOC_BROKEN. For ENDBODY markers, use the mdoc_node.body pointer in place of the former mdoc_node.pending. This also fixes an assertion failure found by jsg@ with afl, test case #467 (Bo Bl It Bd Bc It), where (surprise surprise) the pending pointer got corrupted. Improved functionality, minus one function, minus one struct field, minus 50 lines of code. 2015-02-11 14:15 schwarze Changed: mdoc_html.c (1.224), "Exp", lines: +3 -4 mdoc_man.c (1.86), "Exp", lines: +3 -4 mdoc_term.c (1.309), "Exp", lines: +3 -4 do not access a NULL pointer if an .Eo block lacks a tail; found by jsg@ with afl, test case #16 2015-02-11 13:37 schwarze Changed: mdoc_macro.c (1.182), "Exp", lines: +8 -1 explicit blocks close out .Nd; fixing data structure corruption eventually leading to NULL pointer access; found by jsg@ with afl, text case #455. 2015-02-10 17:47 schwarze Changed: mdoc_macro.c (1.181), "Exp", lines: +44 -34 Be more careful to not generate empty .In, .St, and .Xr nodes. That could happen when their first argument was another called macro, causing a NULL pointer access in .St validation found by jsg@ with afl. Make in_line_argn() easier to understand by using one state variable rather than two. 2015-02-10 11:03 schwarze Changed: tbl_layout.c (1.38), "Exp", lines: +27 -11 Do not read past the end of the buffer if an "f" layout font modifier is followed by the end of the input line instead of a font specifier. Found by jsg@ with afl, test case #591. While here, improve functionality as well: * There is no "r" font modifier. * Font specifiers (as opposed to font modifiers) are case sensitive. * One-character font specifiers require trailing whitespace. * Ignore parenthised and two-letter font specifiers. 2015-02-10 08:05 schwarze Changed: TODO (1.198), "Exp", lines: +7 -7 cgi.c (1.104), "Exp", lines: +12 -12 demandoc.c (1.15), "Exp", lines: +7 -7 example.style.css (1.55), "Exp", lines: +4 -4 main.c (1.220), "Exp", lines: +2 -2 man-cgi.css (1.7), "Exp", lines: +3 -3 man_html.c (1.111), "Exp", lines: +2 -2 manpage.c (1.10), "Exp", lines: +6 -6 mdoc_validate.c (1.277), "Exp", lines: +2 -2 style.css (1.31), "Exp", lines: +2 -2 trim trailing white space, no code change; from Svyatoslav Mishyn <juef at openmailboxd dot org>, Crux Linux 2015-02-07 16:42 schwarze Changed: mdoc_macro.c (1.180), "Exp", lines: +2 -1 Closing a block validates it, which may end up deleting it, so if we are in a loop over blocks, cleanly restart the loop rather than risking use after free; found by jsg@ with afl. 2015-02-07 15:15 schwarze Changed: mandoc.1 (1.152), "Exp", lines: +10 -13 some tweaks to the DIAGNOSTICS section 2015-02-07 07:53 schwarze Changed: compat_fts.c (1.8), "Exp", lines: +4 -1 ignore O_CLOEXEC when the operating system doesn't provide it; needed for some older versions of SunOS; from jperkin@ via wiz@, both at NetBSD 2015-02-07 07:42 schwarze Changed: compat_fts.c (1.7), "Exp", lines: +5 -5 trivial sync to OpenBSD: <sys/param.h> no longer needed 2015-02-07 06:28 schwarze Changed: demandoc.c (1.14), "Exp", lines: +5 -4 main.c (1.219), "Exp", lines: +10 -7 be more careful about argc == 0 2015-02-06 16:06 schwarze Changed: mandoc.1 (1.151), "Exp", lines: +16 -7 mandoc.h (1.200), "Exp", lines: +3 -2 mdoc_validate.c (1.276), "Exp", lines: +3 -3 read.c (1.126), "Exp", lines: +3 -2 roff.c (1.260), "Exp", lines: +6 -5 replace the last legacy generic message type, "argument count wrong", by more specific messages, improving diagnostics for .cc .tr .Bl -column 2015-02-06 11:54 schwarze Changed: man_macro.c (1.98), "Exp", lines: +11 -17 man_validate.c (1.113), "Exp", lines: +22 -21 mandoc.1 (1.150), "Exp", lines: +41 -18 mandoc.h (1.199), "Exp", lines: +3 -1 read.c (1.125), "Exp", lines: +3 -1 better error reporting regarding .OP .RS .UR .TH arguments 2015-02-06 09:38 schwarze Changed: man_macro.c (1.97), "Exp", lines: +8 -1 man_validate.c (1.112), "Exp", lines: +1 -10 mandoc.1 (1.149), "Exp", lines: +5 -1 better diagnostics about excess arguments to .PD .ft .sp 2015-02-06 08:28 schwarze Changed: man_macro.c (1.96), "Exp", lines: +8 -1 man_validate.c (1.111), "Exp", lines: +2 -10 mandoc.1 (1.148), "Exp", lines: +5 -2 better error reporting for .br .fi .nf with arguments 2015-02-06 07:13 schwarze Changed: man_validate.c (1.110), "Exp", lines: +3 -3 mandoc.1 (1.147), "Exp", lines: +15 -10 mandoc.h (1.198), "Exp", lines: +2 -2 mdoc_macro.c (1.179), "Exp", lines: +4 -3 mdoc_validate.c (1.275), "Exp", lines: +19 -81 read.c (1.124), "Exp", lines: +2 -2 Delete the legacy generic warning type MANDOCERR_ARGCWARN, replacing the last instances by more specific warnings. Improved functionality, minus 50 lines of code. 2015-02-06 03:38 schwarze Changed: mandoc.1 (1.146), "Exp", lines: +9 -1 mandoc.h (1.197), "Exp", lines: +2 -1 mdoc_macro.c (1.178), "Exp", lines: +7 -1 mdoc_man.c (1.85), "Exp", lines: +6 -3 mdoc_validate.c (1.274), "Exp", lines: +22 -13 read.c (1.123), "Exp", lines: +2 -1 better handle .Fo and .Fd without argument better handle .Fo with more than one argument 2015-02-06 02:04 schwarze Changed: mdoc_validate.c (1.273), "Exp", lines: +45 -39 better handle empty .Bd .Bl .D1 .Dl blocks 2015-02-06 01:07 schwarze Changed: mdoc_macro.c (1.177), "Exp", lines: +12 -1 mdoc_validate.c (1.272), "Exp", lines: +3 -11 better handle .In .Sh .Ss .St .Xr without arguments 2015-02-05 01:46 schwarze Changed: mdoc_html.c (1.223), "Exp", lines: +1 -4 mdoc_macro.c (1.176), "Exp", lines: +2 -2 mdoc_term.c (1.308), "Exp", lines: +1 -4 mdoc_validate.c (1.271), "Exp", lines: +7 -5 fix handling of empty .An macros 2015-02-05 00:14 schwarze Changed: mdoc.c (1.236), "Exp", lines: +1 -2 mdoc.h (1.135), "Exp", lines: +1 -2 mdoc_html.c (1.222), "Exp", lines: +4 -7 mdoc_macro.c (1.175), "Exp", lines: +2 -8 mdoc_term.c (1.307), "Exp", lines: +4 -7 tree.c (1.62), "Exp", lines: +2 -5 Simplify by deleting the "lastline" member of struct mdoc_node. Minus one struct member, minus 17 lines of code, no functional change. 2015-02-04 22:30 schwarze Changed: mandoc.1 (1.145), "Exp", lines: +11 -8 mdoc_macro.c (1.174), "Exp", lines: +8 -2 mdoc_validate.c (1.270), "Exp", lines: +37 -36 Discard excess head arguments for .Bd .Bl .Bk and delete hwarn_eq0(). Discard empty .Bk blocks. Improve related diagnostics. 2015-02-04 19:20 schwarze Changed: mandoc.1 (1.144), "Exp", lines: +14 -2 mdoc_validate.c (1.269), "Exp", lines: +15 -11 improve diagnostics regarding arguments of .An .Pp .Lp .br .sp in particular, get rid of check_count(..., CHECK_EQ, 0) 2015-02-04 18:59 schwarze Changed: mdoc_argv.c (1.100), "Exp", lines: +2 -2 fix column numbers of macro arguments in messages 2015-02-04 18:03 schwarze Changed: mandoc.1 (1.143), "Exp", lines: +11 -2 mandoc.h (1.196), "Exp", lines: +2 -1 mdoc_macro.c (1.173), "Exp", lines: +9 -4 mdoc_validate.c (1.268), "Exp", lines: +34 -36 read.c (1.122), "Exp", lines: +2 -1 discard .Rs head arguments and improve .Rs diagnostics 2015-02-04 16:38 schwarze Changed: mandoc.1 (1.142), "Exp", lines: +8 -2 mandoc.h (1.195), "Exp", lines: +2 -1 mdoc_validate.c (1.267), "Exp", lines: +27 -25 read.c (1.121), "Exp", lines: +2 -1 more specific .Nd diagnostics, allowing to get rid of enum check_lvl and the respective argument of check_count() 2015-02-03 21:16 schwarze Changed: Makefile (1.454), "Exp", lines: +5 -5 configure.local.example (1.5), "Exp", lines: +28 -22 main.c (1.218), "Exp", lines: +15 -41 Enable the integrated man(1) even when database support is disabled, using the file system lookup fallback code, also reducing the number of preprocessor conditional directives. Hopefully, it will make some small Linux distros happy. 2015-02-03 18:37 schwarze Changed: tree.c (1.61), "Exp", lines: +21 -13 reduce indentation for better readability 2015-02-03 18:22 schwarze Changed: mdoc_macro.c (1.172), "Exp", lines: +2 -1 Avoid closing out an explicit block twice when broken by .It (assertion failure); regression found in jsg@'s afl test case 847. 2015-02-03 15:52 schwarze Changed: gmdiff (1.3), "Exp", lines: +17 -5 minimal support for Heirloom nroff 2015-02-03 01:14 schwarze Changed: mdoc_macro.c (1.171), "Exp", lines: +75 -160 Finally delete the kitchensink functions rew_sub() and rew_dohalt(). They were a maintenance and auditing nightmare because if you changed one bit in there, stuff tended to break at seemingly unrelated places. No functional change except getting rid of one bogus error message, but minus 80 lines of code. 2015-02-03 00:48 schwarze Changed: mdoc_macro.c (1.170), "Exp", lines: +11 -4 mdoc_validate.c (1.266), "Exp", lines: +12 -4 Bring .Pp/.Lp handling inside .Nm blocks closer to groff; as a bonus, get rid of another call to rew_sub(). 2015-02-02 19:23 schwarze Changed: mdoc_macro.c (1.169), "Exp", lines: +50 -57 Simplify and reindent make_pending(). No functional change except that some error messages become less confusing. Now the function is almost readable (but still requires nineteen lines of comments for fourteen lines of code). 2015-02-02 18:26 schwarze Changed: mdoc_macro.c (1.168), "Exp", lines: +21 -31 Simplify: Do not call rew_dohalt() from make_pending(), the calling macro handler already found the breaking block. No functional change except tiny variations in error messages. 2015-02-02 15:02 schwarze Changed: mdoc_macro.c (1.167), "Exp", lines: +37 -66 Get rid of all remaining calls to rew_sub() where the target block is known. This only leaves three that do actual searching. No functional change, minus 30 lines of code. 2015-02-02 04:26 schwarze Changed: libmdoc.h (1.97), "Exp", lines: +2 -2 mdoc.c (1.235), "Exp", lines: +3 -2 mdoc_macro.c (1.166), "Exp", lines: +67 -65 Get rid of all calls to rew_sub() in blk_exp_close(); only ten calls remain in other functions. As a bonus, this fixes an assertion failure jsg@ found some time ago with afl (test case 982) and improves minor details in error reporting. 2015-02-02 04:04 schwarze Changed: mdoc_macro.c (1.165), "Exp", lines: +7 -4 When a full block macro gets closed out by a mismatching block closure macro it calls, do not attempt to open its body. This can for example happen for (nonsensical) constructions like .Fo .Nm Fc in the SYNOPSIS. Fixing an assertion failure jsg@ found with afl some time ago (test case number 731). 2015-02-01 23:56 schwarze Changed: mdoc_macro.c (1.164), "Exp", lines: +14 -3 get rid of rew_sub() in blk_part_imp(); no functional change 2015-02-01 23:10 schwarze Changed: mdoc_html.c (1.221), "Exp", lines: +52 -14 mdoc_man.c (1.84), "Exp", lines: +25 -3 mdoc_term.c (1.306), "Exp", lines: +55 -14 fix .Eo/.Ec spacing 2015-02-01 17:30 schwarze Changed: mdoc_macro.c (1.163), "Exp", lines: +8 -24 Simplify blk_part_exp(), no functional change. * Replace calls to rew_sub() with rew_last() - two less out of 18. * No need to keep track of the body, it's always opened right after the head and never used for anything in this function. 2015-02-01 16:47 schwarze Changed: mdoc_macro.c (1.162), "Exp", lines: +4 -5 The function rew_sub() tries to rewind any all all kinds of blocks and elements under any and all circumstances, even handling some bad block nesting now and then. Little surprisingly, this ends up in excessive complexity and has caused many bugs in the past. Start to slowly disentangle this mess by replacing calls to rew_sub() immediately following mdoc_head_alloc() by the much simpler rew_last(). Gets rid of the first two rew_sub() calls out of twenty. No functional change. 2015-01-31 00:12 schwarze Changed: mdoc.h (1.134), "Exp", lines: +2 -2 mdoc_term.c (1.305), "Exp", lines: +2 -2 tbl_term.c (1.38), "Exp", lines: +3 -3 term.c (1.244), "Exp", lines: +7 -15 term.h (1.111), "Exp", lines: +2 -3 Use relative offsets instead of absolute pointers for the terminal font stack. The latter fail after the stack is grown with realloc(). Fixing an assertion failure found by jsg@ with afl some time ago (test case number 51). 2015-01-30 22:04 schwarze Changed: man_html.c (1.110), "Exp", lines: +6 -5 man_term.c (1.168), "Exp", lines: +6 -6 mdoc_html.c (1.220), "Exp", lines: +5 -4 mdoc_term.c (1.304), "Exp", lines: +5 -4 Have pity on the poor stack. Replace tail recursion by iteration when walking the syntax trees. No functional change. 2015-01-30 21:28 schwarze Changed: man.c (1.149), "Exp", lines: +66 -59 starting a tbl(7) breaks man(7) next-line scope; triggered by a bug report from jsg@ 2015-01-30 17:32 schwarze Changed: man_term.c (1.167), "Exp", lines: +2 -2 mandoc.h (1.194), "Exp", lines: +1 -4 tbl.c (1.39), "Exp", lines: +1 -5 tbl_data.c (1.39), "Exp", lines: +1 -2 tbl_html.c (1.16), "Exp", lines: +3 -3 tbl_term.c (1.37), "Exp", lines: +3 -3 Delete the redundant tbl span flags, just inspect the actual data where needed, which is less fragile. This fixes a subtle NULL pointer access to tp->tbl.cols: Due to a bug in the man(7) parser, the first span of a table can end up in a .TP head, in which case tblcalc() was never called. Found by jsg@ with afl. 2015-01-30 04:11 schwarze Changed: libroff.h (1.38), "Exp", lines: +1 -3 mandoc.h (1.193), "Exp", lines: +2 -14 out.c (1.59), "Exp", lines: +2 -2 tbl.3 (1.2), "Exp", lines: +94 -35 tbl.c (1.38), "Exp", lines: +1 -7 tbl_data.c (1.38), "Exp", lines: +3 -8 tbl_html.c (1.15), "Exp", lines: +8 -8 tbl_layout.c (1.37), "Exp", lines: +7 -26 tbl_term.c (1.36), "Exp", lines: +16 -21 Abolish struct tbl_head and replace it by an "int col" member in struct tbl_cell. No functional change, minus 40 lines of code. 2015-01-30 02:09 schwarze Changed: tbl.c (1.37), "Exp", lines: +8 -9 tbl_data.c (1.37), "Exp", lines: +31 -45 tbl_html.c (1.14), "Exp", lines: +7 -7 tbl_layout.c (1.36), "Exp", lines: +6 -6 tbl_term.c (1.35), "Exp", lines: +3 -5 Auditing the tbl(7) code for more NULL pointer accesses, i came out empty-handed; so this is just KNF and some code simplifications, no functional change. 2015-01-30 00:29 schwarze Changed: tbl_layout.c (1.35), "Exp", lines: +31 -11 Make sure every layout line contains at least one cell; fixing a NULL pointer access in term_tbl() that jsg@ found with afl. 2015-01-30 00:19 schwarze Changed: roff.c (1.259), "Exp", lines: +2 -2 correctly handle table layout lines starting with a dot 2015-01-29 00:33 schwarze Changed: eqn.7 (1.33), "Exp", lines: +2 -7 man.7 (1.132), "Exp", lines: +1 -48 mandoc.1 (1.141), "Exp", lines: +9 -108 mdoc.7 (1.250), "Exp", lines: +19 -102 roff.7 (1.69), "Exp", lines: +47 -31 tbl.7 (1.26), "Exp", lines: +11 -12 Radical cleanup of COMPATIBILITY sections: Remove lots of lies, dozens of irrelevant implementation details, and all references to groff versions older than 1.17. Move relevant information to the pages where it belongs, and out of mandoc(1) in particular. Add some missing general remarks to roff(7), where it fits the character and purpose of the page much better. 2015-01-28 21:11 schwarze Changed: eqn.c (1.57), "Exp", lines: +73 -52 mandoc.1 (1.140), "Exp", lines: +2 -9 mandoc.h (1.192), "Exp", lines: +1 -7 read.c (1.120), "Exp", lines: +1 -7 Clean up eqn(7) error handling: * When "define" fails, do not drop the whole equation. * Free memory after "undef". * Use standard mandoc error types instead of rolling our own. * Delete obfuscating EQN_MSG() macro. * Add function prototypes while here. 2015-01-28 17:32 schwarze Changed: libroff.h (1.37), "Exp", lines: +2 -2 mandoc.1 (1.139), "Exp", lines: +38 -13 mandoc.h (1.191), "Exp", lines: +8 -8 mdoc_man.c (1.83), "Exp", lines: +9 -6 read.c (1.119), "Exp", lines: +6 -6 roff.c (1.258), "Exp", lines: +7 -4 tbl.c (1.36), "Exp", lines: +15 -15 tbl_data.c (1.36), "Exp", lines: +10 -10 tbl_opts.c (1.20), "Exp", lines: +3 -2 * Polish tbl(7) error reporting. * Do not print out macro names in tbl(7) data blocks. * Like with GNU tbl, let empty tables cause a blank line. * Avoid producing empty tables in -Tman. 2015-01-28 15:03 schwarze Changed: libroff.h (1.36), "Exp", lines: +6 -6 roff.c (1.257), "Exp", lines: +8 -2 tbl.c (1.35), "Exp", lines: +8 -8 tbl_data.c (1.35), "Exp", lines: +3 -8 tbl_layout.c (1.34), "Exp", lines: +2 -5 tbl_opts.c (1.19), "Exp", lines: +6 -4 For now, it can't be helped that mandoc tbl(7) ignores high-level macros, but stop throwing away their arguments. This fixes information loss in a handful of Xenocara manuals, at the price of a small amount of formatting noise creeping through. 2015-01-28 04:19 schwarze Changed: tbl.7 (1.25), "Exp", lines: +1 -2 tbl_term.c (1.34), "Exp", lines: +19 -3 implement the tbl(7) "center" layout option 2015-01-28 02:23 schwarze Changed: out.c (1.58), "Exp", lines: +31 -7 adjust formatting for the tbl(7) layout 'x' modifier (maximize column) to match groff for up to six maximized columns 2015-01-27 05:21 schwarze Changed: mandoc.h (1.190), "Exp", lines: +7 -5 tbl.c (1.34), "Exp", lines: +6 -2 tbl_data.c (1.34), "Exp", lines: +8 -8 tbl_layout.c (1.33), "Exp", lines: +47 -24 tbl_term.c (1.33), "Exp", lines: +97 -124 Multiple parser and formatter fixes for line drawing in tbl(7). * Allow mixing vertical line bars with the layout options of the preceding layout cell. * Correctly combine box options with layout lines. * Correctly print vertical lines in data rows, with the right spacing. * Correctly print cross markers and left and right ends of horizontal lines even if vertical lines differ above and below. * Avoid the bogus error message "no table data cells" when a table data section starts with a horizontal line. No increase in code size. 2015-01-26 18:42 schwarze Changed: mandoc.1 (1.138), "Exp", lines: +41 -3 mandoc.h (1.189), "Exp", lines: +10 -3 read.c (1.118), "Exp", lines: +10 -3 tbl.7 (1.24), "Exp", lines: +26 -11 tbl_layout.c (1.32), "Exp", lines: +83 -155 Rework tbl(7) layout parsing: * Continue parsing even if part of the input is invalid. * Do not require whitespace between cell specifications. * Allow tabs as well as blanks between modifiers. * Mark the 'm' modifier as unsupported. * Parse and ignore the 'p' and 'v' modifiers. * Better warning and error messages. * Get rid of a static buffer. Improved functionality but minus 50 lines of code. 2015-01-26 13:03 schwarze Changed: mandoc.1 (1.137), "Exp", lines: +6 -2 mandoc.h (1.188), "Exp", lines: +3 -1 read.c (1.117), "Exp", lines: +2 -1 tbl.7 (1.23), "Exp", lines: +42 -40 tbl_opts.c (1.18), "Exp", lines: +32 -50 More improvements regarding tbl(7) options. * Treat "allbox" as an alias for "box" for now. * Parse and ignore the GNU tbl "nowarn" option. * For separation, allow spaces, tabs, and commas only. * Mark eqn(7) within tbl(7) as unsupported. * Simplify the option table. * Improve and sort documentation. 2015-01-26 00:57 schwarze Changed: mandoc.1 (1.136), "Exp", lines: +39 -10 mandoc.h (1.187), "Exp", lines: +5 -4 read.c (1.116), "Exp", lines: +5 -3 tbl.c (1.33), "Exp", lines: +33 -18 tbl_opts.c (1.17), "Exp", lines: +78 -157 Improve (or rather, rewrite) tbl(7) option parsing. * Allow the layout to start after the semicolon on the options line. * Ignore leading commas. * Option arguments cannot contain closing parentheses. * Avoid needless UNSUPP messages. * Better ERROR reporting. * Delete unused "linesize" field in struct tbl_opts. * No need for static buffers. * Garbage collect one almost empty wrapper function. Improved functionality, but minus 40 lines of code. 2015-01-24 10:08 schwarze Changed: man_macro.c (1.95), "Exp", lines: +13 -2 preserve .PP before .RE; effect found in audio/pms(1) 2015-01-24 02:41 schwarze Changed: man.7 (1.131), "Exp", lines: +3 -7 man.c (1.148), "Exp", lines: +2 -2 man.h (1.69), "Exp", lines: +1 -2 man_html.c (1.109), "Exp", lines: +1 -2 man_macro.c (1.94), "Exp", lines: +1 -2 man_term.c (1.166), "Exp", lines: +1 -2 man_validate.c (1.109), "Exp", lines: +0 -1 roff.c (1.256), "Exp", lines: +3 -2 Strangely, ignoring the roff(7) .na request was implemented in the man(7) parser. Simplify the code by moving it into the roff(7) parser, also making it work for mdoc(7). 2015-01-24 02:14 schwarze Changed: man.7 (1.130), "Exp", lines: +20 -20 change .Cm to .Ar for macro arguments 2015-01-24 01:58 schwarze Changed: man.7 (1.129), "Exp", lines: +24 -4 man_macro.c (1.93), "Exp", lines: +23 -3 mandoc.1 (1.135), "Exp", lines: +16 -3 mandoc.h (1.186), "Exp", lines: +2 -1 read.c (1.115), "Exp", lines: +2 -1 Support .RE with an argument; needed for audio/pms(1). 2015-01-24 01:45 schwarze Changed: TODO (1.197), "Exp", lines: +6 -2 new task: escape blank at the beginning of a line 2015-01-23 21:59 schwarze Changed: configure.local.example (1.4), "Exp", lines: +3 -2 improve homebrew cellar config example 2015-01-23 20:18 schwarze Changed: roff.7 (1.68), "Exp", lines: +6 -6 roff.c (1.255), "Exp", lines: +4 -4 While ignoring the .ta (set tab stops) and .ti (temp indent) requests is sometimes harmless, it often causes seriously ugly output, so flag these requests as unsupported rather than ignoring them. Discussed with naddy@. 2015-01-23 14:21 schwarze Changed: mdoc_html.c (1.219), "Exp", lines: +6 -6 mdoc_man.c (1.82), "Exp", lines: +6 -6 mdoc_term.c (1.303), "Exp", lines: +6 -6 Let .Aq/.Ao/.Ac print "<>" instead of the normal "\(la\(ra" when the only child is .Mt, not when the preceding node is .An, to improve robustness. Triggered by a question from Svyatoslav Mishyn <juef at openmailbox dot org> (Crux Linux). 2015-01-23 00:42 schwarze Changed: roff.7 (1.67), "Exp", lines: +10 -2 roff.c (1.254), "Exp", lines: +41 -3 Wonders of roff(7): Integer numbers in numerical expressions can carry scaling units, and some manuals (e.g. in devel/grcs) actually use that, so let's support it. Missing feature reported by naddy@. 2015-01-22 22:51 schwarze Changed: roff.c (1.253), "Exp", lines: +20 -2 Slightly improve \w width measurements: Count special characters with the same width as ASCII characters and treat all other escape sequences as if they had a width of 0. Certainly not perfect, but a bit better. For example, GNU RCS ci(1) needs this; reported by naddy@. 2015-01-22 21:38 schwarze Changed: mandoc.h (1.185), "Exp", lines: +3 -2 read.c (1.114), "Exp", lines: +9 -7 Traditional roff(7) explicitly allows certain control characters in the input stream (SOH, STX, ETX, ENQ, ACK, BEL, BS) for specific purposes (leaders, backspace, delimiters, .tr), but making sure these don't leak through to the output is tricky, so mark them as unsupported for now. 2015-01-22 19:26 schwarze Changed: read.c (1.113), "Exp", lines: +7 -3 Don't let a failing mparse_open() clobber the filename pointer; fixes error message content and a use after free for .so with non-existent target when -Wall or -Tlint is given. 2015-01-22 00:09 schwarze Changed: roff.7 (1.66), "Exp", lines: +3 -3 improve wording; patch from jmc@ 2015-01-21 22:41 schwarze Changed: configure (1.18), "Exp", lines: +3 -1 configure.local.example (1.3), "Exp", lines: +10 -2 mandocdb.c (1.184), "Exp", lines: +10 -2 Support homebrew-style linking on Mac OS X. Idea found together with Alexis Hildebrandt <surryhill at gmail dot com>. 2015-01-21 20:33 schwarze Changed: html.c (1.185), "Exp", lines: +9 -2 mandoc.c (1.91), "Exp", lines: +7 -5 mandoc.h (1.184), "Exp", lines: +3 -2 mandoc_escape.3 (1.3), "Exp", lines: +8 -7 roff.7 (1.65), "Exp", lines: +6 -5 term.c (1.243), "Exp", lines: +27 -2 Rudimentary implementation of the roff(7) \o escape sequence (overstrike). This is of some relevance because the pod2man(1) preamble abuses it for the icelandic letter Thorn, instead of simply using \(TP and \(Tp. Missing feature found by sthen@ in DateTime::Locale::is_IS(3p). 2015-01-21 19:40 schwarze Changed: term_ps.c (1.72), "Exp", lines: +34 -4 Improve overstriking. When overstriking a wider character with a narrower one, center the latter horizontally. After a group of characters printed in the same position, advance by the width of the widest one among them. 2015-01-21 02:16 schwarze Changed: roff.c (1.252), "Exp", lines: +10 -11 pass empty request lines through to tbl(7); sometimes, they end a layout 2015-01-21 00:47 schwarze Changed: libroff.h (1.35), "Exp", lines: +2 -2 tbl.c (1.32), "Exp", lines: +3 -6 tbl_data.c (1.33), "Exp", lines: +13 -23 blank lines in tables do not need special handling; simplifies code and reduces groff/mandoc differences in OpenBSD base by about 1% 2015-01-20 22:45 schwarze Changed: mandoc.1 (1.134), "Exp", lines: +3 -3 roff.7 (1.64), "Exp", lines: +4 -4 typo fixes from jmc@ 2015-01-20 21:16 schwarze Changed: main.c (1.217), "Exp", lines: +8 -4 man.1 (1.12), "Exp", lines: +5 -4 mandoc.1 (1.133), "Exp", lines: +62 -24 mandoc.h (1.183), "Exp", lines: +13 -8 read.c (1.112), "Exp", lines: +13 -9 roff.7 (1.63), "Exp", lines: +725 -55 roff.c (1.251), "Exp", lines: +457 -19 Split the -Werror message level into -Werror (broken manual, probably using mandoc is better than using groff) and -Wunsupp (manual using unsupported low-level roff(7) feature, probably using groff is better than using mandoc). Once this feature is complete, it is intended to help porting, making the decision whether to USE_GROFF easier. As a first step, distinguish four classes of roff(7) requests: 1. Supported (currently 24 requests) 2. Currently ignored because unimportant (120) -> no message 3. Ignored for good because insecure (14) -> -Werror 4. Currently unsupported (68) -> these trigger the new -Wunsupp messages 2015-01-20 19:39 schwarze Changed: eqn.7 (1.32), "Exp", lines: +3 -3 mandoc_char.7 (1.59), "Exp", lines: +3 -3 mdoc.7 (1.249), "Exp", lines: +5 -5 roff.7 (1.62), "Exp", lines: +3 -3 tbl.7 (1.22), "Exp", lines: +5 -5 change spelling of centre to center: consistent with other man pages and the name of the syntax elements being described; from tedu@ 2015-01-20 18:21 schwarze Changed: mansearch.c (1.53), "Exp", lines: +23 -49 Make the man(1) and apropos(1) options -s and -S much less expensive: Do not append an SQL clause looking into the large "keys" table. Instead, filter the result of the SQL query in buildnames() where equivalent data from the much smaller "mlinks" table is already available for free. This is relevant because man(1) uses the equivalent of "-S ${MACHINE}" by default since main.c rev. 1.216, to make sure that manuals for the current architecture are shown. With many ports installed, this patch can speed up man(1) by a factor of more than a hundred. Slowness reported by Theo Buehler <theo at math dot ethz dot ch>, thanks! 2015-01-16 21:15 schwarze Changed: main.c (1.216), "Exp", lines: +6 -1 Let man(1) show manuals for the current architecture by default, and support the MACHINE environment variable as documented in man(1). Missing feature reported by pascal@. 2015-01-16 16:53 schwarze Changed: roff.c (1.250), "Exp", lines: +3 -1 Parse and ignore .IX (generate index entry) macros because pod2man(1) emits them, by default without defining them, relying on the roff(7) quirk that undefined macros have no effect. 2015-01-15 04:26 schwarze Changed: cgi.c (1.103), "Exp", lines: +3 -11 demandoc.c (1.13), "Exp", lines: +9 -9 libmandoc.h (1.55), "Exp", lines: +3 -3 main.c (1.215), "Exp", lines: +3 -8 man.1 (1.11), "Exp", lines: +8 -8 man.c (1.147), "Exp", lines: +2 -3 mandoc.1 (1.132), "Exp", lines: +41 -53 mandoc.3 (1.31), "Exp", lines: +15 -20 mandoc.h (1.182), "Exp", lines: +2 -5 mandocdb.c (1.183), "Exp", lines: +6 -9 mdoc.c (1.234), "Exp", lines: +2 -3 read.c (1.111), "Exp", lines: +12 -41 Fatal errors no longer exist. If a file can be opened, mandoc will produce some output; at worst, the output may be almost empty. Simplifies error handling and frees a message type for future use. 2015-01-15 02:29 schwarze Changed: mandoc.3 (1.30), "Exp", lines: +9 -12 mandoc.h (1.181), "Exp", lines: +2 -2 read.c (1.110), "Exp", lines: +18 -16 downgrade .so failure from FATAL to ERROR 2015-01-14 22:58 schwarze Changed: libmandoc.h (1.54), "Exp", lines: +2 -3 mandoc.h (1.180), "Exp", lines: +2 -2 read.c (1.109), "Exp", lines: +2 -5 roff.c (1.249), "Exp", lines: +8 -3 downgrade ".so with absolute path" from FATAL to ERROR; allows to get rid of ROFF_ERR 2015-01-14 22:44 schwarze Changed: libroff.h (1.34), "Exp", lines: +3 -3 tbl.c (1.31), "Exp", lines: +5 -3 tbl_layout.c (1.31), "Exp", lines: +6 -6 tbl_opts.c (1.16), "Exp", lines: +2 -5 simplify by getting rid of ROFF_ERR in tbl(7) parsing; no functional change 2015-01-14 22:02 schwarze Changed: mandoc.1 (1.131), "Exp", lines: +13 -9 mandoc.h (1.179), "Exp", lines: +2 -7 read.c (1.108), "Exp", lines: +15 -32 To get rid of SYSERR entries in enum mandocerr, downgrade problems with missing and unreadable files from SYSERR to ERROR. Needed for upcoming work. As a bonus, this minimally simplifies code and documentation. 2015-01-14 21:27 schwarze Changed: main.c (1.214), "Exp", lines: +13 -7 if earlier files set a non-zero exit status, do not allow later files to reset it to zero 2015-01-14 17:49 schwarze Changed: mandoc.h (1.178), "Exp", lines: +1 -8 read.c (1.107), "Exp", lines: +16 -35 Simplify handling of system errors: just exit(3). We already do the same for malloc(3) failure. The is no virtue in trying to survive failure of fork(2) and the like. 2015-01-13 23:17 schwarze Changed: main.c (1.213), "Exp", lines: +106 -5 Be developer-friendly, 'cause OpenBSD devs like to: cd /usr/src/share/man/man4; vi newdev.4 Makefile; make install; man newdev When a manual is missing from an outdated database, let man(1) show it anyway, using a KISS file system lookup as a fallback. Requested by deraadt@. 87 new lines of code doesn't seem too much bloat to me. Of course, keeping your mandoc.db(5) files up to date with makewhatis(8) or weekly(8) is still required for apropos(1) to find your new pages. 2015-01-13 13:22 schwarze Changed: main.c (1.212), "Exp", lines: +36 -25 do not spawn a pager when there is no output; issue pointed out by deraadt@ 2015-01-07 12:19 schwarze Changed: roff.c (1.248), "Exp", lines: +2 -1 Bugfix: When the invocation of a user-defined macro follows a roff conditional request on the same input line, don't skip the first few bytes of its content. 2015-01-03 12:55 schwarze Changed: mandocdb.c (1.182), "Exp", lines: +16 -23 Fix a potential NULL pointer access in an error message after waitpid() failure; found using detailed information provided by Ulrich Spoerlein <uqs at FreeBSD> about FreeBSD Coverity CID 1261304. 2015-01-03 00:59 schwarze Changed: mdoc.7 (1.248), "Exp", lines: +17 -8 Given the excessively technical description in the old mdoc_samples(7) manual and its successor groff_mdoc(7), i always considered .Ql as purely physical markup, but it turns out describing it better allows to give it a semantic meaning (in-line literal display) that doesn't contradict existing usage. One less physical, one more semantic macro, yay! Found in a discussion with Steffen Nurpmeso <sdaoden at yandex dot com>. 2015-01-02 17:02 schwarze Changed: mandocdb.c (1.181), "Exp", lines: +4 -2 Explicitly set the *data member of struct ohash_info to NULL. It is never dereferenced, but it gets copied around, which worries static analysis tools and might also confuse human auditors. FreeBSD Coverity CID 1261298, 1261299, 1261300, reported by Pedro Giffuni and Ulrich Spörlein <pfg@ and uqs@ at FreeBSD>. 2015-01-01 19:28 schwarze Changed: roff.c (1.247), "Exp", lines: +7 -5 Fix a buffer overrun triggered by a trailing backslash at EOF in an unclosed conditional body. If the memory contained the byte sequence "\}" after the end of the buffer before the next NUL, this could even write beyond the end of the buffer, specifically '&' to the location of the '}'. Found by jsg@ with afl. 2015-01-01 18:11 schwarze Changed: mandoc.c (1.90), "Exp", lines: +4 -4 Fix a read buffer overrun triggered by trailing \s- or trailing \s+ without the required subsequent argument; found by jsg@ with afl. 2015-01-01 15:36 schwarze Changed: LICENSE (1.6), "Exp", lines: +2 -2 eqn_term.c (1.8), "Exp", lines: +12 -9 Don't dereference NULL pointers when formatting missing denominators, subscripts, superscripts, or "from" or "to" arguments. Found by jsg@ with afl. 2015-01-01 13:20 schwarze Changed: main.c (1.211), "Exp", lines: +3 -2 If man(1) only has one single argument, always interpret it as a name, never as a section. Who would have thought that people call their manual pages 7z(1), 9c(1), 9p(1), and 9p(3)... Patch from Sebastien Marie <semarie dash openbsd at latrappe dot fr>. 2014-12-31 20:42 schwarze Changed: mdoc.7 (1.247), "Exp", lines: +7 -4 describe .Ql more precisely; defect pointed out by Steffen Nurpmeso <sdaoden at yandex dot com> 2014-12-31 16:52 schwarze Changed: main.c (1.210), "Exp", lines: +6 -2 main.h (1.20), "Exp", lines: +3 -1 term_ascii.c (1.42), "Exp", lines: +15 -1 When showing more than one formatted manual page, insert horizontal lines between pages. Suggested by Theo Buehler <theo at math dot ethz dot ch>. Even in UTF-8 output mode, do not use fancy line drawing characters such that you can easily use /^--- to skip to the next manual in your pager. 2014-12-30 21:34 schwarze Changed: mandoc.db.5 (1.3), "Exp", lines: +6 -6 fix wrong paths below FILES; from Theo Buehler <theo at math dot ethz dot ch> 2014-12-30 20:41 schwarze Changed: mandocdb.c (1.180), "Exp", lines: +2 -1 When a file is given on the command line, actually exists, and its name relative to the respective manual tree is longer than PATH_MAX, do not leak the memory allocated to hold the name. Not sure that can actually happen, but better safe than sorry. FreeBSD Coverity Scan CID 1261303, reported by Pedro Giffuni <pfg@>. 2014-12-28 15:23 schwarze Changed: man.7 (1.128), "Exp", lines: +9 -3 mdoc.7 (1.246), "Exp", lines: +23 -27 Improve documentation of the header/footer macros .Dt, .Os, .TH: * State the defaults for .Os and the fourth .TH argument. * Sync the section titles, and stop advertising obscure sections that aren't actually fully supported and certainly not recommended for use. 2014-12-28 14:42 schwarze Changed: libman.h (1.67), "Exp", lines: +2 -1 libmandoc.h (1.53), "Exp", lines: +3 -2 man.1 (1.10), "Exp", lines: +5 -2 man.c (1.146), "Exp", lines: +4 -2 man_validate.c (1.108), "Exp", lines: +2 -0 mandoc.1 (1.130), "Exp", lines: +5 -2 read.c (1.106), "Exp", lines: +7 -4 mdoc(7) already uses the mandoc(1) -Ios argument in the footer line when .Os has no argument, so do the same for man(7) when .TH has less than four arguments; there is no reason to treat both differently. Issue found following a question from Thomas Klausner <wiz at NetBSD>. 2014-12-28 14:16 schwarze Changed: roff.c (1.246), "Exp", lines: +5 -7 improve previous: do the size check up front to avoid leaking memory 2014-12-25 17:23 schwarze Changed: roff.7 (1.61), "Exp", lines: +6 -4 roff.c (1.245), "Exp", lines: +8 -1 Reduce memory and time consumption on certain malformed input files by limiting the length of expanded input lines during the (usually recursive) expansion of user defined strings. Resource hogging found by jsg@ with afl. 2014-12-24 23:32 schwarze Changed: mdoc_man.c (1.81), "Exp", lines: +28 -29 mdoc_term.c (1.302), "Exp", lines: +57 -50 term.c (1.242), "Exp", lines: +2 -2 Support negative indentations for mdoc(7) displays and lists. Not exactly recommended for use, rather for groff compatibility. While here, introduce similar SHRT_MAX limits as in man(7), fixing a few cases of infinite output found by jsg@ with afl. 2014-12-24 18:04 schwarze Changed: man.h (1.68), "Exp", lines: +2 -1 man_term.c (1.165), "Exp", lines: +14 -28 For .RS, we need to save the information how much we actually indented because negative indents can get truncated, in which case we no longer know how to restore the original indent at the end of the block. This also solves another case of effectively infinite output found by jsg@ with afl, triggered by very large negative indents. 2014-12-24 15:38 schwarze Changed: tbl_term.c (1.32), "Exp", lines: +8 -4 Prevent unsigned integer underflow when a number is too wide for a table cell with an "nz" layout specification, causing essentially infinite output as found by jsg@ with afl. 2014-12-24 09:58 schwarze Changed: man_term.c (1.164), "Exp", lines: +19 -10 term.c (1.241), "Exp", lines: +4 -2 When a man(7) document contains unreasonably large numbers for indentations or paragraph distances, large output may be generated, which is practically the same as an endless loop; found by jsg@ with afl. Reject such unreasonably large numbers beyond arbitrary limits similar to those used by groff (max. 65 blank lines between paragraphs and max. SHRT_MAX characters per output line) and fall back to defaults when exceeded. Having the limits behave in exactly the same way is not relevant. 2014-12-23 13:48 schwarze Changed: man_term.c (1.163), "Exp", lines: +72 -106 mdoc_html.c (1.218), "Exp", lines: +7 -3 mdoc_man.c (1.80), "Exp", lines: +5 -1 mdoc_term.c (1.301), "Exp", lines: +3 -2 out.c (1.57), "Exp", lines: +1 -4 term.c (1.240), "Exp", lines: +9 -15 term.h (1.110), "Exp", lines: +3 -5 support negative horizontal widths in man(7); minus twenty lines of code in spite of enhanced functionality 2014-12-23 10:09 schwarze Changed: mdoc_man.c (1.79), "Exp", lines: +3 -3 fix typo in previous 2014-12-23 09:31 schwarze Changed: man_html.c (1.108), "Exp", lines: +2 -2 man_term.c (1.162), "Exp", lines: +5 -15 mdoc_html.c (1.217), "Exp", lines: +3 -3 mdoc_man.c (1.78), "Exp", lines: +3 -3 mdoc_term.c (1.300), "Exp", lines: +9 -18 out.c (1.56), "Exp", lines: +33 -34 some scaling unit fixes: - .sp with an invalid argument is .sp 1v, not .sp 0v - in man(1), trailing garbage doesn't make scaling units invalid 2014-12-23 08:15 schwarze Changed: man_term.c (1.161), "Exp", lines: +3 -4 even if the second argument to .IP is invalid, don't print it 2014-12-23 06:16 schwarze Changed: term.c (1.239), "Exp", lines: +19 -8 Fix vertical scaling. Obviously, nobody ever had a serious look at this. Basic units, centimeters, points, ens, ems, and the rounding algorithm were all wrong, only inches, pica, and the default vertical span worked. 2014-12-23 03:28 schwarze Changed: out.c (1.55), "Exp", lines: +13 -44 In a2roffsu(), do not parse the number twice. Gets rid of 25 lines of code and one static buffer. No functional change for numbers shorter than BUFSIZ characters. 2014-12-23 01:57 schwarze Changed: man_term.c (1.160), "Exp", lines: +5 -3 correctly handle scaling units after .PD 2014-12-22 23:27 schwarze Changed: mdoc_macro.c (1.161), "Exp", lines: +3 -3 The code already pays attention not to close the same block twice. Similarly, avoid having the same block break two other blocks. In some situations, this could lead to an endless loop in rew_sub() found by jsg@ with afl. Minimal example: .Po Ao Pc Bo Pc Ac Bc 2014-12-21 14:49 schwarze Changed: main.c (1.209), "Exp", lines: +8 -8 Use -m for macro set selection in mandoc(1) mode only, not in man(1) and apropos(1) mode. While here, put a space character between options and option arguments in error messages. Both reported by Alessandro DE LAURENZIS <just22 dot adl at gmail dot com>. 2014-12-21 14:14 schwarze Changed: libmandoc.h (1.52), "Exp", lines: +1 -2 mandoc_headers.3 (1.2), "Exp", lines: +7 -4 msec.c (1.14), "Exp", lines: +2 -1 ISO C99 explicitly forbids forward references to enum types (6.7.2.3.3.); patch from daniel@ 2014-12-20 02:26 schwarze Changed: mdoc_macro.c (1.160), "Exp", lines: +20 -9 Fix two issues causing a class of assertion failures found by jsg@ with afl. 1) rew_sub(): Make sure REWIND_MORE is acted upon even when followed by REWIND_NONE. This prevents .It from ending up inside other children of .Bl. 2) blk_exp_close(): Only allow extension of .Bl when it has at least one .It. Otherwise, a broken child block could be moved in front of the .Bl, effectively resulting in a .Bl that ended before it began. 2014-12-20 00:20 schwarze Changed: html.c (1.184), "Exp", lines: +19 -27 resolve some code duplication; no functional change 2014-12-19 17:12 schwarze Changed: term.c (1.238), "Exp", lines: +19 -15 term.h (1.109), "Exp", lines: +5 -5 term_ascii.c (1.41), "Exp", lines: +4 -1 term_ps.c (1.71), "Exp", lines: +4 -1 Enforcing an arbitrary, implementation dependent, undocumented limit by calling assert() when valid user input exceeds it is a bad idea. Allocate the terminal font stack dynamically instead of crashing above 10 entries. Issue found by jsg@ with afl. 2014-12-19 04:58 schwarze Changed: preconv.c (1.13), "Exp", lines: +58 -75 Rewrite the low-level UTF-8 parser from scratch. It accepted invalid byte sequences like 0xc080-c1bf, 0xe08080-e09fbf, 0xeda080-edbfbf, and 0xf0808080-f08fbfbf, produced valid roff Unicode escape sequences from them, and the algorithm contained strong defenses against any attempt to fix it. This cures an assertion failure in the terminal formatter caused by sneaking in ASCII 0x08 (backspace) by "encoding" it as an (invalid) multibyte UTF-8 sequence, found by jsg@ with afl. As a bonus, the new algorithm also reduces the code in the function by about 20%. 2014-12-18 21:11 schwarze Changed: main.c (1.208), "Exp", lines: +5 -3 man.1 (1.9), "Exp", lines: +3 -3 update usage() and the list of non-standard (i.e. non-posix) options; from jmc@ 2014-12-18 20:58 schwarze Changed: mdoc_macro.c (1.159), "Exp", lines: +3 -2 Don't let .Ta creep into an already-closed list; same as for .It. Fixes an assertion found by jsg@ with afl. 2014-12-18 20:15 schwarze Changed: mdoc_validate.c (1.265), "Exp", lines: +5 -2 Only keep leading .Sm inside a list when it immediately precedes the first .It. Otherwise, move it out together with whatever follows. Fixing an assertion failure found by jsg@ with afl. 2014-12-18 19:23 schwarze Changed: mdoc_validate.c (1.264), "Exp", lines: +7 -7 When the head of a list item is extended with a partial explicit macro (for example .Xo) and never closed again, the item ends up without a body block. This can even happen for list types that usually don't have heads in the first place. So even in this case, check for the existence of the body before accessing it. NULL pointer access found by jsg@ with afl. 2014-12-18 17:43 schwarze Changed: roff.c (1.244), "Exp", lines: +8 -2 Don't let the modulo operator divide by zero. Found by jsg@ with afl. 2014-12-18 03:10 schwarze Changed: mdoc.h (1.133), "Exp", lines: +2 -1 mdoc_macro.c (1.158), "Exp", lines: +32 -21 The code is already careful to not add items to lists that were already closed. In this respect, also consider lists closed that have broken another block, their closure pending until the end of the broken block. This avoids syntax tree corruption leading to a NULL pointer access found by jsg@ with afl. 2014-12-17 20:31 schwarze Changed: TODO (1.196), "Exp", lines: +5 -1 [[:<:]] is not POSIX 2014-12-17 20:04 schwarze Changed: man.1 (1.8), "Exp", lines: +67 -10 minimally document -IOKTW; requested by naddy@ 2014-12-17 18:45 schwarze Changed: main.c (1.207), "Exp", lines: +7 -6 Be a bit more lenient in what to accept for section names given as the first man(1) command line argument without -s: Accept digits like "1", "2"; digit+letter like "3p", "1X"; and "n". Issue reported by Svyatoslav Mishyn <juef at openmailbox dot org> (Crux Linux). 2014-12-16 23:44 schwarze Changed: mandoc.1 (1.129), "Exp", lines: +3 -2 mandoc.h (1.177), "Exp", lines: +2 -1 read.c (1.105), "Exp", lines: +2 -1 roff.c (1.243), "Exp", lines: +20 -5 Ignore mdoc(7) and man(7) macros inside tbl(7) code because they would abort the table in an unclean way, causing assertion failures found by jsg@. 2014-12-16 19:50 schwarze Changed: chars.in (1.51), "Exp", lines: +3 -3 mandoc_char.7 (1.58), "Exp", lines: +7 -7 correct -Tutf8 and -Thtml rendering of \(~= and change the name of \(-~ to \(|= to agree with groff; difference found by Carsten dot Kunze at arcor dot de 2014-12-16 17:26 schwarze Changed: man_macro.c (1.92), "Exp", lines: +3 -3 Explicit block closure macros clobber next-line block head scope, just like explicit block macros themselves. Fixing an assertion failure jsg@ found with afl. 2014-12-16 03:53 schwarze Changed: roff.c (1.242), "Exp", lines: +2 -2 When a string comparison condition contains no mismatching character but ends without the final delimiter, the parse point was advanced one character too far and the invalid pointer returned to the caller of roff_parseln(). Later use could potentially advance the pointer even further and maybe even write to it. Fixing a buffer overrun found by jsg@ with afl (the most severe so far). 2014-12-16 01:22 schwarze Changed: roff.c (1.241), "Exp", lines: +6 -3 When a numerical condition errors out after consuming at least one character of input, treat it as false, do not retry it as a string comparison condition. This also fixes a read buffer overrun that happened when the numerical condition advanced to the end of the input line before erroring out, found by jsg@ with afl. 2014-12-15 23:43 schwarze Changed: roff.c (1.240), "Exp", lines: +3 -1 Empty conditions count as false. When negated, they still count as false. Found when investigating crashes jsg@ found with afl. Not completely fixing the crashes yet. 2014-12-15 19:42 schwarze Changed: chars.in (1.50), "Exp", lines: +8 -8 mandoc_char.7 (1.57), "Exp", lines: +10 -10 correct some character names to match groff; reported by Carsten dot Kunze at arcor dot de 2014-12-15 18:05 schwarze Changed: main.c (1.206), "Exp", lines: +5 -4 Let "man n open" do the same as "man -s n open" again, that is, show the open(n) Tcl manual, as documented in man(1). Issue reported by Svyatoslav Mishyn <juef at openmailbox dot org> (Crux Linux). 2014-12-15 17:30 schwarze Changed: mandoc.c (1.89), "Exp", lines: +3 -1 Catch localtime() failure for additional safety; patch from Jan Stary <hans at stare dot cz> some time ago. 2014-12-13 13:43 tag VERSION_1_13_2 2014-12-13 13:43 schwarze Changed: NEWS (1.8), "Exp", lines: +2 -2 configure (1.17), "Exp", lines: +1 -1 version 1.13.2 2014-12-13 13:14 schwarze Changed: TODO (1.195), "Exp", lines: +11 -2 mdoc_macro.c (1.157), "Exp", lines: +3 -5 Fix a regression found by Carsten dot Kunze at arcor dot de: Do not show bogus quotes when .Bl -column phrases are quoted. 2014-12-12 21:44 schwarze Changed: mansearch.3 (1.3), "Exp", lines: +3 -3 escape Nd on a macro line 2014-12-11 19:19 schwarze Changed: main.c (1.205), "Exp", lines: +20 -5 Guard some come needed for database support only by #if HAVE_SQLITE3. Compiler warnings about unused code reported by wiz@NetBSD. 2014-12-11 18:20 schwarze Changed: compat_fts.c (1.6), "Exp", lines: +9 -31 Make this work on illumos: * define MAX() * ignore O_DIRECTORY if it isn't defined * garbage collect two unused variables Issues reported and fix tested by wiz@NetBSD. 2014-12-11 09:19 schwarze Changed: compat_strcasestr.c (1.4), "Exp", lines: +2 -1 fix RCS IDs 2014-12-11 09:05 schwarze Changed: compat_fts.c (1.5), "Exp", lines: +5 -4 compat_reallocarray.c (1.4), "Exp", lines: +8 -2 compat_strsep.c (1.4), "Exp", lines: +2 -1 sync to OpenBSD 2014-12-11 07:56 schwarze Changed: LICENSE (1.5), "Exp", lines: +3 -3 new Copyright years 2014-12-11 07:44 schwarze Changed: INSTALL (1.9), "Exp", lines: +4 -3 link to EuroBSDCon 2014 2014-12-10 22:19 schwarze Changed: example.style.css (1.54), "Exp", lines: +7 -4 correctly align document header and footer; suggested by kristaps@ 2014-12-10 21:54 schwarze Changed: TODO (1.194), "Exp", lines: +4 -3 the asciidoc/docbook toolchain uses braindead \h for indentation 2014-12-09 12:05 schwarze Changed: INSTALL (1.8), "Exp", lines: +6 -3 NEWS (1.7), "Exp", lines: +70 -1 more release preparations 2014-12-09 09:19 schwarze Changed: INSTALL (1.7), "Exp", lines: +43 -18 first cut at updating for the next release 2014-12-09 09:14 schwarze Changed: Makefile (1.453), "Exp", lines: +18 -11 configure (1.16), "Exp", lines: +24 -0 configure.local.example (1.2), "Exp", lines: +30 -2 main.c (1.204), "Exp", lines: +5 -6 Support choosing alternative binary and manual names from configure.local, to help downstream distributions avoid naming conflicts. 2014-12-09 07:29 schwarze Changed: Makefile (1.452), "Exp", lines: +12 -19 configure (1.15), "Exp", lines: +5 -2 main.c (1.203), "Exp", lines: +10 -1 mandocdb.c (1.179), "Exp", lines: +2 -2 Integrate the makewhatis binary into the mandoc binary just like we do it on OpenBSD. Smaller and neater. While here, let ./configure set INSTALL_TARGETS. 2014-12-09 06:31 schwarze Changed: Makefile (1.451), "Exp", lines: +28 -19 Some sorting and some more comments. Drop DISTDIR from www-install target. 2014-12-09 06:11 schwarze Changed: Makefile (1.450), "Exp", lines: +8 -12 Install "man" as a hardlink to "mandoc" during db-install. Install man(1) manual in db-install, not base-install. Get rid of the useless variables BASEBIN, DBBIN, CGIBIN. 2014-12-06 01:23 schwarze Changed: mansearch.c (1.52), "Exp", lines: +4 -2 When opening mandoc.db fails, tell the user in which directory. Improving an unhelpful error message reported by millert@. 2014-12-05 21:55 schwarze Changed: main.c (1.202), "Exp", lines: +23 -10 implement help(1) 2014-12-05 16:18 schwarze Changed: mandocdb.c (1.178), "Exp", lines: +28 -25 Improve parsing of function names. This gets rid of the last bogus entries in base and Xenocara. 2014-12-05 15:16 schwarze Changed: mandocdb.c (1.177), "Exp", lines: +4 -1 Do not misinterpret function arguments as function names; improves semantic analysis of more than 300 manuals. 2014-12-05 14:26 schwarze Changed: mandocdb.c (1.176), "Exp", lines: +113 -122 Render text before, not after accumulating flag bits, such that flags for different representations of the same string end up in the same database entry. Improves name classification for 500 manuals. 2014-12-04 21:48 schwarze Changed: mandocdb.c (1.175), "Exp", lines: +17 -4 When finding a .so link after the page was already processed, do not clobber the existing names flags; instead, OR the additional flags into them. 2014-12-04 20:13 schwarze Changed: mandocdb.c (1.174), "Exp", lines: +28 -11 correctly store .Dt and .TH information in the names table 2014-12-04 18:31 schwarze Changed: mandocdb.c (1.173), "Exp", lines: +17 -2 in the SYNOPSIS, add .Fo and first .Fn arguments to the names table 2014-12-04 17:36 schwarze Changed: mandocdb.c (1.172), "Exp", lines: +48 -25 In the SYNOPSIS, if .Nm occurs without argument, give the first .Nm that occurred in the document a NAME_SYN entry in the names table. 2014-12-04 02:05 schwarze Changed: man_html.c (1.107), "Exp", lines: +2 -2 man_term.c (1.159), "Exp", lines: +2 -2 out.c (1.54), "Exp", lines: +2 -2 fix handling of roff requests having a default scale other than "n", in particular .sp which uses "v", when the scale is not specified; cures groff-mandoc differences in about a dozen Xenocara manuals 2014-12-04 01:33 schwarze Changed: man_term.c (1.158), "Exp", lines: +24 -13 Ignore macros that never produce any text when deciding whether vertical whitespace is needed before a section or subsection. Cures groff-mandoc differences in more than 300 manuals, mostly Xenocara, some curses, a few GNU. 2014-12-03 01:46 schwarze Changed: TODO (1.193), "Exp", lines: +1 -24 delete five entries that were already fixed 2014-12-02 11:31 schwarze Changed: main.c (1.201), "Exp", lines: +2 -2 mandoc.1 (1.128), "Exp", lines: +8 -6 Switch the default output mode from -Tascii to -Tlocale. This doesn't change anything unless LC_CTYPE is set, but it helps when running with LC_TYPE=something.UTF-8. OK tedu@ and earlier positive feedback from: bentley@ deraadt@ naddy@ stsp@ uqs@freebsd wiz@netbsd 2014-12-02 11:13 schwarze Changed: TODO (1.192), "Exp", lines: +7 -1 note to self to not forget about groff 2014-12-02 10:41 schwarze Changed: TODO (1.191), "Exp", lines: +3 -2 we really need .ta 2014-12-02 10:08 schwarze Changed: TODO (1.190), "Exp", lines: +1 -6 html.c (1.183), "Exp", lines: +3 -2 html.h (1.70), "Exp", lines: +2 -1 man_html.c (1.106), "Exp", lines: +4 -11 man_term.c (1.157), "Exp", lines: +5 -4 mdoc_html.c (1.216), "Exp", lines: +3 -2 mdoc_term.c (1.299), "Exp", lines: +3 -2 roff.7 (1.60), "Exp", lines: +6 -4 term.c (1.237), "Exp", lines: +3 -3 term.h (1.108), "Exp", lines: +2 -1 Fix the implementation and documentation of \c (continue text input line). In particular, make it work in no-fill mode, too. Reminded by Carsten dot Kunze at arcor dot de (Heirloom roff). 2014-12-01 08:09 schwarze Added: mandoc_headers.3 (1.1) Changed: Makefile (1.449), "Exp", lines: +3 -1 developer documentation regarding header files 2014-12-01 08:05 schwarze Changed: Makefile.depend (1.7), "Exp", lines: +8 -8 html.h (1.69), "Exp", lines: +6 -3 libmandoc.h (1.51), "Exp", lines: +6 -1 libroff.h (1.33), "Exp", lines: +3 -3 main.h (1.19), "Exp", lines: +4 -4 man_hash.c (1.29), "Exp", lines: +1 -2 man_html.c (1.105), "Exp", lines: +2 -3 mandoc.h (1.176), "Exp", lines: +3 -3 mansearch.h (1.23), "Exp", lines: +3 -1 mansearch_const.c (1.7), "Exp", lines: +1 -2 mdoc_html.c (1.215), "Exp", lines: +2 -3 msec.c (1.13), "Exp", lines: +1 -2 out.h (1.26), "Exp", lines: +5 -3 term.h (1.107), "Exp", lines: +8 -5 term_ps.c (1.70), "Exp", lines: +2 -3 header cleanup: * add missing forward declarations * remove needless header inclusions * some style unification 2014-12-01 04:34 schwarze Changed: html.c (1.182), "Exp", lines: +1 -2 The header libmandoc.h is part of the internal parser interface, but html.c is not part of the parser at all, so it cannot include that header, and actually, it doesn't need it. Found while auditing includes after Theo's recent *.h commit. 2014-12-01 04:14 schwarze Changed: mandoc.h (1.175), "Exp", lines: +2 -2 read.c (1.104), "Exp", lines: +3 -4 The file read.c is part of the parser, so it cannot include main.h, which is not part of the parser. Besides, the parser *does* modify the input buffer, so marking it "const" in the mparse_readmem() interface is an outright lie. Fix all this by killing the const, the UNCONST, and the bogus inclusion. 2014-12-01 04:05 schwarze Changed: html.h (1.68), "Exp", lines: +1 -5 libman.h (1.66), "Exp", lines: +1 -5 libmandoc.h (1.50), "Exp", lines: +1 -5 libmdoc.h (1.96), "Exp", lines: +1 -5 libroff.h (1.32), "Exp", lines: +1 -5 main.h (1.18), "Exp", lines: +1 -5 man.h (1.67), "Exp", lines: +1 -5 mandoc.h (1.174), "Exp", lines: +1 -5 mandoc_aux.h (1.3), "Exp", lines: +1 -5 manpath.h (1.7), "Exp", lines: +1 -5 mansearch.h (1.22), "Exp", lines: +1 -5 mdoc.h (1.132), "Exp", lines: +1 -5 out.h (1.25), "Exp", lines: +1 -5 term.h (1.106), "Exp", lines: +1 -5 remove unneccessary inclusion protection; patch from deraadt@ 2014-11-30 22:47 schwarze Changed: INSTALL (1.6), "Exp", lines: +2 -2 typo; Svyatoslav Mishyn <juef at openmailbox dot org> (Crux Linux) 2014-11-30 21:56 schwarze Changed: mdoc.7 (1.245), "Exp", lines: +3 -13 st.in (1.27), "Exp", lines: +1 -4 delete three standard abbreviations that are * no longer used in OpenBSD * not used in any of NetBSD, FreeBSD, or DragonFly * not supported by groff 2014-11-30 05:29 schwarze Changed: mandoc.1 (1.127), "Exp", lines: +10 -2 mandoc.h (1.173), "Exp", lines: +2 -1 mdoc_html.c (1.214), "Exp", lines: +3 -2 mdoc_macro.c (1.156), "Exp", lines: +17 -7 mdoc_man.c (1.77), "Exp", lines: +3 -2 mdoc_term.c (1.298), "Exp", lines: +3 -2 mdoc_validate.c (1.263), "Exp", lines: +2 -2 read.c (1.103), "Exp", lines: +2 -1 Multiple fixes with respect to .Pf: * The first argument of .Pf is not parsed. * Normal delimiter handling does not apply to the first argument of .Pf. * Warn if nothing follows a prefix (inspired by groff_mdoc(7)). * In that case, do not suppress spacing. 2014-11-30 02:36 schwarze Changed: mandoc.1 (1.126), "Exp", lines: +9 -2 mandoc.h (1.172), "Exp", lines: +2 -1 mdoc_macro.c (1.155), "Exp", lines: +17 -9 read.c (1.102), "Exp", lines: +2 -1 warn about attempts to call non-callable macros; inspired by a similar warning in the groff_mdoc(7) macros 2014-11-29 04:31 schwarze Changed: mdoc_macro.c (1.154), "Exp", lines: +21 -19 Reduce code duplication by reusing the same argument parser for in_line_eoln() macros and .Bl -column phrases. No functional change. 2014-11-29 03:37 schwarze Changed: libmdoc.h (1.95), "Exp", lines: +1 -3 mdoc_argv.c (1.99), "Exp", lines: +6 -11 mdoc_macro.c (1.153), "Exp", lines: +63 -116 Provide a helper function macro_or_word() and use it to prune the same chunk of argument parsing code out of five of the eight callback functions. The other three have too much special handling to participate. As a bonus, let lookup() and mdoc_args() deal with line macros and retire the lookup_raw() helper and the mdoc_zargs() internal interface function. No functional change, minus 40 lines of code. 2014-11-28 23:21 schwarze Changed: libmdoc.h (1.94), "Exp", lines: +2 -9 mdoc_argv.c (1.98), "Exp", lines: +81 -74 mdoc_macro.c (1.152), "Exp", lines: +5 -47 Fold the loop around mdoc_argv() into the function itself, it was the same in all four cases. As a bonus, get rid of one enum type that was used for internal communication. No functional change, minus 40 lines of code. 2014-11-28 18:57 schwarze Deleted: att.in (1.9) Changed: Makefile (1.448), "Exp", lines: +1 -2 Makefile.depend (1.6), "Exp", lines: +3 -5 att.c (1.13), "Exp", lines: +16 -4 AT&T is unlikely to release an new version of Research UNIX any time soon. So, it's pointless to make adding version strings easy for downstream. One source file less to maintain. 2014-11-28 18:36 schwarze Deleted: vol.c (1.12) vol.in (1.7) Changed: Makefile (1.447), "Exp", lines: +2 -5 libmdoc.h (1.93), "Exp", lines: +1 -2 mdoc.7 (1.244), "Exp", lines: +4 -34 mdoc_validate.c (1.262), "Exp", lines: +3 -13 Retire support for CSRG supplementary document titles. These are long obsolete and were never written in mdoc(7) in the first place. Removes 100 lines from source files. 2014-11-28 18:09 schwarze Deleted: arch.c (1.13) arch.in (1.16) Changed: Makefile (1.446), "Exp", lines: +3 -6 mandoc.1 (1.125), "Exp", lines: +2 -8 mandoc.h (1.171), "Exp", lines: +1 -2 mdoc.7 (1.243), "Exp", lines: +3 -8 mdoc_validate.c (1.261), "Exp", lines: +7 -14 read.c (1.101), "Exp", lines: +1 -2 Drop useless architecture table. Validating architecture names is a job for makewhatis(8)/mandoc.db(5), not for the parser. Removes 150 lines from source files and 4k (1%) from the binary. Bloat found by deraadt@. 2014-11-28 17:24 schwarze Changed: mdoc_validate.c (1.260), "Exp", lines: +1 -4 kill a pointless assert 2014-11-28 16:54 schwarze Changed: mdoc_term.c (1.297), "Exp", lines: +3 -9 mop up an #ifdef turd deraadt@ stepped into 2014-11-28 16:02 schwarze Changed: mdoc_term.c (1.296), "Exp", lines: +11 -7 Be more careful about meta->name. For weird input, it can be NULL. Fixing a NULL access jsg@ found with afl. 2014-11-28 06:27 schwarze Changed: libmandoc.h (1.49), "Exp", lines: +5 -5 man.c (1.145), "Exp", lines: +3 -5 mdoc.c (1.233), "Exp", lines: +3 -5 read.c (1.100), "Exp", lines: +17 -30 Simplify by making the eqn and tbl steering functions void; no functional change, minus 15 lines of code. 2014-11-28 05:51 schwarze Changed: libman.h (1.65), "Exp", lines: +10 -11 man.c (1.144), "Exp", lines: +70 -118 man.h (1.66), "Exp", lines: +1 -2 man_macro.c (1.91), "Exp", lines: +54 -87 man_validate.c (1.107), "Exp", lines: +49 -64 tree.c (1.60), "Exp", lines: +1 -6 Simplify by making many functions in the man(7) parser void, and some cleanup; no functional change, minus 70 lines. 2014-11-28 04:47 schwarze Changed: libmdoc.h (1.92), "Exp", lines: +4 -4 mdoc.c (1.232), "Exp", lines: +19 -15 mdoc_macro.c (1.151), "Exp", lines: +117 -199 Simplify by making the mdoc parser callbacks void, and some cleanup; no functional change, minus 50 lines of code. 2014-11-28 03:14 schwarze Changed: libmdoc.h (1.91), "Exp", lines: +9 -10 mdoc.c (1.231), "Exp", lines: +16 -26 mdoc_argv.c (1.97), "Exp", lines: +12 -22 mdoc_macro.c (1.150), "Exp", lines: +234 -376 Simplify the code by making various mdoc parser helper functions void. No functional change, minus 130 lines of code. 2014-11-28 01:05 schwarze Changed: libmdoc.h (1.90), "Exp", lines: +3 -3 mdoc.c (1.230), "Exp", lines: +18 -38 mdoc_macro.c (1.149), "Exp", lines: +45 -53 mdoc_validate.c (1.259), "Exp", lines: +222 -323 Simplify code by making mdoc validation handlers void. No functional change, minus 90 lines of code. 2014-11-27 23:40 schwarze Changed: mandoc.1 (1.124), "Exp", lines: +13 -13 mandoc.h (1.170), "Exp", lines: +2 -2 mdoc_validate.c (1.258), "Exp", lines: +2 -2 read.c (1.99), "Exp", lines: +2 -2 Downgrade .Bd -file from FATAL to ERROR. Since this was the last remaining FATAL error in this area, this change will allow major simplifications in the mdoc(7) parser. 2014-11-27 22:27 schwarze Changed: mdoc_html.c (1.213), "Exp", lines: +14 -9 mdoc_macro.c (1.148), "Exp", lines: +28 -8 mdoc_man.c (1.76), "Exp", lines: +14 -5 mdoc_term.c (1.295), "Exp", lines: +6 -4 Multiple fixes with respect to .Eo: 1. Correctly parse stray .Ec without preceding .Eo, avoiding an assertion violation found by jsg@ with afl. 2. Correctly parse .Ec arguments when breaking another block. 3. Correct spacing around closing delimiter when breaking another block. 4. Sync some related formatting control from -Tascii to -Thtml. 2014-11-27 16:20 schwarze Changed: mdoc.7 (1.242), "Exp", lines: +8 -9 mdoc_html.c (1.212), "Exp", lines: +2 -2 mdoc_man.c (1.75), "Exp", lines: +11 -11 mdoc_term.c (1.294), "Exp", lines: +5 -5 mdoc_validate.c (1.257), "Exp", lines: +13 -18 Fix the obsolete .Db (toggle debug mode) macro to ignore its arguments and not trigger an assertion when there is more than one argument; the latter found by jsg@ with afl. 2014-11-27 01:58 schwarze Changed: mandocdb.c (1.171), "Exp", lines: +19 -15 mansearch.c (1.51), "Exp", lines: +8 -13 mansearch.h (1.21), "Exp", lines: +1 -2 Make makewhatis(8) understand .so links to .gz pages. Drop the FORM_GZ annotation in the mpages table; it is conceptually wrong because it ought to be in the mlinks table: An uncompressed .so link file can point to a compressed manual page file and vice versa. Besides, it is no longer needed because mparse_open() handles it all. Sprinkle some KNF while here. 2014-11-27 00:30 schwarze Changed: manpath.c (1.19), "Exp", lines: +2 -2 fix build when HAVE_MANPATH is set; patch from <bapt at FreeBSD> 2014-11-26 23:42 schwarze Changed: mandoc.3 (1.29), "Exp", lines: +19 -8 read.c (1.98), "Exp", lines: +43 -23 Let mparse_readfd() use mparse_open() and mparse_wait() and let mparse_open() fall back to .gz files such that .so works even when the target is zipped, requested by and in part using ideas from <bapt at FreeBSD>. While here, make sure files are readable before forking, both for efficiency and for better error reporting. 2014-11-26 21:40 schwarze Changed: TODO (1.189), "Exp", lines: +4 -1 main.c (1.200), "Exp", lines: +4 -8 mandoc.3 (1.28), "Exp", lines: +2 -12 mandoc.h (1.169), "Exp", lines: +3 -4 mandocdb.c (1.170), "Exp", lines: +3 -6 read.c (1.97), "Exp", lines: +11 -8 Simplify the mparse_open()/mparse_wait() interface. Don't bother the user with the PID of the child process, store it inside the opaque mparse handle. 2014-11-26 19:24 schwarze Changed: mdoc_validate.c (1.256), "Exp", lines: +1 -3 remove an unreachable warning about .Sm arguments 2014-11-26 19:22 schwarze Changed: mdoc_macro.c (1.147), "Exp", lines: +2 -2 The .Sm macro accepts at most one argument; fixing an assertion failure found by jsg@ with afl. 2014-11-26 17:55 schwarze Changed: cgi.c (1.102), "Exp", lines: +6 -12 Make the code sipler and more robust by always assigning a value to q.manpath and dropping the (incomplete) later NULL checks. 2014-11-26 17:51 schwarze Changed: tbl.7 (1.21), "Exp", lines: +3 -2 tbl_opts.c (1.15), "Exp", lines: +3 -3 Allow comma-separated options in tbl(7) tables. Provides better groff compatibility. From bentley@. 2014-11-25 21:41 schwarze Changed: tbl_layout.c (1.30), "Exp", lines: +41 -56 Completely rewrite the top level of the layout parser. * Do not allocate lines unless there are cells. * Make the MANDOCERR_TBLNOLAYOUT message actually work. Also get rid of one static function and two goto statements. 2014-11-25 20:18 schwarze Changed: mandoc.1 (1.123), "Exp", lines: +4 -12 "Aq foo" is not the same as "<foo>". Don't use it to mark up HTML; from bentley@. 2014-11-25 20:00 schwarze Changed: mdoc_macro.c (1.146), "Exp", lines: +4 -2 mdoc_term.c (1.293), "Exp", lines: +10 -7 Do not access a NULL pointer when a section has no body, which can for example happen for .Sh Xo .Sh without .Xc. Crash found by jsg@ with afl. 2014-11-21 01:52 schwarze Changed: man_term.c (1.156), "Exp", lines: +11 -19 mdoc_term.c (1.292), "Exp", lines: +9 -11 term.c (1.236), "Exp", lines: +13 -9 We repeatedly observed assertion crashes in the low-level terminal output handler because the high level terminal formatters could be tricked into setting the left margin further to the right than the right margin. Today, jsg@ found more of these with afl. Change the internal interface between both levels, aiming for simplicity and robustness of the code. Treat both margins as *independent* settings: Now, termp.offset is the requested left margin, and termp.rmargin is the available space. Let the lower level cope with that case of insufficient space. Obviously, high level code that does centering or flush right still has to do careful checks, so i did a full audit of margin settings in the terminal formatters. Fixes crashes caused by excessively long title or date strings in the man(7) footer, operating system or date strings in the mdoc(7) footer, volume strings in the man(7) or mdoc(7) header, and a few cases related to some non-prologue macros. 2014-11-20 13:56 schwarze Changed: term_ascii.c (1.40), "Exp", lines: +6 -4 term_ps.c (1.69), "Exp", lines: +6 -4 Prevent negative arguments to the .ll request from causing integer underflow. Found while preparing an audit of termp.rmargin. Overflow can also happen, but i see no sane way to deal with it, so just let it happen. It doesn't happen for any sane input anyway, groff behaviour is undefined, and the resulting values are legal, even though they are useless. 2014-11-20 02:21 schwarze Changed: TODO (1.188), "Exp", lines: +9 -1 warn about calling non-callable macros 2014-11-20 00:31 schwarze Changed: mdoc_macro.c (1.145), "Exp", lines: +5 -2 Fix two minibugs reported by Thomas Klausner <wiz at NetBSD>: 1. The first argument of .Fn is not supposed to be parsed. 2. The .Fn macro is not supposed to reopen its scope after punctuation. 2014-11-19 22:00 schwarze Changed: mdoc_html.c (1.211), "Exp", lines: +5 -3 mdoc_man.c (1.74), "Exp", lines: +24 -3 mdoc_term.c (1.291), "Exp", lines: +5 -3 Let .Ao and .Aq render as "<>" after .An and as "\(la\(ra" elsewhere, just like groff; minibug noticed by bentley@. 2014-11-19 20:40 schwarze Changed: mandocdb.c (1.169), "Exp", lines: +14 -4 Three fixes with respect to the names table: 1. Do not mask out NAME_FIRST before its first use. 2. Avoid duplicate NAME_FILE entries. 3. Correctly mask NAME_FILE for .so links. 2014-11-19 03:08 schwarze Changed: man.c (1.143), "Exp", lines: +22 -7 mdoc.c (1.229), "Exp", lines: +18 -8 Escape sequences terminate high-level macro names, and when doing so, they are ignored, just in the same way as for request names and for low-level macro names. This also cures a warning in the pod2man(1) preamble. 2014-11-19 01:20 schwarze Changed: roff.7 (1.59), "Exp", lines: +5 -3 roff.c (1.239), "Exp", lines: +3 -1 Support the ".if v" conditional operator (vroff mode, always false) for groff compatibility because pod2man(1) uses it that way. Weirdly, groff documents it as "for compatibility with other troff versions" but neither Heirloom nor Plan 9 have it. Issue reported by giovanni@ via sthen@. 2014-11-18 19:41 schwarze Changed: manpath.c (1.18), "Exp", lines: +31 -16 Ignore invalid directories in man.conf(5) and MANPATH, even if their parent directories exist, but complain about invalid directories given on the command line. Intended to fix an oddity reported by sthen@. 2014-11-18 01:15 schwarze Changed: mansearch.c (1.50), "Exp", lines: +12 -7 mansearch.h (1.20), "Exp", lines: +6 -5 In man(1) mode, prefer file name matches over .Dt name matches over first .Nm entries over other NAME .Nm entries over SYNOPSIS .Nm entries. For example, this makes sure "man ypbind" does not return yp(8). Re-run "makewhatis" to profit from this change. 2014-11-17 06:44 schwarze Changed: libmdoc.h (1.89), "Exp", lines: +3 -2 mdoc_html.c (1.210), "Exp", lines: +13 -2 mdoc_macro.c (1.144), "Exp", lines: +51 -25 mdoc_man.c (1.73), "Exp", lines: +5 -1 mdoc_term.c (1.290), "Exp", lines: +2 -2 mdoc_validate.c (1.255), "Exp", lines: +16 -6 Multiple fixes with respect to in-line macros: * .No selects the default font; relevant e.g. in .Bf blocks * no need to force empty .Li elements * closing delimiters as leading macro arguments do not suppress space * opening delimiters at the end of a macro line do not suppress space * correctly handle delimiter spacing in -Tman As a side effect, these fixes let mandoc warn about empty .No macros as requested by bentley@. 2014-11-16 21:29 schwarze Changed: term.c (1.235), "Exp", lines: +4 -2 When a line (in the sense of term_flushln()) contains white space only, the `vbl' variable includes the left margin, but `vis' does not. Prevent a `vis' underflow that caused a bogus blank line. Bug reported by Carsten Kunze, found in less(1): .Bl -tag ... .It " " 2014-11-16 20:46 schwarze Changed: mdoc.7 (1.241), "Exp", lines: +2 -21 st.in (1.26), "Exp", lines: +1 -6 Delete five standards that are: * not supported by groff * not used in any OpenBSD, NetBSD, DragonFly or FreeBSD base manual * superseded or retracted * and more than ten years old Triggered by a question from Carsten Kunze (Heirloom troff). OK guenther@ jmc@ 2014-11-14 04:24 schwarze Changed: preconv.c (1.12), "Exp", lines: +5 -25 Remove needless and harmful byte swapping on big endian architectures. Problem found and patch provided by Martin Natano at bitrig, thanks! Tested on macppc by natano@ and on i386, amd64, and sparc64 myself. While here, sync with OpenBSD by removing some trailing whitespace. 2014-11-11 19:04 schwarze Changed: cgi.c (1.101), "Exp", lines: +2 -1 main.c (1.199), "Exp", lines: +5 -1 mansearch.c (1.49), "Exp", lines: +9 -1 mansearch.h (1.19), "Exp", lines: +2 -1 In man(1) mode without -a, stop searching after the first manual tree that contained at least one match in order to not prefer mdoc(1) from ports over mdoc(7). As a bonus, this results in a speedup. 2014-11-11 02:43 schwarze Changed: main.c (1.198), "Exp", lines: +2 -1 man.1 (1.7), "Exp", lines: +5 -3 mandoc.1 (1.122), "Exp", lines: +3 -3 Let -h imply -c (that is, not use the pager). Usually, -h output is short, so the pager is just a nuisance. Also, traditional man(1) does not use a pager for -h. Triggered by a remark of deraadt@ on ICB. 2014-11-11 02:10 schwarze Changed: main.c (1.197), "Exp", lines: +55 -15 implement -h (synopsis only) for preformatted (cat) pages; requested by tedu@ 2014-11-10 21:56 schwarze Changed: mdoc_term.c (1.289), "Exp", lines: +12 -10 add required vertical spacing before lists that begin at the beginning of the first item of an enclosing list right at the beginning of a new section or subsection; minibug reported by Steffen Nurpmeso <sdaoden at yandex dot com> 2014-11-09 00:54 schwarze Changed: TODO (1.187), "Exp", lines: +10 -1 hyperlinking in -man -Thtml punctuation in the middle of .Fn 2014-11-06 22:28 schwarze Changed: chars.in (1.49), "Exp", lines: +2 -2 mdoc_man.c (1.72), "Exp", lines: +2 -2 Let -Tascii \(bu (bullet) output agree with groff; this is now possible because -Tps now handles backspace overstriking. 2014-11-03 23:18 schwarze Changed: libman.h (1.64), "Exp", lines: +4 -1 man.c (1.142), "Exp", lines: +16 -1 man_macro.c (1.90), "Exp", lines: +11 -8 Allow the five man(7) font macros to concatenate their line arguments, the same way the mdoc(7) macros marked MDOC_JOIN do it. In -Thtml, this removes bogus <br/> when the font macros are used in no-fill mode; issue found by jsg@ in the Xcursor(3) SYNOPSIS. As a bonus, this slightly reduces the size of the syntax tree. 2014-11-01 06:03 schwarze Changed: libmandoc.h (1.48), "Exp", lines: +2 -3 read.c (1.96), "Exp", lines: +2 -3 roff.c (1.238), "Exp", lines: +165 -167 Use struct buf in libroff, it is very natural there and reduces the number of arguments of many functions. While here, sprinkle some KNF. No functional change. 2014-11-01 04:08 schwarze Changed: libmandoc.h (1.47), "Exp", lines: +4 -4 preconv.c (1.11), "Exp", lines: +12 -11 read.c (1.95), "Exp", lines: +32 -38 Refactor, no functional change: Remove the parse point from struct buf. Some functions need multiple parse points, some none at all, and it varies whether any of them need to be passed around. So better pass them as a separate argument, and only when needed. 2014-11-01 04:03 schwarze Changed: term.c (1.234), "Exp", lines: +2 -2 fix a typo causing crashes in Unicode string length measurement 2014-10-30 20:10 schwarze Changed: mdoc.7 (1.240), "Exp", lines: +7 -4 mdoc_html.c (1.209), "Exp", lines: +14 -28 mdoc_man.c (1.71), "Exp", lines: +9 -9 mdoc_term.c (1.288), "Exp", lines: +13 -26 mdoc_validate.c (1.254), "Exp", lines: +19 -43 Major bugsquashing with respect to -offset and -width: 1. Support specifying the .Bd and .Bl -offset as a macro default width; while here, simplify the code handling the same for .Bl -width. 2. Correct handling of .Bl -offset arguments: unlike .Bd -offset, the arguments "left", "indent", and "indent-two" have no special meaning. 3. Fix the scaling of string length -offset and -width arguments in -Thtml. Triggered by an incomplete documentation patch from bentley@. 2014-10-30 17:15 schwarze Changed: main.c (1.196), "Exp", lines: +3 -3 add -K to usage() and wrap nicely; from jmc@ 2014-10-30 17:14 schwarze Changed: mandoc.1 (1.121), "Exp", lines: +2 -2 fix a macro error in previous; from jmc@ 2014-10-29 03:35 schwarze Changed: chars.in (1.48), "Exp", lines: +20 -20 Some fine tuning of console rendering of named special characters. Correct ASCII rendering: \(lb \(<> \(sd Make ASCII rendering agree with groff, using backspace overstrike: \(da \(ua \(dA \(uA \(fa \(c* \(c+ \(ib \(ip \(/_ \(pp \(is \(dd \(dg 2014-10-29 00:17 schwarze Changed: chars.c (1.65), "Exp", lines: +4 -6 html.c (1.181), "Exp", lines: +7 -4 mandoc.h (1.168), "Exp", lines: +2 -2 term.c (1.233), "Exp", lines: +65 -39 In terminal output, unify handling of Unicode and numbered character escape sequences just like it was earlier implemented for -Thtml. Do not let control characters other than ASCII 9 (horizontal tab) propagate to the output, even though groff allows them; but that really doesn't look like a great idea. Let mchars_num2char() return int such that we can distinguish invalid \N syntax from \N'0'. This also reduces the danger of signed char issues popping up. 2014-10-28 18:49 schwarze Changed: term.c (1.232), "Exp", lines: +4 -10 term_ascii.c (1.39), "Exp", lines: +3 -3 In -Tascii mode, print "<?>" only for Unicode escapes of unknown representation, not for character escapes with unknown names. According to groff, the latter produce no output, and we now warn about them. 2014-10-28 17:36 schwarze Changed: cgi.c (1.100), "Exp", lines: +7 -3 chars.c (1.64), "Exp", lines: +2 -2 demandoc.c (1.12), "Exp", lines: +5 -2 html.c (1.180), "Exp", lines: +4 -22 html.h (1.67), "Exp", lines: +2 -2 libmandoc.h (1.46), "Exp", lines: +2 -2 main.c (1.195), "Exp", lines: +20 -18 main.h (1.17), "Exp", lines: +7 -8 man_term.c (1.155), "Exp", lines: +1 -4 mandoc.3 (1.27), "Exp", lines: +17 -3 mandoc.h (1.167), "Exp", lines: +2 -2 mandocdb.c (1.168), "Exp", lines: +4 -4 mdoc_term.c (1.287), "Exp", lines: +1 -4 read.c (1.94), "Exp", lines: +6 -4 roff.c (1.237), "Exp", lines: +10 -3 term.c (1.231), "Exp", lines: +2 -6 term.h (1.105), "Exp", lines: +2 -2 term_ascii.c (1.38), "Exp", lines: +11 -9 term_ps.c (1.68), "Exp", lines: +8 -7 Make the character table available to libroff so it can check the validity of character escape names and warn about unknown ones. This requires mchars_spec2cp() to report unknown names again. Fortunately, that doesn't require changing the calling code because according to groff, invalid character escapes should not produce output anyway, and now that we warn about them, that's fine. 2014-10-28 14:06 schwarze Changed: mandoc_escape.3 (1.2), "Exp", lines: +19 -15 stricter parsing of Unicode escape names 2014-10-28 13:24 schwarze Changed: chars.c (1.63), "Exp", lines: +4 -9 mandoc.c (1.88), "Exp", lines: +10 -5 Tighten Unicode escape name parsing. Accept only 0xXXXX, 0xYXXXX, 0x10XXXX with Y != 0. This simplifies mchars_num2uc(). 2014-10-28 02:43 schwarze Changed: chars.in (1.47), "Exp", lines: +95 -95 term_ascii.c (1.37), "Exp", lines: +35 -35 Refine -Tascii rendering of Unicode characters, mostly to better agree with groff, in particular in cases where groff uses backspace overstrike. In two cases, agreement is impossible because groff clobbers the previous line: \(*G \(*S In a number of cases, groff rendering is so misleading that i chose to render differently: \(Sd \(TP \(Tp \(Po \(ps \(sc \(r! \(r? \(de While here, also correct the \(la and \(ra Unicode code points. 2014-10-27 20:41 schwarze Changed: term_ps.c (1.67), "Exp", lines: +62 -16 Support overstriking by backspace in PostScript and PDF output. Of course, this is only a minor improvement; it would be much better to support non-ASCII characters in these output modes, but that would require major changes that i'm not going to work on right now. The main reason for doing this is that it allows to get ASCII output closer to groff. 2014-10-27 16:29 schwarze Changed: html.c (1.179), "Exp", lines: +11 -23 Handle output encoding for unicode, numbered and named escape sequences in one common, safe way instead of three different ways. In particular, * skip NUL, it is used to mean "no output desired" * deny 0x01-0x1F and 0x7F-0x9F, print REPLACEMENT CHARACTER instead * print 0x20-0x7E literally or name-encoded, as required * print characters above 0x9F numerically 2014-10-27 13:31 schwarze Changed: chars.c (1.62), "Exp", lines: +2 -2 html.c (1.178), "Exp", lines: +6 -5 mandocdb.c (1.167), "Exp", lines: +2 -2 term.c (1.230), "Exp", lines: +5 -7 Fix a regression in term.c rev. 1.229 reported by bentley@: In UTF-8 output, do not print anything if mchars_spec2cp() returns 0. In particular, this repairs handling of zero-width spaces (\&). While here, let mchars_spec2cp() return 0xFFFD instead of -1 if the character is not found, simplifying the using code. In HTML output, do not print obfuscated ASCII characters and do not test for one-char escapes, mchars_spec2cp() already does that. 2014-10-26 18:22 schwarze Changed: preconv.c (1.10), "Exp", lines: +4 -5 KNF: indentation and sort variables by size; no functional change 2014-10-26 18:12 schwarze Changed: term_ascii.c (1.36), "Exp", lines: +78 -78 Grrr, patch(1) merged the new function to the wrong place in this file. Resync with OpenBSD. No code change. 2014-10-26 18:07 schwarze Changed: chars.c (1.61), "Exp", lines: +12 -1 mandoc.h (1.166), "Exp", lines: +2 -1 mchars_alloc.3 (1.2), "Exp", lines: +13 -2 term_ascii.c (1.35), "Exp", lines: +5 -3 In -Tascii mode, provide approximations even for some Unicode escape sequences above codepoint 512 by doing a reverse lookup in the existing mandoc_char(7) character table. Again, groff isn't smart enough to do this and silently discards such escape sequences without printing anything. 2014-10-26 17:12 schwarze Changed: chars.c (1.60), "Exp", lines: +7 -16 html.c (1.177), "Exp", lines: +13 -3 term.c (1.229), "Exp", lines: +40 -54 term.h (1.104), "Exp", lines: +3 -1 term_ascii.c (1.34), "Exp", lines: +76 -1 Improve -Tascii output for Unicode escape sequences: For the first 512 code points, provide ASCII approximations. This is already much better than what groff does, which prints nothing for most code points. A few minor fixes while here: * Handle Unicode escape sequences in the ASCII range. * In case of errors, use the REPLACEMENT CHARACTER U+FFFD for -Tutf8 and the string "<?>" for -Tascii output. * Handle all one-character escape sequences in mchars_spec2{cp,str}() and remove the workarounds on the higher level. 2014-10-25 15:23 schwarze Changed: roff.c (1.236), "Exp", lines: +3 -2 With the current architecture, we can't support inline equations inside tables, sorry. So don't even try to parse tbl(7) blocks for eqn(7) delimiters. Broken table layout found in glPixelMap(3) while investigating a bug report by Theo Buehler <theo at math dot ethz dot ch>. 2014-10-25 15:06 schwarze Changed: eqn.c (1.56), "Exp", lines: +4 -2 Fix a NULL pointer dereference reported by Theo Buehler <theo at math dot ethz dot ch> on tech at openbsd: Do not attempt to parse empty equations. 2014-10-25 14:35 schwarze Changed: eqn.c (1.55), "Exp", lines: +2 -17 libroff.h (1.31), "Exp", lines: +2 -2 mandoc.1 (1.120), "Exp", lines: +4 -2 roff.c (1.235), "Exp", lines: +10 -21 Report arguments to .EQ as an error, and simplify the code: * drop trivial wrapper function roff_openeqn() * drop unused first arg of function eqn_alloc() * drop usused member "name" of struct eqn_node While here, sync to OpenBSD by killing some trailing blanks. 2014-10-25 01:03 schwarze Deleted: preconv.1 (1.8) Changed: Makefile (1.445), "Exp", lines: +4 -11 apropos.1 (1.36), "Exp", lines: +3 -3 libmandoc.h (1.45), "Exp", lines: +10 -1 main.c (1.194), "Exp", lines: +29 -3 man.1 (1.6), "Exp", lines: +3 -3 mandoc.1 (1.119), "Exp", lines: +28 -2 mandoc.h (1.165), "Exp", lines: +3 -1 preconv.c (1.9), "Exp", lines: +59 -368 read.c (1.93), "Exp", lines: +53 -20 integrate preconv(1) into mandoc(1); enhances functionality and reduces code and docs by more than 300 lines 2014-10-25 01:01 schwarze Changed: TODO (1.186), "Exp", lines: +13 -2 some new tasks 2014-10-20 19:04 kristaps Changed: mandoc.h (1.164), "Exp", lines: +2 -1 read.c (1.92), "Exp", lines: +2 -1 roff.c (1.234), "Exp", lines: +25 -14 Protect the roff parser from dividing by zero. ok schwarze@ 2014-10-20 17:59 schwarze Changed: mdoc.7 (1.239), "Exp", lines: +22 -10 improve documentation of .Fa, .Va, and .Vt; inspired by a discussion with matthew@ 2014-10-20 15:50 schwarze Changed: man.c (1.141), "Exp", lines: +3 -2 man_term.c (1.154), "Exp", lines: +2 -2 mdoc.c (1.228), "Exp", lines: +3 -2 mdoc_term.c (1.286), "Exp", lines: +2 -2 correct the spacing after in-line equations that start at the beginning of an input line but end before the end of an input line 2014-10-20 15:04 schwarze Changed: roff.c (1.233), "Exp", lines: +37 -6 correctly parse spacing around in-line equations at the beginning and at the end of input lines; issue reported by kristaps@ 2014-10-20 02:47 schwarze Changed: man_term.c (1.153), "Exp", lines: +3 -1 mdoc_term.c (1.285), "Exp", lines: +3 -1 correct spacing *after* inline equations (much simpler than expected) 2014-10-20 02:33 schwarze Changed: man.c (1.140), "Exp", lines: +3 -1 man_term.c (1.152), "Exp", lines: +3 -1 mdoc.c (1.227), "Exp", lines: +3 -1 mdoc_term.c (1.284), "Exp", lines: +3 -1 roff.c (1.232), "Exp", lines: +4 -12 correct spacing before inline equations 2014-10-20 01:43 schwarze Changed: tree.c (1.59), "Exp", lines: +13 -11 show the {MDOC,MAN}_EQN node, it contains interesting information, in particular line and column numbers and flags; but hide the uninteresting EQN_ROOT box 2014-10-18 15:57 schwarze Changed: main.c (1.193), "Exp", lines: +5 -4 read.c (1.91), "Exp", lines: +10 -12 plug file descriptor leaks on read or write failure; hinted at by Steffen Nurpmeso <sdaoden at yandex dot com>. 2014-10-16 01:28 schwarze Changed: roff.c (1.231), "Exp", lines: +3 -3 oops, don't escape the first token of inline equations 2014-10-16 01:11 schwarze Changed: TODO (1.185), "Exp", lines: +4 -4 eqn.c (1.54), "Exp", lines: +27 -1 libmandoc.h (1.44), "Exp", lines: +1 -7 libroff.h (1.30), "Exp", lines: +15 -11 mdoc.c (1.226), "Exp", lines: +1 -58 roff.c (1.230), "Exp", lines: +59 -12 Implement in-line equations, much needed by Xenocara manuals. Put the steering into the roff parser rather than into the mdoc parser such that it works for all macro languages and on both text and macro lines. Line breaks and blank characters generated before and after in-line equations are not perfect yet, but let's do one thing at a time. 2014-10-14 18:18 schwarze Changed: out.c (1.53), "Exp", lines: +2 -2 tbl_term.c (1.31), "Exp", lines: +2 -2 even if a table has zero columns, do not segfault in the formatter; bug reported by bentley@ 2014-10-14 15:47 schwarze Changed: TODO (1.184), "Exp", lines: +99 -9 annotate for difficulty, and some minor cleanup 2014-10-14 13:53 schwarze Changed: TODO (1.183), "Exp", lines: +4 -3 bentley@ suggests Unicode table borders; while here, remove the note about sox(1), it works now 2014-10-14 02:16 schwarze Changed: mandoc.h (1.163), "Exp", lines: +2 -1 out.c (1.52), "Exp", lines: +70 -6 out.h (1.24), "Exp", lines: +4 -2 tbl.7 (1.20), "Exp", lines: +15 -5 tbl_html.c (1.13), "Exp", lines: +2 -2 tbl_layout.c (1.29), "Exp", lines: +4 -1 tbl_term.c (1.30), "Exp", lines: +2 -2 Rudimentary implementation of the e, x, and z table layout modifiers to equalize, maximize, and ignore the width of columns. Does not yet take vertical rulers into account, and does not do line breaks within table cells. Considerably improves the lftp(1) manual; issue noticed by sthen@. 2014-10-13 23:31 schwarze Changed: tbl.7 (1.19), "Exp", lines: +25 -24 tbl_term.c (1.29), "Exp", lines: +19 -3 implement font modifiers in table layouts 2014-10-13 22:00 schwarze Changed: mdoc_term.c (1.283), "Exp", lines: +7 -3 Properly scale string length measurements for PostScript and PDF output; this doesn't change anything for ASCII and UTF-8. Problem reported by bentley@. 2014-10-13 17:17 schwarze Changed: mandoc.c (1.87), "Exp", lines: +12 -13 Stricter syntax checking of Unicode character names: Require exactly 4, 5 or 6 hex digits and allow nothing else. This avoids mishandling stuff like \[ua] and \C'uA' as Unicode and also fixes underlining in eqn(7) -Thtml output which uses \[ul]. Problem found and semantics suggested by kristaps@. 2014-10-13 14:05 schwarze Changed: mdoc_validate.c (1.253), "Exp", lines: +3 -2 sync with OpenBSD: check sorting of .Xr's case-insensitively; no idea why this was different here 2014-10-13 14:01 schwarze Changed: mdoc_validate.c (1.252), "Exp", lines: +6 -4 Do not warn about declarations of functions returning function pointers, getting rid of a false positive noticed by bentley@. 2014-10-13 12:46 schwarze Changed: mdoc.7 (1.238), "Exp", lines: +3 -3 Clarify: SEE ALSO sections are sorted case insensitively. Patch from bentley@, ok jmc@. 2014-10-12 20:32 schwarze Changed: mandocdb.c (1.166), "Exp", lines: +2 -1 add missing entry for .ll to the dispatch table; patch from Martin <Natano at natano dot net>, thanks 2014-10-12 20:08 schwarze Changed: eqn.c (1.53), "Exp", lines: +11 -1 bugfix: do not parse quoted strings for tokens; fixes glFrustum(3) 2014-10-12 19:31 schwarze Changed: eqn.c (1.52), "Exp", lines: +84 -102 eqn_html.c (1.10), "Exp", lines: +9 -5 mandoc.1 (1.118), "Exp", lines: +28 -11 mandoc.h (1.162), "Exp", lines: +2 -2 read.c (1.90), "Exp", lines: +2 -2 Improve error handling in the eqn(7) parser. Get rid of the first fatal error, MANDOCERR_EQNSYNT. In eqn(7), there is no need to be bug-compatible with groff, so there is no need to abondon the whole equation in case of a syntax error. In particular: * Skip "back", "delim", "down", "fwd", "gfont", "gsize", "left", "right", "size", and "up" without arguments. * Skip "gsize" and "size" with a non-numeric argument. * Skip closing delimiters that are not open. * Skip "above" outside piles. * For diacritic marks and binary operators without a left operand, default to an empty box. * Let piles and matrices take one argument rather than insisting on a braced list. Let HTML output handle that, too. * When rewinding, if the root box is guaranteed to match the termination condition, no error handling is needed. 2014-10-12 14:49 schwarze Changed: eqn_term.c (1.7), "Exp", lines: +66 -19 major upgrade to eqn(7) terminal output; column vectors ("piles") and matrices are not yet pretty, but everything else is now more or less readable 2014-10-12 11:57 schwarze Changed: eqn.7 (1.31), "Exp", lines: +239 -12 document the semantics of operation keywords and some other minor improvements 2014-10-11 21:34 schwarze Changed: mdoc_validate.c (1.251), "Exp", lines: +2 -2 oops, don't crash when .Fo has no argument 2014-10-11 21:14 schwarze Changed: mandoc.1 (1.117), "Exp", lines: +10 -2 mandoc.h (1.161), "Exp", lines: +2 -1 mdoc_validate.c (1.250), "Exp", lines: +29 -2 read.c (1.89), "Exp", lines: +2 -1 warn about parentheses in function names after .Fn and .Fo; particularly useful when converting from other languages to mdoc(7); feature suggested by bentley@ 2014-10-10 15:26 schwarze Changed: html.c (1.176), "Exp", lines: +2 -2 html.h (1.66), "Exp", lines: +2 -2 mandoc.h (1.160), "Exp", lines: +2 -2 mdoc_html.c (1.208), "Exp", lines: +2 -2 tree.c (1.58), "Exp", lines: +2 -2 sync Copyright years after merge to OpenBSD; no code change 2014-10-10 14:27 schwarze Changed: eqn.c (1.51), "Exp", lines: +21 -22 eqn_html.c (1.9), "Exp", lines: +10 -10 Drop trailing whitespace, adjust a few indentations, and update Copyright year while here; no code change. 2014-10-10 14:02 schwarze Changed: eqn.c (1.50), "Exp", lines: +1 -4 No need to assert() that a pointer is non-null right before dereferencing it. The assert message contains no more information than the segfault. 2014-10-10 12:19 schwarze Changed: tree.c (1.57), "Exp", lines: +28 -9 Make eqn(7) -Ttree output more useful: * Reduce noise by not printing default attributes. * Print missing "top" and "bottom" attributes. * Print mnemonics, not code numbers for expression positions. * Do not print unused "pile" attribute. 2014-10-10 10:49 schwarze Changed: TODO (1.182), "Exp", lines: +18 -6 tasks found while reading the eqn(7) User's Guide 2014-10-10 09:12 kristaps Changed: eqn.c (1.49), "Exp", lines: +2 -1 Ignore "delim" command. This fixes run-time assertions regarding "tok". 2014-10-10 08:44 kristaps Changed: TODO (1.181), "Exp", lines: +7 -1 eqn.7 (1.30), "Exp", lines: +2 -3 eqn.c (1.48), "Exp", lines: +741 -612 eqn_html.c (1.8), "Exp", lines: +112 -145 html.c (1.175), "Exp", lines: +2 -1 html.h (1.65), "Exp", lines: +2 -1 mandoc.1 (1.116), "Exp", lines: +7 -3 mandoc.h (1.159), "Exp", lines: +13 -20 tree.c (1.56), "Exp", lines: +8 -3 Re-write of eqn(7) parser and MathML output. This adds parser-level support for the grammar described by the eqn second-edition technical paper, "Typesetting Mathematics — User's Guide" (Kernighan, Cherry). The reason for this re-write is the grouping rules, which were not possible given the existing implementation. The re-write has also considerably simplified the HTML (and, if it ever is completed, terminal) front-end. 2014-10-07 18:20 schwarze Changed: cgi.c (1.99), "Exp", lines: +3 -3 be a bit more patient, 1s is sometimes insufficient for legitimate queries 2014-10-07 14:07 schwarze Changed: mandoc.1 (1.115), "Exp", lines: +9 -4 tbl_layout.c (1.28), "Exp", lines: +6 -1 If a tbl(7) layout contains unknown font modifiers, fall back to the default font rather than failing the whole table. Needed by some pages in books/man-pages-posix. Written on the plane back from EuroBSDCon in Sofia. 2014-10-06 18:35 schwarze Changed: TODO (1.180), "Exp", lines: +7 -1 note HTML max-width issue 2014-09-28 20:14 kristaps Changed: eqn_html.c (1.7), "Exp", lines: +8 -5 html.c (1.174), "Exp", lines: +4 -1 html.h (1.64), "Exp", lines: +4 -1 Change "to" and "from" commands to use munder, mover, and munderover. 2014-09-28 14:06 kristaps Changed: eqn_html.c (1.6), "Exp", lines: +10 -1 Crudely accomodate for matrices by way of adjacent tables. We don't do this nicely right now because eqn uses column ordering. Also add from/to support and to support. 2014-09-28 14:05 kristaps Changed: eqn.c (1.47), "Exp", lines: +7 -2 mandoc.h (1.158), "Exp", lines: +2 -1 Parse from/to clauses in eqn. 2014-09-28 13:34 kristaps Changed: eqn_html.c (1.5), "Exp", lines: +155 -27 Support a decent subset of eqn(7) in MathML. This has basic support for positions (under, sup, sub, sub/sup) and piles. It *does not* support right-left grouping (among many other things), e.g., a sub b over c sub d Which it will interpret, for the time being, as a sub { b over { c sub d } } instead of { a sub b } over { c sub d } However, left-right grouping works fine. 2014-09-28 11:33 kristaps Changed: html.c (1.173), "Exp", lines: +16 -1 html.h (1.63), "Exp", lines: +16 -1 Add support for some MathML elements and attributes in our HTML5. 2014-09-28 11:32 kristaps Changed: tree.c (1.55), "Exp", lines: +3 -3 Make eqn tree output a bit more useful. 2014-09-28 11:32 kristaps Changed: eqn.c (1.46), "Exp", lines: +24 -6 mandoc.h (1.157), "Exp", lines: +3 -1 Add support for EQNPOS_SUBSUP and a doubly-linked eqn_box list. 2014-09-27 11:20 kristaps Changed: Makefile (1.444), "Exp", lines: +3 -1 Have Makefile build mandoc(1) before it tries to generate the HTML. 2014-09-27 11:17 kristaps Changed: cgi.c (1.98), "Exp", lines: +3 -6 Modify man.cgi to use HTML5. 2014-09-27 11:17 kristaps Changed: html.c (1.172), "Exp", lines: +8 -15 html.h (1.62), "Exp", lines: +1 -7 man_html.c (1.104), "Exp", lines: +2 -2 mandoc.1 (1.114), "Exp", lines: +8 -17 mdoc_html.c (1.207), "Exp", lines: +2 -2 Don't pretend we have a separate XHTML and HTML mode any more. 2014-09-27 11:16 kristaps Changed: example.style.css (1.53), "Exp", lines: +2 -1 style.css (1.30), "Exp", lines: +2 -1 Specify the spacer in the overridable CSS. 2014-09-27 10:56 kristaps Changed: html.c (1.171), "Exp", lines: +15 -3 html.h (1.61), "Exp", lines: +2 -2 man_html.c (1.103), "Exp", lines: +7 -6 mdoc_html.c (1.206), "Exp", lines: +6 -6 Remove <p> in favour of <div class="spacer">. This is good because <p> is brittle: it can't appear within other block macros. This fixes a regression of the original HTML5 patch as noted by schwarze@ on the tech@ list, 14/8/2014. 2014-09-27 09:26 kristaps Changed: html.c (1.170), "Exp", lines: +4 -3 html.h (1.60), "Exp", lines: +1 -2 man_html.c (1.102), "Exp", lines: +1 -8 mdoc_html.c (1.205), "Exp", lines: +1 -8 Remove last hard-coded width attribute. 2014-09-27 09:20 kristaps Changed: example.style.css (1.52), "Exp", lines: +4 -4 html.c (1.169), "Exp", lines: +3 -3 html.h (1.59), "Exp", lines: +1 -2 man_html.c (1.101), "Exp", lines: +24 -25 mdoc_html.c (1.204), "Exp", lines: +24 -25 style.css (1.29), "Exp", lines: +2 -2 HTML5-isation: remove more alignments. 2014-09-27 09:13 kristaps Changed: html.c (1.168), "Exp", lines: +6 -2 man_html.c (1.100), "Exp", lines: +3 -5 mdoc_html.c (1.203), "Exp", lines: +3 -5 style.css (1.28), "Exp", lines: +3 -3 Continue in HTML5-ing by kicking out some hard-coded alignments. 2014-09-27 09:05 kristaps Changed: html.c (1.167), "Exp", lines: +1 -2 html.h (1.58), "Exp", lines: +1 -3 man_html.c (1.99), "Exp", lines: +5 -7 mdoc_html.c (1.202), "Exp", lines: +5 -7 Kick out "summary" attribute, which isn't HTML5. 2014-09-27 09:03 kristaps Changed: html.c (1.166), "Exp", lines: +1 -3 html.h (1.57), "Exp", lines: +1 -3 Kick out two attibutes we don't use any more in HTML5. 2014-09-27 09:02 kristaps Changed: html.c (1.165), "Exp", lines: +7 -1 html.h (1.56), "Exp", lines: +2 -1 man_html.c (1.98), "Exp", lines: +5 -7 mdoc_html.c (1.201), "Exp", lines: +5 -7 First, add space for default styling for HTML5 (non-fragment) output. This uses a <style /> block right before the <link /> for the stylesheet. Use this to kick out hardcoded header and footer table widths. 2014-09-27 08:54 kristaps Changed: html.c (1.164), "Exp", lines: +6 -39 html.h (1.55), "Exp", lines: +2 -1 First steps in HTML5: use UTF8 meta-charset and HTML5 doctype identifier. 2014-09-17 20:18 schwarze Changed: mdoc_term.c (1.282), "Exp", lines: +17 -45 term.h (1.103), "Exp", lines: +3 -4 simplify handling of .An -[no]split for terminal output: delete one static function, one flag #define, and 25 lines of code; no functional change 2014-09-17 19:55 schwarze Changed: html.h (1.54), "Exp", lines: +3 -1 mdoc_html.c (1.200), "Exp", lines: +28 -4 implement .An -[no]split for -Thtml 2014-09-17 00:43 schwarze Changed: mdoc.7 (1.237), "Exp", lines: +3 -3 Five year old typo reported by Theo Buehler at math dot ethz dot ch, thanks. I nearly asked: ``What's wrong with it? It formats as "intended".'' (However, what Kristaps intended to write was "indented".) 2014-09-14 19:44 schwarze Changed: cgi.c (1.97), "Exp", lines: +33 -34 man.cgi.8 (1.11), "Exp", lines: +8 -2 Support backslash-escaping of white space in the query expression, to be more similar to apropos(1) called from the shell. Missing feature reported by Marcus MERIGHI <mcmer dash openbsd at tor dot at> on misc@. 2014-09-12 00:54 schwarze Changed: mandoc.1 (1.113), "Exp", lines: +9 -2 mandoc.h (1.156), "Exp", lines: +2 -1 mdoc_validate.c (1.249), "Exp", lines: +26 -3 read.c (1.88), "Exp", lines: +2 -1 warn about commas in function arguments; inspired by mdoclint(1) 2014-09-12 00:10 schwarze Changed: demandoc.1 (1.8), "Exp", lines: +3 -3 mandoc.1 (1.112), "Exp", lines: +18 -2 document new SEE ALSO .Xr warnings 2014-09-11 23:53 schwarze Changed: mandoc.h (1.155), "Exp", lines: +3 -1 mdoc_validate.c (1.248), "Exp", lines: +66 -1 read.c (1.87), "Exp", lines: +3 -1 warn about botched .Xr ordering and punctuation below SEE ALSO; inspired by mdoclint(1) 2014-09-09 19:35 schwarze Changed: mandocdb.c (1.165), "Exp", lines: +16 -12 If a manpath directory (for example, a _whatdb entry from man.conf(5) or an entry in the MANPATH environment variable) does not exist, silently skip it. This brings makewhatis(8) back closer to the behaviour of espie@'s version and ought to shut up the weekly(8) whining observed by henning@ on machines not having xbase installed. Also, don't error out after the first unusable manpath entry, still try the others. Of course, still complain about non-existent directories specified on the command line and about any directories failing for other reasons than ENOENT. 2014-09-07 23:25 schwarze Changed: mandoc.1 (1.111), "Exp", lines: +8 -2 mandoc.h (1.154), "Exp", lines: +2 -1 mdoc_validate.c (1.247), "Exp", lines: +40 -9 read.c (1.86), "Exp", lines: +2 -1 warn about AUTHORS sections without .An macros, inspired by mdoclint(1) 2014-09-07 03:08 schwarze Changed: mandocdb.c (1.164), "Exp", lines: +3 -3 Do not report a page as arch=any merely because .Dt lacks the third argument. Pages found outside arch-specific dirs still get arch=any, of course. Issue reported by justinhenryhaynes at gmail dot com on misc@, thanks! 2014-09-07 03:00 schwarze Changed: mandocdb.c (1.163), "Exp", lines: +2 -2 fix debugging output 2014-09-07 02:17 schwarze Changed: read.c (1.85), "Exp", lines: +5 -2 always use the right buffer, and fix one evil typo 2014-09-07 00:21 schwarze Changed: roff.7 (1.58), "Exp", lines: +7 -2 roff.c (1.229), "Exp", lines: +3 -1 Parse and ignore the .pl (page length) request; Daniel Levai reports that Slackware Linux uses this. 2014-09-07 00:05 schwarze Changed: mdoc_macro.c (1.143), "Exp", lines: +3 -3 mdoc_validate.c (1.246), "Exp", lines: +9 -10 Allow .ll in the prologue; Daniel Levai reports Slackware Linux uses this. 2014-09-06 23:24 schwarze Changed: man.c (1.139), "Exp", lines: +1 -8 mdoc.c (1.225), "Exp", lines: +1 -10 read.c (1.84), "Exp", lines: +5 -16 roff.c (1.228), "Exp", lines: +10 -1 Simplify by handling empty request lines at the one logical place in the roff parser instead of in three other places in other parsers. No functional change. 2014-09-06 22:39 schwarze Changed: libmandoc.h (1.43), "Exp", lines: +2 -1 read.c (1.83), "Exp", lines: +42 -27 roff.c (1.227), "Exp", lines: +19 -3 Move main format autodetection from the parser dispatcher to the roff parser where .Dd and .TH are already detected, anyway. This improves robustness because it correctly handles whitespace or an alternate control character before Dd. In the parser dispatcher, provide a fallback looking ahead in the input buffer instead of always assuming man(7). This corrects autodetection when Dd is preceded by other macros or macro-like handled requests like .ll. Triggered by reports from Daniel Levai about issues on Slackware Linux. 2014-09-03 23:21 schwarze Changed: main.c (1.192), "Exp", lines: +23 -14 mandoc.3 (1.26), "Exp", lines: +64 -2 mandoc.h (1.153), "Exp", lines: +12 -2 mandocdb.c (1.162), "Exp", lines: +14 -53 read.c (1.82), "Exp", lines: +96 -3 Add *.gz support to apropos(1) -a, man(1), and even mandoc(1). Implemented by moving the zip code from makewhatis(8) to the parser lib. 2014-09-03 18:09 schwarze Changed: main.c (1.191), "Exp", lines: +2 -2 mandoc.db.5 (1.2), "Exp", lines: +17 -4 mandocdb.c (1.161), "Exp", lines: +8 -11 mansearch.c (1.48), "Exp", lines: +10 -5 mansearch.h (1.18), "Exp", lines: +6 -1 If a manual page is installed gzip(1)ed, let makewhatis(8) take note in mandoc.db(5), such that man(1) -w and apropos(1) -w can report the correct filename. This is a prerequisite for letting apropos -a and man support gzip'ed manuals in the future, which doesn't work yet. 2014-09-03 05:22 schwarze Changed: apropos.1 (1.35), "Exp", lines: +8 -3 main.c (1.190), "Exp", lines: +9 -5 man.1 (1.5), "Exp", lines: +5 -6 man_term.c (1.151), "Exp", lines: +26 -14 mandoc.1 (1.110), "Exp", lines: +7 -3 mdoc_term.c (1.281), "Exp", lines: +25 -18 term.h (1.102), "Exp", lines: +2 -1 term_ascii.c (1.33), "Exp", lines: +7 -3 Implement the traditional -h option for man(1): show the SYNOPSIS only. As usual, we get mandoc -h and apropos -h for free. Try stuff like "apropos -h In=dirent" or "apropos -h Fa=timespec". Only useful for terminal output, so -Tps, -Tpdf, -Thtml ignore -h for now. 2014-09-01 23:47 schwarze Changed: mandocdb.c (1.160), "Exp", lines: +8 -1 When makewhatis(8) finds an .so link after the manual being pointed to has already been processed, add the file names to the names table, too, not just to the mlinks table. This fixes a bug where apropos(1) and the new man(1) wouldn't find some of the Xenocara manuals via some of their .so links. After rebuilding, run "makewhatis /usr/X11R6/man" or just wait for weekly(8). 2014-09-01 22:45 schwarze Changed: main.c (1.189), "Exp", lines: +6 -4 mansearch.c (1.47), "Exp", lines: +2 -1 mansearch.h (1.17), "Exp", lines: +2 -1 In man(1) mode, change to the right directory before starting the parser, just like traditional man(1) does, such that .so links have a chance to work. After this point, we don't need the current directory for anything else before exit, so we don't need to worry about getting back and we can safely ignore failure. 2014-08-30 18:08 schwarze Changed: apropos.1 (1.34), "Exp", lines: +20 -4 main.c (1.188), "Exp", lines: +14 -9 man.1 (1.4), "Exp", lines: +34 -2 mandoc.1 (1.109), "Exp", lines: +39 -3 Introduce a man(1) -l option as an alias for mandoc -a. Basically, this does the same as man -l in Linux man-db. The point is that now all functionality of the combined tool is reachable from the man(1) command name: apropos = man -k, whatis = man -f, mandoc = man -cl. Originally suggested by Carsten dot Kunze at arcor dot de, current maintainer of the Heirloom Documentation Tools. While here, add various missing information to the usage() and to the manuals. 2014-08-28 10:38 schwarze Changed: configure (1.14), "Exp", lines: +1 -1 test-wchar.c (1.2), "Exp", lines: +6 -2 On Linux, wcwidth() needs _XOPEN_SOURCE, or just _GNU_SOURCE for simplicity. Besides, signedness of wchar_t and wint_t may differ, it i only guaranteed that each wchar_t can be represented as a wint_t. A problem report by Daniel Levai reminded me to fix this. 2014-08-28 03:51 schwarze Changed: mdoc.7 (1.236), "Exp", lines: +8 -4 st.in (1.25), "Exp", lines: +3 -1 Support .St -susv1 and .St -susv4. Illumos wants to use this, and it's illogical anyway to have -susv2 and -susv3 but not -susv4. 2014-08-28 01:37 schwarze Changed: term_ps.c (1.66), "Exp", lines: +1 -6 I just noticed that -Tps writes "%%CreationDate:" headers. That's an unwelcome leak of potentially private information. Kill it with fire. 2014-08-26 11:21 schwarze Changed: cgi.c (1.96), "Exp", lines: +7 -7 msec.in (1.7), "Exp", lines: +3 -3 Sync section titles with OpenBSD. For section 4, "Kernel Interfaces" is just too confusing, the difference from sections 2 and 9 is too hard to see. The 3p change was suggested by bluhm@; that part of the manual describes more modules than functions. Align the CGI section titles with the console section titles. 2014-08-24 23:43 schwarze Changed: term_ps.c (1.65), "Exp", lines: +140 -36 When support for bold italic font was added to the parsers and to the generic parts of the formatters some time ago, the PostScript- and PDF-specific part of the formatters was neglected. Now pascal@ reports that mandoc -Tps throws an assertion on perl(1), apparently because that manual actually uses bold italic font. So here is an overdue implementation of bold italic font support for PostScript and PDF output. 2014-08-23 22:26 schwarze Changed: main.c (1.187), "Exp", lines: +9 -1 without search results, skip the processing loops and the parser 2014-08-23 18:13 schwarze Changed: mandocdb.c (1.159), "Exp", lines: +3 -1 do not leak a file descriptor on fdopen(3) failure; from doug@ 2014-08-23 00:34 schwarze Changed: main.c (1.186), "Exp", lines: +56 -20 Let man(1) display preformatted manuals by simply reading them from the file and copying them to the standard output. This works even for mixed formats: "man -a groff mandoc" displays groff(1) [formatted], mandoc(1) [unformatted], groff(7) [formatted], and mandoc(7) [unformatted] in that order. 2014-08-22 18:07 schwarze Changed: main.c (1.185), "Exp", lines: +17 -1 implement man(1) quirk: section argument without -s 2014-08-22 15:49 schwarze Changed: man.cgi.8 (1.10), "Exp", lines: +3 -3 typo; noticed by jmc@ some time ago 2014-08-22 04:52 schwarze Changed: apropos.1 (1.33), "Exp", lines: +15 -3 main.c (1.184), "Exp", lines: +49 -11 mandoc.1 (1.108), "Exp", lines: +17 -2 implement MANPAGER and PAGER 2014-08-22 03:42 schwarze Changed: apropos.1 (1.32), "Exp", lines: +16 -3 main.c (1.183), "Exp", lines: +53 -3 mandoc.1 (1.107), "Exp", lines: +18 -3 mandoc -a, man, apropos -a, whatis -a now paginate by default but provide an option -c to not paginate; taking inspiration from manpage.c, hence adding (c) 2012 kristaps@ 2014-08-21 20:29 schwarze Changed: mansearch.c (1.46), "Exp", lines: +2 -1 Bugfix: make whatis(1) case-insensitive again. The traditional whatis(1) was case-insensitve and it's still documented that way, but that apparently got broken with or after the switch. 2014-08-21 16:05 schwarze Changed: cgi.c (1.95), "Exp", lines: +15 -1 limit CGI process execution time to make REDoS attacks less effective; attack surface pointed out by Sebastien Marie 2014-08-21 12:57 schwarze Changed: mdoc_html.c (1.199), "Exp", lines: +5 -4 mdoc_macro.c (1.142), "Exp", lines: +13 -14 mdoc_man.c (1.70), "Exp", lines: +7 -4 mdoc_term.c (1.280), "Exp", lines: +5 -4 Right after .Fl, a middle delimiter triggers an empty scope, just like a closing delimiter. This didn't work in groff-1.15, but it now works in groff-1.22. After being closed by delimiters, .Nm scopes do not reopen. Do not suppress white space after .Fl if the next node is a text node on the same input line; that can happen for middle delimiters. Fixing an issue reported by jmc@. 2014-08-21 02:38 schwarze Changed: man.1 (1.3), "Exp", lines: +9 -1 man -I -O -T -W now work, too 2014-08-21 02:28 schwarze Changed: apropos.1 (1.31), "Exp", lines: +44 -9 Describe the new options -afkw. Clean up the description of whatis(1). 2014-08-21 01:52 schwarze Changed: apropos.1 (1.30), "Exp", lines: +26 -8 Complete the whatis.1 -> apropos.1 merge, in particular regarding HISTORY and AUTHORS. 2014-08-21 01:35 schwarze Changed: man.1 (1.2), "Exp", lines: +18 -51 * remove pointless separate -f and -k synopses, they take almost all args * fix up descriptions of -f and -k * remove excessive example for -k * remove explicit BSD references * add CVS Id 2014-08-21 00:42 schwarze Added: man.1 (1.1) Changed: LICENSE (1.4), "Exp", lines: +3 -2 Makefile (1.443), "Exp", lines: +5 -2 Now that we have man(1) functionality, add a man(1) manual page. I'm importing the totally unchanged OpenBSD version such that all changes can easily be tracked in CVS. 2014-08-21 00:32 schwarze Changed: main.c (1.182), "Exp", lines: +69 -8 Implement classic man(1) output mode showing only one manual even if there is more than one match, using traditional section priorities, and implement man(1) -a (show all) output mode, not just for man(1), but also for apropos(1) and whatis(1). 2014-08-20 21:04 schwarze Changed: main.c (1.181), "Exp", lines: +44 -5 Parse the new -a, -i, and -w options. Implement -w (list manual page filenames). 2014-08-20 01:09 tag VERSION_1_12_4 2014-08-20 01:09 schwarze Changed: NEWS (1.6.2.1), "Exp", lines: +22 -3 1.12.4 release notes 2014-08-19 17:31 schwarze Changed: mdoc_validate.c (1.245), "Exp", lines: +2 -2 Do not dereference a NULL pointer if a .Bl macro has no -type, -width, -offset or -compact arguments whatsoever; this got broken in rev. 1.238. 2014-08-19 16:52 schwarze Changed: roff.c (1.226), "Exp", lines: +2 -2 libroff depends on libmandoc and so libmandoc should be included first; merge from OpenBSD, patch by daniel@ 2014-08-18 21:07 kristaps Changed: term.c (1.228), "Exp", lines: +2 -2 Control reading off the edge of our buffer in term_flushln(). This happens in specific conditions (trailing whitespace in certain terminal modes), but in practise, it happens quite often (as reported by valgrind). In short, "Nothing about term_flushln() is simple. Srsly!" (schwarze@) Discussed on tech@, ok schwarze@. 2014-08-18 16:36 schwarze Changed: man_macro.c (1.89), "Exp", lines: +13 -2 When the first child of the node being validated gets deleted during validation, man_node_unlink() switches to MAN_NEXT_CHILD. After that, we have to switch back to MAN_NEXT_SIBLING after completing validation, or subsequent parsing would add content into an already closed node, clobbering potentially existing children, causing information loss and a memory leak. Bug found by kristaps@ with valgrind in groff(7) on Mac OS X. Note that the switch back must be conditional, for if the node being validated itself gets deleted, we must *not* go to MAN_NEXT_SIBLING, which would not only yield wrong results in general but also crash in malformed manuals having an empty paragraph before the first .SH, for example OpenBSD c++filt(1). 2014-08-18 13:27 kristaps Changed: INSTALL (1.5), "Exp", lines: +3 -2 TODO (1.179), "Exp", lines: +14 -1 Notes on CGI: installation (readying cgi.h) and future plans. 2014-08-18 13:16 schwarze Changed: mandoc.c (1.84.2.1), "Exp", lines: +3 -2 merge kristaps@' bugfix from HEAD: Fix a corner case where \H<nil> (where <nil> is the \0 character) would cause mandoc_escape() to read past the end of an allocated string. Found when a script scanning of all Mac OSX manual accidentally also scanned binary (gzip'd) files, discussed with schwarze@ on tech@. 2014-08-18 09:11 kristaps Changed: mandoc.c (1.86), "Exp", lines: +3 -2 Fix a corner case where \H<nil> (where <nil> is the \0 character) would cause mandoc_escape() to read past the end of an allocated string. Found when a script scanning of all Mac OSX manual accidentally also scanned binary (gzip'd) files, discussed with schwarze@ on tech@. 2014-08-17 22:14 schwarze Changed: term_ascii.c (1.30.2.1), "Exp", lines: +2 -2 While all current callers pass valid data to ascii_hspan() only, it's safer to assume incoming enum data might be invalid and catch it instead of happily returning an unitialized int. No functional change right now. 2014-08-17 22:10 schwarze Changed: term_ascii.c (1.32), "Exp", lines: +2 -2 While all current callers pass valid data to ascii_hspan() only, it's safer to assume incoming enum data might be invalid and catch it instead of happily returning an unitialized int. No functional change right now. 2014-08-17 21:03 schwarze Changed: makewhatis.8 (1.3), "Exp", lines: +3 -3 typo; Steven Honeyman <stevenhoneyman at gmail dot com> 2014-08-17 20:53 schwarze Changed: compat_getsubopt.c (1.5), "Exp", lines: +2 -8 configure (1.13), "Exp", lines: +1 -3 test-getsubopt.c (1.3), "Exp", lines: +19 -4 Do not require getsubopt() to provide extern char *suboptarg. We don't use it anyway in mandoc. Like this, fewer systems need the compat implementation. In particular, we can now use the stock getsubopt() on glibc and musl. Besides, the comment in the BSD getsubopt.c that error messages are tricky without *suboptarg is massively overblown. If you simply save a copy of the pointer you pass into getsubopt(), that's quite usable for an error message. People start campaigning for the addition of *suboptarg to C libraries on the grounds that mandoc wants it, but actually, i consider library functions manipulating global data quite ugly, so stop pushing people into that questionable direction. While here, add an explicit Copyright header to the test file. While it's obviously to me what Kristaps intended, others might consider this file copyrightable and wonder what's up. 2014-08-17 20:45 schwarze Changed: compat_fts.c (1.4), "Exp", lines: +2 -1 one forgotten #ifdef -> #if conversion 2014-08-17 16:51 schwarze Changed: mdoc_term.c (1.279), "Exp", lines: +6 -6 ... and remove the trailing spaces (duh. i should pay more attention) 2014-08-17 16:44 schwarze Changed: mdoc_term.c (1.278), "Exp", lines: +10 -10 KNF: fix indentation of previous commit, see style(9): "Indentation is an 8 character tab. Second level indents are four spaces." All the rest of this file already conforms. 2014-08-17 08:37 kristaps Changed: mdoc_term.c (1.277), "Exp", lines: +14 -9 Protect against accessing "n->next->child" by first checking "n->next". Noticed in a crash against ".It Nm Fo" with no closing "Fc". Original patch expanded by schwarze@ then extended even more. 2014-08-17 03:24 schwarze Deleted: apropos.c (1.42) Changed: Makefile (1.442), "Exp", lines: +5 -5 Makefile.depend (1.5), "Exp", lines: +20 -17 cgi.c (1.94), "Exp", lines: +4 -4 main.c (1.180), "Exp", lines: +120 -37 manpage.c (1.9), "Exp", lines: +4 -3 mansearch.c (1.45), "Exp", lines: +29 -28 mansearch.h (1.16), "Exp", lines: +13 -8 Fully integrate apropos(1) into mandoc(1). Switch the argmode on the progname, including man(1). Provide -f and -k options to switch the argmode. Store the argmode inside struct search, generalizing the flags. Derive the deftype from the argmode when needed instead of storing it. Store the outkey inside struct search instead of passing it alone. While here, get rid of the trailing blanks in Makefile.depend. 2014-08-16 23:04 schwarze Changed: Makefile (1.441), "Exp", lines: +9 -11 apropos.c (1.41), "Exp", lines: +2 -2 configure (1.12), "Exp", lines: +4 -0 main.c (1.179), "Exp", lines: +11 -1 When BUILD_DB is active, link apropos(1) into the mandoc binary. This is the first step on the way to a man(1) implementation. The new ./configure is flexible enough to make this step quite easy. 2014-08-16 19:50 schwarze Changed: mdoc_macro.c (1.141), "Exp", lines: +3 -2 If a stray .It follows .El, we are no longer in the list, even though the list is still the last processed macro. This fixes a regression introduced in mdoc_macro.c rev. 1.138: Ulrich Spoerlein <uqs at FreeBSD> reports that various of their kernel manuals trigger assertions. 2014-08-16 19:00 schwarze Deleted: config.h.post (1.12) config.h.pre (1.7) Added: configure.local.example (1.1) test-sqlite3.c (1.1) test-wchar.c (1.1) Changed: INSTALL (1.4), "Exp", lines: +44 -42 Makefile (1.440), "Exp", lines: +20 -110 compat_fgetln.c (1.4), "Exp", lines: +1 -1 compat_fts.c (1.3), "Exp", lines: +1 -1 compat_getsubopt.c (1.4), "Exp", lines: +1 -1 compat_ohash.c (1.6), "Exp", lines: +1 -1 compat_reallocarray.c (1.3), "Exp", lines: +1 -1 compat_sqlite3_errstr.c (1.3), "Exp", lines: +1 -1 compat_strcasestr.c (1.3), "Exp", lines: +1 -1 compat_strlcat.c (1.4), "Exp", lines: +1 -1 compat_strlcpy.c (1.4), "Exp", lines: +1 -1 compat_strsep.c (1.3), "Exp", lines: +1 -1 configure (1.11), "Exp", lines: +364 -24 mandoc.c (1.85), "Exp", lines: +2 -2 mandocdb.c (1.158), "Exp", lines: +3 -3 manpath.c (1.17), "Exp", lines: +2 -2 mansearch.c (1.44), "Exp", lines: +2 -2 preconv.c (1.8), "Exp", lines: +4 -4 read.c (1.81), "Exp", lines: +4 -4 term_ascii.c (1.31), "Exp", lines: +6 -17 Improve build system and autodetection. * Make ./configure standalone, that's what people expect. * Let people write a ./configure.local from scratch, not edit existing files. * Autodetect wchar, sqlite3, and manpath and act accordingly. * Autodetect the need for -L/usr/local/lib and -lutil. * Get rid of config.h.p{re,ost}, let ./configure only write what's needed. * Let ./configure write a Makefile.local snippet, that's quite flexible. 2014-08-14 22:33 schwarze Changed: term_ascii.c (1.30), "Exp", lines: +3 -2 Some compilers apparently worry that abort() might return and then throw a "may be used uninitialized" warning, so sprinkle some /* NOTREACHED */. No functional change. Noticed by Thomas Klausner <wiz at NetBSD dot org>. 2014-08-14 20:57 schwarze Changed: mdoc.7 (1.235), "Exp", lines: +40 -13 Clarify that .Em and .Sy are physical, not semantic markup, explain appropriate usage, and provide some examples. ok jmc@ 2014-08-14 20:43 schwarze Changed: INSTALL (1.3.2.1), "Exp", lines: +21 -36 Makefile (1.395.2.29), "Exp", lines: +6 -50 Add INSTALL, and remove WWW gunk from the Makefile, we are not going to rebuild the website from this version. 2014-08-14 20:33 schwarze Changed: configure (1.1.2.5), "Exp", lines: +2 -0 Standard output reminder to run ./configure from make, suggested by Paul Onyschuk <ptmelville at gmail dot com> (Alpine Linux) 2014-08-14 20:27 schwarze Changed: roff.7 (1.57), "Exp", lines: +3 -3 remove double word; from jmc@ 2014-08-14 04:13 schwarze Changed: apropos_db.c (1.32.2.8), "Exp", lines: +3 -3 mandocdb.c (1.49.2.18), "Exp", lines: +3 -3 test-betoh64.c (1.1.2.3), "Exp", lines: +1 -1 Cygwin support; from Yaakov Selkowitz, https://sourceforge.net/p/cygwin-ports/mdocml/ci/master/tree/ 2014-08-14 00:31 schwarze Changed: example.style.css (1.51), "Exp", lines: +2 -2 html.c (1.163), "Exp", lines: +1 -2 html.h (1.53), "Exp", lines: +1 -2 mdoc_html.c (1.198), "Exp", lines: +7 -5 style.css (1.27), "Exp", lines: +2 -2 Revert previous, as requested by kristaps@. The .Bf block can contain subblocks, so it has to render as an element that can contain flow content. But <em> cannot contain flow content, only phrasing content. Rendering .Em and .Bf differently would by unfortunate, and closing out .Bf before subblocks and re-opening it afterwards would merely complicate both the C code of the program and the generated HTML code. Besides, converting .Em to semantic HTML markup would require some content to be put into <em> and some into <i>, but we cannot automatically distinguish which is which, so strictly speaking, we can't use semantic HTML here but have to fall back to physical markup. Wonders of HTML... 2014-08-13 22:17 schwarze Changed: TODO (1.178), "Exp", lines: +5 -1 note about AT&T documenters workbench 2014-08-13 21:30 schwarze Changed: TODO (1.177), "Exp", lines: +4 -1 note about <var> 2014-08-13 20:34 kristaps Changed: html.c (1.162), "Exp", lines: +3 -1 roff.7 (1.56), "Exp", lines: +11 -5 term_ascii.c (1.29), "Exp", lines: +21 -11 term_ps.c (1.64), "Exp", lines: +25 -15 Begin cleaning up scaling units. Start with the horizontal terminal specifiers, making sure that they match up with troff. Then move on to PS, PDF, and HTML, noting that we stick to the terminal default width for "u". Lastly, fix some completely-wrong documentation and note that we diverge from troff w/r/t "u". 2014-08-13 15:25 schwarze Changed: example.style.css (1.50), "Exp", lines: +2 -2 html.c (1.161), "Exp", lines: +2 -1 html.h (1.52), "Exp", lines: +2 -1 mdoc_html.c (1.197), "Exp", lines: +5 -7 style.css (1.26), "Exp", lines: +2 -2 Use <em> for .Em and .Bf -emphasis. The vast majority of .Em in real-world manuals is stress emphasis, for which <em> is the correct markup. Admittedly, there are some instances of .Em usage for alternate quality, for which <i> would be a better match. Most of these are technical terms that neither allow semantic markup nor are keywords - for the latter, .Sy would be preferable. A typical example is that the shell breaks input into .Em words . Alternate voice or mood, which would also require <i>, is almost absent from manuals. We cannot satisfy both stress emphasis and alternate quality, so pick the one that fits more often and looks less wrong when off. Patch from Guy Harris <guy at alum dot mit dot edu>. ok joerg@ bentley@ 2014-08-12 21:35 schwarze Changed: Makefile (1.439), "Exp", lines: +2 -2 Makefile (1.395.2.28), "Exp", lines: +2 -2 typo in comment; Guy Harris <guy at alum dot mit dot edu> 2014-08-12 19:28 schwarze Changed: out.c (1.51), "Exp", lines: +2 -2 In mdoc(7) and man(7), if a width is given as a bare number without specifying a unit, the implied unit is 'n' (on the terminal, one character position; in PostScript, half of the current font size in points), not 'u' (roff output device basic unit). No functional change right now, but important for the upcoming scaling unit fixes. 2014-08-12 19:28 schwarze Changed: out.h (1.23), "Exp", lines: +2 -2 The macro SCALE_HS_INIT() is always passed the result of strlen() or an equivalent number as its argument, and strlen() measures the width of a string in characters, not in basic units. No functional change right now, but important for the upcoming scaling unit fixes. 2014-08-11 03:19 schwarze Added: test-dirent-namlen.c (1.1) Changed: Makefile (1.438), "Exp", lines: +4 -2 compat_fts.c (1.2), "Exp", lines: +16 -15 configure (1.10), "Exp", lines: +1 -0 work around lack of d_namlen and ALIGN/ALIGNBYTES on Linux 2014-08-11 02:21 schwarze Changed: config.h.pre (1.6), "Exp", lines: +3 -0 revert previous; i missed that config.h needs sys/types.h and stdio.h for itself because it uses size_t and FILE... 2014-08-11 02:05 schwarze Changed: test-fts.c (1.2), "Exp", lines: +1 -1 typo 2014-08-11 01:39 schwarze Added: compat_fts.c (1.1) compat_fts.h (1.1) test-fts.c (1.1) Changed: INSTALL (1.3), "Exp", lines: +3 -5 LICENSE (1.3), "Exp", lines: +3 -2 Makefile (1.437), "Exp", lines: +6 -5 Makefile.depend (1.4), "Exp", lines: +11 -10 NEWS (1.6), "Exp", lines: +1 -4 configure (1.9), "Exp", lines: +1 -0 mandocdb.c (1.157), "Exp", lines: +5 -1 Provide a fallback version of fts(3) for systems lacking it. I chose the OpenBSD version because it apparently contains various bugfixes that never made it into libnbcompat. To reduce size and complexity, i stripped out the features we don't need. 2014-08-11 00:31 schwarze Changed: Makefile (1.395.2.27), "Exp", lines: +3 -3 apropos.c (1.27.2.2), "Exp", lines: +3 -3 apropos_db.c (1.32.2.7), "Exp", lines: +2 -3 mandocdb.c (1.49.2.17), "Exp", lines: +1 -3 Get rid of HAVE_CONFIG_H, it is always defined; idea from libnbcompat. Include <sys/types.h> where needed, it does not belong in config.h. 2014-08-10 23:54 schwarze Changed: Makefile (1.436), "Exp", lines: +3 -3 apropos.c (1.40), "Exp", lines: +3 -3 arch.c (1.12), "Exp", lines: +3 -3 att.c (1.12), "Exp", lines: +3 -3 cgi.c (1.93), "Exp", lines: +3 -3 chars.c (1.59), "Exp", lines: +3 -3 compat_fgetln.c (1.3), "Exp", lines: +3 -2 compat_getsubopt.c (1.3), "Exp", lines: +0 -2 compat_ohash.c (1.5), "Exp", lines: +2 -2 compat_reallocarray.c (1.2), "Exp", lines: +0 -2 compat_sqlite3_errstr.c (1.2), "Exp", lines: +0 -2 compat_strcasestr.c (1.2), "Exp", lines: +0 -2 compat_strlcat.c (1.3), "Exp", lines: +0 -2 compat_strlcpy.c (1.3), "Exp", lines: +0 -2 compat_strsep.c (1.2), "Exp", lines: +0 -2 config.h.pre (1.5), "Exp", lines: +0 -3 demandoc.c (1.11), "Exp", lines: +3 -3 eqn.c (1.45), "Exp", lines: +3 -3 eqn_html.c (1.4), "Exp", lines: +3 -3 eqn_term.c (1.6), "Exp", lines: +3 -3 html.c (1.160), "Exp", lines: +1 -3 lib.c (1.11), "Exp", lines: +3 -3 main.c (1.178), "Exp", lines: +3 -3 man.c (1.138), "Exp", lines: +1 -3 man_hash.c (1.28), "Exp", lines: +1 -3 man_html.c (1.97), "Exp", lines: +1 -3 man_macro.c (1.88), "Exp", lines: +3 -3 man_term.c (1.150), "Exp", lines: +1 -3 man_validate.c (1.106), "Exp", lines: +1 -3 mandoc.c (1.84), "Exp", lines: +1 -3 mandoc_aux.c (1.4), "Exp", lines: +1 -3 mandocdb.c (1.156), "Exp", lines: +2 -3 manpage.c (1.8), "Exp", lines: +3 -3 manpath.c (1.16), "Exp", lines: +3 -3 mansearch.c (1.43), "Exp", lines: +3 -3 mansearch_const.c (1.6), "Exp", lines: +2 -3 mdoc.c (1.224), "Exp", lines: +1 -3 mdoc_argv.c (1.96), "Exp", lines: +1 -3 mdoc_hash.c (1.21), "Exp", lines: +1 -3 mdoc_html.c (1.196), "Exp", lines: +1 -3 mdoc_macro.c (1.140), "Exp", lines: +3 -3 mdoc_man.c (1.69), "Exp", lines: +3 -3 mdoc_term.c (1.276), "Exp", lines: +1 -3 mdoc_validate.c (1.244), "Exp", lines: +2 -5 msec.c (1.12), "Exp", lines: +3 -3 out.c (1.50), "Exp", lines: +1 -3 preconv.c (1.7), "Exp", lines: +2 -3 read.c (1.80), "Exp", lines: +4 -5 roff.c (1.225), "Exp", lines: +3 -3 st.c (1.11), "Exp", lines: +3 -3 tbl.c (1.30), "Exp", lines: +3 -3 tbl_data.c (1.32), "Exp", lines: +3 -3 tbl_html.c (1.12), "Exp", lines: +3 -3 tbl_layout.c (1.27), "Exp", lines: +3 -3 tbl_opts.c (1.14), "Exp", lines: +3 -3 tbl_term.c (1.28), "Exp", lines: +3 -3 term.c (1.227), "Exp", lines: +1 -3 term_ascii.c (1.28), "Exp", lines: +3 -5 term_ps.c (1.63), "Exp", lines: +1 -3 tree.c (1.54), "Exp", lines: +3 -3 vol.c (1.11), "Exp", lines: +3 -3 Get rid of HAVE_CONFIG_H, it is always defined; idea from libnbcompat. Include <sys/types.h> where needed, it does not belong in config.h. Remove <stdio.h> from config.h; if it is missing somewhere, it should be added, but i cannot find a *.c file where it is missing. 2014-08-10 17:22 tag VERSION_1_13_1 2014-08-10 17:22 schwarze Changed: INSTALL (1.2), "Exp", lines: +107 -39 New section about deployment by Kristaps. New paragraph about fts(3) by me. And various minor tweaks, some by Kristaps and some by me. 2014-08-10 16:32 schwarze Changed: NEWS (1.5), "Exp", lines: +81 -1 1.13.1 release notes 2014-08-10 16:21 schwarze Changed: Makefile.depend (1.3), "Exp", lines: +1 -1 sync after adding config.h to mansearch_const.c; committing on behalf of kristaps@ because i want to release now 2014-08-10 02:45 schwarze Changed: Makefile (1.435), "Exp", lines: +5 -4 configure (1.8), "Exp", lines: +2 -0 Clarifications in comments and standard output suggested by Paul Onyschuk <ptmelville at gmail dot com> (Alpine Linux) 2014-08-09 14:24 schwarze Changed: TODO (1.176), "Exp", lines: +5 -1 mansearch.c (1.42), "Exp", lines: +3 -2 mmap(2) requires MAP_PRIVATE ^ MAP_SHARED for flags; found by kristaps@ on Mac OS X 2014-08-09 14:05 schwarze Changed: mansearch_const.c (1.5), "Exp", lines: +5 -1 missing #include "config.h", hence missing definition of __BEGIN_DECLS; found by Thomas Klausner <wiz at NetBSD> on SunOS 5.11 2014-08-08 23:47 schwarze Changed: Makefile (1.434), "Exp", lines: +3 -2 configure (1.7), "Exp", lines: +2 -3 Do not hardcode stuff in ./configure that is actually user-configurable in the Makefile; instead, pass it down via the environment just like CFLAGS. Nice suggestion from kristaps@ hoping to make MacOS X happier. 2014-08-08 23:43 schwarze Changed: compat_ohash.h (1.5), "Exp", lines: +1 -2 Delete the __attribute__((__bounded__(...))) annotation. That's an OpenBSD-specific gcc-4.2.1 security extension. It's certainly a bad idea to use such stuff in a compatibility header, as other operating systems just won't understand it. 2014-08-08 20:34 schwarze Changed: Makefile (1.433), "Exp", lines: +4 -3 add INSTALL and bump VERSION 2014-08-08 20:04 schwarze Changed: TODO (1.175), "Exp", lines: +3 -2 mention neatroff 2014-08-08 16:45 schwarze Added: INSTALL (1.1) provide some instructions for manual installation 2014-08-08 16:38 schwarze Changed: mdoc.7 (1.234), "Exp", lines: +10 -5 When .Sm is called without an argument, groff toggles the spacing mode, so let us do the same for compatibility. Using this feature is of course not recommended except in manual page obfuscation contests. 2014-08-08 01:52 schwarze Changed: mdoc.7 (1.233), "Exp", lines: +18 -20 some corrections and improvements with respect to prologue macros; found while working on mandoc(1) messages 2014-08-08 01:50 schwarze Changed: mandoc.1 (1.106), "Exp", lines: +843 -28 document warning and error messages, using quite some feedback from jmc@; more cleanup is likely to happen when it's in 2014-08-06 15:09 schwarze Changed: man_validate.c (1.105), "Exp", lines: +12 -9 mandoc.h (1.152), "Exp", lines: +8 -5 mandocdb.c (1.155), "Exp", lines: +4 -3 mdoc.c (1.223), "Exp", lines: +22 -39 mdoc_html.c (1.195), "Exp", lines: +9 -4 mdoc_man.c (1.68), "Exp", lines: +4 -3 mdoc_term.c (1.275), "Exp", lines: +6 -2 mdoc_validate.c (1.243), "Exp", lines: +74 -82 read.c (1.79), "Exp", lines: +8 -5 Bring the handling of defective prologues even closer to groff, in particular relaxing the distinction between prologue and body and further improving messages. * The last .Dd wins and the last .Os wins, even in the body. * The last .Dt before the first body macro wins. * Missing title in .Dt defaults to UNTITLED. Warn about it. * Missing section in .Dt does not default to 1. But warn about it. * Do not warn multiple times about the same mdoc(7) prologue macro. * Warn about missing .Os. * Incomplete .TH defaults to empty strings. Warn about it. 2014-08-05 17:07 schwarze Deleted: man.cgi.7 (1.12.2.1) remove another leftover file 2014-08-05 16:12 schwarze Changed: Makefile.depend (1.2), "Exp", lines: +2 -0 sync after sqlite3_errstr() compat addition 2014-08-05 16:03 schwarze Changed: config.h.pre (1.4), "Exp", lines: +1 -1 test-strcasestr.c (1.2), "Exp", lines: +4 -0 strcasestr() wants _GNU_SOURCE on Linux 2014-08-05 16:00 schwarze Changed: test-mmap.c (1.5), "Exp", lines: +1 -0 NULL is in <stddef.h>; found on Linux 2014-08-05 15:29 schwarze Changed: cgi.c (1.92), "Exp", lines: +2 -1 mansearch.3 (1.2), "Exp", lines: +2 -1 mansearch.h uses uint64_t, so it needs stdint.h; found on Linux 2014-08-05 14:43 schwarze Changed: mandocdb.c (1.154), "Exp", lines: +5 -5 mansearch.c (1.41), "Exp", lines: +6 -6 Absurdly, the return value of sqlite3_column_text() is "const unsigned char *", which causes warnings with GCC on Linux. Explicitly cast to "const char *" to avoid this. Issue noticed by kristaps@. 2014-08-05 12:50 schwarze Added: compat_sqlite3_errstr.c (1.1) test-sqlite3_errstr.c (1.1) Changed: Makefile (1.432), "Exp", lines: +4 -1 config.h.post (1.11), "Exp", lines: +3 -0 configure (1.6), "Exp", lines: +2 -0 Since old SQLite versions do not have sqlite3_errstr(), provide a dummy fallback implementation. Do not bother to decode the error, SQLite error codes are not useful enough for that to be worthwhile. Note that using sqlite3_errmsg(db) would be a bad idea: On malloc() failure, db is NULL, which would cause a segfault. Issue noticed by kristaps@. 2014-08-05 12:34 schwarze Changed: mansearch.c (1.40), "Exp", lines: +4 -1 If an old SQLite version doesn't provide SQLITE_DETERMINISTIC, simply ignore it, as using it is merely an optimization. Issue noticed by kristaps@. 2014-08-05 11:19 schwarze Changed: Makefile (1.395.2.26), "Exp", lines: +5 -4 merge portability fix from HEAD 2014-08-05 11:19 schwarze Changed: Makefile (1.431), "Exp", lines: +5 -4 Portability fix: * POSIX syntax is 'include Makefile.depend', not '.include "Makefile.depend"' * gmake(1) runs the build rule for the included file (duh), so delete the rule * consequently, we have to mark the 'depend' maintainer target .PHONY * as it's now .PHONY anyway, drop some prerequisites that are now useless Issue noticed by kristaps@. 2014-08-05 05:51 schwarze Changed: Makefile (1.395.2.25), "Exp", lines: +9 -2 Split mandoc_escape(3), mandoc_malloc(3), and mchars_alloc(3) out of mandoc(3), adding lots of new information. 2014-08-05 05:48 schwarze Added: mandoc_escape.3 (1.1) mandoc_malloc.3 (1.1) mchars_alloc.3 (1.1) Changed: Makefile (1.430), "Exp", lines: +9 -2 mandoc.3 (1.25), "Exp", lines: +93 -181 Sync library documentation with reality. Split mandoc_escape(3), mandoc_malloc(3), and mchars_alloc(3) out of mandoc(3), adding lots of new information. 2014-08-05 05:27 schwarze Added: Makefile.depend (1.1) Changed: Makefile (1.429), "Exp", lines: +79 -95 Makefile (1.395.2.24), "Exp", lines: +72 -85 Makefile.depend (1.1.2.1), "Exp", lines: +4 -8 Switch to autogenerated dependency rules; they are less error-prone. Provide a maintainer target to regenerate them. 2014-08-05 03:15 schwarze Changed: Makefile (1.395.2.23), "Exp", lines: +34 -13 Properly partition the build system and install some missing stuff: * Introduce targets base-build and db-build. * Introduce targets base-install and db-install. * Introduce a BUILD_TARGETS variable to contain db-build. * Introduce an INSTALL_TARGETS variable and fill it using BUILD_TARGETS. * Install the apropos(1) and mandocdb(8) binaries. * Install whatis(1) as a hard link to apropos(1). * Install the apropos(1), whatis(1), and mandocdb(8) manuals. * Install mandoc_aux.h. 2014-08-05 03:02 schwarze Changed: Makefile (1.428), "Exp", lines: +56 -15 Properly partition the build system and install some missing stuff: * Introduce targets base-build, db-build, cgi-build. * Introduce targets base-install, db-install, cgi-install. * Introduce a BUILD_TARGETS variable to contain db-build and cgi-build. * Introduce an INSTALL_TARGETS variable and fill it using BUILD_TARGETS. * Install the whatis(1) and makewhatis(8) binaries. * Install the apropos(1), whatis(1), and makewhatis(8) manuals. * Install mandoc_aux.h. * Do not build manpage(1) by default. 2014-08-05 01:46 schwarze Changed: Makefile (1.395.2.22), "Exp", lines: +8 -4 Various minor corrections: * Do not install programs and libs root-writeable. * Add missing test-strcasestr.c and test-strsep.c to TESTSRCS. * Add missing mandoc_html.3 to SRCS. * Add missing mandoc_html.3.html to WWW_MANS. 2014-08-05 01:45 schwarze Changed: Makefile (1.427), "Exp", lines: +17 -6 Various minor corrections: * Do not unconditionally use -I/usr/local/include and -L/usr/local/lib. * Do not install programs and libs root-writeable. * Add missing test-strcasestr.c and test-strsep.c to TESTSRCS. * Add missing cgi.h.example and mandoc_html.3 to SRCS. * Add missing mandoc_html.3.html to WWW_MANS. 2014-08-05 01:07 schwarze Changed: Makefile (1.426), "Exp", lines: +35 -20 Makefile (1.395.2.21), "Exp", lines: +20 -12 sort user settings; no functional change 2014-08-05 00:42 schwarze Deleted: catman.8 (1.5.2.1) catman.c (1.11.2.3) cgi.c (1.51.2.1) man-cgi.css (1.6.2.1) Changed: Makefile (1.395.2.20), "Exp", lines: +4 -47 Remove the old man.cgi. Running that would not be a responsible thing to do, nowadays. 2014-08-04 23:44 schwarze Deleted: compat_strnlen.c (1.2) test-strnlen.c (1.2) compat_strnlen.c (1.1.2.1) test-strnlen.c (1.1.2.1) Changed: Makefile (1.425), "Exp", lines: +1 -4 config.h.post (1.10), "Exp", lines: +0 -3 configure (1.5), "Exp", lines: +0 -1 Makefile (1.395.2.19), "Exp", lines: +1 -4 config.h.post (1.6.2.7), "Exp", lines: +0 -3 configure (1.1.2.4), "Exp", lines: +0 -1 remove strnlen(3) compat, we no longer use it 2014-08-02 00:02 schwarze Changed: mdoc_validate.c (1.242), "Exp", lines: +150 -128 Simplify by allowing only one post-handler. Saves 36 static arrays and 10 lines of code at the expense of only five new trivial static functions. No functional change. 2014-08-01 22:22 schwarze Changed: mdoc_validate.c (1.241), "Exp", lines: +29 -47 Simplify by allowing only one pre-handler. Saves 12 static arrays and 19 lines of code. No functional change. 2014-08-01 21:24 schwarze Changed: libman.h (1.63), "Exp", lines: +1 -2 man.c (1.137), "Exp", lines: +5 -4 man_validate.c (1.104), "Exp", lines: +69 -120 Simplify man(7) validation: Drop pre-handlers, they were almost unused. Drop the needless complexity of allowing more than one post-handler. This saves one internal interface function, one static function, one private struct definition, sixteen static arrays, and 45 lines of code. No functional change. 2014-08-01 19:38 schwarze Changed: term.c (1.226), "Exp", lines: +3 -3 Fix floating point handling: When converting double to size_t, properly round to the nearest M (=0.001m), which is the smallest available unit. This avoids weirdness like (size_t)(0.6 * 10.0) == 5 by instead calculating (size_t)(0.6 * 10.0 + 0.0005) == 6, and so it fixes the indentation of the readline(3) manual. 2014-08-01 19:25 schwarze Changed: man_html.c (1.96), "Exp", lines: +2 -2 mdoc_html.c (1.194), "Exp", lines: +3 -3 out.c (1.49), "Exp", lines: +3 -3 term.c (1.225), "Exp", lines: +7 -7 term_ascii.c (1.27), "Exp", lines: +7 -7 term_ps.c (1.62), "Exp", lines: +4 -4 Clarity with respect to floating point handling: Write double constants as double rather than integer literals. Remove useless explicit (double) cast done at one place and nowhere else. No functional change. 2014-08-01 17:40 schwarze Changed: libman.h (1.62), "Exp", lines: +1 -5 libmdoc.h (1.88), "Exp", lines: +1 -5 man_validate.c (1.103), "Exp", lines: +5 -3 mdoc_validate.c (1.240), "Exp", lines: +5 -3 demacrify: get rid of man_nmsg(), man_pmsg(), mdoc_nmsg(), mdoc_pmsg() 2014-08-01 17:27 schwarze Changed: man.c (1.136), "Exp", lines: +3 -3 man_validate.c (1.102), "Exp", lines: +10 -6 mandoc.h (1.151), "Exp", lines: +30 -30 mdoc.c (1.222), "Exp", lines: +3 -3 mdoc_macro.c (1.139), "Exp", lines: +2 -2 mdoc_validate.c (1.239), "Exp", lines: +45 -33 read.c (1.78), "Exp", lines: +9 -9 roff.c (1.224), "Exp", lines: +4 -3 mention requests and macros in more messages 2014-08-01 15:08 schwarze Changed: mandoc.h (1.150), "Exp", lines: +1 -2 read.c (1.77), "Exp", lines: +1 -2 roff.c (1.223), "Exp", lines: +18 -17 Dynamically allocate the stack of roff(7) .ie condition values and thus get rid of the last useless fatal error. 2014-07-31 09:22 schwarze Changed: mandoc.h (1.149), "Exp", lines: +3 -2 mdoc_validate.c (1.238), "Exp", lines: +22 -10 read.c (1.76), "Exp", lines: +3 -2 Split MANDOCERR_IGNARGV into one message for .An and one for .Bl and report the macro name and argument. 2014-07-31 00:41 schwarze Changed: mandoc.h (1.148), "Exp", lines: +1 -2 mdoc_validate.c (1.237), "Exp", lines: +13 -21 read.c (1.75), "Exp", lines: +1 -2 In .Bl -column, if some of the column width declarations are given right after the -column argument and some at the very end of the argument list, after some other arguments like -compact, concatenate the column lists. This gets rid of one of the last useless FATAL errors and actually shortens the code by a few lines. This fixes an issue introduced more than five years ago, at first causing an assert() since mdoc_action.c rev. 1.14 (June 17, 2009), then later a FATAL error since mdoc_validate rev. 1.130 (Nov. 30, 2010), and marked as "TODO" ever since. 2014-07-30 23:38 schwarze Changed: mandoc.h (1.147), "Exp", lines: +1 -2 mdoc_validate.c (1.236), "Exp", lines: +6 -12 read.c (1.74), "Exp", lines: +1 -2 Remove the useless FATAL error "argument count wrong, violates syntax". The last remaining instance was .It in .Bl -column with more than one excessive .Ta. However, simply downgrading from FATAL to ERROR, it just works fine, almost the same way as in groff, without any other changes. 2014-07-30 23:01 schwarze Changed: man_macro.c (1.87), "Exp", lines: +30 -8 man_validate.c (1.101), "Exp", lines: +4 -22 Improve handling of next-line scope broken by end of file. Detect the condition earlier, report in the error message which block is broken, and delete the broken block. Consequently, empty section headers can no longer happen. 2014-07-30 21:18 schwarze Changed: libman.h (1.61), "Exp", lines: +1 -3 libmdoc.h (1.87), "Exp", lines: +1 -2 man.c (1.135), "Exp", lines: +8 -45 man_macro.c (1.86), "Exp", lines: +1 -8 mdoc.c (1.221), "Exp", lines: +7 -35 garbage collect three unused global flags; no functional change 2014-07-30 20:06 schwarze Changed: libman.h (1.60), "Exp", lines: +1 -2 man.c (1.134), "Exp", lines: +7 -12 Simplify: replace one global flag by one local variable. No functional change. 2014-07-30 17:06 schwarze Changed: mandoc.h (1.146), "Exp", lines: +2 -2 mdoc_macro.c (1.138), "Exp", lines: +19 -1 mdoc_term.c (1.274), "Exp", lines: +5 -2 mdoc_validate.c (1.235), "Exp", lines: +4 -54 read.c (1.73), "Exp", lines: +2 -2 Get rid of the useless FATAL error "child violates parent syntax". When finding items outside lists, simply skip them and throw an ERROR. Handle subsections before the first section instead of bailing out. 2014-07-30 14:50 schwarze Changed: mandoc.h (1.145), "Exp", lines: +1 -3 mdoc_validate.c (1.234), "Exp", lines: +16 -8 read.c (1.72), "Exp", lines: +22 -18 Remove two useless FATAL errors. When a file contains neither text nor macros, treat it as an empty document. When the mdoc(7) document prologue is incomplete, use some default values. 2014-07-30 12:58 schwarze Changed: mandoc.h (1.144), "Exp", lines: +4 -4 mdoc_validate.c (1.233), "Exp", lines: +3 -2 read.c (1.71), "Exp", lines: +4 -4 roff.c (1.222), "Exp", lines: +2 -2 better name and wording for the last two non-generic errors 2014-07-30 00:19 schwarze Changed: mandoc.h (1.143), "Exp", lines: +3 -2 mdoc_html.c (1.193), "Exp", lines: +31 -25 mdoc_man.c (1.67), "Exp", lines: +95 -10 mdoc_term.c (1.273), "Exp", lines: +32 -23 mdoc_validate.c (1.232), "Exp", lines: +17 -26 read.c (1.70), "Exp", lines: +3 -2 Various improvements related to .Ex and .Rv: * let .Nm fall back to the empty string, not to UNKNOWN * never let .Rv copy an argument from .Nm * avoid spurious \fR after empty .Nm in -Tman * correct handling of .Ex and .Rv in -Tman * correct the wording of the output for .Rv without arguments * use non-breaking spaces in .Ex and .Rv output where required * split MANDOCERR_NONAME into a warning for .Ex and an error for .Nm 2014-07-29 15:20 schwarze Changed: TODO (1.174), "Exp", lines: +79 -18 move some things here from my private TODO list, and remove some items that have already been taken care of 2014-07-29 13:58 schwarze Changed: mdoc.h (1.131), "Exp", lines: +2 -2 mdoc_term.c (1.272), "Exp", lines: +14 -3 mdoc_validate.c (1.231), "Exp", lines: +2 -2 Partial implementation of .Bd -centered. In groff, .Bd -centered operates in fill mode, which is relatively hard to implement, while this implementation operates in non-fill mode so far. As long as you pay attention that your lines do not overflow, it works. To make sure that rendering is the same for mandoc and groff, it is recommended to insert .br between lines for now. This implementation will need improvement later. 2014-07-27 21:53 schwarze Changed: term_ps.c (1.61), "Exp", lines: +6 -8 code readability; no functional change 2014-07-27 21:52 schwarze Changed: term_ascii.c (1.26), "Exp", lines: +7 -2 Even for UTF-8 output, a non-breaking space character has the same width as a normal space character, and not width 0. Bug reported by bentley@. 2014-07-25 21:05 schwarze Changed: cgi.c (1.91), "Exp", lines: +9 -35 Choosing the right encoding is a tricky business... Printing query strings for URIs *always* needs URI-encoding, and when embedding the URI into an HTML document, it needs replacement of the "&" separators by "&" *in addition to that*, not instead. Delete the function html_primtquery(), it was completely wrong. You can see the badness by entering "mandoc &sec=2" into the query input box before this patch and click "Submit". You come to the right page at first (...man.cgi?query=mandoc+%26sec%3D2&apropos=0&sec=0&...), but now the link to mandoc(1) is wrong: ...mandoc.1?query=mandoc &sec=2&... Clicking on that, the "&sec=2" disappears from the query input box and suddenly you have the first dropdown set to "2 - System Calls". Oops. 2014-07-25 20:09 schwarze Changed: cgi.c (1.90), "Exp", lines: +13 -8 Sort the URI keys for .Xr links in the same order used by the search form, and leave out the manpath when it is the default. For building the HTML formatter options, do not use a static buffer. 2014-07-25 19:37 schwarze Changed: cgi.c (1.89), "Exp", lines: +3 -2 oops, we must not try to validate a manpath we don't have; fixing an oversight introduced in rev. 1.77 2014-07-25 18:20 schwarze Changed: cgi.c (1.88), "Exp", lines: +19 -17 We cannot easily control the order of the QUERY_STRING keys generated by the search form, it's just the order of the fields in the form. Actually, that's not too bad; the generated URI resembles the generating form. To minimize confusion for people looking at URIs, give the keys in the same order when generating URIs for search listings and search redirections, the latter being used instead of search listings that would have only one single entry. Also, if the manpath is the default, remove it form the generated URIs. 2014-07-25 17:52 schwarze Changed: cgi.c (1.87), "Exp", lines: +3 -2 In generated .Xr links, avoid double encoding of ampersands and avoid empty arch= keys. 2014-07-25 17:34 schwarze Changed: cgi.c (1.86), "Exp", lines: +12 -12 Even though this is not XHTML yet, remove some gratuitious violations of XHTML syntax. Also add some cosmetic newlines to the HTML code. 2014-07-25 16:56 schwarze Changed: cgi.c (1.85), "Exp", lines: +17 -13 The names of all other struct query memebers match the corresponding QUERY_STRING keys, so rename "expr" to "query". Also add some missing function prototypes. No functional change. 2014-07-25 16:43 schwarze Changed: cgi.c (1.84), "Exp", lines: +20 -15 clean up pg_show() to not modify a string returned from getenv(3) 2014-07-25 16:07 schwarze Changed: cgi.c (1.83), "Exp", lines: +104 -49 Rewrite http_parse() completely: 1. Make sure the last occurrence of each key is used, even if it is empty, in which case it resets the value to the default. 2. When there is an HTTP encoding error, skip the affected key-value pair only, but not all subsequent key-value pairs. 3. Do not modify a string returned from getenv(3). 4. Do not assume the NULL pointer is all null bits. 2014-07-24 20:30 schwarze Changed: cgi.c (1.82), "Exp", lines: +1 -12 mansearch.c (1.39), "Exp", lines: +21 -1 mansearch.h (1.15), "Exp", lines: +2 -1 Sort result pages first by section number, then by name. By moving the sort from cgi.c to mansearch.c, we get two advantages: Easier access to the data needed for sorting, in particular the section number, and the apropos(1) command line utility profits as well. Feature requested by deraadt@. 2014-07-24 08:26 schwarze Changed: cgi.c (1.81), "Exp", lines: +26 -2 Provide a dropdown entry "All Architectures" and make it the default. Still, amd64 remains the default in the following sense: If a man(1) mode search returns more than one page of the same name, prefer amd64 over other architectures for immediate display. ok deraadt@ daniel@ 2014-07-24 08:26 schwarze Changed: TODO (1.173), "Exp", lines: +12 -1 improve FATAL handling in makewhatis(8) 2014-07-23 18:13 schwarze Added: mandoc_html.3 (1.1) Partially document the core of the HTML formatter. Stuff i learnt during my audit for XSS vulnerabilities. 2014-07-23 15:00 schwarze Changed: chars.c (1.58), "Exp", lines: +13 -2 html.c (1.159), "Exp", lines: +38 -27 Security fix: After decoding numeric (\N) and one-character (\<, \> etc.) character escape sequences, do not forget to HTML-encode the resulting ASCII character. Malicious manuals were able to smuggle XSS content by roff-escaping the HTML-special characters they need. That's a classic bug type in many web applications, actually... :-( Found myself while auditing the HTML formatter for safe output handling. 2014-07-22 22:41 schwarze Changed: html.c (1.158), "Exp", lines: +5 -2 Security fix: The function print_encode() is used both for plain text and for quoted attribute values. Escape the '"' character such that malicious manuals cannot pull off XSS attacks using malformed .Lk, .Mt, .%U, and .UR macros (and maybe others) to trigger the latter case. In the former case, escaping does no harm. Issue found by Sebastien Marie <semarie-openbsd at latrappe dot fr>. 2014-07-22 18:14 schwarze Changed: cgi.c (1.80), "Exp", lines: +42 -2 man.cgi.8 (1.9), "Exp", lines: +40 -2 Security fix to prevent XSS attacks: Restrict the character set of strings passed into html_alloc(), in particular architecture names that come from the QUERY_STRING, but also SCRIPT_NAME and manpath.conf content for additional safety, and bail out safely on violations. Issue reported by Sebastien Marie <semarie-openbsd at latrappe dot fr>. 2014-07-21 22:33 schwarze Changed: cgi.c (1.79), "Exp", lines: +10 -6 fix a minibug reported by kristaps@: preserve manpath and arch in .Xr links 2014-07-21 15:45 schwarze Changed: cgi.c (1.78), "Exp", lines: +3 -3 cgi.h.example (1.3), "Exp", lines: +2 -1 man.cgi.8 (1.8), "Exp", lines: +7 -2 Kristaps points out that the current HTTP/1.1 draft standard (RFC 2616) requires the Location: response-header field to be an absolute URI (14.30), and only the most recent proposed standard (RFC 7231), which is barely a month old, allows a relative Location: (7.1.2). While most modern browsers appear to support relative Location: headers, some may not, and it's maybe a bit early to rely on relative Location: headers. I'm not going back to the HTTP_HOST or SERVER_NAME CGI variables, though. While some CGI programs certainly require those, in which case both the CGI programmer and the web server admin have to be very careful to keep the system secure and reliable, man.cgi(8) does not really need them. We always know at compile time which domain we are running for, and for man.cgi(8), security and reliability are definitely much more important than flexibility. So make HTTP_HOST a compile-time definition for now. 2014-07-19 13:15 schwarze Changed: cgi.c (1.77), "Exp", lines: +34 -5 Security fix: Validate the manpath up front and report a Bad Request if it is not listed in manpath.conf, such that clients can't probe which directories exist on the server. In case of configuration errors, consistently report Internal Server Error without disclosing any further information. Partially based on a patch from Sebastien Marie <semarie-openbsd at latrappe dot fr>, but avoiding a couple of issues with that patch and approaching the issue in a somewhat more rigorous way. 2014-07-19 11:35 schwarze Changed: cgi.c (1.76), "Exp", lines: +29 -2 Security fix: Validate the name of the file to show before opening it. Only allow relative filenames starting with "man" or "cat" and containing neither "/.." nor "../". While here, correct the condition discarding an initial "./". Vulnerability found by Sebastien Marie <semarie-openbsd at latrappe dot fr>. Many thanks for sending a patch; however, i did not use it but made the checks even stricter. 2014-07-18 19:03 schwarze Changed: cgi.c (1.75), "Exp", lines: +3 -7 man.cgi.8 (1.7), "Exp", lines: +1 -6 Do not use the HTTP_HOST CGI variable, just make the HTTP redirect Location: relative. Less user input is good, it reduces the attack surface. Besides, this removes one global variable and 4 lines of code. Patch from Sebastien Marie <semarie-openbsd at latrappe dot fr>. 2014-07-18 14:46 schwarze Changed: cgi.c (1.74), "Exp", lines: +13 -3 When the MAN_DIR/manpath.conf configuration file does not exist or is empty, log the problem, hand the pg_error_internal() error page to the client, and exit(3) in a controlled way instead of stumbling on and segfaulting later. Patch from Sebastien Marie <semarie-openbsd at latrappe dot fr>, messages tweaked by me. 2014-07-13 15:38 schwarze Changed: cgi.c (1.73), "Exp", lines: +16 -5 cgi.h.example (1.2), "Exp", lines: +1 -0 man.cgi.8 (1.6), "Exp", lines: +57 -22 Compatibility hack for the old "manpath=OpenBSD<blank>" query parameter format; unfortunate, more than 400 links needing this are scattered all around the www.openbsd.org website, and CVSweb needs this as well. 2014-07-13 12:55 schwarze Changed: cgi.c (1.72), "Exp", lines: +22 -23 Make the calltree a bit easier to understand by giving the functions that call resp_begin_html() names starting with "pg_" and those called after resp_begin_html() names with "resp_". No functional change, purely renaming functions. 2014-07-13 12:45 schwarze Changed: cgi.c (1.71), "Exp", lines: +3 -1 make source vs. formatted guessing a bit more robust 2014-07-13 12:31 schwarze Changed: cgi.c (1.70), "Exp", lines: +47 -21 By popular demand, bring man.cgi default mode closer to what man(1) does: Even when there are multiple pages with the same name in different sections, show one of them, using the same priorities as in the default man.conf(5) file. 2014-07-13 10:24 schwarze Changed: mdoc.7 (1.232), "Exp", lines: +21 -9 Unconfuse .Fa documentation: You can use .Fa with just a type, without a name, but when you give both, which is the usual case, they need to go into one single .Fa argument. Observed by bentley@; ok jmc@ bentley@. 2014-07-13 09:39 schwarze Changed: Makefile (1.424), "Exp", lines: +5 -1 cgi.c (1.69), "Exp", lines: +5 -5 man.cgi.8 (1.5), "Exp", lines: +6 -2 Install the manuals of the web interface below the same directory as manpath.conf, such that we do not need to mix our own documentation into the documentation we are serving, which may not even be possible if the latter is updated automatically. Based on an idea by beck@. 2014-07-13 00:19 schwarze Changed: man.cgi.8 (1.4), "Exp", lines: +58 -58 update after recent code changes 2014-07-12 23:46 schwarze Changed: cgi.c (1.68), "Exp", lines: +97 -28 Polish the search form using feedback from beck@ and others, in particular introduce a section dropdown and an architecture dropdown. 2014-07-12 23:41 schwarze Changed: man.cgi.8 (1.3), "Exp", lines: +3 -3 Polish the search form using feedback from beck@ and others, in particular introduce a section dropdown and an architecture dropdown. 2014-07-12 18:32 schwarze Added: cgi.h.example (1.1) Changed: Makefile (1.423), "Exp", lines: +6 -2 cgi.c (1.67), "Exp", lines: +8 -18 No need for run-time configuration, add minimal compile-time configuration facilities, just two paths and two HTML strings. Show the title on all pages, not just the index page. 2014-07-12 17:21 schwarze Changed: cgi.c (1.66), "Exp", lines: +27 -100 Simplify: Delete 74 lines of code including one enum type, one global lookup table, two functions, two function arguments, one struct member, one local variable, and the "search/" and "show/" part of the URIs, all without losing functionality. 2014-07-12 16:14 schwarze Changed: cgi.c (1.65), "Exp", lines: +35 -38 Start fixing issues that beck@ helped find: Distinguish between man(1) and apropos(1) mode by adding back the classical QUERY_STRING variable "apropos=". Change the default back to "apropos=0". Control it by adding a HTML <SELECT> element for it. Rename the "expr=" QUERY_STRING variable back to its classical name "query=", i don't see how the new name is better than the classical one. While here, drop the concept of a "legacy mode". Simply continue to support the features, and use what we consider best. 2014-07-12 14:00 schwarze Changed: mansearch.c (1.38), "Exp", lines: +51 -23 mansearch.h (1.14), "Exp", lines: +3 -2 Fix whatis(1) to correctly match words instead of any substrings. While here, also provide an internal mode (MANSEARCH_MAN) to match complete names, to be used by man.cgi(8). 2014-07-12 01:55 schwarze Changed: cgi.c (1.64), "Exp", lines: +9 -8 fix the two manual links on the index page 2014-07-11 22:27 schwarze Changed: cgi.c (1.63), "Exp", lines: +9 -7 merge OpenBSD rev. 1.3 by tedu@: make http decode linear time. also remove a redundant null check. 2014-07-11 22:25 schwarze Changed: cgi.c (1.62), "Exp", lines: +10 -9 merge OpenBSD rev. 1.2 by tedu@: http headers must end lines with CRLF. 2014-07-11 21:30 schwarze Changed: man.cgi.8 (1.2), "Exp", lines: +10 -2 add HISTORY section 2014-07-10 00:52 schwarze Changed: cgi.c (1.61), "Exp", lines: +6 -3 Link to the new man.cgi(8) manual, now that we have it! :-) While here, s/satisfy/match/ when talking about queries. 2014-07-10 00:31 schwarze Deleted: man.cgi.7 (1.14) Added: man.cgi.8 (1.1) Changed: Makefile (1.422), "Exp", lines: +3 -3 Full rewrite of the man.cgi(8) manual. Almost everything in the old man.cgi(7) was outdated in one way or another - catman, catman.conf, CACHE_DIR, /cache, manroots, replacing '/' with spaces, /tmp... Instead, document the HTML and URI interfaces, the output and the setup, and complete the listings of ENVIRONMENT variables and FILES. Using section 8 instead of section 7 because that's the usual place for CGI programs, see for example bgplg(8) and slowcgi(8). 2014-07-09 17:03 schwarze Changed: cgi.c (1.60), "Exp", lines: +11 -3 some sugar for the index page 2014-07-09 16:23 schwarze Changed: cgi.c (1.59), "Exp", lines: +51 -50 Clean up error reporting: * Consistent naming and use of resp_* functions. * Split resp_noresult() out of resp_search() and reuse it. * Log information about internal errors. * And some minor fixes. 2014-07-09 14:18 schwarze Changed: cgi.c (1.58), "Exp", lines: +48 -45 namespace cleanups: CGI variable: s/CACHE_DIR/MAN_DIR/ because it's static, not a cache default MAN_DIR: /cache/man.cgi/ -> /man/ see above global variable: s/cache/mandir/ see above global variable: s/css/cssdir/ for consistency with mandir global variable: s/host/httphost/ for consistency with HTTP_HOST global variable: s/progname/scriptname/ for consistency with SCRIPT_NAME struct query: member s/manroot/manpath/ for consistency with QUERY_STRING 2014-07-09 12:09 schwarze Changed: cgi.c (1.57), "Exp", lines: +3 -10 remove obsolete __sun includes and improve some whitespace and comments 2014-07-09 11:34 schwarze Changed: cgi.c (1.56), "Exp", lines: +3 -2 set a reasonable default for .Os 2014-07-09 11:31 schwarze Changed: libmandoc.h (1.42), "Exp", lines: +3 -2 libmdoc.h (1.86), "Exp", lines: +2 -2 mandoc.h (1.142), "Exp", lines: +3 -2 mdoc.c (1.220), "Exp", lines: +2 -2 read.c (1.69), "Exp", lines: +3 -3 mark defos as const; nobody needs to change it, and it is occasionally useful to be able to pass literal strings 2014-07-09 11:28 schwarze Changed: man_macro.c (1.85), "Exp", lines: +1 -3 delete forgotten, obsolete rew_warn() prototype 2014-07-09 09:27 schwarze Changed: cgi.c (1.55), "Exp", lines: +3 -1 oops, forgot to trim the newline character 2014-07-09 09:19 schwarze Changed: cgi.c (1.54), "Exp", lines: +14 -28 Simplify pathgen() even more. Let manpath.conf be a plain text list of the directories to use. As a bonus, this makes the order configurable. Get rid of <dirent.h>, opendir(3), readdir(3), stat(2). 2014-07-09 08:53 schwarze Changed: cgi.c (1.53), "Exp", lines: +33 -13 include manpath= when printing queries, and omit empty parameters 2014-07-09 08:20 schwarze Changed: mandoc_aux.c (1.3), "Exp", lines: +5 -1 This one needs "config.h", too. 2014-07-09 07:30 schwarze Changed: Makefile (1.421), "Exp", lines: +17 -2 cgi.c (1.52), "Exp", lines: +85 -377 Switch over man.cgi to SQLite. While here: * Simplify pathgen(), just use the subdirs of the cache dir. * Simplify URI paths, just use show/<manpath>/<filename>. * Drop struct paths, just use plain strings. * Garbage collect unused headers. 2014-07-07 21:36 schwarze Changed: man.c (1.133), "Exp", lines: +3 -3 man_macro.c (1.84), "Exp", lines: +4 -3 man_validate.c (1.100), "Exp", lines: +4 -5 mandoc.h (1.141), "Exp", lines: +11 -8 mdoc_macro.c (1.137), "Exp", lines: +10 -6 read.c (1.68), "Exp", lines: +9 -6 roff.c (1.221), "Exp", lines: +25 -16 Clean up ERROR messages related to document structure and macros: Hierarchical naming and mention macro names in messages. 2014-07-07 19:18 schwarze Changed: libman.h (1.59), "Exp", lines: +2 -3 man.c (1.132), "Exp", lines: +4 -4 man_macro.c (1.83), "Exp", lines: +22 -46 Simplify man_unscope(), removing 18 lines of code, that is, removing one function argument, one function definition, three function invocations and two pointless assert()s. No functional change. 2014-07-07 16:12 schwarze Changed: mandoc.h (1.140), "Exp", lines: +2 -2 mdoc_validate.c (1.230), "Exp", lines: +12 -35 read.c (1.67), "Exp", lines: +2 -2 no need to delete any content from .Rs blocks, and downgrade the related message from ERROR to WARNING 2014-07-07 15:03 schwarze Changed: mandoc.h (1.139), "Exp", lines: +1 -2 mdoc.c (1.219), "Exp", lines: +1 -22 mdoc_term.c (1.271), "Exp", lines: +5 -2 read.c (1.66), "Exp", lines: +1 -2 no need to skip content before first section header 2014-07-07 11:35 schwarze Changed: mandoc.h (1.138), "Exp", lines: +1 -2 read.c (1.65), "Exp", lines: +1 -2 roff.7 (1.55), "Exp", lines: +15 -14 roff.c (1.220), "Exp", lines: +56 -34 implement .dei and .ami 2014-07-06 19:09 schwarze Changed: eqn.c (1.44), "Exp", lines: +2 -2 man.c (1.131), "Exp", lines: +7 -4 man_validate.c (1.99), "Exp", lines: +3 -2 mandoc.c (1.83), "Exp", lines: +3 -3 mandoc.h (1.137), "Exp", lines: +9 -8 mdoc.c (1.218), "Exp", lines: +9 -5 mdoc_argv.c (1.95), "Exp", lines: +9 -5 mdoc_validate.c (1.229), "Exp", lines: +3 -2 read.c (1.64), "Exp", lines: +7 -6 roff.c (1.219), "Exp", lines: +13 -13 Clean up messages related to plain text and to escape sequences. * Mention invalid escape sequences and string names, and fallbacks. * Hierarchical naming. 2014-07-06 18:51 schwarze Changed: term.c (1.224), "Exp", lines: +3 -3 After skipping an escape sequence with incomplete arguments, do not throw away the rest of the string to be rendered. 2014-07-06 18:46 schwarze Changed: roff.c (1.218), "Exp", lines: +15 -8 Fix expansion of escape sequences with incomplete arguments. * For \* and \n, discard the incomplete arg, expand to empty string. * For \B, discard the incomplete arg, expand to the digit 0. * For \w, use the incomplete arg (behaviour unchanged). 2014-07-06 18:37 schwarze Changed: mandoc.c (1.82), "Exp", lines: +4 -2 Fix handling of escape sequences taking numeric arguments. * Repair detection of invalid delimiters. * Discard the invalid delimiter together with the invalid sequence. Note to self: In general, strchr("\0...", c) is a thoroughly bad idea. 2014-07-05 12:34 schwarze Changed: man_validate.c (1.98), "Exp", lines: +3 -3 mandoc.h (1.136), "Exp", lines: +9 -10 mdoc_validate.c (1.228), "Exp", lines: +62 -57 read.c (1.63), "Exp", lines: +6 -7 Cleanup with respect to bad macro arguments. * Fix .Sm with invalid arg: move arg out and toggle mode. * Promote "unknown standard" from WARNING to ERROR, it loses information. * Delete MANDOCERR_BADWIDTH, it would only indicate a mandoc(1) bug. * Do not report MANDOCERR_BL_LATETYPE when there is no type at all. * Mention macro names, arguments and fallbacks. 2014-07-05 01:12 schwarze Changed: mandoc.h (1.135), "Exp", lines: +3 -2 mdoc_validate.c (1.227), "Exp", lines: +52 -56 read.c (1.62), "Exp", lines: +2 -1 Cleanup regarding -offset and -width: * Bugfix: Last one wins, not first one. * Fix .Bl -width without argument: it means 0n, so do not ignore it. * Report macro names, argument names and fallbacks in related messages. * Simplify: Garbage collect auxiliary variables in pre_bd() and pre_bl(). 2014-07-04 16:12 schwarze Changed: eqn.c (1.43), "Exp", lines: +3 -2 man_validate.c (1.97), "Exp", lines: +6 -2 mandoc.h (1.134), "Exp", lines: +5 -4 mdoc_macro.c (1.136), "Exp", lines: +7 -6 mdoc_man.c (1.66), "Exp", lines: +7 -5 mdoc_validate.c (1.226), "Exp", lines: +27 -24 read.c (1.61), "Exp", lines: +5 -4 roff.c (1.217), "Exp", lines: +5 -3 Clean up messages regarding excess arguments: * Downgrade ".Bf -emphasis Em" from FATAL to WARNING. * Mention the macros, the arguments, and the fallbacks. * Hierarchical naming. 2014-07-04 01:50 schwarze Changed: mandoc.h (1.133), "Exp", lines: +8 -9 mdoc_validate.c (1.225), "Exp", lines: +13 -17 read.c (1.60), "Exp", lines: +8 -8 Clean up messages related to missing arguments. * Do not warn about empty -column cells, they seem valid to me. * Downgrade empty item and missing -std from ERROR to WARNING. * Hierarchical naming. * Descriptive, not imperative style. * Mention macro names, argument names, and fallbacks. * Garbage collect some unreachable code in post_it(). 2014-07-03 23:24 schwarze Changed: mandoc.h (1.132), "Exp", lines: +2 -2 mdoc_term.c (1.270), "Exp", lines: +2 -2 mdoc_validate.c (1.224), "Exp", lines: +23 -25 read.c (1.59), "Exp", lines: +2 -2 Fix formatting of empty .Bl -inset item heads. Downgrade empty item heads from ERROR to WARNING. Show the list type in the error message. Choose better variable names for nodes in post_it(). 2014-07-03 21:23 schwarze Changed: mandoc.h (1.131), "Exp", lines: +4 -2 read.c (1.58), "Exp", lines: +3 -1 roff.c (1.216), "Exp", lines: +5 -3 MANDOCERR_NOARGS reported three completely unrelated classes of problems. Split the roff(7) parts out of it and report the request names for these cases. 2014-07-02 20:19 schwarze Changed: mandoc.h (1.130), "Exp", lines: +2 -2 mdoc_macro.c (1.135), "Exp", lines: +6 -4 mdoc_validate.c (1.223), "Exp", lines: +4 -2 Improve and test the messages about empty macros, in particular reporting the macro names involved. 2014-07-02 19:55 schwarze Changed: mdoc_html.c (1.192), "Exp", lines: +8 -15 mdoc_man.c (1.65), "Exp", lines: +9 -4 mdoc_term.c (1.269), "Exp", lines: +8 -6 mdoc_validate.c (1.222), "Exp", lines: +5 -4 When .Sm is called without an argument, groff toggles the spacing mode, so let us do the same for compatibility. Using this feature is of course not recommended except in manual page obfuscation contests. 2014-07-02 13:10 schwarze Changed: mandoc.h (1.129), "Exp", lines: +4 -2 mdoc_validate.c (1.221), "Exp", lines: +8 -4 read.c (1.57), "Exp", lines: +4 -2 Disentangle the MANDOCERR_CHILD message, which reported three completely different things, into three distinct messages. Also mention the macro names we are talking about. 2014-07-02 11:43 schwarze Changed: man_validate.c (1.96), "Exp", lines: +3 -3 mandoc.h (1.128), "Exp", lines: +7 -7 mdoc_macro.c (1.134), "Exp", lines: +5 -14 mdoc_validate.c (1.220), "Exp", lines: +5 -3 read.c (1.56), "Exp", lines: +3 -3 Clean up warnings related to macros and nesting. * Hierarchical naming of enum mandocerr items. * Improve the wording to make it comprehensible. * Mention the offending macro. * Garbage collect one chunk of ancient, long unreachable code. 2014-07-02 08:21 schwarze Changed: mdoc_macro.c (1.133), "Exp", lines: +3 -3 Fix the column numbers associated with in_line_argn() macros; this bug is more than four years old, introduced by kristaps@ in mdocml.bsd.lv rev. 1.46, March 30, 2010. 2014-07-02 07:10 schwarze Changed: tree.c (1.53), "Exp", lines: +4 -4 Change column display in -Ttree to be 1-based instead of 0-based such that column numbers agree between messages and -Ttree. 2014-07-02 05:52 schwarze Changed: man_validate.c (1.95), "Exp", lines: +10 -4 mandoc.h (1.127), "Exp", lines: +3 -3 mdoc_validate.c (1.219), "Exp", lines: +30 -14 Improve "skipping paragraph macro" messages, showing which macro was skipped and before or after what. 2014-07-02 03:48 schwarze Changed: libmdoc.h (1.85), "Exp", lines: +2 -1 mandoc.h (1.126), "Exp", lines: +2 -2 mdoc.7 (1.231), "Exp", lines: +31 -18 mdoc.c (1.217), "Exp", lines: +3 -1 mdoc.h (1.130), "Exp", lines: +2 -1 mdoc_argv.c (1.94), "Exp", lines: +4 -4 mdoc_html.c (1.191), "Exp", lines: +24 -9 mdoc_macro.c (1.132), "Exp", lines: +7 -14 mdoc_man.c (1.64), "Exp", lines: +42 -5 mdoc_term.c (1.268), "Exp", lines: +29 -6 mdoc_validate.c (1.218), "Exp", lines: +38 -5 read.c (1.55), "Exp", lines: +2 -2 Implement the obsolete macros .En .Es .Fr .Ot for backward compatibility, since this is hardly more complicated than explicitly ignoring them as we did in the past. Of course, do not use them! 2014-07-01 22:37 schwarze Changed: man_validate.c (1.94), "Exp", lines: +5 -2 mandoc.c (1.81), "Exp", lines: +2 -2 mandoc.h (1.125), "Exp", lines: +18 -18 mdoc.c (1.216), "Exp", lines: +3 -3 mdoc_validate.c (1.217), "Exp", lines: +48 -27 read.c (1.54), "Exp", lines: +11 -11 Clean up the warnings related to document structure. * Hierarchical naming of the related enum mandocerr items. * Mention the offending macro, section title, or string. While here, improve some wordings: * Descriptive instead of imperative style. * Uniform style for "missing" and "skipping". * Where applicable, mention the fallback used. 2014-07-01 00:32 schwarze Changed: roff.c (1.215), "Exp", lines: +4 -2 The previous commit to this file broke the control flow keywords \{ and \} when they immediately follow a request or macro name, without intervening whitespace. Minimal fix. The lesson learnt here is that, despite their appearance, \{ and \} are not escape sequences, so never skip them when parsing for names. 2014-06-30 23:45 schwarze Changed: mandoc.h (1.124), "Exp", lines: +6 -10 read.c (1.53), "Exp", lines: +1 -5 garbage collect two unused enum mandocerr items and fix a couple of comments while here 2014-06-29 23:26 schwarze Changed: roff.c (1.214), "Exp", lines: +16 -17 Use the freshly improved roff_getname() function for the main roff request parsing routine, roff_parse(). In request or macro invocations, escape sequences now terminate the request or macro name; what follows is treated as arguments. Besides, the names of user-defined macros can now contain backslashes (eek!). 2014-06-29 22:38 schwarze Changed: roff.c (1.213), "Exp", lines: +19 -39 Use the freshly improved roff_getname() function for the .de parsing routine, roff_block(), to correctly handle names terminated by escape sequences. Besides, this saves us 20 lines of code. 2014-06-29 22:14 schwarze Changed: roff.c (1.212), "Exp", lines: +52 -36 Major roff_getname() cleanup. * Return the name even if it is terminated by an escape sequence, not a blank. * Skip the full escape sequence using mandoc_escape(), not just the first byte. * Make it non-destructive, return the length instead of writing a '\0'. * Let .ds and .as cope with the above changes to the internal interface. * Fix .rm and .rr to accept an escape sequence as the end of a name. * Fix .nr and .rr to not set/delete a register with an empty name. 2014-06-29 21:20 schwarze Changed: roff.c (1.211), "Exp", lines: +3 -2 Bugfix in roff_setstrn(): Do not call strcmp() on an array of char that might not be NUL-terminated. 2014-06-25 00:20 schwarze Changed: mandoc.h (1.123), "Exp", lines: +3 -2 read.c (1.52), "Exp", lines: +7 -2 roff.c (1.210), "Exp", lines: +5 -4 Improve messages related to the roff(7) .so request. In all these messages, show the filename argument that was passed to the .so request. In case of failure, show an additional message reporting the file and the line number where the failing request was found. The existing message reporting the reason for the failure - for example, "Permission denied" - is left in place, unchanged. Inspired by a question asked by Nick@ after he saw the confusing old messages that used to be emitted in this area. 2014-06-24 21:43 schwarze Changed: mdoc.7 (1.230), "Exp", lines: +24 -48 Deprecate .Tn and .Ux, and make it clearer that .Bt and .Ud are deprecated. Do not use these macros in new documents, they provide no value. Instead, usually no macro and no markup is needed at all. Of course, they remain supported for compatibility with existing manuals. Jason McIntyre (OpenBSD), Thomas Klausner (NetBSD) and Franco Fichtner (DragonFly) are OK with this documentation change. 2014-06-23 22:03 schwarze Changed: mandoc.1 (1.105), "Exp", lines: +7 -5 Below DIAGNOSTICS, document the SYSERR message level; jmc@ wondered what it meant and agrees with this patch. 2014-06-22 17:07 schwarze Changed: mdoc.7 (1.229), "Exp", lines: +7 -36 Minimal COMPATIBILITY cleanup: * Mention that the list is incomplete. * I implemented %C for groff -current, and it was accepted. * Font family is \F, not \f. * Escapes and scaling widths are documented in roff(7), not here. * Quoting quotes by doubling them is now supported. 2014-06-22 16:39 schwarze Changed: man.7 (1.127), "Exp", lines: +11 -40 Minimal cleanup of the COMPATIBILITY section: * Mention that the list is incomplete. * Quoting quotes by doubling them is documented in the Ossanna/Kernighan/Ritter Nroff/Troff User's Manual, Section 7.3. * Our roff(7) manual documents handling of escape sequences; besides, we partially support \w and \z now. * Scaling widths are documented in roff(7) as well, and f is not \f. * Negative arguments to .sp are handled now. 2014-06-21 22:24 schwarze Changed: main.c (1.177), "Exp", lines: +6 -3 read.c (1.51), "Exp", lines: +2 -2 Reduce the verbosity of error messages caused by open(2) failures. Suggested by and ok jmc@. 2014-06-21 16:18 schwarze Changed: main.c (1.176), "Exp", lines: +11 -7 mandocdb.c (1.153), "Exp", lines: +8 -5 Prefix messages about bad command line options and arguments with "mandoc: " or "makewhatis: ", respectively, similar to what we already do for other messages. 2014-06-20 23:02 schwarze Changed: main.c (1.175), "Exp", lines: +8 -4 man.h (1.65), "Exp", lines: +2 -1 man_term.c (1.149), "Exp", lines: +7 -4 man_validate.c (1.93), "Exp", lines: +7 -5 mandoc.1 (1.104), "Exp", lines: +10 -6 mandoc.h (1.122), "Exp", lines: +3 -2 mdoc_validate.c (1.216), "Exp", lines: +10 -14 read.c (1.50), "Exp", lines: +4 -3 As suggested by jmc@, only include line and column numbers into messages when they are meaningful, to avoid confusing stuff like this: $ mandoc /dev/null mandoc: /dev/null:0:1: FATAL: not a manual Instead, just say: mandoc: /dev/null: FATAL: not a manual Another example this applies to is documents having a prologue, but lacking a body. Do not throw a FATAL error for these; instead, issue a WARNING and show the empty document, in the man(7) case with the same amount of blank lines as groff does. Also downgrade mdoc(7) documents having content before the first .Sh from FATAL to WARNING. 2014-06-20 17:24 schwarze Changed: man_validate.c (1.92), "Exp", lines: +9 -4 mandoc.c (1.80), "Exp", lines: +3 -3 mandoc.h (1.121), "Exp", lines: +11 -11 mdoc.c (1.215), "Exp", lines: +5 -3 mdoc_validate.c (1.215), "Exp", lines: +10 -10 read.c (1.49), "Exp", lines: +2 -2 Start systematic improvements of error reporting. So far, this covers all WARNINGs related to the prologue. 1) hierarchical naming of MANDOCERR_* constants 2) mention the macro name in messages where that adds clarity 3) add one missing MANDOCERR_DATE_MISSING msg 4) fix the wording of one message related to the man(7) prologue Started on the plane back from Ottawa. 2014-06-20 16:11 schwarze Changed: main.c (1.174), "Exp", lines: +3 -2 Prefix error messages from mandoc(1) with "mandoc: " just like almost all other utility programs do. Suggested by nick@ who wondered where messages came from when calling mandoc(1) from inside a Perl script. ok jmc@ nick@ 2014-06-20 02:55 schwarze Changed: Makefile (1.420), "Exp", lines: +5 -1 configure (1.4), "Exp", lines: +3 -3 test-ohash.c (1.3), "Exp", lines: +6 -4 let the build system cope with the recent ohash changes 2014-06-20 02:53 schwarze Changed: TODO (1.172), "Exp", lines: +5 -1 take a note about pandoc 2014-06-20 02:24 schwarze Changed: compat_ohash.c (1.4), "Exp", lines: +18 -14 compat_ohash.h (1.4), "Exp", lines: +2 -2 mandocdb.c (1.152), "Exp", lines: +10 -10 mansearch.c (1.37), "Exp", lines: +8 -10 Merge from OpenBSD - Marc Espie improved the ohash interface: * rename the halloc callback to calloc, provide overflow protection * rename the hfree callback to free, drop the useless size argument * prevent integer overflows in ohash_resize 2014-06-20 02:10 schwarze Changed: compat_ohash.c (1.3), "Exp", lines: +46 -48 compat_ohash.h (1.3), "Exp", lines: +6 -5 sync to OpenBSD: whitespace and comment changes, no functional change 2014-06-20 01:21 schwarze Changed: mandocdb.c (1.151), "Exp", lines: +40 -24 More tweaking of set_basedir(). 1) Do not error out when getcwd(3) fails, only fail when inaccessibility of the cwd prevents processing of relative paths given on the command line. 2) Do not uselessly call set_basedir() twice in a row. While fts_read(3) in treescan() does cause the cwd to jump around, fts_close(3) is always called at the end, putting us back where we came from. The -d/-u fallback code already relied on this. 3) Fix the man-root-dir indicator in say(). 2014-06-19 00:45 schwarze Changed: mandocdb.c (1.150), "Exp", lines: +21 -17 Some simple set_basedir() cleanup; more to come. 1) Refrain from calling set_basedir() in the -t case, and do not attempt to strip anything from the file names in that case. Testing individual files cannot reasonably have any notion of a base dir. 2) Remove the possibility of passing NULL to set_basedir(). It was dangerous because it was not idempotent, and it served no purpose except closing a file descriptor right before exit(), which is pointless. Besides, the file descriptor is likely to be removed completely, soon. 3) Make sure that /foobar isn't treated as a subdirectory of /foo; this fixes a bug reported by espie@. 2014-06-18 19:34 schwarze Changed: mandocdb.c (1.149), "Exp", lines: +3 -2 Merge OpenBSD rev. 1.108 by sthen@; original commit message: Don't display "unable to open mandoc.db" error messages (SQLITE_CANTOPEN) in the code which opens mandocdb's sqlite database when updating/deleting individual files (as used and only really useful for pkg_add/pkg_delete). 2014-06-10 21:19 schwarze Changed: TODO (1.171), "Exp", lines: +19 -1 some new things to do 2014-05-07 16:19 schwarze Changed: mandocdb.c (1.148), "Exp", lines: +11 -2 Render roff escape sequences contained in manual page descriptions before putting them into the mpages table. Issue found by bentley@ in OpenBSD::Getopt(3p). 2014-05-07 15:10 schwarze Changed: mandocdb.c (1.147), "Exp", lines: +14 -2 Fix two memory leaks in makewhatis -n: 1. As found by nigel@, names_check() requires database access. 2. Do not leak names and strings in -n mode. 2014-05-07 14:14 schwarze Changed: man.c (1.130), "Exp", lines: +7 -4 Do not segfault in makewhatis -Q if the next .SH after .SH NAME does not have any arguments. Crash found by nigel@ in kermit(1). 2014-04-27 23:08 schwarze Changed: mandocdb.c (1.146), "Exp", lines: +22 -7 Improve error handling in dbopen(). If PRAGMA SQL statements fail, report the error, close the database, and return failure from dbopen(), such that the main program can recover and rebuild the database. As noticed by stsp@, this can happen when database files are accessible, but corrupt or in the wrong format, which will now automatically be repaired. Besides, use a safer idiom after sqlite3_open*() failure that also handles out-of-memory situations correctly, and do not forget to close the database after CREATE TABLE failure. 2014-04-27 22:42 schwarze Changed: arch.in (1.15), "Exp", lines: +3 -3 OMRON used uppercase for the model names of their Motorola 88100 LUNA workstations, so show the kernel architecture names in uppercase to the user, too. Based on a patch from Kenji Aoyama@, thanks! 2014-04-25 14:11 schwarze Changed: mdoc.c (1.214), "Exp", lines: +2 -2 Fix a minor optimization i broke in rev. 1.163 on August 20, 2010: Do not bother looking into the hash table when the length of the macro already tells us it's invalid. No functional change. Noticed by jsg@, thanks! 2014-04-25 12:13 schwarze Changed: makewhatis.8 (1.2), "Exp", lines: +3 -3 mandocdb.c (1.145), "Exp", lines: +3 -1 Reduce the verbosity of makewhatis -t: In the past, it always showed the title lines of the files processed. Now, it only shows them when called with -D. That is better because pkg_create calls makewhatis -t. It is also more consistent with -D behaviour in non- -t modes. Issue reported by ajacoutot@; ok espie@ ajacoutot@ jasper@. 2014-04-24 00:36 schwarze Changed: Makefile (1.395.2.18), "Exp", lines: +53 -25 Merge from HEAD: * Use sha256 rather than md5. * Update .h dependencies for some objects. * Provide `www' target to build everything needed for the web site. * Move .SUFFIXES and .PHONY technicalities to the bottom. * State Copyright and license, just for clarity. * Bump VERSION in preparation for release. 2014-04-24 00:29 schwarze Changed: Makefile (1.419), "Exp", lines: +43 -20 Various Makefile improvements: * Use sha256 rather than md5. * Update .h dependencies for some objects. * Provide `www' target to build everything needed for the web site. * Move .SUFFIXES and .PHONY technicalities to the bottom. * State Copyright and license, just for clarity. 2014-04-24 00:28 schwarze Changed: apropos.1 (1.29), "Exp", lines: +3 -3 misplaced punctuation 2014-04-23 23:29 schwarze Changed: config.h.post (1.9), "Exp", lines: +3 -0 config.h.post (1.6.2.6), "Exp", lines: +3 -0 prototype for reallocarray() 2014-04-23 21:40 schwarze Changed: cgi.c (1.51), "Exp", lines: +4 -5 Audit malloc(3)/calloc(3)/realloc(3) usage. First committed to wrong branch, sorry. 2014-04-23 21:31 schwarze Changed: Makefile (1.395.2.17), "Exp", lines: +3 -0 apropos_db.c (1.32.2.6), "Exp", lines: +3 -3 configure (1.1.2.3), "Exp", lines: +1 -0 mandocdb.c (1.49.2.16), "Exp", lines: +3 -3 Audit malloc(3)/calloc(3)/realloc(3) in VERSION_1_12. 2014-04-23 21:06 schwarze Added: compat_reallocarray.c (1.1) test-reallocarray.c (1.1) Changed: LICENSE (1.2), "Exp", lines: +2 -1 Makefile (1.418), "Exp", lines: +3 -0 configure (1.3), "Exp", lines: +1 -0 eqn.c (1.42), "Exp", lines: +3 -3 mandoc_aux.c (1.2), "Exp", lines: +13 -1 mandoc_aux.h (1.2), "Exp", lines: +2 -1 mandocdb.c (1.144), "Exp", lines: +5 -5 manpath.c (1.15), "Exp", lines: +3 -3 mansearch.c (1.36), "Exp", lines: +4 -4 mdoc_argv.c (1.93), "Exp", lines: +5 -5 mdoc_validate.c (1.214), "Exp", lines: +5 -5 term.c (1.223), "Exp", lines: +2 -2 term_ps.c (1.60), "Exp", lines: +4 -10 Audit malloc(3)/calloc(3)/realloc(3) usage. * Change eight reallocs to reallocarray to be safe from overflows. * Change one malloc to reallocarray to be safe from overflows. * Change one calloc to reallocarray, no zeroing needed. * Change the order of arguments of three callocs (aesthetical). 2014-04-23 19:09 schwarze Changed: mandocdb.c (1.143), "Exp", lines: +23 -23 Audit strlcpy(3)/strlcat(3) usage: * Add missing truncation checks to three calls. * In four cases where we know that the distination buffer is large enough, cast the return vailue to (void). 2014-04-23 16:37 schwarze Changed: TODO (1.170), "Exp", lines: +7 -1 espie@ suggests using SQL views 2014-04-23 16:34 schwarze Changed: mandocdb.c (1.142), "Exp", lines: +3 -2 mansearch.c (1.35), "Exp", lines: +7 -5 improve SQL style: avoid "SELECT *", be explicit in what columns we want; suggested by espie@. 2014-04-23 16:08 schwarze Changed: TODO (1.169), "Exp", lines: +4 -2 html.c (1.157), "Exp", lines: +7 -1 man_html.c (1.95), "Exp", lines: +3 -7 man_term.c (1.148), "Exp", lines: +10 -14 mdoc_html.c (1.190), "Exp", lines: +22 -17 mdoc_term.c (1.267), "Exp", lines: +15 -18 mdoc_validate.c (1.213), "Exp", lines: +12 -21 roff.c (1.209), "Exp", lines: +10 -20 tbl_data.c (1.31), "Exp", lines: +3 -3 Audit strlcpy(3)/strlcat(3) usage. * Repair three instances of silent truncation, use asprintf(3). * Change two instances of strlen(3)+malloc(3)+strlcpy(3)+strlcat(3)+... to use asprintf(3) instead to make them less error prone. * Cast the return value of four instances where the destination buffer is known to be large enough to (void). * Completely remove three useless instances of strlcpy(3)/strlcat(3). * Mark two places in -Thtml with XXX that can cause information loss and crashes but are not easy to fix, requiring design changes of some internal interfaces. * The file mandocdb.c remains to be audited. 2014-04-22 22:05 schwarze Changed: Makefile (1.395.2.16), "Exp", lines: +2 -1 include the LICENSE into the distribution tarball 2014-04-22 22:03 schwarze Added: LICENSE (1.1) Changed: Makefile (1.417), "Exp", lines: +2 -1 add a LICENSE file for clarity and for the convenience of porters 2014-04-20 22:04 schwarze Changed: read.c (1.48), "Exp", lines: +2 -2 in debug messages, truncating strings of excessive lengths is actually a good thing, so cast the return value from sprintf to (void); this concludes the mandoc sprintf audit 2014-04-20 20:48 schwarze Changed: mdoc_validate.c (1.212), "Exp", lines: +14 -23 strlen+malloc+snprintf is error prone; rewrite post_lb() to use asprintf(3) instead 2014-04-20 20:18 schwarze Changed: man_html.c (1.94), "Exp", lines: +6 -3 man_term.c (1.147), "Exp", lines: +16 -11 mdoc_html.c (1.189), "Exp", lines: +7 -3 mdoc_term.c (1.266), "Exp", lines: +8 -5 fix unchecked snprintf(3) in page header printing: the length of the title is unknown, and speed doesn't matter here, so use asprintf/free rather than a static buffer 2014-04-20 19:40 schwarze Changed: eqn.c (1.41), "Exp", lines: +2 -2 mdoc_man.c (1.63), "Exp", lines: +7 -6 mdoc_term.c (1.265), "Exp", lines: +3 -3 mdoc_validate.c (1.211), "Exp", lines: +5 -7 roff.c (1.208), "Exp", lines: +4 -4 make sure static buffers for snprintf(3) are large enough and cast snprintf return value to (void) where they are 2014-04-20 16:46 schwarze Changed: apropos.c (1.39), "Exp", lines: +8 -7 arch.c (1.11), "Exp", lines: +3 -2 att.c (1.11), "Exp", lines: +3 -2 chars.c (1.57), "Exp", lines: +10 -9 chars.in (1.46), "Exp", lines: +2 -2 eqn.c (1.40), "Exp", lines: +31 -34 eqn_html.c (1.3), "Exp", lines: +5 -5 eqn_term.c (1.5), "Exp", lines: +3 -2 html.c (1.156), "Exp", lines: +59 -67 html.h (1.51), "Exp", lines: +7 -7 libman.h (1.58), "Exp", lines: +3 -3 libmandoc.h (1.41), "Exp", lines: +11 -11 libmdoc.h (1.84), "Exp", lines: +5 -5 libroff.h (1.29), "Exp", lines: +3 -3 main.c (1.173), "Exp", lines: +44 -45 main.h (1.16), "Exp", lines: +2 -2 man.c (1.129), "Exp", lines: +30 -46 man_hash.c (1.27), "Exp", lines: +3 -4 man_html.c (1.93), "Exp", lines: +23 -48 man_macro.c (1.82), "Exp", lines: +23 -37 man_term.c (1.146), "Exp", lines: +73 -117 man_validate.c (1.91), "Exp", lines: +42 -48 mandoc.c (1.79), "Exp", lines: +62 -62 mandoc.h (1.120), "Exp", lines: +6 -6 mandocdb.c (1.141), "Exp", lines: +67 -66 manpath.c (1.14), "Exp", lines: +3 -4 mansearch.c (1.34), "Exp", lines: +13 -13 mdoc.c (1.213), "Exp", lines: +67 -90 mdoc.h (1.129), "Exp", lines: +10 -10 mdoc_argv.c (1.92), "Exp", lines: +46 -46 mdoc_hash.c (1.20), "Exp", lines: +3 -2 mdoc_html.c (1.188), "Exp", lines: +185 -305 mdoc_macro.c (1.131), "Exp", lines: +130 -153 mdoc_man.c (1.62), "Exp", lines: +71 -70 mdoc_term.c (1.264), "Exp", lines: +208 -325 mdoc_validate.c (1.210), "Exp", lines: +240 -254 out.c (1.48), "Exp", lines: +27 -26 out.h (1.22), "Exp", lines: +3 -3 read.c (1.47), "Exp", lines: +49 -50 roff.c (1.207), "Exp", lines: +121 -163 st.in (1.24), "Exp", lines: +2 -2 tbl.c (1.29), "Exp", lines: +12 -12 tbl_data.c (1.30), "Exp", lines: +20 -20 tbl_html.c (1.11), "Exp", lines: +5 -6 tbl_layout.c (1.26), "Exp", lines: +50 -49 tbl_opts.c (1.13), "Exp", lines: +24 -23 tbl_term.c (1.27), "Exp", lines: +33 -33 term.c (1.222), "Exp", lines: +48 -60 term.h (1.101), "Exp", lines: +3 -3 term_ascii.c (1.25), "Exp", lines: +17 -26 term_ps.c (1.59), "Exp", lines: +65 -99 tree.c (1.52), "Exp", lines: +54 -59 KNF: case (FOO): -> case FOO:, remove /* LINTED */ and /* ARGSUSED */, remove trailing whitespace and blanks before tabs, improve some indenting; no functional change 2014-04-19 02:56 schwarze Changed: mandocdb.c (1.140), "Exp", lines: +9 -7 Two minor tweaks regarding the fallback from -u/-d to default mode: (1) Use all files found on the command line, but do *not* use all stray files found during fallback tree recursion. (2) If the fallback works, call that success, i.e. exit(0). As pointed out by naddy@, the latter is required for ports' happiness. 2014-04-19 02:30 schwarze Changed: mandocdb.c (1.139), "Exp", lines: +76 -17 Properly handle symlinks (hardlinks and .so only files were already ok): Use the file name of the symlink but the inode number of the file pointed to, such that we get multiple mlinks records but not multiple mpages records. Also make sure they do not point outside the tree we are processing. Issue found by kili@ in desktop-file-edit(1), thanks! 2014-04-18 21:55 schwarze Changed: mandocdb.c (1.138), "Exp", lines: +18 -8 In update mode, when opening the database fails, probably because it is missing or corrupt, just rebuild it from scratch. This also helps when installing the very first port on a freshly installed machine and is similar to what espie@'s classical makewhatis(8) did. Issue reported by naddy@ via kili@. 2014-04-18 10:30 schwarze Deleted: mandocdb.8 (1.26) Added: makewhatis.8 (1.1) Changed: Makefile (1.416), "Exp", lines: +9 -9 apropos.1 (1.28), "Exp", lines: +9 -9 man.cgi.7 (1.13), "Exp", lines: +3 -3 Slowly, the dust begins to settle. We are keeping the traditional name makewhatis(8). No content change. 2014-04-18 09:47 schwarze Changed: apropos.1 (1.27), "Exp", lines: +32 -25 Fix a few lies; polish wording and formatting while here. 2014-04-17 19:20 schwarze Changed: mansearch.c (1.33), "Exp", lines: +8 -8 Garbage collect one pair of needless parentheses in SQL code generation; note this doesn't affect performance, SQLite generates the same byte code. While here, make the calls to exprspec() easier to understand. 2014-04-16 21:36 schwarze Changed: mandocdb.c (1.137), "Exp", lines: +12 -12 mansearch.c (1.32), "Exp", lines: +18 -18 Rename the mpages.id column to mpages.pageid. There is no good reason to call this kid by a different name here than in all other tables. 2014-04-16 18:59 schwarze Changed: mandocdb.c (1.136), "Exp", lines: +4 -2 Give the mlinks and keys tables a pageid index, as suggested by jeremy@ and espie@. The mlinks index speeds up basic apropos(1) searches by around 30% because it speeds up the final SELECT FROM mlinks query by about 95%. For large result sets, the overall speedup gets even larger, in the extreme case of "apropos Nd~." bymore than 90%. The keys index finally makes the apropos(1) -O option usable: It no longer incurs relevant extra cost, while in the past it was embarrassingly slow. This comes at a cost: Total database build times grow by about 5%, and each index adds about 10% database size with -Q. I consider that acceptable in view of the huge apropos(1) performance gains. The -Q database for /usr/share/man still remains below 1 MB. 2014-04-16 00:33 schwarze Changed: mansearch.c (1.31), "Exp", lines: +5 -3 Pass the function flags SQLITE_UTF8 (because SQLITE_ANY is deprecated) and SQLITE_DETERMINISTIC when creating deterministic functions; best practice measure suggested by espie@ and jeremy@; as expected by jeremy@, no measurable effect on performance. 2014-04-15 23:51 schwarze Changed: mansearch.c (1.30), "Exp", lines: +7 -5 Oops, sorry, revert previous and commit the correct patch: At the end of mansearch(), fchdir() back to where we started from. 2014-04-15 23:48 schwarze Changed: mansearch.c (1.29), "Exp", lines: +2 -1 At the end of mansearch(), fchdir() back to where we started from; this is cleaner and helps to not scatter gmon.out files all over the place when profiling. 2014-04-15 23:02 schwarze Changed: apropos.1 (1.26), "Exp", lines: +1 -2 remove documentation of the former macro key "NAME"; it got deleted with mansearch.h rev. 1.12 2014-04-15 20:18 schwarze Added: mandoc.db.5 (1.1) mansearch.3 (1.1) Changed: Makefile (1.415), "Exp", lines: +12 -4 Document the database format and SQL code generation; suggested by kristaps@ and espie@. 2014-04-15 00:41 schwarze Changed: mdoc_validate.c (1.209), "Exp", lines: +8 -12 Using macros in .Sh header lines, or having .Sm off or .Bk -words open while processing .Sh, is not at all recommended, but it's not strictly a syntax violation either, and in any case, mandoc must not die in an assertion. I broke this in rev. 1.124. Crash found while trying to read the (rather broken) original 4.3BSD-Reno od(1) manual page. 2014-04-13 22:03 schwarze Changed: mandocdb.c (1.135), "Exp", lines: +4 -9 Unify description handling across all document types (mdoc, man, cat). Assert that the description is unset right before calling the parse_* handler, and assign a default if it's still unset right afterwards. Remove all stray asserts and default assignments found elsewhere. This fixes SQL_STEP failures for man(7) pages lacking descriptions. 2014-04-13 20:55 schwarze Changed: mandocdb.c (1.134), "Exp", lines: +9 -9 better error reporting in case of SQL errors: mention dir and file 2014-04-11 15:46 schwarze Changed: apropos.c (1.38), "Exp", lines: +3 -1 mansearch.c (1.28), "Exp", lines: +49 -1 mansearch.h (1.13), "Exp", lines: +2 -1 Further apropos(1) speed optimization was trickier than anticipated. Contrary to what i initially thought, almost all time is now spent inside sqlite3(3) routines, and i found no easy way calling less of them. However, sqlite(3) spends substantial time in malloc(3), and even more (twice that) in its immediate malloc wrapper, sqlite3MemMalloc(), keeping track of all individual malloc chunk sizes. Typically about 90% of the malloced memory is used for purposes of the pagecache. By providing an mmap(3) MAP_ANON SQLITE_CONFIG_PAGECACHE, execution time decreases by 20-25% for simple (Nd and/or Nm) queries, 10-20% for non-NAME queries, and even apropos(1) resident memory size as reported by top(1) decreases by 20% for simple and by 60% for non-NAME queries. The new function, mansearch_setup(), spends no measurable time. The pagesize chosen is optimal: * Substantially smaller pages yield no gain at all. * Larger pages provide no additional benefit and just waste memory. The chosen number of pages in the cache is a compromise: * For simple queries, a handful of pages would suffice to get the full speed effect, at an apropos(1) resident memory size of about 2.0 MB. * For non-NAME queries, a large pagecache with 2k pages (2.5 MB) might gain a few more percent in speed, but at the expense of doubling the apropos(1) resident memory size for *all* queries. * The chosen number of 256 pages (330 kB) allows nearly full speed gain for all queries at the price of a 15% resident memory size increase. 2014-04-10 02:46 schwarze Changed: mandocdb.c (1.133), "Exp", lines: +65 -27 mansearch.c (1.27), "Exp", lines: +27 -14 mansearch.h (1.12), "Exp", lines: +48 -42 mansearch_const.c (1.4), "Exp", lines: +8 -9 Next speed optimization step for the new apropos(1). Split manual names out of the common "keys" table into their own "names" table. This reduces standard apropos(1) search times (i.e. searching for names and descriptions only) by typically about 70% for the full /usr/share/man database. (Yes, that multiplies with the previous optimization step, so both together have reduced search times by a factor of more than six. I'm not done yet, expect more to come.) Even with the minimal databases built with makewhatis(8) -Q, this step still reduces search times by 15-20%. For both cases, database sizes and build times hardly change (+/-2%). 2014-04-09 21:50 schwarze Changed: mandocdb.c (1.132), "Exp", lines: +9 -18 mansearch.c (1.26), "Exp", lines: +43 -16 mansearch.h (1.11), "Exp", lines: +40 -40 mansearch_const.c (1.3), "Exp", lines: +7 -7 After careful gprof(1)ing of the new apropos(1), move the descriptions back from the keys table to the mpages table: I found a good way to still use them in searches, without complication of the code. On my notebook, this reduces typical apropos(1) search times by about 40%, it reduces /usr/share/man database size by 6% in makewhatis(8) -Q mode and by 2% in standard mode (less overhead storing pointers to mpages), and it doesn't measurably change database build times (may even be going down by a percent or so because less data is being copied around in ohashes). 2014-04-08 07:13 schwarze Changed: man_term.c (1.145), "Exp", lines: +4 -4 mdoc_term.c (1.263), "Exp", lines: +14 -13 term.c (1.221), "Exp", lines: +21 -28 term.h (1.100), "Exp", lines: +7 -6 Add a new term_flushln() flag TERMP_BRIND (if break, then indent) to control indentation of continuation lines in TERMP_NOBREAK mode. In the past, this was always on; continue using it for .Bl, .Nm, .Fn, .Fo, and .HP, but no longer for .IP and .TP. I looked at this because sthen@ reported the issue in a manual of a Perl module from ports, but it affects base, too: This patch reduces groff-mandoc differences in base by more than 15%. 2014-04-08 04:40 schwarze Changed: mdoc_term.c (1.262), "Exp", lines: +3 -1 If the SYNOPSIS section contains an excessively long .Nm, adjust the right margin to avoid running into an assertion; output in that case now agrees with groff, too. 2014-04-08 01:37 schwarze Changed: mandoc.c (1.78), "Exp", lines: +3 -6 roff.7 (1.54), "Exp", lines: +17 -8 roff.c (1.206), "Exp", lines: +71 -28 Fully implement the \B (validate numerical expression) and partially implement the \w (measure text width) escape sequence in a way that makes them usable in numerical expressions and in conditional requests, similar to how \n (interpolate number register) and \* (expand user-defined string) are implemented. This lets mandoc(1) handle the baroque low-level roff code found at the beginning of the ggrep(1) manual. Thanks to pascal@ for the report. 2014-04-07 21:00 schwarze Changed: roff.c (1.205), "Exp", lines: +45 -37 We already supported (outer) user-defined strings containing references to other (inner) user-defined strings in their values, such that the inner ones get expanded at expansion time of the outer ones (delayed evaluation). Now we also support specifying the name of an (outer) user-defined string to expand using the expanded values of some other (inner) user-defined strings (indirect reference). 2014-04-07 18:26 schwarze Changed: gmdiff (1.2), "Exp", lines: +6 -3 Make it clear which errors come from which tool. joint work with sthen@ 2014-04-07 17:51 schwarze Changed: mandoc.c (1.77), "Exp", lines: +5 -5 Accept arbitrary argument delimiters for various roff(7) escape sequences. Needed for example by the new Perl pod2man(1) preamble. 2014-04-07 15:07 schwarze Changed: roff.7 (1.53), "Exp", lines: +81 -18 roff.c (1.204), "Exp", lines: +208 -58 Almost complete implementation of roff(7) numerical expressions. Support all binary operators except ';' (scale conversion). Fully support chained operations and nested parentheses. Use this for the .nr, .if, and .ie requests. While here, fix parsing of integer numbers in roff_getnum(). 2014-04-05 21:18 schwarze Changed: term.c (1.220), "Exp", lines: +6 -6 bugfix: make sure all variables are properly initialized when rendering .ll (line length) requests. oops. 2014-04-05 20:34 schwarze Changed: roff.7 (1.52), "Exp", lines: +11 -7 roff.c (1.203), "Exp", lines: +29 -1 Implement the roff(7) .rr (remove register) request. As reported by sthen@, the perl-5.18 pod2man(1) preamble thinks cool kids use that in manuals. I hope *you* know better. 2014-04-04 18:23 schwarze Changed: mandocdb.c (1.131), "Exp", lines: +30 -25 In -p (picky) mode, warn unless each filename (aka mlink) appears as a name in the NAME section. While here, garbage collect two unused variables, both called "match". 2014-04-04 16:43 schwarze Changed: mandocdb.c (1.130), "Exp", lines: +41 -1 Warn about missing mlinks. This is really expensive, more than tripling database build times, so only do it when the -p (picky) option was given, but none of the following options were given: -Q (quick), -d, -u, or -t. 2014-04-04 15:55 schwarze Changed: apropos.1 (1.25), "Exp", lines: +4 -2 mandocdb.c (1.129), "Exp", lines: +9 -6 mansearch.h (1.10), "Exp", lines: +43 -42 mansearch_const.c (1.2), "Exp", lines: +9 -8 Remember which names are in the NAME section. This helps to find missing MLINKS. Database build times do not change and database growth is minimal (1.2% with -Q, 0.7% without -Q in /usr/share/man), so making this optional would be pointless. 2014-04-04 15:51 schwarze Changed: apropos.1 (1.24), "Exp", lines: +22 -4 merge OpenBSD rev. 1.20, describing new features 2014-04-04 02:31 schwarze Changed: mandocdb.8 (1.25), "Exp", lines: +3 -3 mandocdb.c (1.128), "Exp", lines: +39 -5 When the -n or -t flag is given to makewhatis(8), write names and decriptions to stdout, in a format similar to apropos(1) output. Inspired by espie@'s makewhatis. 2014-04-03 21:45 schwarze Changed: mandocdb.c (1.127), "Exp", lines: +6 -1 Instead of silently doing nothing at all, warn and return non-zero when the manpath is empty, that is, when /etc/man.conf is non-existent or unreadable AND the environment variable MANPATH is unset or empty AND no directories were given on the command line. Inspired by the error handling in espie@'s makewhatis(8), except that one doesn't know about MANPATH. 2014-04-03 16:27 schwarze Changed: mandocdb.8 (1.24), "Exp", lines: +15 -11 mandocdb.c (1.126), "Exp", lines: +11 -8 Rename the -W option to -p (mnemonics: picky, print to stderr): That letter was already chosen by espie@ for OpenBSD 2.7, so avoid being gratuitiously different more than a decade later. Accept -v for backward compatibility with espie@'s makewhatis, even though it does nothing right now. 2014-04-03 15:37 schwarze Changed: mandocdb.8 (1.23), "Exp", lines: +7 -9 mandocdb.c (1.125), "Exp", lines: +13 -13 The -v option of mandocdb(8) clashes with the -v option of espie@'s makewhatis(8), which traditionally does something different, so rename it to -D (mnemonics: Debug, Dump, Display). 2014-04-03 15:24 schwarze Changed: mandocdb.8 (1.22), "Exp", lines: +24 -8 document -Q and -T; from OpenBSD 2014-03-31 01:05 schwarze Changed: man.7 (1.126), "Exp", lines: +7 -2 mdoc.7 (1.228), "Exp", lines: +7 -2 mdoc.h (1.128), "Exp", lines: +2 -1 mdoc_validate.c (1.208), "Exp", lines: +4 -1 Support the CONTEXT section for kernel manual pages found in Solaris and OpenBSD manuals. It describes which contexts you can call functions in. from dlg@, ok jmc@ deraadt@ 2014-03-30 23:34 schwarze Changed: mdoc_man.c (1.61), "Exp", lines: +12 -3 Improve formatting of broken blocks in -Tman, somewhat similar to what mdoc_term.c already does for -Tascii. OpenBSD rev. 1.58. 2014-03-30 23:28 schwarze Changed: mdoc_validate.c (1.207), "Exp", lines: +5 -3 Allow ERRORS in section 4; OpenBSD rev. 1.121. 2014-03-30 21:28 schwarze Changed: man_term.c (1.144), "Exp", lines: +2 -2 mdoc_term.c (1.261), "Exp", lines: +2 -2 roff.7 (1.51), "Exp", lines: +5 -3 term.c (1.219), "Exp", lines: +31 -1 term.h (1.99), "Exp", lines: +3 -3 term_ascii.c (1.24), "Exp", lines: +12 -8 term_ps.c (1.58), "Exp", lines: +9 -4 Support relative arguments to .ll (increase or decrease line length). 2014-03-30 19:47 schwarze Changed: TODO (1.168), "Exp", lines: +1 -4 man.c (1.128), "Exp", lines: +2 -2 man.h (1.64), "Exp", lines: +2 -1 man_html.c (1.92), "Exp", lines: +2 -1 man_macro.c (1.81), "Exp", lines: +2 -1 man_term.c (1.143), "Exp", lines: +13 -1 man_validate.c (1.90), "Exp", lines: +2 -1 mdoc.c (1.212), "Exp", lines: +2 -2 mdoc.h (1.127), "Exp", lines: +2 -1 mdoc_argv.c (1.91), "Exp", lines: +2 -1 mdoc_html.c (1.187), "Exp", lines: +12 -2 mdoc_macro.c (1.130), "Exp", lines: +2 -1 mdoc_man.c (1.60), "Exp", lines: +11 -1 mdoc_term.c (1.260), "Exp", lines: +17 -3 mdoc_validate.c (1.206), "Exp", lines: +2 -1 roff.7 (1.50), "Exp", lines: +17 -2 term.h (1.98), "Exp", lines: +5 -2 term_ascii.c (1.23), "Exp", lines: +16 -2 term_ps.c (1.57), "Exp", lines: +17 -2 Implement the roff(7) .ll (line length) request. Found by naddy@ in the textproc/enchant(1) port. Of course, do not use this in new manuals. 2014-03-28 23:26 schwarze Changed: mandoc.h (1.119), "Exp", lines: +2 -1 tbl_layout.c (1.25), "Exp", lines: +11 -2 tbl_term.c (1.26), "Exp", lines: +6 -4 Allow leading and trailing vertical lines, and format them in the same way as groff. While here, do not require whitespace before vertical lines in layout specifications. Issues found by bentley@ in mpv(1). 2014-03-28 19:17 schwarze Changed: mansearch.c (1.25), "Exp", lines: +2 -1 Properly initialize malloc(3)ed memory. With this bug fix, partly unitialized memory could sometimes be returned, sometimes causing crashes by bogus free(3)s in apropos(1). 2014-03-26 21:39 schwarze Changed: mandocdb.c (1.124), "Exp", lines: +81 -17 Without bloating mandoc(1) itself, let mandocdb(8) support files called manN/X.N.gz and catN/X.0.gz, reading them through a pipe(2) from gunzip(1) -c. Asked for by various people in the past. 2014-03-26 20:53 schwarze Changed: mandocdb.c (1.123), "Exp", lines: +52 -34 Improve error reporting. Simplify combining a custom format string with perror(), avoiding many manual calls to strerror(errno). For low-level failures, report attempted function calls. Do not abuse the say() filename argument for files outside the basedir, and even less for other text. 2014-03-23 20:57 schwarze Changed: man.c (1.127), "Exp", lines: +11 -4 Skip leading escape sequences in man_deroff(). Helps indexing of some manuals containing overzealous escaping in their NAME section. 2014-03-23 15:14 schwarze Changed: mdoc_validate.c (1.205), "Exp", lines: +27 -78 Retire the old concat() function. For .Sh, i wasn't even needed at all. For .Dd, .Nm, and .Os, use the new mdoc_deroff() instead. This gets rid of the last limited-size static buffers in this file, hence eliminates the last explicit MANDOCERR_MEM throwers here, and it shortens the code by 50 lines. 2014-03-23 12:44 schwarze Changed: mandocdb.c (1.122), "Exp", lines: +4 -26 mdoc.c (1.211), "Exp", lines: +41 -1 mdoc.h (1.126), "Exp", lines: +2 -1 If an .Nd block contains macros, avoid fragmented entries in mandocdb(8), instead use the .Nd content recursively. 2014-03-23 12:37 schwarze Changed: mandocdb.c (1.49.2.15), "Exp", lines: +9 -46 backport man(7) .Nd improvement 2014-03-23 12:26 schwarze Changed: man.c (1.126), "Exp", lines: +41 -1 man.h (1.63), "Exp", lines: +3 -1 mandocdb.c (1.121), "Exp", lines: +8 -47 If a man(7) NAME section contains macros, avoid truncated or empty entries for .Nd in mandocdb(8), instead use the macro content recursively. This improves indexing of more than 200 manuals in Xenocara, i.e. more than 15%, in particular GL and some Xkb. 2014-03-23 12:19 schwarze Changed: cgi.c (1.50), "Exp", lines: +2 -1 needs mandoc_aux, too 2014-03-23 12:11 schwarze Changed: mandocdb.c (1.120), "Exp", lines: +2 -5 mansearch.c (1.24), "Exp", lines: +12 -30 mdoc.c (1.210), "Exp", lines: +2 -5 mdoc_validate.c (1.204), "Exp", lines: +4 -6 roff.c (1.202), "Exp", lines: +2 -6 avoid repetitive code for asprintf error handling 2014-03-23 12:04 schwarze Changed: Makefile (1.395.2.15), "Exp", lines: +9 -4 apropos_db.c (1.32.2.5), "Exp", lines: +2 -1 mandocdb.c (1.49.2.14), "Exp", lines: +2 -1 introduce mandoc_aux to 1.12 2014-03-23 11:59 schwarze Added: mandoc_aux.c (1.1) mandoc_aux.h (1.1) The files mandoc.c and mandoc.h contained both specialised low-level functions used for multiple languages (mdoc, man, roff), for example mandoc_escape(), mandoc_getarg(), mandoc_eos(), and generic auxiliary functions. Split the auxiliaries out into their own file and header. 2014-03-23 11:25 schwarze Changed: Makefile (1.414), "Exp", lines: +7 -3 arch.c (1.10), "Exp", lines: +1 -4 att.c (1.10), "Exp", lines: +1 -4 chars.c (1.56), "Exp", lines: +2 -1 eqn.c (1.39), "Exp", lines: +2 -1 html.c (1.155), "Exp", lines: +2 -1 lib.c (1.10), "Exp", lines: +1 -4 main.c (1.172), "Exp", lines: +2 -1 man.c (1.125), "Exp", lines: +2 -1 man_hash.c (1.26), "Exp", lines: +1 -2 man_validate.c (1.89), "Exp", lines: +2 -1 mandoc.3 (1.24), "Exp", lines: +57 -27 mandoc.c (1.76), "Exp", lines: +2 -69 mandoc.h (1.118), "Exp", lines: +2 -7 mandocdb.c (1.119), "Exp", lines: +2 -1 manpath.c (1.13), "Exp", lines: +2 -2 mansearch.c (1.23), "Exp", lines: +2 -1 mdoc.c (1.209), "Exp", lines: +2 -1 mdoc_argv.c (1.90), "Exp", lines: +2 -1 mdoc_hash.c (1.19), "Exp", lines: +1 -2 mdoc_man.c (1.59), "Exp", lines: +4 -3 mdoc_validate.c (1.203), "Exp", lines: +2 -1 msec.c (1.11), "Exp", lines: +1 -2 out.c (1.47), "Exp", lines: +2 -1 read.c (1.46), "Exp", lines: +2 -1 roff.c (1.201), "Exp", lines: +2 -1 st.c (1.10), "Exp", lines: +1 -4 tbl.c (1.28), "Exp", lines: +2 -1 tbl_data.c (1.29), "Exp", lines: +2 -1 tbl_layout.c (1.24), "Exp", lines: +2 -2 term.c (1.218), "Exp", lines: +2 -2 term_ascii.c (1.22), "Exp", lines: +2 -2 term_ps.c (1.56), "Exp", lines: +2 -1 vol.c (1.10), "Exp", lines: +1 -4 The files mandoc.c and mandoc.h contained both specialised low-level functions used for multiple languages (mdoc, man, roff), for example mandoc_escape(), mandoc_getarg(), mandoc_eos(), and generic auxiliary functions. Split the auxiliaries out into their own file and header. While here, do some #include cleanup. 2014-03-20 02:57 schwarze Changed: roff.c (1.200), "Exp", lines: +17 -15 Remove currently unimplemented macros from the lists of used-defined macros to be cleared during .Dd and .TH because clearing them at that point defeats the purpose of backup implementations provided in the manual page itself, some of which _do_ work with mandoc(1). While here, add the new .%C macro to the list to be cleared. 2014-03-19 22:33 schwarze Changed: mandocdb.c (1.118), "Exp", lines: +68 -20 Register pure .so pages as mlinks, not as mpages. This doesn't affect /usr/share/man, but improves /usr/X11R6/man: * Eliminates multiple apropos(1) output for such pages. * Reduces X11R6 database size from 450 kB to 240 kB (-47%). * Reduces X11R6 database build time from 1.68s to 1.00s (-40%). 2014-03-19 22:24 schwarze Changed: mandocdb.c (1.49.2.13), "Exp", lines: +2 -2 cope with the mparse_result() interface change 2014-03-19 22:20 schwarze Changed: cgi.c (1.49), "Exp", lines: +2 -2 demandoc.c (1.10), "Exp", lines: +2 -2 main.c (1.171), "Exp", lines: +2 -2 mandoc.h (1.117), "Exp", lines: +2 -2 mandocdb.c (1.117), "Exp", lines: +2 -2 read.c (1.45), "Exp", lines: +20 -3 Without the MPARSE_SO option, if the file contains nothing but a single .so request, do not read the file pointed to, but instead let mparse_result() provide the file name pointed to as a return value. To be used by makewhatis(8) in the future. 2014-03-19 22:09 schwarze Changed: mandocdb.c (1.49.2.12), "Exp", lines: +5 -5 cope with mparse_alloc() interface change 2014-03-19 22:05 schwarze Changed: cgi.c (1.48), "Exp", lines: +2 -2 demandoc.c (1.9), "Exp", lines: +2 -2 cope with mparse_alloc() interface change 2014-03-19 21:51 schwarze Changed: libmandoc.h (1.40), "Exp", lines: +3 -3 main.c (1.170), "Exp", lines: +11 -11 mandoc.h (1.116), "Exp", lines: +8 -12 mandocdb.c (1.116), "Exp", lines: +6 -6 read.c (1.44), "Exp", lines: +17 -19 roff.c (1.199), "Exp", lines: +6 -8 Generalize the mparse_alloc() and roff_alloc() functions by giving them an "options" argument, replacing the existing "inttype" and "quick" arguments, preparing for a future MPARSE_SO option. Store this argument in struct mparse and struct roff, replacing the existing "inttype", "parsetype", and "quick" members. No functional change except one tiny cosmetic fix in roff_TH(). 2014-03-18 16:56 schwarze Changed: mandocdb.c (1.115), "Exp", lines: +95 -21 Allow checking that databases are up to date even when you have no write permission on the databases, as requested by espie@ quite some time ago. But make sure to not slow database generation down when you do have write permission, and to not delay error reporting in -Q mode. 2014-03-17 16:31 schwarze Changed: mansearch.c (1.22), "Exp", lines: +55 -7 in apropos(1) output, sort names and avoid multiple section numbers 2014-03-17 09:52 schwarze Changed: apropos.1 (1.16.2.4), "Exp", lines: +79 -35 merge the applicable parts from HEAD 2014-03-17 09:43 schwarze Changed: apropos.1 (1.23), "Exp", lines: +153 -57 Sync to OpenBSD: * do not talk about shell globbing * describe logical operations * improve examples * add HISTORY * some wording improvements for clarity 2014-03-17 09:04 schwarze Changed: mandocdb.8 (1.17.2.2), "Exp", lines: +12 -7 minor sync with HEAD, but keep the Berkeley DB parts 2014-03-17 08:34 schwarze Changed: mandocdb.8 (1.21), "Exp", lines: +28 -6 minor sync to OpenBSD 2014-03-17 06:57 schwarze Changed: man.7 (1.125), "Exp", lines: +2 -8 roff.7 (1.49), "Exp", lines: +30 -2 sync to OpenBSD: .ft is a roff(7) request, not a man(7) macro, and it is not even used frequently in man(7) 2014-03-13 19:23 schwarze Changed: term.c (1.217), "Exp", lines: +8 -7 In -Tutf8 mode, make sure that hyphens get counted against the output line length even when they are breakable. Before this, a line containing N breakable hyphens could get up to N characters wider than the right margin in -Tutf8 output mode. Issue reported by tedu@ on <bugs at OpenBSD>. 2014-03-08 21:54 schwarze Changed: TODO (1.167), "Exp", lines: +11 -1 new bug report from wiz@ regarding Tcl*(3) 2014-03-08 16:22 schwarze Changed: man_term.c (1.142), "Exp", lines: +2 -2 In .nf mode, use the MAN_LINE flag to detect input line breaks instead of the man_node line member. This is required to preserve line breaks contained in user-defined macros called in .nf mode. Found in a code audit triggered by fixing a similar issue in .TP. 2014-03-08 15:50 schwarze Changed: man_html.c (1.91), "Exp", lines: +11 -6 man_term.c (1.141), "Exp", lines: +10 -5 tree.c (1.51), "Exp", lines: +6 -3 To find out whether .TP head arguments are same-line or next-line arguments, use the MAN_LINE flag instead of the man_node line member. This is required such that user-defined macros wrapping .TP work correctly. Issue found by Havard Eidnes in Tcl_NewStringObj(3), reported via the NetBSD bug tracking system and Thomas Klausner <wiz at NetBSD>. 2014-03-08 04:43 schwarze Changed: roff.7 (1.48), "Exp", lines: +72 -41 roff.c (1.198), "Exp", lines: +87 -56 Improve .if/.ie condition handling. * Support string comparisons. * Support negation not only for numerical, but for all conditions. * Switch the `o' condition from false to true. * Handle the `c', `d', and `r' conditions as false for now. * Use int for boolean data instead of rolling our own "enum roffrule"; needed such that we can use the standard ! and == operators. Havard Eidnes reported via the NetBSD bug tracking system that some Tcl*(3) manuals need this, and Thomas Klausner <wiz at NetBSD> forwarded the report to me. This doesn't make the crazy Tcl*(3) macrology maze happy yet, but brings us a bit closer. 2014-03-07 18:37 schwarze Changed: roff.c (1.197), "Exp", lines: +13 -12 In roff_cond_sub(), make sure that the incorrect input sequence `\\}', when found on a macro line, does not close a conditional block. The companion function roff_cond_text() already did this correctly, but make the code more readable without functional change. While here, report the correct column number in related error messages. 2014-03-07 18:30 schwarze Changed: roff.c (1.196), "Exp", lines: +11 -15 Even on macro lines, \} must not cause whitespace. 2014-03-07 02:22 schwarze Changed: roff.c (1.195), "Exp", lines: +13 -26 Three bugfixes related to the closing of conditional blocks: 1. Handle more than one `\}' on macro lines, as it was already done for text lines. 2. Do not treat `\}' as a macro invocation after a dot at the beginning of a line. That allows more than one `\}' to work on lines starting with `.\}'. It also simplifies the code. 3. Do not complain about characters following `\}'. Those are not lost, but handled normally both on text and macro lines. 2014-03-05 23:14 schwarze Changed: chars.in (1.45), "Exp", lines: +12 -12 In -Tutf8 mode, mandoc_char(7) named accent character escape sequences have to render as non-combining accents; if you want combining accents, you have to explicitly specify them using the Unicode character numbers for combining accents, or you can use character escape sequences for accented characters. This lets mandoc behave like groff. Additionally, both the Ossanna/Kernighan/Ritter troff manual and the GNU troff manual say that \' and \` are equivalent to \(aa and \(ga, respectively, so do the same for these. This mitigates issues with man(7) code autogenerated by texinfo2man(1), which mistranslates TeX ` and ' to \` and \' instead of \(oq and \(cq as reported by sthen@ and as analyzed by bentley@. 2014-03-03 19:09 schwarze Deleted: external.png (1.1.2.1) index.css (1.11.2.1) index.sgml (1.154.2.17) Changed: Makefile (1.395.2.14), "Exp", lines: +22 -36 - remove index.html, is now part of the website repo - and some general cleanup (installcgi is .PHONY) 2014-03-03 18:53 schwarze Deleted: external.png (1.2) index.css (1.12) index.sgml (1.167) Changed: Makefile (1.413), "Exp", lines: +30 -38 - remove index.html, it is now part of the website repo - install mandocdb, manpage, and apropos - and some general cleanup (e.g., installcgi is .PHONY) 2014-03-03 18:37 schwarze Changed: TODO (1.166), "Exp", lines: +12 -6 MANDOCERR_BADTAB needs checking, but .UR/.UE is done 2014-03-03 17:08 schwarze Deleted: regress/regress.sh (1.7) regress/man/RS/nesting.in (1.2) regress/man/SH/blank.in (1.4) regress/man/SH/blank2.in (1.2) regress/mdoc/Ar/empty.in (1.2) regress/mdoc/Ar/empty2.in (1.2) regress/mdoc/Bd/bd-compact.in (1.2) regress/mdoc/Bd/bd-empty-offset.in (1.2) regress/mdoc/Bd/bd0.in (1.2) regress/mdoc/Bl/bullet-basic.in (1.2) regress/mdoc/Bl/empty-offset.in (1.2) regress/mdoc/Cd/cd.in (1.3) regress/mdoc/Fl/empty.in (1.2) regress/mdoc/Ft/before-fn.in (1.2) regress/mdoc/Ft/before-fo.in (1.2) regress/mdoc/Lb/blank.in (1.2) regress/mdoc/Lb/body.in (1.2) regress/mdoc/Lb/custom.in (1.2) regress/mdoc/Lb/prolog.in (1.2) regress/mdoc/Li/empty.in (1.2) regress/mdoc/Li/empty2.in (1.2) regress/mdoc/Rs/one_author.in (1.2) regress/mdoc/Rs/three_authors.in (1.2) regress/mdoc/Rs/two_authors.in (1.2) regress/mdoc/Ud/ud.in (1.2) regress/roff/ig/cond0.in (1.3) regress/roff/ig/end0.in (1.2) regress/roff/ig/end1.in (1.2) regress/roff/ig/override0.in (1.2) regress/roff/ig/redef0.in (1.3) regress/roff/ig/simple0.in (1.3) regress/roff/ig/simple1.in (1.2) regress/roff/ig/simple2.in (1.3) Move the regression suite to the attic. It has not been used or maintained for several years, and we won't start using it now. Devlopment regression testing is done in OpenBSD, and there is no value in maintaining two regression suites in parallel. 2014-02-16 14:26 schwarze Changed: man.7 (1.124), "Exp", lines: +20 -14 mdoc.7 (1.227), "Exp", lines: +17 -11 After Werner Lemberg accepted and committed some updates to the manual page template contained in groff_mdoc(7), catch up with our own stuff. In particular, allow ERRORS in section 4 and DIAGNOSTICS in section 9. ok jmc@ 2014-02-16 12:33 schwarze Changed: man_term.c (1.140), "Exp", lines: +9 -6 mdoc_term.c (1.259), "Exp", lines: +6 -3 when indenting, extend the right margin accordingly, when needed; fixes a crash reported by blambert@ and a few other, similar ones 2014-02-14 23:50 schwarze Changed: roff.7 (1.47), "Exp", lines: +15 -3 document .as and .ce 2014-02-14 23:24 schwarze Changed: TODO (1.165), "Exp", lines: +1 -6 roff.c (1.194), "Exp", lines: +3 -1 Parse and ignore the roff(7) .ce request (center some lines). We even parse and ignore the .ad request (adjustment mode), and it doesn't make sense to more prominently warn about temporary than about permanent adjustment changes. Request found by naddy@ in xloadimage(1) and by juanfra@ in racket(1). 2014-02-14 23:05 schwarze Changed: TODO (1.164), "Exp", lines: +1 -4 roff.c (1.193), "Exp", lines: +16 -14 Implement the roff(7) .as request (append to user-defined string). Missing feature found by jca@ in ratpoison(1). The ratpoison(1) manual still doesn't work because it uses .shift and .while, too (apparently, ratpoison is so complex that it needs a Turing-complete language to even format its manual :-). Written at Christchurch International Airport. 2014-02-14 22:27 schwarze Changed: TODO (1.163), "Exp", lines: +1 -6 roff.c (1.192), "Exp", lines: +44 -1 Handle some predefined read-only number registers, e.g. .H and .V. In particular, this improves handling of the pod2man(1) preamble; for examples of the effect, see some author names in perlthrtut(1). Missing feature reported by Andreas Voegele <mail at andreasvoegele dot com> more than two years ago. Written at Christchurch International Airport. 2014-02-14 17:35 schwarze Changed: man.7 (1.123), "Exp", lines: +3 -3 use .At where appropriate; from Jan Stary <hans at stare dot cz> 2014-01-24 22:54 schwarze Changed: mdoc.7 (1.226), "Exp", lines: +202 -74 Supplement the documentation of the .St macro by minimal commentary regarding the content and relationships of the various standards, and sort and group them. tweaks and ok guenther@, ok millert@ sobrado@ jmc@ 2014-01-22 21:02 schwarze Changed: apropos_db.c (1.32.2.4), "Exp", lines: +15 -7 Implement the \: (optional line break) escape sequence, documented in the Ossanna-Kernighan-Ritter troff manual and also supported by groff. Missing feature reported by Steffen Nurpmeso <sdaoden at gmail dot com>. 2014-01-22 20:58 schwarze Changed: chars.c (1.55), "Exp", lines: +2 -2 chars.in (1.44), "Exp", lines: +12 -8 html.c (1.154), "Exp", lines: +9 -3 mandoc.h (1.115), "Exp", lines: +2 -1 mandocdb.c (1.114), "Exp", lines: +15 -6 mdoc_man.c (1.58), "Exp", lines: +5 -2 term.c (1.216), "Exp", lines: +10 -4 Implement the \: (optional line break) escape sequence, documented in the Ossanna-Kernighan-Ritter troff manual and also supported by groff. Missing feature reported by Steffen Nurpmeso <sdaoden at gmail dot com>. 2014-01-21 10:26 schwarze Changed: mdoc_macro.c (1.129), "Exp", lines: +2 -2 Treat the line after .Cd as a single argument. This doesn't hurt normal manual display and makes the mandocdb(8) database more useful. 2014-01-20 11:28 schwarze Changed: mdoc_macro.c (1.128), "Exp", lines: +2 -2 Keep words after .Ic together in a single argument. This doesn't hurt normal manual display and makes the mandocdb(8) database more useful. 2014-01-20 00:51 schwarze Changed: mdoc.7 (1.225), "Exp", lines: +33 -33 Change markup of some fixed strings from .Ar to .Cm. 2014-01-19 23:09 schwarze Changed: mansearch.c (1.21), "Exp", lines: +3 -1 Always compare arch case-insensitively. 2014-01-19 22:48 schwarze Changed: mandocdb.c (1.113), "Exp", lines: +4 -3 Avoid the risk of trying to modify a literal string. 2014-01-19 22:41 schwarze Changed: mandocdb.c (1.112), "Exp", lines: +10 -6 Always store the arch in lower-case only. Reduces database size by ~0.5%, and by ~1.5% with -Q. 2014-01-19 01:18 schwarze Changed: Makefile (1.412), "Exp", lines: +2 -2 mansearch.c (1.20), "Exp", lines: +29 -67 Get rid of the local keys table, use the new mansearch_const.c. No functional change. 2014-01-19 00:09 schwarze Added: mansearch_const.c (1.1) Changed: Makefile (1.411), "Exp", lines: +2 -1 mandocdb.c (1.111), "Exp", lines: +17 -2 Support a second -v on mandocdb(8) to show keys while they are being added; i need that for debugging, in particular to be used with -t. To be able to do so, provide a global table of key names, for reuse. 2014-01-18 08:55 schwarze Changed: mandocdb.c (1.110), "Exp", lines: +10 -1 Cope with slightly broken NAME sections in man(7) pages having a trailing comma after the last name, like this: ASN1_OBJECT_new, ASN1_OBJECT_free, - object allocation functions 2014-01-18 08:23 schwarze Changed: mansearch.h (1.9), "Exp", lines: +41 -41 Sort the macro keys by their real-world frequency to reduce the average mask size. No functional change. This shrinks the standard /usr/share/man database by 7%, now at 10.3x the size of whatis.db, and with -Q even by 11%, now at 3.0x of whatis.db. Now i'm out of ideas to easily shrink the size of the database. 2014-01-18 08:21 schwarze Changed: mandocdb.c (1.109), "Exp", lines: +3 -5 Drop the AUTOINCREMENT PRIMARY KEYs from the mlinks and keys tables. They are completely unused, and i cannot imagine what they *could* ever be used for; but apparently, they are expensive to generate. Standard DB build time goes down by 10%, now at 1.9x of makewhatis. Standard DB size goes down by 4%, now at 11x of makewhatis. DB build time with -Q goes down by 15%, now at 0.28x of makewhatis. DB size with -Q goes down by 3%, now at 3.35x of makewhatis. 2014-01-18 08:19 schwarze Changed: mandocdb.c (1.108), "Exp", lines: +2 -4 Despite some experimenting, i'm unable to find any relevant effect of creating an index for the keys table on apropos(1) search times; apparently, adding that index was premature optimization in the first place; so, stop adding that index. Its root gone, the following evil is reduced (/usr/share/man on my notebook) - DB build time with -Q goes down by 15%, now at 1/3 of makewhatis - DB size with -Q goes down by 35%, now at 3.5x of makewhatis - full DB build time goes down by 12%, now at 2.1x of makewhatis - full DB size goes down by 42%, now at 11.5x of makewhatis 2014-01-11 22:16 schwarze Changed: mdoc_validate.c (1.202), "Exp", lines: +2 -2 Remove useless use of strnlen(3). Yuckiness pointed out by deraadt@. 2014-01-07 09:10 schwarze Changed: mdoc_validate.c (1.201), "Exp", lines: +23 -30 Cache the result of uname(3) such that we don't need to call it over and over again for each manual; found with gprof(1). Speeds up mandocdb(8) -Q by 3%, now at 39.5% of makewhatis(8). 2014-01-06 23:46 schwarze Changed: roff.c (1.191), "Exp", lines: +7 -10 Gprof(1) is fun. You should use it more often. Another 10% speedup for mandocdb(8) -Q, and even 3% without -Q. With -Q, we are now at 41% of the time required by makewhatis(8). Do not copy predefined strings into the dynamic string table, just leave them in their own static table and use that one as a fallback at lookup time. This saves us copying and deleting them for each manual. No functional change. 2014-01-06 22:39 schwarze Changed: man_validate.c (1.88), "Exp", lines: +8 -6 mdoc_validate.c (1.200), "Exp", lines: +6 -6 Another 18% speedup for mandocdb(8) -Q, found by gprof(1). In -Q mode, refrain form validating and normalizing the format of the date given in .Dd or .TH, as it won't be used anyway. For /usr/share/man, mandocdb -Q now takes 45% of the time of makewhatis(8). 2014-01-06 21:34 schwarze Changed: libmandoc.h (1.39), "Exp", lines: +2 -2 read.c (1.43), "Exp", lines: +2 -2 roff.c (1.190), "Exp", lines: +7 -5 Another 25% speedup for mandocdb(8) -Q mode, found with gprof(1). For /usr/share/man, we only need 56% of the time of makewhatis(8) now. In groff, user-defined macros clashing with mdoc(7) or man(7) standard macros are cleared when parsing the .Dd or .TH macro, respectively. Of course, we continue doing that in standard mode to assure full groff bug compatibility. However, in -Q mode, full groff bug compatibility makes no sense when it's unreasonably expensive, so skip this step in -Q mode. Real-world manuals hardly ever redefine standard macros, that's terrible style, and if they do, it's pointless to do so before .Dd or .TH because it has no effect. Even if someone does, it's extremely unlikely to break mandocdb(8) -Q parsing because we abort the parse sequence after the NAME section, anyway. So if you manually redefine .Sh, .Nm, .Nd, or .SH in a way that doesn't work at all and rely on .Dd or .TH to fix it up for you, your broken manual will no longer get a perfect apropos(1) entry until you re-run mandocdb(8) without -Q. It think that consequence is acceptable in order to get a 25% speedup for everyone else. 2014-01-06 20:53 schwarze Changed: mandocdb.c (1.107), "Exp", lines: +7 -5 Do not sync to disk after each individual manual page (duh!), only sync to disk one single time when all data is ready. Rebuild times for /usr/share/man/mandoc.db shrink on my notebook: In standard mode from 45 seconds to 11 seconds (75% reduction) In -Q mode from 25 seconds to 3.1 seconds (87% reduction) For comparison: makewhatis(8): 4.2 seconds That is, in -Q mode, we are now *faster* than the existing makewhatis(8), and careful profiling shows there is still a lot of room for improval. 2014-01-06 15:32 schwarze Changed: mandocdb.c (1.106), "Exp", lines: +36 -15 Fix mandocdb(8) -d and -u. It was broken by recent optimizations. 2014-01-06 13:54 schwarze Changed: mandocdb.c (1.105), "Exp", lines: +6 -6 Rename dbindex() to dbadd() to be less confusing. The concept of an index file is gone since the switch to SQLite. No functional change. 2014-01-06 03:52 schwarze Changed: mandocdb.c (1.104), "Exp", lines: +2 -4 mansearch.c (1.19), "Exp", lines: +19 -10 Remove the redundant "file" column from the "mlinks" table. The contents can easily be reconstructed from sec, arch, name, form. Shrinks the database by another 3% in standard mode and 9% in -Q mode. 2014-01-06 03:02 schwarze Changed: apropos.c (1.37), "Exp", lines: +3 -5 mandocdb.c (1.103), "Exp", lines: +2 -15 manpage.c (1.7), "Exp", lines: +3 -4 mansearch.c (1.18), "Exp", lines: +3 -7 mansearch.h (1.8), "Exp", lines: +1 -2 Drop Nd from the mpages table, it is still in the keys table. This shrinks the database in standard mode by 3%, in -Q mode by 9%, without loss of functionality. 2014-01-06 00:53 schwarze Changed: lib.in (1.18), "Exp", lines: +2 -1 main.c (1.169), "Exp", lines: +2 -1 man.7 (1.122), "Exp", lines: +3 -2 man.c (1.124), "Exp", lines: +2 -1 mdoc_validate.c (1.199), "Exp", lines: +2 -1 read.c (1.42), "Exp", lines: +2 -1 Joerg Sonnenberger contributed copyrightable amounts of text to some files. To make it clear that he also put his contributions under the ISC license, with his explicit permission, add his Copyright notice to the relevant files. No code change. 2014-01-05 21:30 schwarze Changed: mandocdb.c (1.49.2.11), "Exp", lines: +9 -4 Cope with the mparse_alloc() interface change. 2014-01-05 20:41 schwarze Changed: cgi.c (1.47), "Exp", lines: +2 -2 demandoc.c (1.8), "Exp", lines: +2 -2 Cope with mparse_alloc() interface change. 2014-01-05 20:26 schwarze Changed: libman.h (1.57), "Exp", lines: +2 -1 libmandoc.h (1.38), "Exp", lines: +3 -3 libmdoc.h (1.83), "Exp", lines: +2 -1 main.c (1.168), "Exp", lines: +2 -2 man.c (1.123), "Exp", lines: +10 -2 mandoc.3 (1.23), "Exp", lines: +46 -9 mandoc.h (1.114), "Exp", lines: +2 -2 mandocdb.c (1.102), "Exp", lines: +12 -8 mdoc.c (1.208), "Exp", lines: +11 -3 read.c (1.41), "Exp", lines: +11 -9 Add an option -Q (quick) to mandocdb(8) for accelerated generation of reduced-size databases. Implement this by allowing the parsers to optionally abort the parse sequence after the NAME section. While here, garbage collect the unused void *arg attribute of struct mparse and mparse_alloc() and fix some errors in mandoc(3). This reduces the processing time of mandocdb(8) on /usr/share/man by a factor of 2 and the database size by a factor of 4. However, it still takes 5 times the time and 6 times the space of makewhatis(8), so more work is clearly needed. 2014-01-05 19:10 joerg Changed: html.c (1.153), "Exp", lines: +2 -2 html.h (1.50), "Exp", lines: +4 -1 libmandoc.h (1.37), "Exp", lines: +4 -1 term_ps.c (1.55), "Exp", lines: +5 -2 Tag functions with format strings as arguments as printf-like. Fix one case where a non-literal is used as format string. Fix another case where a variable is formatted using the wrong type. 2014-01-05 18:37 joerg Changed: tbl_data.c (1.28), "Exp", lines: +5 -5 Merge NetBSD's r1.4: Rename data to getdata to work around bugs in the PPC64 toolchain. 2014-01-05 04:48 schwarze Changed: mandocdb.c (1.101), "Exp", lines: +7 -69 Rip out the complete "reachable" checks, without replacement. It's a pity i spent time during t2k13 writing this; however, when an entire concept is busted, let us not look back, There is no such thing as an unreachable page. Even if you are crazy enough to put a page starting with ".Dt NAMEI 9" into a file man1/cat.1, we now make sure that it can be found by all of the following: Nm=namei Nm=cat sec=1 sec=9 It will always be displayed as: cat(1) - pathname lookup So you know that you have to type `man cat` to get at it. That obsoletes the concept of "unreachable manuals" for good. 2014-01-05 04:13 schwarze Changed: mandocdb.c (1.100), "Exp", lines: +2 -14 mansearch.c (1.17), "Exp", lines: +30 -24 Remove the obsolete file name column from the mpages table. This column wasn't helpful because one manpage can have multiple MLINKS. Use the file name column in the mlinks table, instead. 2014-01-05 03:25 schwarze Changed: mandocdb.c (1.99), "Exp", lines: +4 -8 mansearch.c (1.16), "Exp", lines: +4 -4 Remove the obsolete sec and arch columns from the mpages table. They were confusing because a manpage can have MLINKS in different sections and architectures. 2014-01-05 03:06 schwarze Changed: mandocdb.c (1.98), "Exp", lines: +5 -3 mansearch.c (1.15), "Exp", lines: +52 -22 Reimplement apropos -s NUM -S ARCH EXPR by internally converting it to apropos \( EXPR \) -a 'sec~^NUM$' -a 'arch~^(ARCH|any)$' in preparation for removal of sec and arch from the mpage table. Almost no functional change except for the following bonus: This also makes sure that for cross-section and cross-arch MLINKs, all of the following work: apropos -s 1 encrypt apropos -s 8 encrypt apropos -s 1 makekey apropos -s 8 makekey While here, print error messages about invalid regexps to stderr. 2014-01-05 00:29 schwarze Changed: mandocdb.c (1.97), "Exp", lines: +10 -2 mansearch.c (1.14), "Exp", lines: +3 -1 mansearch.h (1.7), "Exp", lines: +3 -1 Put section and architecture info into the keys table, in preparation for removing them from the mpages table, aiming for cleaner and more uniform interfaces. Database growth is below 4%, part of which will be reclaimed. As a bonus, this allows searches like: ./obj/apropos An=kettenis -a arch=ppc ./obj/apropos An=kettenis -a sec~[^4] 2014-01-04 23:43 schwarze Changed: mansearch.c (1.13), "Exp", lines: +92 -56 New implementation of complex search criteria using \(, \), -a because the old implementation got lost in the Berkeley to SQLite switch. Note that this is not just feature creep, but required for upcoming database format cleanup and simplification. 2014-01-04 15:00 schwarze Changed: Makefile (1.410), "Exp", lines: +7 -2 Put mansearch.{h,c}, manpage.c, and compat_ohash.{h,c} into the distribution tarball. Bump VERSION. 2014-01-04 14:45 schwarze Changed: Makefile (1.409), "Exp", lines: +3 -1 Put ./configure into the distributin tarball. 2014-01-04 14:44 schwarze Changed: Makefile (1.395.2.13), "Exp", lines: +3 -1 Put ./configure into the distribution tarball. 2014-01-04 14:09 schwarze Changed: compat_ohash.c (1.2), "Exp", lines: +2 -2 compat_ohash.h (1.2), "Exp", lines: +1 -1 Use C99 uint32_t, not BSD-style u_int32_t. Needed for Solaris 10 as reported by Matthias Scheler. 2014-01-04 13:49 schwarze Changed: Makefile (1.395.2.12), "Exp", lines: +3 -0 config.h.post (1.6.2.5), "Exp", lines: +10 -9 configure (1.1.2.2), "Exp", lines: +1 -0 Merge strnlen(3) configuration bits. 2014-01-04 13:40 schwarze Added: compat_strnlen.c (1.1) test-strnlen.c (1.1) Changed: Makefile (1.408), "Exp", lines: +3 -0 config.h.post (1.8), "Exp", lines: +10 -9 config.h.pre (1.3), "Exp", lines: +1 -0 configure (1.2), "Exp", lines: +1 -0 Even though strnlen(3) is required by POSIX 2008, Matthias Scheler reports than Solaris 10 lacks it. While here, sort the declarations in config.h and move the headers to the top. 2014-01-04 01:24 schwarze Changed: Makefile (1.395.2.11), "Exp", lines: +12 -51 configure (1.1.2.1), "Exp", lines: +1 -1 Merge cleanup of feature tests to VERSION_1_12, resolving conflicts. 2014-01-04 01:11 schwarze Added: configure (1.1) Changed: Makefile (1.407), "Exp", lines: +12 -51 test-fgetln.c (1.2), "Exp", lines: +4 -4 test-getsubopt.c (1.2), "Exp", lines: +10 -3 test-mmap.c (1.4), "Exp", lines: +2 -4 test-strlcat.c (1.2), "Exp", lines: +4 -3 test-strlcpy.c (1.2), "Exp", lines: +4 -3 test-strptime.c (1.2), "Exp", lines: +5 -4 Clean up feature tests: * Split the configure steering script out of the Makefile. * Let the configure step depend on the test sources. * Clean up the test programs such that they can be run. 2014-01-02 22:44 schwarze Changed: mandocdb.c (1.96), "Exp", lines: +19 -19 Avoid "utf8" in the names of a function and a struct member that don't necessarily have anything to do with UTF-8. Just renaming, no functional change. 2014-01-02 22:19 schwarze Changed: mandocdb.c (1.95), "Exp", lines: +35 -17 Do not put UTF-8-encoded strings into the database by default, use ASCII. Just like for mandoc(1), provide a -Tutf8 option for people who want that. 2014-01-02 20:24 schwarze Changed: mandocdb.c (1.94), "Exp", lines: +21 -27 Polish the mlink_add() interface: Allocate memory inside, not in the callers. No functional change. 2014-01-02 18:52 schwarze Changed: mandocdb.c (1.93), "Exp", lines: +60 -43 Check all MLINKS for consistency with the content of the manual page, not just the first one. This doesn't change how the check is done, but just which MLINKS are checked. 2014-01-02 16:29 schwarze Changed: mandoc.h (1.113), "Exp", lines: +10 -2 read.c (1.40), "Exp", lines: +41 -17 Since the functions in read.c are part of the mandoc(3) library, do not print to stderr. Instead, properly use the mmsg callback. Issue noticed by Abhinav Upadhyay <er dot abhinav dot upadhyay at gmail dot com> and Thomas Klausner <wiz at NetBSD>. 2013-12-31 23:29 schwarze Changed: mdoc.7 (1.224), "Exp", lines: +4 -2 st.in (1.23), "Exp", lines: +2 -1 Support .St -p1003.1-2013, "IEEE Std 1003.1-2008/Cor 1-2013". Note that the POSIX-2008 standard remains in force, so please refrain from wholesale 2008 -> 2013 replacements. Make sure to only use the new -p1003.1-2013 argument for cases where "IEEE Std 1003.1(TM)-2008/ Cor 1-2013, IEEE Standard for Information Technology--Portable Operating System Interface (POSIX(R)), Technical Corrigendum 1" actually changes something in the standard with respect to the specific function documented in the manual you touch. Otherwise, please continue using .St -p1003.1-2008. Triggered by a similar, but slightly incorrect patch from jmc@; ok guenther@. 2013-12-31 23:23 schwarze Changed: libmandoc.h (1.36), "Exp", lines: +2 -2 man.c (1.122), "Exp", lines: +2 -2 man_macro.c (1.80), "Exp", lines: +2 -2 mandoc.c (1.75), "Exp", lines: +5 -5 mdoc.c (1.207), "Exp", lines: +2 -2 mdoc_macro.c (1.127), "Exp", lines: +2 -2 Simplify: Remove an unused argument from the mandoc_eos() function. No functional change. 2013-12-31 23:19 schwarze Changed: Makefile (1.395.2.10), "Exp", lines: +13 -1 config.h.post (1.6.2.4), "Exp", lines: +6 -0 Provide strcasestr(3) and strsep(3) for Solaris 10 compat; reported missing by Matthias Scheler <tron at NetBSD> via wiz@. 2013-12-31 23:03 schwarze Added: compat_strcasestr.c (1.1) compat_strsep.c (1.1) test-strcasestr.c (1.1) test-strsep.c (1.1) Changed: Makefile (1.406), "Exp", lines: +13 -1 config.h.post (1.7), "Exp", lines: +6 -0 Provide strcasestr(3) and strsep(3) for Solaris 10 compat; reported missing by Matthias Scheler <tron at NetBSD> via wiz@. 2013-12-31 22:40 schwarze Changed: mdoc_macro.c (1.126), "Exp", lines: +1 -20 Do not trigger end-of-sentence spacing by trailing punctuation at the end of partial implicit macros. Prodded by jmc@. Actually, this is a revert of rev. 1.64 Fri May 14 14:09:13 2010 UTC by kristaps@, with this original commit message: "Block-implicit macros now up-propogate end-of-sentence spacing. NOTE: GROFF IS NOT SMART ENOUGH TO DO THIS." Please speak after me: Then why the hell should we? We already weakened this in rev. 1.93 Sun Jul 18 17:00:26 2010 UTC, but that weakening was insufficient. Let's take it out completely. Admittedly, there are two places in OpenBSD base where what Kristaps did make the output nicer, in calloc(3) and in fish(6). But both are atypical. There are 18 other places where this revert makes the output nicer, the typical case being: "Mail status is shown as ``No Mail.'' if there is no mail." You do *not* want the EOS spacing after ``No Mail.'' in that sentence. 2013-12-31 19:40 schwarze Changed: mandocdb.c (1.92), "Exp", lines: +6 -34 Yet another regression introduced by Kristaps when he switched from Berkeley DB to SQLite3: In the .In parser, the logic got inverted. The resulting NULL pointer access was found by clang; scan log provided by Ulrich Spoerlein <uqs at FreeBSD>. The best fix is to simply remove the whole, pointless custom handler function for .In and let the framework do its work. Now searching for included header files actually works. While here, remove the similarly pointless custom .St handler, fix the return value of the .Fd handler and disentangle the spaghetti in the .Nm handler. 2013-12-31 18:07 schwarze Changed: man_validate.c (1.87), "Exp", lines: +2 -6 mandocdb.c (1.91), "Exp", lines: +1 -2 term.c (1.215), "Exp", lines: +1 -2 remove assignments that will be overwritten right afterwards, and remove pointless local variables; found in a clang output from Ulrich Spoerlein <uqs at FreeBSD> 2013-12-31 17:47 schwarze Changed: index.sgml (1.166), "Exp", lines: +3 -3 index.sgml (1.154.2.16), "Exp", lines: +3 -3 update the link to the ISC license and note that the pkgsrc port was updated to 1.12.3 2013-12-31 15:17 schwarze Changed: man.7 (1.121), "Exp", lines: +22 -3 Add missing description of .UR/.UE. While here, also add .EX/.EE and .PD to the MACRO SYNTAX table. 2013-12-31 11:28 tag VERSION_1_12_3 2013-12-31 11:28 schwarze Changed: Makefile (1.405), "Exp", lines: +2 -2 NEWS (1.4), "Exp", lines: +29 -1 index.sgml (1.165), "Exp", lines: +54 -28 release 1.12.3 2013-12-31 11:23 schwarze Changed: Makefile (1.395.2.9), "Exp", lines: +2 -2 index.sgml (1.154.2.15), "Exp", lines: +53 -27 release 1.12.3 2013-12-31 03:41 schwarze Changed: apropos.c (1.36), "Exp", lines: +14 -4 manpage.c (1.6), "Exp", lines: +4 -2 mansearch.c (1.12), "Exp", lines: +63 -5 mansearch.h (1.6), "Exp", lines: +4 -1 Experimental feature to let apropos(1) show different keys than .Nd. This really takes us beyond what grep -R /usr/*/man/ can do because now you can search for pages by *one* criterion and then display the contents of *another* macro from those pages, like in $ apropos -O Ox Fa~wchar to get an impression how long wide character handling is available. 2013-12-31 02:42 schwarze Changed: mansearch.c (1.11), "Exp", lines: +41 -31 Split buildnames() out of mansearch(); the latter function is getting too long and unwieldy, but will grow more code soon. No functional change. 2013-12-30 18:44 schwarze Changed: roff.c (1.189), "Exp", lines: +2 -3 Oops, missed one: Remove duplicate const specifier from a call to mandoc_escape(). Found by Thomas Klausner <wiz at NetBSD dot org> using clang. No functional change. 2013-12-30 18:30 schwarze Changed: mandoc.c (1.74), "Exp", lines: +2 -2 mandoc.h (1.112), "Exp", lines: +2 -3 Remove duplicate const specifiers from the declaration of mandoc_escape(). Found by Thomas Klausner <wiz at NetBSD dot org> using clang. No functional change. 2013-12-27 23:41 schwarze Changed: mandocdb.c (1.90), "Exp", lines: +10 -8 Oops, that segfaulted after deleting an mlink from the list. Fix the loop logic in mlinks_undupe(). 2013-12-27 20:35 schwarze Changed: mandocdb.c (1.89), "Exp", lines: +53 -37 Split mlinks_undupe() out of mpages_merge() such that the check for source manuals of the same name can be done for multiple mlinks pointing to the same preformatted mpage. 2013-12-27 18:51 schwarze Changed: apropos.c (1.35), "Exp", lines: +4 -2 manpage.c (1.5), "Exp", lines: +9 -2 mansearch.c (1.10), "Exp", lines: +50 -9 mansearch.h (1.5), "Exp", lines: +3 -2 Change the mansearch() interface to use the mlinks table in the database and return a list of names with sections, used by apropos(1) for display. While here, improve uniformity of the interface by allocating the file name dynamically, just like the names list and the description. 2013-12-27 18:42 schwarze Changed: mandocdb.c (1.88), "Exp", lines: +5 -3 Save the MLINK name into the database, too; apropos(1) will need it to display its results. 2013-12-27 16:40 schwarze Changed: mandocdb.c (1.87), "Exp", lines: +11 -8 Write more than one mlink per mpage to the database. Not yet used by apropos(1). 2013-12-27 16:17 schwarze Changed: mandocdb.c (1.86), "Exp", lines: +1 -24 Allow saving more than one mlink per mpage in the mlinks ohash. We are still only using one of them for now. Actually, we are now using a different one, but the order the mlinks are found is random anyway. 2013-12-27 15:48 schwarze Changed: mandocdb.c (1.85), "Exp", lines: +4 -3 Enable the framework code to allow more than one mlink per mpage. Not used yet. 2013-12-27 15:39 schwarze Changed: mandocdb.c (1.84), "Exp", lines: +66 -69 Clean up the interface of mlink_add(). Consistently use "fsec" and "fform" for info derived from the file name. No functional change. 2013-12-27 14:29 schwarze Changed: mandocdb.c (1.83), "Exp", lines: +37 -77 Another step on the way to clear naming, this time regarding mlinks: * rename global ohash filenames to mlinks * rename ofadd() to mlink_add() * fold fileadd() and inoadd() into mlink_add() * fold filecheck() into mpages_merge() Still no functional change. 2013-12-27 03:06 schwarze Changed: mandocdb.c (1.82), "Exp", lines: +124 -83 Split struct mlink out of struct mpage. Still a 1:1 relation, no functional change yet. 2013-12-27 01:16 schwarze Changed: mandocdb.c (1.81), "Exp", lines: +53 -22 mansearch.c (1.9), "Exp", lines: +3 -3 Add an additional mlinks table to the database, redundant for now, both because it contains nothing but a subset of the data of the existing mpages table and because the relationship of mpage and mlink entries is still 1:1. But all that will eventually change. 2013-12-26 23:35 schwarze Changed: mandocdb.c (1.80), "Exp", lines: +28 -24 Drop the mpages_list, use the existing mpages ohash for iteration. No functional change except that the order of database entries changes, which doesn't matter anyway. 2013-12-26 22:30 schwarze Changed: mandocdb.c (1.79), "Exp", lines: +15 -15 The name "id" is terrible for a struct. Make this more searchable by calling it "inodev". No functional change. 2013-12-26 22:12 schwarze Changed: mandocdb.c (1.78), "Exp", lines: +183 -178 To better support MLINKS, we will have to split the "docs" database table into two tables, on for actual files on disk, one for (often multiple) directory entries pointing to them. That implies splitting struct of into two structs, to be called "mpage" and "mlink", respectively. As a preparation, globally rename "of" and "inos" to "mpage". No functional change. 2013-12-26 19:02 schwarze Changed: mandocdb.c (1.77), "Exp", lines: +5 -2 Stop parsing man(7) input when we found all we were searching for, such that we don't trigger an assertion on a duplicate NAME section. 2013-12-26 17:23 schwarze Changed: mandoc_char.7 (1.56), "Exp", lines: +22 -22 Rework the documentation of Spaces, using the Ossanna/Kernighan/Ritter Heirloom Nroff/Troff User's Manual at the authoritative reference. Part of our text was outright wrong. Also, refrain from advertising the paddable non-breaking space `\~' in the DESCRIPTION, for three reasons: For nroff mode, -Tascii, and fixed width fonts in general, it makes no difference, so keep the discussion simple. Compared to `\ ', '\~' is of questionable portability. And if you want to keep words together, it is also more usual that you don't want padding to intervene either. Finally, drop the `\c' escape sequence (interrupt text processing) which is not a special character but an input processing instruction akin to the \<newline> escape sequence. 2013-12-26 14:39 schwarze Changed: index.sgml (1.164), "Exp", lines: +30 -22 merge from VERSION_1_12 2013-12-26 14:30 schwarze Changed: index.sgml (1.154.2.14), "Exp", lines: +5 -5 update downstream versions 2013-12-26 02:55 schwarze Changed: mandoc.c (1.73), "Exp", lines: +6 -8 I have no idea how it happened that \B, \H, \h, \L, and \l got mapped to ESCAPE_NUMBERED (which is for \N and only for \N), that made no sense at all. Properly remap them to ESCAPE_IGNORE. While here, move \B and \w from the group taking number arguments to the group taking string arguments; right now, that doesn't imply any functional change, but if we ever go ahead and implement a parser for roff(7) numerical expressions, it will suddenly start to matter, and cause confusion. 2013-12-26 02:43 schwarze Changed: roff.7 (1.46), "Exp", lines: +255 -9 The roff language really has two groups of basic building blocks: Requests and escape sequences. Consequently, supplement the REQUEST REFERENCE by an ESCAPE SEQUENCE REFERENCE, such that people no longer need to guess or experiment what mandoc(1) implements, what it parses and ignores, and what it doesn't handle at all. 2013-12-25 22:45 schwarze Changed: mandoc.c (1.72), "Exp", lines: +9 -1 Parse and ignore the roff(7) escape sequences \d (move half line down) und \u (move half line up). Found by bentley@ in some DocBook crap. 2013-12-25 22:00 schwarze Changed: mdoc_man.c (1.57), "Exp", lines: +9 -4 Implement .Fo/.Fa/.Fc indentation and break handling for -Tman. 2013-12-25 21:24 schwarze Changed: mdoc_term.c (1.258), "Exp", lines: +2 -3 Oops, .Fa never breaks the output line in the middle of any of its arguments, not even outside SYNOPSIS mode. Quite surprising as .Fn does break the line in the middle of its arguments outside SYNOPSIS mode, and only doesn't do that in SYNOPSIS mode. Wonders of groff... 2013-12-25 15:12 schwarze Changed: mdoc_term.c (1.257), "Exp", lines: +5 -7 Garbage collect two local variables each used only one single time. 2013-12-25 14:40 schwarze Changed: TODO (1.162), "Exp", lines: +1 -8 mdoc_term.c (1.256), "Exp", lines: +23 -8 In the SYNOPSIS, implement hanging indentation for .Fo and avoid output line breaks inside .Fa arguments. This reduces groff-mandoc differences in OpenBSD base by more than 8%. Patch from Franco Fichtner <franco at lastsummer dot de> (DragonFly). 2013-12-25 14:09 schwarze Changed: mdoc.7 (1.223), "Exp", lines: +5 -3 st.in (1.22), "Exp", lines: +2 -1 Support .St -xsh4.2, the System Interfaces part of the original Single UNIX Specification. As this one appears to be used in the wild and we already have -xpg4.2 and even -xsh5, it makes sense to add this one. Note that calling the original SUS XPG4.2 appears to be more common than calling it SUSv1, so it's ok that we don't have .St -susv1. From Sascha Wildner <saw at online dot de> (DragonFly) via Franco Fichtner. 2013-12-25 00:50 schwarze Changed: man_macro.c (1.79), "Exp", lines: +2 -1 mandoc.c (1.71), "Exp", lines: +4 -4 mdoc_argv.c (1.89), "Exp", lines: +4 -4 roff.c (1.188), "Exp", lines: +2 -2 s/[Nn]ull/NUL/ in comments where appropriate; suggested by Thomas Klausner <wiz @ NetBSD dot org>. 2013-12-25 00:39 schwarze Changed: mdoc_man.c (1.56), "Exp", lines: +11 -1 mdoc_term.c (1.255), "Exp", lines: +3 -1 term.c (1.214), "Exp", lines: +12 -2 term.h (1.97), "Exp", lines: +2 -1 Do not break output lines in .Fn function arguments in SYNOPSIS mode. Following an idea from Franco Fichtner, but implemented more cleanly. This reduces groff-mandoc-differences in OpenBSD base by a fantastic 7.5%. 2013-12-24 23:04 schwarze Changed: mdoc_term.c (1.254), "Exp", lines: +3 -14 term.c (1.213), "Exp", lines: +2 -2 term.h (1.96), "Exp", lines: +8 -9 Delete the unused flag TERMP_IGNDELIM and the empty callback termp_igndelim_pre(). Sort the remaining termp flags. 2013-12-24 22:08 schwarze Changed: mdoc_man.c (1.55), "Exp", lines: +5 -2 Implement SYNOPSIS .Fn indentation for -Tman. 2013-12-24 20:45 schwarze Changed: mdoc_html.c (1.186), "Exp", lines: +2 -2 mdoc_macro.c (1.125), "Exp", lines: +2 -3 mdoc_man.c (1.54), "Exp", lines: +18 -19 mdoc_term.c (1.253), "Exp", lines: +9 -18 It turns out SYNOPSIS mode does not imply .Bk in general, but only within .Nm blocks. Simplify the code accordingly. Triggered by research done by Franco Fichtner. 2013-12-24 19:11 schwarze Changed: mdoc.h (1.125), "Exp", lines: +2 -1 mdoc.c (1.206), "Exp", lines: +2 -1 mdoc_html.c (1.185), "Exp", lines: +4 -8 mdoc_macro.c (1.124), "Exp", lines: +6 -1 mdoc_term.c (1.252), "Exp", lines: +2 -2 tree.c (1.50), "Exp", lines: +6 -2 When deciding whether two consecutive macros are on the same input line, we have to compare the line where the first one *ends* (not where it begins) to the line where the second one starts. This fixes the bug that .Bk allowed output line breaks right after block macros spanning more than one input line, even when the next macro follows on the same line. 2013-12-23 02:20 schwarze Changed: mdoc_term.c (1.251), "Exp", lines: +17 -1 term.c (1.212), "Exp", lines: +15 -4 Implement a long-standing desideratum, hanging indentation for .Fn in SYNOPSIS mode, exploiting the new trailspace feature by deliberately *NOT* using it. 2013-12-22 23:34 schwarze Changed: man_term.c (1.139), "Exp", lines: +13 -5 mdoc_term.c (1.250), "Exp", lines: +31 -18 term.c (1.211), "Exp", lines: +6 -8 term.h (1.95), "Exp", lines: +3 -2 Polishing the worms in my favourite can, term_flushln(). The TERMP_TWOSPACE flag i introduced in August 2009 was idiosyncratic and served only a very narrow purpose. Replace it by a more intuitive and more general termp attribute "trailspace", to be used together with TERMP_NOBREAK, to request a minimum amount of whitespace at the end of the current column. Adapt all code to the new interface. No functional change intended; code reviews to confirm that are welcome *eg*. 2013-12-22 14:06 schwarze Changed: mdoc_argv.c (1.88), "Exp", lines: +2 -2 Fix end-of-sentence spacing after the DragonFly text production macro. Patch from Franco Fichtner <franco at lastsummer dot de>. 2013-12-22 13:25 schwarze Changed: man_macro.c (1.78), "Exp", lines: +10 -1 Implement end-of-sentence spacing at the end of man(7) macro lines. Patch from Franco Fichtner <franco at lastsummer dot de> (DragonFly). 2013-12-22 13:18 schwarze Changed: mandoc_char.7 (1.55), "Exp", lines: +5 -5 Document the alternative syntax \C'uXXXX' for Unicode characters. Forgotten when committing mandoc.c rev. 1.70. 2013-12-15 23:56 schwarze Changed: TODO (1.161), "Exp", lines: +1 -6 mdoc_argv.c (1.87), "Exp", lines: +13 -1 In quoted macro arguments, double quotes can be quoted by doubling them. For a long time, we handle this in roff(7) and man(7) macros. Now add correct handling for the mdoc(7) case, too. Closely based on a patch by Tsugutomo dot ENAMI at jp dot sony dot com, see http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=48438 received via Thomas Klausner (wiz@), slightly tweaked by me. 2013-12-15 21:30 schwarze Changed: TODO (1.160), "Exp", lines: +10 -1 bentley@ looked at sbcl(1) and found new tasks for us... 2013-12-15 21:23 schwarze Changed: libmandoc.h (1.35), "Exp", lines: +2 -2 mdoc_validate.c (1.198), "Exp", lines: +3 -3 roff.7 (1.45), "Exp", lines: +9 -6 roff.c (1.187), "Exp", lines: +18 -5 The "value" argument to the roff(7) .nr requests ends right before the first non-digit character. While here, implement and document an optional sign, requesting increment or decrement, as documented in the Ossanna/Kernighan/Ritter troff manual and supported by groff. Reported by bentley@ on discuss@. 2013-11-21 01:53 schwarze Changed: mandocdb.c (1.49.2.10), "Exp", lines: +2 -2 My audit of mandoc revealed one missing (unsigned char) cast in a tolower() argument containing arbitrary char data. Thanks to deraadt@ for triggering the audit. 2013-11-21 01:49 schwarze Changed: manpath.c (1.12), "Exp", lines: +2 -2 My audit of mandoc revealed one missing (unsigned char) cast in an isspace() argument containing arbitrary char data. Thanks to deraadt@ for triggering the audit. 2013-11-11 00:37 schwarze Changed: man_macro.c (1.77), "Exp", lines: +7 -5 man_term.c (1.138), "Exp", lines: +3 -1 In the parser, when closing an explicit block that is not open, close below-subsection implicit scopes that may still be open. In the formatter, make sure indentation is reset when leaving a scope, not only when entering the next one. Improves the formatting of gpg(1); issue reported by jca on ports. 2013-11-10 22:54 schwarze Changed: man.c (1.121), "Exp", lines: +12 -6 Ignore blank lines right after .SH and .SS. Improves the rendering of gpg(1); issue reported by jca on ports. 2013-11-10 21:34 schwarze Changed: mandoc.c (1.70), "Exp", lines: +5 -2 Support the alternative syntax \C'uXXXX' for Unicode characters. It is already documented in the Heirloom troff manual, and groff handles it as well. Bug reported by Bjarni Ingi Gislason <bjarniig at rhi dot hi dot is> on <bug-groff at gnu dot org>. Well, admittedly, that bug was reported against groff, but mandoc was even more broken than groff with respect to this syntax... 2013-11-10 14:32 schwarze Changed: mandoc_char.7 (1.54), "Exp", lines: +8 -3 clarify that \[uXXXX] wants uppercase hex digits 2013-11-10 12:28 schwarze Changed: TODO (1.159), "Exp", lines: +7 -1 missing features: line length and italic correction 2013-11-07 22:09 schwarze Changed: index.sgml (1.154.2.13), "Exp", lines: +11 -12 make text shorter and clearer; from kristaps@; tweaked by me 2013-11-07 21:57 schwarze Changed: index.sgml (1.154.2.12), "Exp", lines: +18 -10 Mention that mandoc is also an OpenBSD project, agreed by Kristaps. Remove text about groff as suggested by Kristaps; explaining that topic properly would get too long. 2013-11-02 20:39 schwarze Changed: mdoc.7 (1.222), "Exp", lines: +30 -9 While answering a question asked by espie@, i noticed that .Fd is not completely obsolete, but still somewhat useful for listing preprocessor directives, in particular in the SYNOPSIS. 2013-10-27 17:01 schwarze Changed: mandocdb.c (1.76), "Exp", lines: +12 -11 The man(7) language has no syntax to specify architectures, but it can still be used to write architecture-specific manuals, of course. So just derive the architecture a man(7) manual belongs to from the directory where it is located and refrain from warning about each and every architecture-specific man(7) manual found. While here, delete some trailing whitespace in the neighbourhood. 2013-10-27 16:41 schwarze Changed: mandocdb.c (1.75), "Exp", lines: +2 -2 The code in ofmerge() only tried the source parsers if at least one of the path (/man1/ .. /man9/) or the file name suffix (*.1 .. *.9) indicated a source manual. That missed source manuals with unusual names in unusual locations. Instead, as the existing comment right above already suggests, try the source parsers unless both the path and the file name suffix unambiguously indicate a preformatted manual (/cat*/*.0). This change is not expensive in practice because no real-world system will have large numbers of preformatted pages outside /cat*/*.0. The only way to make information loss even less probable would be to try the source parsers on all files, even /cat*/*.0, which wouldn't buy us much because no real-world system will call source manuals /cat*/*.0, but it will be expensive in practice, because many real-world systems have large numbers of preformatted pages called /cat*/*.0. 2013-10-27 16:09 schwarze Changed: mandocdb.c (1.74), "Exp", lines: +6 -6 delete duplicate NULL check and polish style; no functional change 2013-10-22 20:38 schwarze Changed: roff.7 (1.44), "Exp", lines: +5 -2 roff.c (1.186), "Exp", lines: +3 -1 Parse and ignore .hw (hyphenation points in words); this is safe because we don't do hyphenation anyway, so there is no point in throwing an ERROR when encountering .hw. Real-world usage of the request found by naddy@ in sysutils/dwdiff(1). 2013-10-21 23:47 schwarze Changed: libmdoc.h (1.82), "Exp", lines: +7 -3 mdoc.c (1.205), "Exp", lines: +19 -2 mdoc_macro.c (1.123), "Exp", lines: +140 -99 mdoc_validate.c (1.197), "Exp", lines: +9 -3 There are three kinds of input lines: text lines, macros taking positional arguments (like Dt Fn Xr) and macros taking text as arguments (like Nd Sh Em %T An). In the past, even the latter put each word of their arguments into its own MDOC_TEXT node; instead, concatenate arguments unless delimiters, keeps or spacing mode prevent that. Regarding mandoc(1), this is internal refactoring, no output change intended. Regarding mandocdb(8), this fixes yet another regression introduced when switching from DB to SQLite: The ability to search for strings crossing word boundaries was lost and is hereby restored. At the same time, database sizes and build times are both reduced by a bit more than 5% each. 2013-10-20 00:03 schwarze Changed: mansearch.c (1.8), "Exp", lines: +72 -29 Fix another regression introduced when switching from DB to SQLite: The ~ operator has to do regular expression search, not globbing. 2013-10-19 20:43 schwarze Changed: mansearch.c (1.7), "Exp", lines: +34 -6 Fix a regression introduced when switching from DB to SQLite: The = operator has to do substring search, not word search. 2013-10-18 23:07 schwarze Changed: mandocdb.c (1.73), "Exp", lines: +2 -2 Fix an assertion in dbindex(): Null strings are never entered into the string table. Fortunately, they never need UTF-8 translation either. 2013-10-18 21:10 schwarze Changed: mandocdb.c (1.72), "Exp", lines: +2 -2 Manuals to be checked with "mandocdb -t" need not be in the current directory or one of its subdirectories. 2013-10-17 20:54 schwarze Changed: man.c (1.120), "Exp", lines: +3 -2 man.h (1.62), "Exp", lines: +3 -1 man_html.c (1.90), "Exp", lines: +29 -1 man_macro.c (1.76), "Exp", lines: +6 -1 man_term.c (1.137), "Exp", lines: +31 -1 man_validate.c (1.86), "Exp", lines: +17 -2 Implement the .UR/.UE block (uniform resource identifier) introduced in the man-ext macros by Eric S. Raymond, enabled by default in groff_man(7). Usual disclaimer: You don't write new man(7) code, so you are not going to use these, either. Improves e.g. the bzr(1) and etherape(1) manuals. Thanks to naddy@ for bringing these to my attention. 2013-10-14 01:43 schwarze Changed: roff.7 (1.43), "Exp", lines: +8 -2 roff.c (1.185), "Exp", lines: +3 -1 Parse and ignore the .fam (font family) request. Fixes irunner(1) in devel/ipython and uim-xim(1) in inputmethods/uim. Thanks to naddy@ for bringing these to my attention. 2013-10-13 18:34 schwarze Changed: index.sgml (1.163), "Exp", lines: +31 -4 merge from VERSION_1_12: new section about mandoc history, with links 2013-10-13 18:32 schwarze Changed: index.sgml (1.154.2.11), "Exp", lines: +31 -4 new section about mandoc history, with links 2013-10-13 16:06 schwarze Changed: NEWS (1.3), "Exp", lines: +25 -14 mention the three unreleased versions since 1.10.3 2013-10-13 15:24 schwarze Changed: lib.in (1.17), "Exp", lines: +2 -1 add libppath; Thomas Klausner, NetBSD rev. 1.4, Aug 29, 2011 2013-10-13 14:45 schwarze Changed: lib.in (1.16), "Exp", lines: +4 -3 add libefi and simplify some names from FreeBSD ports SVN rev. 293734, Ulrich Spoerlein March 24, 2012 in case of conflicts with NetBSD, i keep the simpler NetBSD names 2013-10-13 03:07 schwarze Changed: st.in (1.21), "Exp", lines: +3 -3 sync SUSv2/SUSv3 entries with groff reduces groff-mandoc-differences for several pthread_*(3) manuals noticed by Franco Fichtner <franco at lastsummer dot de> dragonfly.git/commitdiff/370c546b87777b40b5fc862491555ef71b4ee130 2013-10-13 02:54 schwarze Changed: lib.in (1.15), "Exp", lines: +14 -1 more DragonFly libraries; Franco Fichtner <franco at lastsummer dot de> dragonfly.git/commit/107cb94cae2c24ce3f6851ce0ed24b80d64e3ec8 2013-10-11 00:06 schwarze Changed: catman.c (1.11.2.2), "Exp", lines: +2 -2 cgi.c (1.46), "Exp", lines: +36 -5 Thomas Klausner <wiz at NetBSD dot org> finally succeeded to build on SmartOS and sent these additional patches, thanks! 2013-10-10 23:43 schwarze Changed: apropos_db.c (1.32.2.3), "Exp", lines: +11 -6 config.h.post (1.6.2.3), "Exp", lines: +3 -0 mandocdb.c (1.49.2.9), "Exp", lines: +11 -9 On __sun, use <sys/byteorder.h>, BE_64(x), and <db_185.h>. Thanks to Thomas Klausner <wiz at NetBSD dot org> for providing failing SmartOS build logs such that i could write this patch without access to a __sun system and for confirming that these patches help. 2013-10-10 05:20 schwarze Changed: index.sgml (1.162), "Exp", lines: +21 -6 merge from VERSION_1_12: link supplementary information on mandoc and Alpine Linux port was upgraded to 1.12.2 2013-10-10 05:18 schwarze Changed: index.sgml (1.154.2.10), "Exp", lines: +20 -5 link supplementary information on mandoc and Alpine Linux port was upgraded to 1.12.2 2013-10-07 22:22 schwarze Changed: mdoc_man.c (1.53), "Exp", lines: +5 -5 Printf size_t vars with %zu, not %ld; from Antonio Huete Jimenez <tuxillo at quantumachine dot net> via Franco Fichtner (both DragonFly). 2013-10-06 23:20 schwarze Changed: Makefile (1.404), "Exp", lines: +2 -1 Put VERSION into config.h. This makes life easier for downstream maintainers having more than one Makefile, for example DragonFly and FreeBSD. Suggested by Franco Fichtner <franco at lastsummer dot de>. 2013-10-06 23:17 schwarze Changed: Makefile (1.395.2.8), "Exp", lines: +2 -1 Put VERSION into config.h. This makes life easier for downstream maintainers having more than one Makefile, for example DragonFly and FreeBSD. Suggested by Franco Fichtner <franco at lastsummer dot de>. 2013-10-06 22:46 schwarze Changed: mdoc_validate.c (1.196), "Exp", lines: +62 -20 We don't do hyphenation, but we allow breaking the line at hyphens that are already there in the middle of words. So far, we only allowed this on text lines. Now it turns out some macros allow this for their arguments, too, in particular .Nd and most of the .%? citation macros. Issue found by Franco Fichtner <franco at lastsummer dot de> while doing systematic groff-mandoc comparisons in the DragonFly base system, THANKS! While here, garbage collect two empty prevalidator function pointer lists and sort a couple of function declarations. 2013-10-06 17:34 schwarze Changed: index.sgml (1.161), "Exp", lines: +2 -2 Franco Fichtner moved DragonFly to 1.12.2. 2013-10-06 17:31 schwarze Changed: index.sgml (1.154.2.9), "Exp", lines: +3 -3 Franco Fichtner moved DragonFly to 1.12.2. While here, fix one more instance of the release date. 2013-10-06 17:01 schwarze Changed: mandoc.3 (1.22), "Exp", lines: +3 -3 mdoc.7 (1.221), "Exp", lines: +3 -3 The .Lb arguments wants a "lib" prefix; from Sascha Wildner via Franco Fichtner (DragonFly); also fixing the same in the mdoc(7) example while i'm about it. 2013-10-06 13:32 schwarze Changed: TODO (1.158), "Exp", lines: +2 -8 mdoc_validate.c (1.195), "Exp", lines: +60 -21 If there is random stuff inside a .Bl block body before the first .It, do not throw a FATAL error and do not die, but just throw a WARNING and move the stuff out of the .Bl block. This bug felt completely 2008-ish; meanwhile, such bugs from the Kristaps-doesnt-like-syntax-errors-so-lets-just-give-up--Era are becoming rare, but this was one of the last survivors. Thanks to bentley@ for reminding me to finally fix this. 2013-10-05 22:25 schwarze Changed: roff.c (1.184), "Exp", lines: +92 -4 Support simple numerical conditions. Original code from Christos Zoulas, NetBSD rev. 1.11-1.13, April 3, 2013. I tweaked the code as follows: * In roff_getnum(), don't skip a minus that isn't followed by a digit. * In roff_getop(), do not handle "!=", groff doesn't support it either. * In roff_evalcond(), treat negative numbers as false, like groff. Besides, make the interfaces of roff_getnum() and roff_getop() more similar to each other and simplify parts of the code a bit. 2013-10-05 22:21 schwarze Changed: roff.c (1.183), "Exp", lines: +3 -3 ROFFRULE_ALLOW = 0, ROFFRULE_DENY = 1 was confusing, so exchange the two entries in enum roffrule; no functional change; from Christos Zoulas, NetBSD rev. 1.11, April 4, 2013. 2013-10-05 22:19 schwarze Changed: roff.c (1.182), "Exp", lines: +6 -11 Avoid code duplication in roff_parseln() as suggested by Christos Zoulas in NetBSD rev. 1.11; i'm even going a step further and making this yet a bit shorter. No functional change. 2013-10-05 22:15 schwarze Changed: libmandoc.h (1.34), "Exp", lines: +3 -3 roff.c (1.181), "Exp", lines: +53 -32 Expand references to number registers in exactly the same way as references to user-defined strings. While here, make number registers signed int, like in groff. Inspired by NetBSD roff.c rev. 1.8 and read.c rev. 1.7 written by Christos Zoulas on March 21, 2013, but implemented in a completely different way, without hacking into read.c, where this functionality really doesn't belong. 2013-10-05 22:08 schwarze Changed: libmandoc.h (1.33), "Exp", lines: +4 -9 mdoc.c (1.204), "Exp", lines: +5 -7 mdoc_validate.c (1.194), "Exp", lines: +7 -6 roff.c (1.180), "Exp", lines: +57 -28 Support setting arbitrary roff(7) number registers, preserving read support for the ".nr nS" SYNOPSIS state register. Inspired by NetBSD roff.c rev. 1.18 (Christos Zoulas, March 21, 2013), but implemented differently. I don't want to have yet another different implementation of a hash table in mandoc - it would be the second one in roff.c alone and the fifth one in mandoc grand total. Instead, i designed and implemented roff_setreg() and roff_getreg() to be similar to roff_setstrn() and roff_getstrn(). Once we feel the need to optimize, we can introduce one common hash table implementation for everything in mandoc. 2013-10-05 21:51 schwarze Changed: lib.in (1.14), "Exp", lines: +10 -4 sync with NetBSD 2013-10-05 20:43 schwarze Changed: Makefile (1.403), "Exp", lines: +7 -7 merge from VERSION_1_12: do not complain about unused variables in test-*.c 2013-10-05 20:30 schwarze Changed: Makefile (1.395.2.7), "Exp", lines: +7 -7 apropos_db.c (1.32.2.2), "Exp", lines: +2 -3 catman.c (1.11.2.1), "Exp", lines: +1 -4 mandoc.3 (1.21), "Exp", lines: +4 -4 mandoc.c (1.69), "Exp", lines: +2 -2 mandoc.h (1.111), "Exp", lines: +3 -2 mandocdb.c (1.49.2.8), "Exp", lines: +4 -2 out.c (1.46), "Exp", lines: +1 -4 roff.c (1.179), "Exp", lines: +2 -2 Cleanup suggested by gcc-4.8.1, following hints by Christos Zoulas: - avoid bad qualifier casting in roff.c, roff_parsetext() by changing the mandoc_escape arguments to "const char const **" - avoid bad qualifier casting in mandocdb.c, index_merge() - do not complain about unused variables in test-*.c - garbage collect a few unused variables elsewhere 2013-10-05 20:09 schwarze Changed: Makefile (1.402), "Exp", lines: +1 -1 index.sgml (1.160), "Exp", lines: +14 -5 Merge from VERSION_1_12, in particular release date, pkgsrc port version, link to NEWS file, link to Alpine Linux, and fix one FreeBSD link. 2013-10-05 16:11 schwarze Changed: index.sgml (1.154.2.8), "Exp", lines: +4 -4 Thomas Klausner <wiz at netbsd dot org> already update pkgsrc. While here, fix the FreeBSD link and the 1.12.1 release date. 2013-10-05 14:05 tag VERSION_1_12_2 2013-10-05 14:05 schwarze Changed: index.sgml (1.154.2.7), "Exp", lines: +4 -1 Add missing link to the NEWS file. 2013-10-05 13:15 schwarze Changed: Makefile (1.395.2.6), "Exp", lines: +2 -2 NEWS (1.2), "Exp", lines: +3 -2 index.sgml (1.154.2.6), "Exp", lines: +8 -2 Release version 1.12.2. This is no longer beta. Sneak in a downstream link to Alpine Linux. 2013-10-05 01:25 schwarze Changed: apropos.1 (1.16.2.3), "Exp", lines: +4 -4 whatis.1 (1.7.2.2), "Exp", lines: +4 -4 whatis.{db,index} -> mandoc.{db,index}; from kristaps@ 2013-10-03 00:46 schwarze Changed: config.h.post (1.6.2.2), "Exp", lines: +7 -1 Byte-order functions for Mac OS X. Same patch sent in by Franco Fichtner and Kristaps Dzonsons. Tested by Franco Fichtner <franco at lastsummer dot de>. 2013-10-02 21:03 schwarze Changed: apropos_db.c (1.32.2.1), "Exp", lines: +2 -1 mandocdb.c (1.49.2.7), "Exp", lines: +2 -1 test-betoh64.c (1.1.2.2), "Exp", lines: +2 -0 DragonFly needs explicit #include <sys/endian.h> to use be64toh(), while most other systems include that indirectly via <sys/types.h>. Reported by Franco Fichtner <franco at lastsummer dot de>. 2013-10-02 06:45 schwarze Changed: index.sgml (1.159), "Exp", lines: +100 -20 Merge from branch VERSION_1_12: - mention that groff is GPL version 3 - link the new tbl.3.html - list FreeBSD base version of mandoc - document downstream versions - copy the version 1.12.2 News 2013-10-02 06:44 schwarze Changed: Makefile (1.401), "Exp", lines: +17 -9 Merge from branch VERSION_1_12: - add the new SCRS files NEWS and gmdiff - add tbl.3 to SRCS, INDEX_MANS, and install - bring back the SCRS files apropos.{c,1} that somehow got lost - bring back the INDEX_MANS apropos.1.html that also got lost - update VERSION, VDATE, and OSNAME - improve comment regarding STATIC 2013-10-01 20:56 schwarze Changed: apropos.1 (1.22), "Exp", lines: +3 -3 mandocdb.8 (1.20), "Exp", lines: +39 -7 Merge the relevant parts from the VERSION_1_12 branch: - change mandocdb.db to mandoc.db - add HISTORY to mandocdb(8) 2013-10-01 00:55 schwarze Changed: Makefile (1.395.2.5), "Exp", lines: +3 -2 include the NEWS file into the tarball 2013-10-01 00:52 schwarze Changed: mandocdb.c (1.49.2.6), "Exp", lines: +18 -2 Fix build on Solaris. Initial version for SmartOS by ONODERA Ryo <ryoon at netbsd dot org>. Generalized for Solaris by Jonathan Perkin <jperkin at netbsd dot org>. Received via Thomas Klausner <wiz at netbsd dot org>. Style cleanup by myself. 2013-10-01 00:24 schwarze Added: NEWS (1.1) New file suggested by Thomas Klausner <wiz at netbsd dot org>. 2013-09-29 23:28 schwarze Changed: Makefile (1.395.2.4), "Exp", lines: +11 -5 config.h.post (1.6.2.1), "Exp", lines: +3 -0 test-betoh64.c (1.1.2.1), "Exp", lines: +16 -0 Final tweaks for the release candidate: * Test for betoh64(), otherwise use be64toh(). * In the Makefile, improve the explanation of STATIC. * Update VERSION and VDATE. 2013-09-28 12:31 schwarze Changed: index.sgml (1.154.2.5), "Exp", lines: +10 -3 Improve FreeBSD links; triggered by and with help from Ulrich Spoerlein <uqs at freebsd dot org>. 2013-09-27 21:12 schwarze Changed: TODO (1.157), "Exp", lines: +4 -1 Maybe we can easily improve -width parsing. 2013-09-23 20:20 schwarze Changed: index.sgml (1.154.2.4), "Exp", lines: +28 -26 Polish the web page for the 1.12.2 release: * Manuals: Alphabetically sort "eqn" before "man". * Downstream: List explicit downstream versions. Yes, keeping this up to date causes minimal work, but i consider it worth the effort. * List all three places DragonFly scattered its mandoc build system to. * News: Polish the wording. * Note that groff is GPLv3, and remove the wrong claim that it's all GPL. * Assert my Copyright. 2013-09-22 23:21 schwarze Changed: TODO (1.156), "Exp", lines: +8 -2 Throwing FATAL MANDOCERR_SYNTCHILD on non-.It children of .Bl feels so 2008-ish, one of the last remnants of the Kristaps-doesnt-like-syntax-errors-so-lets-just-give-up--Era. 2013-09-22 11:48 schwarze Changed: TODO (1.155), "Exp", lines: +6 -1 DocBook abuses \h - for no good reason, but maybe we should eventually try to deal with it. 2013-09-18 19:07 schwarze Changed: index.sgml (1.154.2.3), "Exp", lines: +45 -1 What's new in 1.12.2. 2013-09-18 16:20 schwarze Changed: Makefile (1.395.2.3), "Exp", lines: +7 -4 index.sgml (1.154.2.2), "Exp", lines: +7 -1 Update VERSION, VDATE and CFLAGS for the upcoming 1.12.2 release. Add tbl.3 and gmdiff to the tarball. Add tbl.3.html to the website. 2013-09-18 02:24 schwarze Changed: Makefile (1.395.2.2), "Exp", lines: +1 -77 Merge rev. 1.400: Stop producing xhtml/pdf/etc for webpage. 2013-09-18 02:19 schwarze Changed: Makefile (1.395.2.1), "Exp", lines: +26 -172 Partial merge of rev. 1.396: Remove lint support and Windows binaries. 2013-09-18 01:55 schwarze Changed: index.sgml (1.154.2.1), "Exp", lines: +1 -61 Merge rev. 1.158: Stop producing xhtml/pdf/etc for webpage. 2013-09-18 01:04 schwarze Changed: mandocdb.8 (1.17.2.1), "Exp", lines: +41 -10 Merge from OpenBSD: 1) Revert filenames back to mandoc.{db,index} 2) Improve AUTHORS and HISTORY 2013-09-18 00:54 schwarze Changed: mandocdb.c (1.49.2.5), "Exp", lines: +2 -2 mandocdb.h (1.6.2.1), "Exp", lines: +3 -3 Fix typo in filenames: mandocdb.{db,index} -> mandoc.{db,index} 2013-09-17 23:23 schwarze Changed: apropos.c (1.27.2.1), "Exp", lines: +15 -24 Merge OpenBSD revision 1.17: Without arguments, show the usage line and EXIT_FAILURE. Resolve some gratuitious differences (order, parantheses, white space, etc). 2013-09-17 23:12 schwarze Changed: mandocdb.c (1.49.2.4), "Exp", lines: +5 -5 Merge OpenBSD rev. 1.43: Kristaps changed the size member of struct manpaths from int to size_t. No functional change. 2013-09-17 23:07 schwarze Changed: mandocdb.c (1.49.2.3), "Exp", lines: +52 -13 Merge OpenBSD rev. 1.34. Do not truncate the production database when starting to build a new one. Suggested by deraadt@. 2013-09-17 22:48 schwarze Changed: mandocdb.c (1.49.2.2), "Exp", lines: +137 -92 merge OpenBSD rev. 1.41: backout non-portable code 2013-09-17 21:32 schwarze Changed: mandocdb.c (1.49.2.1), "Exp", lines: +34 -34 Similar to rev. 1.58: Consistently use the PATH_MAX since it is specified by POSIX. 2013-09-17 20:54 schwarze Changed: whatis.1 (1.7.2.1), "Exp", lines: +8 -9 1) Revert the argument names in the SYNOPSIS back to the usual ones. 2) For citing the names and email addresses of authors, consistently use the style ".An name Aq Mt email". 2013-09-17 20:42 schwarze Changed: apropos.1 (1.16.2.2), "Exp", lines: +3 -4 Merge rev. 1.21: For citing the names and email addresses of authors, consistently use the style ".An name Aq Mt email". 2013-09-17 20:39 schwarze Changed: apropos.1 (1.16.2.1), "Exp", lines: +6 -6 Merge rev. 1.20: Revert the argument names in the SYNOPSIS back to the usual ones. 2013-09-16 22:58 schwarze Changed: man.7 (1.120), "Exp", lines: +4 -3 use the .Bx macro; from Jan Stary via jmc@ 2013-09-16 22:54 schwarze Changed: mandoc.3 (1.20), "Exp", lines: +3 -4 two improvements in the SYNOPSIS; from Sascha Wildner <swildner at gmail dot com> (DragonFly) 2013-09-16 22:39 schwarze Changed: tbl.7 (1.18), "Exp", lines: +2 -9 Drop .Ud remark, it has started to slowly turn into a lie. 2013-09-16 22:12 schwarze Changed: arch.in (1.14), "Exp", lines: +2 -2 Beagle has been replaced by armv7; from patrick@. 2013-09-16 00:25 schwarze Changed: mandoc.h (1.110), "Exp", lines: +2 -2 mdoc_validate.c (1.193), "Exp", lines: +3 -2 read.c (1.39), "Exp", lines: +2 -2 One of the WARNING messages has to use the word "section" twice in two different meanings, that cannot be helped. But we can make this less confusing by stating t