1************************************************************************ 2* Official mandoc TODO. 3* $Id: TODO,v 1.1.1.1 2013/04/03 14:46:49 christos Exp $ 4************************************************************************ 5 6************************************************************************ 7* parser bugs 8************************************************************************ 9 10- ".\}" on its own line gets translated to bare ".\&" 11 which forces pset() into man(7) 12 and then triggers an unknown macro error 13 reported by naddy@ Sun, 3 Jul 2011 21:52:24 +0200 14 15************************************************************************ 16* formatter bugs 17************************************************************************ 18 19- tbl(7): Horizontal and vertical lines are formatted badly: 20 With the box option, there is too much white space at the end of cells. 21 Horizontal lines from "=" lines are a bit too long. 22 yuri dot pankov at gmail dot com Thu, 14 Apr 2011 05:45:26 +0400 23 24************************************************************************ 25* missing features 26************************************************************************ 27 28--- missing roff features ---------------------------------------------- 29 30- The pod2man preamble wants \h'...' with quoted numerical arguments, 31 see for example AUTHORS in MooseX::Getopt.3p, p5-MooseX-Getopt. 32 reported by Andreas Voegele <mail at andreasvoegele dot com> 33 Tue, 22 Nov 2011 15:34:47 +0100 on ports@ 34 35- .if n \{ 36 .br\} 37 should cause an extra space to be raised. 38 39- .ad (adjust margins) 40 .ad l -- adjust left margin only (flush left) 41 .ad r -- adjust right margin only (flush right) 42 .ad c -- center text on line 43 .ad b -- adjust both margins (alias: .ad n) 44 .na -- temporarily disable adjustment without changing the mode 45 .ad -- re-enable adjustment without changing the mode 46 Adjustment mode is ignored while in no-fill mode (.nf). 47 48- .it (line traps) occur in mysql(1), yasm_arch(7) 49 generated by DocBook XSL Stylesheets v1.71.1 <http://docbook.sf.net/> 50 reported by brad@ Sat, 15 Jan 2011 15:48:18 -0500 51 52- .ns (no-space mode) occurs in xine-config(1) 53 reported by brad@ Sat, 15 Jan 2011 15:45:23 -0500 54 55- xloadimage(1) wants .ti (temporary indent), rep by naddy@ 56 57- .ta (tab settings) occurs in ircbug(1) and probably gnats(1) 58 reported by brad@ Sat, 15 Jan 2011 15:50:51 -0500 59 60- \c (interrupted text) occurs in chat(8) 61 62- using undefined strings or macros defines them to be empty 63 wl@ Mon, 14 Nov 2011 14:37:01 +0000 64 65--- missing mdoc features ---------------------------------------------- 66 67- fix bad block nesting involving multiple identical explicit blocks 68 see the OpenBSD mdoc_macro.c 1.47 commit message 69 70- .Bl -column .Xo support is missing 71 ultimate goal: 72 restore .Xr and .Dv to 73 lib/libc/compat-43/sigvec.3 74 lib/libc/gen/signal.3 75 lib/libc/sys/sigaction.2 76 77- edge case: decide how to deal with blk_full bad nesting, e.g. 78 .Sh .Nm .Bk .Nm .Ek .Sh found by jmc@ in ssh-keygen(1) 79 from jmc@ Wed, 14 Jul 2010 18:10:32 +0100 80 81- \\ is now implemented correctly 82 * when defining strings and macros using .ds and .de 83 * when parsing roff(7) and man(7) macro arguments 84 It does not yet work in mdoc(7) macro arguments 85 because libmdoc does not yet use mandoc_getarg(). 86 Also check what happens in plain text, it must be identical to \e. 87 88- .Bd -filled should not be the same as .Bd -ragged, but align both 89 the left and right margin. In groff, it is implemented in terms 90 of .ad b, which we don't have either. Found in cksum(1). 91 92- implement blank `Bl -column', such as 93 .Bl -column 94 .It foo Ta bar 95 .El 96 97- explicitly disallow nested `Bl -column', which would clobber internal 98 flags defined for struct mdoc_macro 99 100- In .Bl -column .It, the end of the line probably has to be regarded 101 as an implicit .Ta, if there could be one, see the following mildly 102 ugly code from login.conf(5): 103 .Bl -column minpasswordlen program xetcxmotd 104 .It path Ta path Ta value of Dv _PATH_DEFPATH 105 .br 106 Default search path. 107 reported by Michal Mazurek <akfaew at jasminek dot net> 108 via jmc@ Thu, 7 Apr 2011 16:00:53 +0059 109 110- inside `.Bl -column' phrases, punctuation is handled like normal 111 text, e.g. `.Bl -column .It Fl x . Ta ...' should give "-x -." 112 113- inside `.Bl -column' phrases, TERMP_IGNDELIM handling by `Pf' 114 is not safe, e.g. `.Bl -column .It Pf a b .' gives "ab." 115 but should give "ab ." 116 117- set a meaningful default if no `Bl' list type is assigned 118 119- have a blank `It' head for `Bl -tag' not puke 120 121- prohibit `Nm' from having non-text HEAD children 122 (e.g., NetBSD mDNSShared/dns-sd.1) 123 (mdoc_html.c and mdoc_term.c `Nm' handlers can be slightly simplified) 124 125- When there is free text in the SYNOPSIS and that free text contains 126 the .Nm macro, groff somehow understands to treat the .Nm as an in-line 127 macro, while mandoc treats it as a block macro and breaks the line. 128 No idea how the logic for distinguishing in-line and block instances 129 should be, needs investigation. 130 uqs@ Thu, 2 Jun 2011 11:03:51 +0200 131 uqs@ Thu, 2 Jun 2011 11:33:35 +0200 132 133--- missing man features ----------------------------------------------- 134 135- groff an-ext.tmac macros (.UR, .UE) occur in xine(5) 136 reported by brad@ Sat, 15 Jan 2011 15:45:23 -0500 137 138- -T[x]html doesn't stipulate non-collapsing spaces in literal mode 139 140--- missing tbl features ----------------------------------------------- 141 142- implement basic non-parametric .de to support e.g. sox(1) 143 reported by naddy@ Sat, 16 Oct 2010 23:51:57 +0200 144 *** sox(1) still doesn't work, tbl(1) errors need investigation 145 146- allow standalone `.' to be interpreted as an end-of-layout 147 delimiter instead of being thrown away as a no-op roff line 148 reported by Yuri Pankov, Wed 18 May 2011 11:34:59 CEST 149 150--- missing misc features ---------------------------------------------- 151 152- clean up escape sequence handling, creating three classes: 153 (1) fully implemented, or parsed and ignored without loss of content 154 (2) unimplemented, potentially causing loss of content 155 or serious mangling of formatting (e.g. \n) -> ERROR 156 see textproc/mgdiff(1) for nice examples 157 (3) undefined, just output the character -> perhaps WARNING 158 159- The \t escape sequence is the same as a literal tab, see for example 160 the ASCII table in hexdump(1) where 161 .Bl -column \&000_nu \&001_so \&002_st \&003_et \&004_eo 162 .It \&000\ nul\t001\ soh\t002\ stx\t003\ etx\t004\ eot\t005\ enq 163 produces 164 000 nul 001 soh 002 stx 003 etx 004 eot 005 enq 165 and the example in oldrdist(1) 166 167- look at pages generated from reStructeredText, e.g. devel/mercurial hg(1) 168 These are a weird mixture of man(7) and custom autogenerated low-level 169 roff stuff. Figure out to what extent we can cope. 170 For details, see http://docutils.sourceforge.net/rst.html 171 noted by stsp@ Sat, 24 Apr 2010 09:17:55 +0200 172 reminded by nicm@ Mon, 3 May 2010 09:52:41 +0100 173 174- check compatibility with Plan9: 175 http://swtch.com/usr/local/plan9/tmac/tmac.an 176 http://swtch.com/plan9port/man/man7/man.html 177 "Anthony J. Bentley" <anthonyjbentley@gmail.com> 28 Dec 2010 21:58:40 -0700 178 179************************************************************************ 180* formatting issues: ugly output 181************************************************************************ 182 183- a column list with blank `Ta' cells triggers a spurrious 184 start-with-whitespace printing of a newline 185 186- double quotes inside double quotes are escaped by doubling them 187 implement this in mdoc(7), too 188 so far, we only have it in roff(7) and man(7) 189 reminded by millert@ Thu, 09 Dec 2010 17:29:52 -0500 190 191- perl(1) SYNOPSIS looks bad; reported by deraadt@ 192 1) man(7) seems to need SYNOPSIS .Nm blocks, too 193 194- In .Bl -column, 195 .It Em Authentication<tab>Key Length 196 ought to render "Key Length" with emphasis, too, 197 see OpenBSD iked.conf(5). 198 reported again Nicolas Joly via wiz@ Wed, 12 Oct 2011 00:20:00 +0200 199 200- empty phrases in .Bl column produce too few blanks 201 try e.g. .Bl -column It Ta Ta 202 reported by millert Fri, 02 Apr 2010 16:13:46 -0400 203 204- .%T can have trailing punctuation. Currently, it puts the trailing 205 punctuation into a trailing MDOC_TEXT element inside its own scope. 206 That element should rather be outside its scope, such that the 207 punctuation does not get underlines. This is not trivial to 208 implement because .%T then needs some features of in_line_eoln() - 209 slurp all arguments into one single text element - and one feature 210 of in_line() - put trailing punctuation out of scope. 211 Found in mount_nfs(8) and exports(5), search for "Appendix". 212 213- in enclosures, mandoc sometimes fancies a bogus end of sentence 214 reminded by jmc@ Thu, 23 Sep 2010 18:13:39 +0059 215 216************************************************************************ 217* formatting issues: gratuitous differences 218************************************************************************ 219 220- .Rv (and probably .Ex) print different text if an `Nm' has been named 221 or not (run a manual without `Nm blah' to see this). I'm not sure 222 that this exists in the wild, but it's still an error. 223 224- In .Bl -bullet, the groff bullet is "+\b+\bo\bo", the mandoc bullet 225 is just "o\bo". 226 see for example OpenBSD ksh(1) 227 228- The characters "|" and "\*(Ba" should never be bold, 229 not even in the middle of a word, e.g. ".Cm b\*(Bac" in 230 "mknod [-m mode] name b|c major minor" 231 in OpenBSD ksh(1) 232 233- A bogus .Pp between two .It must not produce a double blank line, 234 see between -R and -r in OpenBSD rm(1), before "update" in mount(8), 235 or in DIAGNOSTICS in init(8), or before "is always true" in ksh(1). 236 The same happens with .Pp just before .El, see bgpd.conf(5). 237 Also have `It' complain if `Pp' is invoked at certain times (not 238 -compact?). 239 240- .Pp between two .It in .Bl -column should produce one, 241 not two blank lines, see e.g. login.conf(5). 242 reported by jmc@ Sun, 17 Apr 2011 14:04:58 +0059 243 reported again by sthen@ Wed, 18 Jan 2012 02:09:39 +0000 (UTC) 244 245- If the *first* line after .It is .Pp, break the line right after 246 the tag, do not pad with space characters before breaking. 247 See the description of the a, c, and i commands in sed(1). 248 249- If the first line after .It is .D1, do not assert a blank line 250 in between, see for example tmux(1). 251 reported by nicm@ 13 Jan 2011 00:18:57 +0000 252 253- .Nx 1.0a 254 should be "NetBSD 1.0A", not "NetBSD 1.0a", 255 see OpenBSD ccdconfig(8). 256 257- In .Bl -tag, if a tag exceeds the right margin and must be continued 258 on the next line, it must be indented by -width, not width+1; 259 see "rule block|pass" in OpenBSD ifconfig(8). 260 261- When the -width string contains macros, the macros must be rendered 262 before measuring the width, for example 263 .Bl -tag -width ".Dv message" 264 in magic(5), located in src/usr.bin/file, is the same 265 as -width 7n, not -width 11n. 266 The same applies to .Bl -column column widths; 267 reported again by Nicolas Joly Thu, 1 Mar 2012 13:41:26 +0100 via wiz@ 5 Mar 268 269- The \& zero-width character counts as output. 270 That is, when it is alone on a line between two .Pp, 271 we want three blank lines, not two as in mandoc. 272 273- When .Fn arguments exceed one output line, all but the first 274 should be indented, see e.g. rpc(3); 275 reported by jmc@ on discuss@ Fri, 29 Oct 2010 13:48:33 +0100 276 reported again by Nicolas Joly via wiz@ Sun, 18 Sep 2011 18:24:40 +0200 277 Also, we don't want to break the line within the argument of: 278 .Fa "chtype tl" 279 280- .Ns should work when called at the end of an input line, see 281 the following code in vi(1): 282 .It Xo 283 .Op Ar line 284 .Cm a Ns Op Cm ppend Ns 285 .Op Cm !\& 286 .Xc 287 The input text is appended after the specified line. 288 289- Header lines of excessive length: 290 Port OpenBSD man_term.c rev. 1.25 to mdoc_term.c 291 and document it in mdoc(7) and man(7) COMPATIBILITY 292 found while talking to Chris Bennett 293 294- In man(7), the sequence 295 .HP 296 one line of regular text 297 .SH 298 should not produce two blank lines before the .SH, 299 see for example named-checkconf(8). 300 301- In man(7), the sequence 302 .SH HEADER 303 <blank line> 304 .PP 305 regular text 306 should not produce any blank lines between the header and the text, 307 see for example rsync(1). 308 Reported by naddy@ Mon, 28 Mar 2011 20:45:42 +0200 309 310- In man(7), the sequence 311 regular text 312 .IP 313 .IP "tag" 314 indented text 315 should produce one, not four blank lines between the regular text 316 and the tag, see for example rsync(1). 317 Likewise, 318 regular text 319 .IP 320 indented text 321 should produce one, not two blank lines in between, and 322 regular text 323 .IP 324 .RS 325 .IP tag 326 indented text 327 should produce one, not three blank lines. 328 Reported by naddy@ Mon, 28 Mar 2011 20:45:42 +0200 329 330- trailing whitespace must be ignored even when followed by a font escape, 331 see for example 332 makes 333 \fBdig \fR 334 operate in batch mode 335 in dig(1). 336 337************************************************************************ 338* error reporting issues 339************************************************************************ 340 341- .TP directly followed by .RS gives an assertion. 342 343************************************************************************ 344* performance issues 345************************************************************************ 346 347Several areas can be cleaned up to make mandoc even faster. These are 348 349- improve hashing mechanism for macros (quite important: performance) 350 351- improve hashing mechanism for characters (not as important) 352 353- the PDF file is HUGE: this can be reduced by using relative offsets 354 355- instead of re-initialising the roff predefined-strings set before each 356 parse, create a read-only version the first time and copy it 357 358************************************************************************ 359* structural issues 360************************************************************************ 361 362- We use the input line number at several places to distinguish 363 same-line from different-line input. That plainly doesn't work 364 with user-defined macros, leading to random breakage. 365 366- Find better ways to prevent endless loops 367 in roff(7) macro and string expansion. 368 369- Finish cleanup of date handling. 370 Decide which formats should be recognized where. 371 Update both mdoc(7) and man(7) documentation. 372 Triggered by Tim van der Molen Tue, 22 Feb 2011 20:30:45 +0100 373