=================================================================== RCS file: /cvs/mandoc/TODO,v retrieving revision 1.240 retrieving revision 1.310 diff -u -p -r1.240 -r1.310 --- mandoc/TODO 2017/07/19 21:48:37 1.240 +++ mandoc/TODO 2021/03/28 15:33:34 1.310 @@ -1,6 +1,6 @@ ************************************************************************ * Official mandoc TODO. -* $Id: TODO,v 1.240 2017/07/19 21:48:37 schwarze Exp $ +* $Id: TODO,v 1.310 2021/03/28 15:33:34 schwarze Exp $ ************************************************************************ Many issues are annotated for difficulty as follows: @@ -33,6 +33,21 @@ Obviously, as the issues have not been solved yet, the are mere guesses, and some may be wrong. ************************************************************************ +* assertion failures +************************************************************************ + +- .if n .ce in the middle of .TS data + afl case f1/id:000103,sig:06,src:009024+009105,op:splice,rep:2 (jes@) + While roff_parseln() prevents .ce and similar requests in the middle + of a tbl, the guard is no longer effective when the .ce is wrapped + in a roff block, for example a conditional. The resulting assertion + has never been seen in any real-world manual page. + This is too dangerous to fix before release because it requires + reorganizing the very delicate internals of roff_parseln(), + which risks causing more severe bugs. + loc * exist *** algo *** size * imp * + +************************************************************************ * missing features ************************************************************************ @@ -52,47 +67,66 @@ are mere guesses, and some may be wrong. found by naddy@ in xloadimage(1) loc ** exist *** algo * size * imp * -- .nr third argument (auto-increment step size, requires \n+) - found by bentley@ in sbcl(1) Mon, 9 Dec 2013 18:36:57 -0700 - loc * exist * algo * size * imp ** - - .ns (no-space mode) occurs in xine-config(1) when implementing this, also let .TH set it reported by brad@ Sat, 15 Jan 2011 15:45:23 -0500 loc *** exist *** algo *** size ** imp * -- .while and .shift - found by jca@ in ratpoison(1) Sun, 30 Jun 2013 12:01:09 +0200 - loc * exist ** algo ** size ** imp ** - -- \n+ and \n- numerical register increment and decrement - found by bentley@ in sbcl(1) Mon, 9 Dec 2013 18:36:57 -0700 - loc * exist * algo * size * imp ** - - \w'' improve width measurements would not be very useful without an expression parser, see below needed for Tcl_NewStringObj(3) via wiz@ Wed, 5 Mar 2014 22:27:43 +0100 loc ** exist *** algo *** size * imp *** -- \\ in high-level macro arguments - Currently, \\ is expanded in two situations: - 1) macro and string definition (roff.c setstrn()) - 2) macro argument parsing (mandoc.c mandoc_getarg()) - For user defined macros, the second happens in time because of ROFF_REPARSE. - But for standard high-level macros, it only happens after entering the - high level parsers, which is too late because the code doesn't get - back to roff.c roff_res() from that point. Because this requires - distinguishing requests, user-defined macros and standard macros - on the roff_res() level, it is hard to solve without the parser reorg. - Found by naddy@ in devel/cutils cobfusc(1) Mon, 16 Feb 2015 19:10:52 +0100 - loc *** exist *** algo *** size ** imp * +- .als only works for macros in mandoc, not for user-defined strings. + Also, the "val" field in struct roffkv would have to be replaced + with a pointer to a reference-counted wrapper, and an alias + would have to point to the same wrapper as the original. + .als to undefined does nothing; the alias is not created. + .rm'ing the original leaves the alias to point to the old value. + .de .als .de changes both, but + .de .als .rm .de only changes the new value, not the alias. + Found in groffer(1) version 1.19 + Jan Stary 20 Apr 2019 20:16:54 +0200 + loc * exist ** algo ** size ** imp * -- using undefined strings or macros defines them to be empty - wl@ Mon, 14 Nov 2011 14:37:01 +0000 - loc * exist * algo * size * imp * +- roff string condition comparisons fail when vars contain quotes: + .ds s ' + .if '\*s'' \&... + hard to fix because of the basic architecture (string replacement + happens before roff(7) syntax parsing) + Found in groffer(1) version 1.19 + Jan Stary 20 Apr 2019 20:16:54 +0200 + loc * exist *** algo *** size ** imp * +- mandoc replaces all ASCII control characters except tab and line feed + with '?' during input. It would be better to replace them with + Unicode escapes in preconv_encode() or somewhere in the vicinity, + such that the already existing better replacement strings show + up in the output. Emulating groff is not desirable: groff replaces + 0x00, 0x0b, and 0x0d to 0x1f with the empty string (bad because + that's easy to overlook for the document author), 0x01 with '.' + (very confusing), and passes through 0x02 to 0x08, 0x0c, and 0x7f + raw (bad because that is insecure output). Remember that 0x07 may + need special handling because it is sometimes used for certain + delimiters, so it may need handling *after* roff.c rather than before. + reminded by John Gardner 16 Jun 2020 14:26:28 +1000 + Actually, more ASCII control characters than just 0x07 may need + later handling because they can for example be used in macro names. + So they may need handling after roff(7) processing. + pointed out by John Gardner 23 Jun 2020 18:28:08 +1000 + more info from John Gardner 29 Jun 2020 19:54:04 +1000 + loc ** exist ** algo ** size ** imp * + +- many missing features used in old groff_char(7), + some can possibly be supported + kamil at netbsd 12 Nov 2020 17:27:09 +0100 + reply + --- missing mdoc features ---------------------------------------------- +- .Sh and .Ss should be parsed and partially callable, see groff_mdoc(7) + reed at reedmedia dot net Sat, 21 Dec 2019 17:13:07 -0600 + loc ** exist ** algo ** size ** imp * + - .Bl -column .Xo support is missing ultimate goal: restore .Xr and .Dv to @@ -106,13 +140,6 @@ are mere guesses, and some may be wrong. from jmc@ Wed, 14 Jul 2010 18:10:32 +0100 loc * exist *** algo *** size ** imp ** -- .Bd -centered implies -filled, not -unfilled, which is not - easy to implement; it requires code similar to .ce, which - we don't have either. - Besides, groff has bug causing text right *before* .Bd -centered - to be centered as well. - loc *** exist *** algo ** size ** imp ** (parser reorg would help) - - .Bd -filled should not be the same as .Bd -ragged, but align both the left and right margin. In groff, it is implemented in terms of .ad b, which we don't have either. Found in cksum(1). @@ -146,10 +173,6 @@ are mere guesses, and some may be wrong. is not safe, e.g. `.Bl -column .It Pf a b .' gives "ab." but should give "ab ." -- check whether it is correct that `D1' uses INDENT+1; - does it need its own constant? - loc * exist ** algo ** size * imp ** - - prohibit `Nm' from having non-text HEAD children (e.g., NetBSD mDNSShared/dns-sd.1) (mdoc_html.c and mdoc_term.c `Nm' handlers can be slightly simplified) @@ -170,12 +193,28 @@ are mere guesses, and some may be wrong. uqs@ Thu, 2 Jun 2011 11:33:35 +0200 loc * exist ** algo *** size * imp ** +--- missing man features ----------------------------------------------- + +- MANWIDTH + Markus Waldeck 9 Jun 2015 05:49:56 +0200 + Laura Morales 26 Apr 2018 08:15:55 +0200 + Kamil Rytarowski 13 Nov 2020 00:19:36 +0100 + patch from Kamil 13 Nov 2020 22:37:07 +0100 + loc * exist * algo * size * imp * + +- groff_www(7) .MTO and .URL + These macros were used by the GNU grep(1) man page. + The groff_www(7) manual page itself uses them, too. + We should probably *not* add them to mandoc. + Just mentioning this here to keep track of the abuse. + Laura Morales 20 Apr 2018 07:33:02 +0200 + loc ** exist * algo * size ** imp * + --- missing tbl features ----------------------------------------------- -- the "s" layout column specifier is used for placement of data - into columns, but ignored during column width calculations - synaptics(4) found by tedu@ Mon, 17 Aug 2015 21:17:42 -0400 - loc * exist ** algo *** size * imp ** +- vertical centering in cells vertically spanned with ^ + pali dot rohar at gmail dot com 16 Jul 2018 13:03:35 +0200 + loc * exist *** algo *** size ** imp * - support mdoc(7) and man(7) macros inside tbl(7) code; probably requires the parser reorg and letting tbl(7) @@ -184,23 +223,24 @@ are mere guesses, and some may be wrong. loc *** exist ** algo *** size ** imp *** - look at the POSIX manuals in the books/man-pages-posix port, - they use some unsupported tbl(7) features. + they use some unsupported tbl(7) features, mostly macros in tbl(7). loc * exist ** algo ** size ** imp *** - look what Joerg Schilling manual pages use Thu, 19 Mar 2015 18:31:48 +0100 -- use Unicode U+2500 to U+256C for table borders - in tbl(7) -Tutf-8 output - suggested by bentley@ Tue, 14 Oct 2014 04:10:55 -0600 - loc * exist ** algo * size * imp ** - --- missing eqn features ----------------------------------------------- - In a matrix, break the output line after each matrix line. - Found in the discussion at CDBUG 2015. - Suggested by Avi Weinstock. - loc * exist * algo * size * imp ** + Found in the discussion at CDBUG 2015. Suggested by Avi Weinstock. + This may not be the ideal solution after all: eqn(7) matrices + are lists of columns, so Avi's proposal would show each *column* + on its own *line*, which is likely to cause confusion. + A better solution, but much harder to implement, would be to + actually show the coordinates of column vectors on different + terminal output lines, using the clumnated output facilities + developed for .Bl -tag, .Bl -column, and also used for tbl(7). + loc * exist * algo ** size ** imp ** - The "size" keyword is parsed, but ignored by the formatter. loc * exist * algo * size * imp * @@ -219,12 +259,19 @@ are mere guesses, and some may be wrong. surrounded by blanks, not when it is part of an unquoted word. Also, check whether there are more such cases (e.g., +?). reported by bentley@ 20 Jun 2017 02:04:29 -0600 + loc * exist ** algo ** size * imp * - Primes, opprime, and ' bentley@ Thu, 13 Jul 2017 23:14:20 -0600 --- missing misc features ---------------------------------------------- +- -T man does not handle eqn(7) and tbl(7) + Stephen Gregoratto 16 Feb 2020 01:28:07 +1100 + loc ** exist ** algo ** size *** imp ** + +- man -ks 1,8 route; kn@ Jul 13, 2018 orally + - italic correction (\/) in PostScript mode Werner LEMBERG on groff at gnu dot org Sun, 10 Nov 2013 12:47:46 loc ** exist ** algo * size * imp * @@ -291,6 +338,9 @@ are mere guesses, and some may be wrong. https://github.com/schmonz/ikiwiki/compare/mandoc Amitai Schlair Mon, 19 May 2014 14:05:53 -0400 +- check compatibility with + https://git.sr.ht/~sircmpwn/scdoc + - check features of the Slackware man.conf(5) format Carsten Kunze Wed, 11 Mar 2015 17:57:24 +0100 @@ -354,6 +404,8 @@ are mere guesses, and some may be wrong. - a line starting with "\fB something" counts as starting with whitespace and triggers a line break; found in audio/normalize-mp3(1) + This will become easier once escape sequences are represented + by syntax tree nodes. loc ** exist * algo ** size * imp ** - formatting /usr/local/man/man1/latex2man.1 with groff and mandoc @@ -371,10 +423,19 @@ are mere guesses, and some may be wrong. add a new <> block to the PDF files with /BaseFont /Courier and change the /Name from /F0 to the new font (/F5 (?)). re-reported by tb@ Mon, 16 Mar 2015 16:47:21 +0100 - loc * exist ** algo ** size * imp ** + loc ** exist ** algo ** size * imp ** --- HTML issues -------------------------------------------------------- +- .Bd -unfilled should not use monospaced font + anton@ 4 Mar 2021 08:19:35 +0100 + loc ** exist * algo * size * imp ** + +- get rid of the last handful of style= attributes such that + Content-Security-Policy: can be enabled without unsafe-inline + suggested by bentley@ Nov 10, 2019 at 06:02:49AM -0700 + loc * exist * algo * size * imp ** + - .Bf at the beginning of a paragraph inserts a bogus 1ex horizontal space, see for example random(3). Introduced in http://mdocml.bsd.lv/cgi-bin/cvsweb/mdoc_html.c.diff?r1=1.91&r2=1.92 @@ -387,6 +448,11 @@ are mere guesses, and some may be wrong. https://github.com/Debian/debiman/issues/15 loc * exist * algo ** size ** imp ** +- space characters can end up in href= attributes, for example coming + from the first .Xr argument (where they make no sense, but still); + does this affect other characters, other source macros...? + Jackson Pauls 29 Aug 2017 16:56:27 +0100 + - The tables used to render the three-part page headers actually force the width of the to the max-width given for . Not yet sure how to fix that... @@ -436,16 +502,6 @@ are mere guesses, and some may be wrong. Probably, this should be fixed somewhere in termp_it_pre(), not sure. loc * exist ** algo ** size * imp ** -- .Nx 1.0a - should be "NetBSD 1.0A", not "NetBSD 1.0a", - see OpenBSD ccdconfig(8). - loc * exist * algo * size * imp ** - -- In .Bl -tag, if a tag exceeds the right margin and must be continued - on the next line, it must be indented by -width, not width+1; - see "rule block|pass" in OpenBSD ifconfig(8). - loc * exist *** algo ** size * imp ** - - When the -width string contains macros, the macros must be rendered before measuring the width, for example .Bl -tag -width ".Dv message" @@ -481,10 +537,32 @@ are mere guesses, and some may be wrong. * warning issues ************************************************************************ +- shorten/simplify error messages for usage errors + To: deraadt@ 25 Oct 2020 23:37:01 +0100 + loc ** exist * algo * size ** imp *** + +- warn about duplicate .Sh/.Ss heads + gre(4): Rename duplicate sections 20 Apr 2018 15:27:33 +0200 + loc * exist * algo * size * imp ** + +- style message about macros inside .Bd -literal and .Dl, in particular + font changing macros like .Cm, .Ar, .Fa (from the mdoclint TODO) + +- style message about mismatches between the section number in the + file name (if it is known) and the section number in .Dt + (from the mdoclint TODO) + +- style message about NULL without .Dv (from the mdoclint TODO) + +- style message about error constants without .Er (from the mdoclint TODO) + - warn when .Sh or .Ss contain other macros Steffen Nurpmeso, savannah.gnu.org/bugs/index.php?45034 loc * exist * algo * size * imp ** +- style message about violations of the convention + .An name Aq Mt localpart@domain in AUTHORS (from the mdoclint TODO) + - warn about attempts to call non-callable macros Steffen Nurpmeso Tue, 11 Nov 2014 22:55:16 +0100 Note that formatting is inconsistent in groff. @@ -493,14 +571,15 @@ are mere guesses, and some may be wrong. all over mdoc_macro.c and all subtly different. loc ** exist ** algo ** size ** imp ** -- mandoc_special does not really check the escape sequence, - but just the overall format - loc ** exist ** algo *** size ** imp ** +- warn about punctuation - e.g. ',' and ';' - at the beginning + of a text line, if it is likely intended to follow the preceding + output without intervening whitespace, in particular after a + macro line (from the mdoclint TODO) -- -Tlint parser errors and warnings to stdout - to tech@mdocml, naddy@ Wed, 28 Sep 2011 11:21:46 +0200 - wait! kristaps@ Sun, 02 Oct 2011 17:12:52 +0200 +- makewhatis -p complains about language subdirectories: + /usr/local/man//ru: Unknown directory part + ************************************************************************ * documentation issues ************************************************************************ @@ -517,11 +596,6 @@ are mere guesses, and some may be wrong. * performance issues ************************************************************************ -- Why are we using MAP_SHARED, not MAP_PRIVATE for mmap(2)? - from kristaps@ Sat, 09 Aug 2014 13:51:36 +0200 - -Several areas can be cleaned up to make mandoc even faster. These are - - the PDF file is HUGE: this can be reduced by using relative offsets ************************************************************************ @@ -535,13 +609,14 @@ Several areas can be cleaned up to make mandoc even fa Found by Aaron M. Ucko in the GNU Hurd via Bdale Garbee, https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=829624 -- We use the input line number at several places to distinguish - same-line from different-line input. That plainly doesn't work - with user-defined macros, leading to random breakage. +- Is it possible to further simplify ENDBODY_SPACE? - Find better ways to prevent endless loops in roff(7) macro and string expansion. +- make buffers for parsing functions const + christos@ via wiz@ Fri, 18 Dec 2015 17:10:01 +0100 + - struct mparse refactoring Steffen Nurpmeso Thu, 04 Sep 2014 12:50:00 +0200 @@ -549,16 +624,36 @@ Several areas can be cleaned up to make mandoc even fa * CGI issues ************************************************************************ + - Inspect httpd(8) logs on man.openbsd.org and consider + whether logging can be improved, where bad syntax comes from, + and what needs to be done to get rid of COMPAT_OLDURI. - Enable HTTP compression by detecting gzip encoding and filtering output through libz. - - Sandbox (see OpenSSH). + - Privilege separation (see OpenSSH). - Enable caching support via HTTP 304 and If-Modified-Since. - - Have Mac OSX systems automatically disable -static compilation of the - CGI: -static isn't supported. ************************************************************************ * to improve in the groff_mdoc(7) macros ************************************************************************ + +- delete OS release verification from .Dx, .Fx, .Nx, .Ox etc. + https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=629161 + also Branden Robinson 18 Dec 2019 00:59:52 +1100 + +- Can the distinction between .Vt and .Va be made stricter, + recommending .Vt extern char * Ns Va optarg ; ? + What about the block macro properties of .Vt in the SYNOPSIS? + zeurkous 25 Dec 2019 08:48:36 +0100 + +- .Cd # arch1, arch2 in section 4 pages: + find better way to indicate multiple architectures, maybe: + allow .Dt vgafb 4 "macppc sparc64" + already shown as "Device Drivers Manual (macppc sparc64)" + for apropos, make that "vgafb(4) - macppc # sparc64" instead of "- all" + groff can be made to show multiple arches, too, but it is + tedious to do the string parsing in roff code... + jmc@ 23 Apr 2018 07:24:52 +0100 [man for vgafb(4)...] + loc ** exist ** algo * size * imp *** - use uname(1) to set doc-default-operating-system at install time tobimensch Mon, 1 Dec 2014 00:25:07 +0100