]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/mdocml/TODO
Since contrib/libcxxrt's ancestry was never correct, subversion 1.8 and
[FreeBSD/FreeBSD.git] / contrib / mdocml / TODO
1 ************************************************************************
2 * Official mandoc TODO.
3 * $Id: TODO,v 1.216 2016/01/08 01:37:32 schwarze Exp $
4 ************************************************************************
5
6 Many issues are annotated for difficulty as follows:
7
8  - loc = locality of the issue
9     *    single file issue, affects file only, or very few
10     **   single module issue, affects several files of one module
11     ***  cross-module issue, significantly impacts multiple modules
12          and may require substantial changes to internal interfaces
13  - exist = difficulty of the existing code in this area
14     *    affected code is straightforward and easy to read and change
15     **   affected code is somewhat complex, but once you understand
16          the design, not particularly difficult to understand
17     ***  affected code uses a special, exceptionally tricky design
18  - algo = difficulty of the new algorithm to be written
19     *    the required logic and code is straightforward
20     **   the required logic is somewhat complex and needs a careful design
21     ***  the required logic is exceptionally tricky,
22          maybe an approach to solve that is not even known yet
23  - size = the amount of code to be written or changed
24     *    a small number of lines (at most 100, usually much less)
25     **   a considerable amount of code (several dozen to a few hundred)
26     ***  a large amount of code (many hundreds, maybe thousands)
27  - imp = importance of the issue
28     *    mostly for completeness
29     **   would be nice to have
30     ***  issue causes considerable inconvenience
31
32 Obviously, as the issues have not been solved yet, these annotations
33 are mere guesses, and some may be wrong.
34
35 ************************************************************************
36 * crashes
37 ************************************************************************
38
39 - The abort() in bufcat(), html.c, can be triggered via buffmt_includes()
40   by running -Thtml -Oincludes on a file containing a long .In argument.
41   Fixing this will probably require reworking the whole bufcat() concept.
42   loc **  exist *  algo *  size **  imp **
43
44 ************************************************************************
45 * missing features
46 ************************************************************************
47
48 --- missing roff features ----------------------------------------------
49
50 - .ad (adjust margins)
51   .ad l -- adjust left margin only (flush left)
52   .ad r -- adjust right margin only (flush right)
53   .ad c -- center text on line
54   .ad b -- adjust both margins (alias: .ad n)
55   .na   -- temporarily disable adjustment without changing the mode
56   .ad   -- re-enable adjustment without changing the mode
57   Adjustment mode is ignored while in no-fill mode (.nf).
58   loc ***  exist ***  algo **  size **  imp **  (parser reorg would help)
59
60 - .fc (field control)
61   found by naddy@ in xloadimage(1)
62   loc **  exist ***  algo *  size *  imp *
63
64 - .nr third argument (auto-increment step size, requires \n+)
65   found by bentley@ in sbcl(1)  Mon, 9 Dec 2013 18:36:57 -0700
66   loc *  exist *  algo *  size *  imp **
67
68 - .ns (no-space mode) occurs in xine-config(1)
69   when implementing this, also let .TH set it
70   reported by brad@  Sat, 15 Jan 2011 15:45:23 -0500
71   loc ***  exist ***  algo ***  size **  imp *
72
73 - .ta (tab settings)
74   #1 most important issue naddy@ Mon, 16 Feb 2015 20:59:17 +0100
75   ircbug(1) gnats(1) reported by brad@  Sat, 15 Jan 2011 15:50:51 -0500
76   also Tcl_NewStringObj(3) via wiz@  Wed, 5 Mar 2014 22:27:43 +0100
77   also posix2time(3) Carsten Kunze  Mon, 1 Dec 2014 13:03:10 +0100
78   loc **  exist ***  algo **  size **  imp ***
79
80 - .ti (temporary indent)
81   found by naddy@ in xloadimage(1) [devel/libvstr] vstr(3)
82   found by bentley@ in nmh(1)  Mon, 23 Apr 2012 13:38:28 -0600
83   loc **  exist **  algo **  size *  imp ** (parser reorg helps a lot)
84
85 - .while and .shift
86   found by jca@ in ratpoison(1)  Sun, 30 Jun 2013 12:01:09 +0200
87   loc *  exist **  algo **  size **  imp **
88
89 - \h horizontal move
90   #2 most important issue naddy@  Mon, 16 Feb 2015 20:59:17 +0100
91   found in cclive(1) nasm(1) bogofilter(1) asciidoc/DocBook output
92   bentley@ on discuss@  Sat, 21 Sep 2013 22:29:34 -0600
93   naddy@  Thu, 4 Dec 2014 16:26:41 +0100
94   loc **  exist **  algo **  size *  imp *** (parser reorg helps a lot)
95
96 - \n+ and \n- numerical register increment and decrement
97   found by bentley@ in sbcl(1)  Mon, 9 Dec 2013 18:36:57 -0700
98   loc *  exist *  algo *  size *  imp **
99
100 - \n(.$ macro argument count number register; ocserv(8) by autogen
101   found by sthen@  Thu, 19 Feb 2015 22:03:01 +0000
102   loc *  exist **  algo *  size *  imp **
103
104 - \w'' improve width measurements
105   would not be very useful without an expression parser, see below
106   needed for Tcl_NewStringObj(3) via wiz@  Wed, 5 Mar 2014 22:27:43 +0100
107   loc **  exist ***  algo ***  size *  imp ***
108
109 - \\ in high-level macro arguments
110   Currently, \\ is expanded in two situations:
111   1) macro and string definition (roff.c setstrn())
112   2) macro argument parsing (mandoc.c mandoc_getarg())
113   For user defined macros, the second happens in time because of ROFF_REPARSE.
114   But for standard high-level macros, it only happens after entering the
115   high level parsers, which is too late because the code doesn't get
116   back to roff.c roff_res() from that point.  Because this requires
117   distinguishing requests, user-defined macros and standard macros
118   on the roff_res() level, it is hard to solve without the parser reorg.
119   Found by naddy@ in devel/cutils cobfusc(1)  Mon, 16 Feb 2015 19:10:52 +0100
120   loc ***  exist ***  algo ***  size **  imp *
121
122 - using undefined strings or macros defines them to be empty
123   wl@  Mon, 14 Nov 2011 14:37:01 +0000
124   loc *  exist *  algo *  size *  imp *
125
126 --- missing mdoc features ----------------------------------------------
127
128 - .Bl -column .Xo support is missing
129   ultimate goal:
130   restore .Xr and .Dv to
131   lib/libc/compat-43/sigvec.3
132   lib/libc/gen/signal.3
133   lib/libc/sys/sigaction.2
134   loc *  exist ***  algo ***  size *  imp **
135
136 - edge case: decide how to deal with blk_full bad nesting, e.g.
137   .Sh .Nm .Bk .Nm .Ek .Sh found by jmc@ in ssh-keygen(1)
138   from jmc@  Wed, 14 Jul 2010 18:10:32 +0100
139   loc *  exist ***  algo ***  size **  imp **
140
141 - .Bd -centered implies -filled, not -unfilled, which is not
142   easy to implement; it requires code similar to .ce, which
143   we don't have either.
144   Besides, groff has bug causing text right *before* .Bd -centered
145   to be centered as well.
146   loc ***  exist ***  algo **  size **  imp **  (parser reorg would help)
147
148 - .Bd -filled should not be the same as .Bd -ragged, but align both
149   the left and right margin.  In groff, it is implemented in terms
150   of .ad b, which we don't have either.  Found in cksum(1).
151   loc ***  exist ***  algo **  size **  imp **  (parser reorg would help)
152
153 - implement blank `Bl -column', such as
154   .Bl -column
155   .It foo Ta bar
156   .El
157   loc *  exist ***  algo ***  size *  imp *
158
159 - explicitly disallow nested `Bl -column', which would clobber internal
160   flags defined for struct mdoc_macro
161   loc *  exist *  algo *  size *  imp **
162
163 - In .Bl -column .It, the end of the line probably has to be regarded
164   as an implicit .Ta, if there could be one, see the following mildly
165   ugly code from login.conf(5):
166     .Bl -column minpasswordlen program xetcxmotd
167     .It path Ta path Ta value of Dv _PATH_DEFPATH
168     .br
169     Default search path.
170   reported by Michal Mazurek <akfaew at jasminek dot net>
171   via jmc@ Thu, 7 Apr 2011 16:00:53 +0059
172   loc *  exist ***  algo **  size *  imp **
173
174 - inside `.Bl -column' phrases, punctuation is handled like normal
175   text, e.g. `.Bl -column .It Fl x . Ta ...' should give "-x -."
176
177 - inside `.Bl -column' phrases, TERMP_IGNDELIM handling by `Pf'
178   is not safe, e.g. `.Bl -column .It Pf a b .' gives "ab."
179   but should give "ab ."
180
181 - check whether it is correct that `D1' uses INDENT+1;
182   does it need its own constant?
183   loc *  exist **  algo **  size *  imp **
184
185 - prohibit `Nm' from having non-text HEAD children
186   (e.g., NetBSD mDNSShared/dns-sd.1)
187   (mdoc_html.c and mdoc_term.c `Nm' handlers can be slightly simplified)
188
189 - support translated section names
190   e.g. x11/scrotwm scrotwm_es.1:21:2: error: NAME section must be first
191   that one uses NOMBRE because it is spanish...
192   deraadt tends to think that section-dependent macro behaviour
193   is a bad idea in the first place, so this may be irrelevant
194   loc **  exist **  algo **  size *  imp **
195
196 - When there is free text in the SYNOPSIS and that free text contains
197   the .Nm macro, groff somehow understands to treat the .Nm as an in-line
198   macro, while mandoc treats it as a block macro and breaks the line.
199   No idea how the logic for distinguishing in-line and block instances
200   should be, needs investigation.
201   uqs@  Thu, 2 Jun 2011 11:03:51 +0200
202   uqs@  Thu, 2 Jun 2011 11:33:35 +0200
203   loc *  exist **  algo ***  size *  imp **
204
205 --- missing man features -----------------------------------------------
206
207 - -T[x]html doesn't stipulate non-collapsing spaces in literal mode
208
209 --- missing tbl features -----------------------------------------------
210
211 - horizontal lines in the layout still consume data cells
212   and can be mixed with actual data on the same table line
213   synaptics(4) found by tedu@  Mon, 17 Aug 2015 21:17:42 -0400
214   loc **  exist **  algo **  size **  imp ***
215
216 - the "w" layout option is ignored
217   synaptics(4) found by tedu@  Mon, 17 Aug 2015 21:17:42 -0400
218   loc *  exist *  algo *  size *  imp **
219
220 - the "s" layout column specifier is used for placement of data
221   into columns, but ignored during column width calculations
222   synaptics(4) found by tedu@  Mon, 17 Aug 2015 21:17:42 -0400
223   loc *  exist **  algo ***  size *  imp **
224
225 - support mdoc(7) and man(7) macros inside tbl(7) code;
226   probably requires the parser reorg and letting tbl(7)
227   use roff_node such that macro sets can mix;
228   informed by bapt@ that FreeBSD needs this.
229   loc ***  exist **  algo ***  size **  imp ***
230
231 - look at the POSIX manuals in the books/man-pages-posix port,
232   they use some unsupported tbl(7) features.
233   loc *  exist **  algo **  size **  imp ***
234
235 - use Unicode U+2500 to U+256C for table borders
236   in tbl(7) -Tutf-8 output
237   suggested by bentley@  Tue, 14 Oct 2014 04:10:55 -0600
238   loc *  exist **  algo *  size *  imp **
239
240 --- missing eqn features -----------------------------------------------
241
242 - In a matrix, break the output line after each matrix line.
243   Found in the discussion at CDBUG 2015.
244   Suggested by Avi Weinstock.
245   loc *  exist *  algo *  size *  imp **
246
247 - The "size" keyword is parsed, but ignored by the formatter.
248   loc *  exist *  algo *  size *  imp *
249
250 - The spacing characters `~', `^', and tab are currently ignored,
251   see User's Guide (Second Edition) page 2 section 4.
252   loc *  exist *  algo **  size *  imp **
253
254 - Mark and lineup are parsed and ignored,
255   see User's Guide (Second Edition) page 5 section 15.
256   loc **  exist **  algo **  size **  imp **
257
258 --- missing misc features ----------------------------------------------
259
260 - italic correction (\/) in PostScript mode
261   Werner LEMBERG on groff at gnu dot org  Sun, 10 Nov 2013 12:47:46
262   loc **  exist **  algo *  size *  imp *
263
264 - change the default PAGER to more -Es and use the pager
265   even for apropos title line output; req by bapt@
266   loc *  exist *  algo *  size *  imp ***
267
268 - makewhatis(8) for preformatted pages:
269   parse the section number from the header line
270   and compare to the section number from the directory name
271   loc *  exist *  algo *  size *  imp **
272
273 - Does makewhatis(8) detect missing NAME sections, missing names,
274   and missing descriptions in all the file formats?
275   loc *  exist *  algo *  size *  imp ***
276
277 - clean up escape sequence handling, creating three classes:
278   (1) fully implemented, or parsed and ignored without loss of content
279   (2) unimplemented, potentially causing loss of content
280       or serious mangling of formatting (e.g. \n) -> ERROR
281       see textproc/mgdiff(1) for nice examples
282   (3) undefined, just output the character -> perhaps WARNING
283   loc ***  exist **  algo **  size **  imp *** (parser reorg helps)
284
285 - kettenis wants base roff, ms, and me  Fri, 1 Jan 2010 22:13:15 +0100 (CET)
286   loc **  exist **  algo **  size ***  imp *
287
288 - Vsevolod Stakhov (FreeBSD) needs either a markdown output formatter
289   for mandoc -mdoc or a markdown to mdoc converter because they
290   have to maintain manuals needed both in markdown and mdoc format.
291   Look at the libsoldout (markdown -> whatever)
292   loc *  exist *  algo *  size **  imp **
293
294 --- compatibility checks -----------------------------------------------
295
296 - is .Bk implemented correctly in modern groff?
297   sobrado@  Tue, 19 Apr 2011 22:12:55 +0200
298
299 - compare output to Heirloom roff, Solaris roff, and
300   http://repo.or.cz/w/neatroff.git  http://litcave.rudi.ir/
301
302 - look at AT&T DWB http://www2.research.att.com/sw/download
303   Carsten Kunze <carsten dot kunze at arcor dot de> has patches
304   Mon, 4 Aug 2014 17:01:28 +0200
305
306 - look at pages generated from reStructeredText, e.g. devel/mercurial hg(1)
307   These are a weird mixture of man(7) and custom autogenerated low-level
308   roff stuff.  Figure out to what extent we can cope.
309   For details, see http://docutils.sourceforge.net/rst.html
310   noted by stsp@  Sat, 24 Apr 2010 09:17:55 +0200
311   reminded by nicm@  Mon, 3 May 2010 09:52:41 +0100
312
313 - look at pages generated from ronn(1) github.com/rtomayko/ronn
314   (based on markdown)
315
316 - look at pages generated from Texinfo source by yat2m, e.g. security/gnupg
317   First impression is not that bad.
318
319 - look at pages generated by pandoc; see
320   https://github.com/jgm/pandoc/blob/master/src/Text/Pandoc/Writers/Man.hs
321   porting planned by kili@  Thu, 19 Jun 2014 19:46:28 +0200
322
323 - check compatibility with Plan9:
324   http://swtch.com/usr/local/plan9/tmac/tmac.an
325   http://swtch.com/plan9port/man/man7/man.html
326   "Anthony J. Bentley" <anthonyjbentley@gmail.com> 28 Dec 2010 21:58:40 -0700
327
328 - check compatibility with COHERENT troff:
329   http://www.nesssoftware.com/home/mwc/source.php
330
331 - check compatibility with the man(7) formatter
332   https://raw.githubusercontent.com/rofl0r/hardcore-utils/master/man.c
333
334 - check compatibility with
335   http://ikiwiki.info/plugins/contrib/mandoc/
336   https://github.com/schmonz/ikiwiki/compare/mandoc
337   Amitai Schlair  Mon, 19 May 2014 14:05:53 -0400
338
339 ************************************************************************
340 * formatting issues: ugly output
341 ************************************************************************
342
343 - revisit empty in-line macros
344   look at the difference between "Em x Em ." and "Sq x Em ."
345   Carsten Kunze  Fri, 12 Dec 2014 00:15:41 +0100
346   loc *** exist *** algo *** size * imp **
347
348 - a column list with blank `Ta' cells triggers a spurious
349   start-with-whitespace printing of a newline
350
351 - In .Bl -column, .It a<tab>"b<tab>c"
352   shows the quotes in groff, but not in mandoc
353   loc * exist *** algo ** size * imp **
354
355 - In .Bl -column,
356   .It Em Authentication<tab>Key Length
357   ought to render "Key Length" with emphasis, too,
358   see OpenBSD iked.conf(5).
359   reported again Nicolas Joly via wiz@ Wed, 12 Oct 2011 00:20:00 +0200
360   loc *  exist ***  algo ***  size **  imp ***
361
362 - empty phrases in .Bl column produce too few blanks
363   try e.g. .Bl -column It Ta Ta
364   reported by millert Fri, 02 Apr 2010 16:13:46 -0400
365   loc *  exist ***  algo ***  size *  imp **
366
367 - .%T can have trailing punctuation.  Currently, it puts the trailing
368   punctuation into a trailing MDOC_TEXT element inside its own scope.
369   That element should rather be outside its scope, such that the
370   punctuation does not get underlines.  This is not trivial to
371   implement because .%T then needs some features of in_line_eoln() -
372   slurp all arguments into one single text element - and one feature
373   of in_line() - put trailing punctuation out of scope.
374   Found in mount_nfs(8) and exports(5), search for "Appendix".
375   loc **  exist **  algo ***  size *  imp **
376
377 - Trailing punctuation after .%T triggers EOS spacing, at least
378   outside .Rs (eek!).  Simply setting ARGSFL_DELIM for .%T is not
379   the right solution, it sends mandoc into an endless loop.
380   reported by Nicolas Joly  Sat, 17 Nov 2012 11:49:54 +0100
381   loc *  exist **  algo **  size *  imp **
382
383 - global variables in the SYNOPSIS of section 3 pages
384   .Vt vs .Vt/.Va vs .Ft/.Va vs .Ft/.Fa ...
385   from kristaps@  Tue, 08 Jun 2010 11:13:32 +0200
386
387 - in enclosures, mandoc sometimes fancies a bogus end of sentence
388   reminded by jmc@  Thu, 23 Sep 2010 18:13:39 +0059
389   loc *  exist **  algo ***  size *  imp ***
390
391 - a line starting with "\fB something" counts as starting with whitespace
392   and triggers a line break; found in audio/normalize-mp3(1)
393   loc **  exist *  algo **  size *  imp **
394
395 - formatting /usr/local/man/man1/latex2man.1 with groff and mandoc
396   reveals lots of bugs both in groff and mandoc...
397   reported by bentley@  Wed, 22 May 2013 23:49:30 -0600
398
399 --- PDF issues ---------------------------------------------------------
400
401 - PDF output doesn't use a monospaced font for .Bd -literal
402   Example: "mandoc -Tpdf afterboot.8 > output.pdf && pdfviewer output.pdf".
403   Search the text "Routing tables".
404   Also check what PostScript mode does when fixing this.
405   reported by juanfra@ Wed, 04 Jun 2014 21:44:58 +0200
406   instructions from juanfra@  Wed, 11 Jun 2014 02:21:01 +0200
407     add a new <</Type /Font>> block to the PDF files with /BaseFont /Courier
408     and change the /Name from /F0 to the new font (/F5 (?)).
409   loc *  exist **  algo **  size *  imp **
410
411 --- HTML issues --------------------------------------------------------
412
413 - <dl><dt><dd> formatting is ugly
414   hints are easy to find on the web, e.g.
415   http://stackoverflow.com/questions/1713048/
416   see also matthew@  Fri, 18 Jul 2014 19:25:12 -0700
417   loc *  exist *  algo **  size *  imp ***
418
419 - .Bf at the beginning of a paragraph inserts a bogus 1ex horizontal
420   space, see for example random(3).  Introduced in
421   http://mdocml.bsd.lv/cgi-bin/cvsweb/mdoc_html.c.diff?r1=1.91&r2=1.92
422   reported by deraadt@ Mon, 28 Sep 2015 20:14:13 -0600 (MDT)
423   loc **  exist **  algo **  size *  imp *
424
425 - jsg on icb, Nov 3, 2014:
426   try to guess Xr in man(7) for hyperlinking
427
428 - The tables used to render the three-part page headers actually force
429   the width of the <body> to the max-width given for <html>.
430   Not yet sure how to fix that...
431   Observed by an Anonymous Coward on undeadly.org:
432   http://undeadly.org/cgi?action=article&sid=20140925064244&pid=1
433   loc *  exist *  algo **  size *  imp ***
434
435 - consider whether <var> can be used for Ar Dv Er Ev Fa Va.
436   from bentley@  Wed, 13 Aug 2014 09:17:55 -0600
437
438 - generate <img> tags in HTML
439   idea from florian@  Tue, 7 Apr 2015 00:26:28 +0000
440   may be possible to implement with .Lk img://something.png alt_text
441
442 - check https://github.com/trentm/mdocml
443
444 ************************************************************************
445 * formatting issues: gratuitous differences
446 ************************************************************************
447
448 - .Fn reopens a new scope after punctuation in mandoc,
449   but closes its scope for good in groff.
450   Do we want to change mandoc or groff?
451   Steffen Nurpmeso  Sat, 08 Nov 2014 13:34:59 +0100
452   loc *  exist **  algo **  size *  imp **
453
454 - In .Bl -enum -width 0n, groff continues one the same line after
455   the number, mandoc breaks the line.
456   mail to kristaps@  Mon, 20 Jul 2009 02:21:39 +0200
457   loc *  exist **  algo **  size *  imp **
458
459 - .Pp between two .It in .Bl -column should produce one,
460   not two blank lines, see e.g. login.conf(5).
461   reported by jmc@  Sun, 17 Apr 2011 14:04:58 +0059
462   reported again by sthen@  Wed, 18 Jan 2012 02:09:39 +0000 (UTC)
463   loc *  exist ***  algo **  size *  imp **
464
465 - If the *first* line after .It is .Pp, break the line right after
466   the tag, do not pad with space characters before breaking.
467   See the description of the a, c, and i commands in sed(1).
468   loc *  exist **  algo **  size *  imp **
469
470 - If the first line after .It is .D1, do not assert a blank line
471   in between, see for example tmux(1).
472   reported by nicm@  13 Jan 2011 00:18:57 +0000
473   loc *  exist **  algo **  size *  imp **
474
475 - Trailing punctuation after .It should trigger EOS spacing.
476   reported by Nicolas Joly  Sat, 17 Nov 2012 11:49:54 +0100
477   Probably, this should be fixed somewhere in termp_it_pre(), not sure.
478   loc *  exist **  algo **  size *  imp **
479
480 - .Nx 1.0a
481   should be "NetBSD 1.0A", not "NetBSD 1.0a",
482   see OpenBSD ccdconfig(8).
483   loc *  exist *  algo *  size *  imp **
484
485 - In .Bl -tag, if a tag exceeds the right margin and must be continued
486   on the next line, it must be indented by -width, not width+1;
487   see "rule block|pass" in OpenBSD ifconfig(8).
488   loc *  exist ***  algo **  size *  imp **
489
490 - When the -width string contains macros, the macros must be rendered
491   before measuring the width, for example
492     .Bl -tag -width ".Dv message"
493   in magic(5), located in src/usr.bin/file, is the same
494   as -width 7n, not -width 11n.
495   The same applies to .Bl -column column widths;
496   reported again by Nicolas Joly Thu, 1 Mar 2012 13:41:26 +0100 via wiz@ 5 Mar
497   reported again by Franco Fichtner Fri, 27 Sep 2013 21:02:28 +0200
498   loc ***  exist ***  algo ***  size **  imp ***
499   An easy partial fix would be to just skip the first word if it starts
500   with a dot, including any following white space, when measuring.
501   loc *  exist *  algo *  size *  imp ***
502
503 - The \& zero-width character counts as output.
504   That is, when it is alone on a line between two .Pp,
505   we want three blank lines, not two as in mandoc.
506   loc **  exist **  algo **  size *  imp **
507
508 - Header lines of excessive length:
509   Port OpenBSD man_term.c rev. 1.25 to mdoc_term.c
510   and document it in mdoc(7) and man(7) COMPATIBILITY
511   found while talking to Chris Bennett
512   loc *  exist *  algo *  size *  imp *
513
514 - Sequences of multiple man(7) paragraphs (.PP, .IP) interspersed
515   with .ps and .nf/.fi produce execessive blank lines, see libJudy
516   and graphics/dcmtk.  The parser reorg may help with this.
517
518 - trailing whitespace must be ignored even when followed by a font escape,
519   see for example
520     makes
521     \fBdig \fR
522     operate in batch mode
523   in dig(1).
524   loc **  exist **  algo **  size *  imp **
525
526 ************************************************************************
527 * portability
528 ************************************************************************
529
530 - systems having UTF-8 but not en_US.UTF-8
531   call locale(1) from ./configure, select a UTF-8-locale,
532   and use that for test-wchar.c and term_ascii.c
533   to Markus Waldeck  Sat, 18 Jul 2015 01:55:37 +0200
534   loc *  exist *  algo *  size *  imp *
535
536 ************************************************************************
537 * warning issues
538 ************************************************************************
539
540 - provide a way in mandoc(1) to warn about broken .Xr links;
541   probably cannot be on by default in -Tlint because it needs
542   to access the manpath and mandoc.db(3) after parsing.
543   asked for by jmc@ Fri, 4 Dec 2015 22:39:40 +0000
544
545 - Report errors in -O suboption parsing.
546   loc *  exist *  algo *  size *  imp **
547
548 - warn when .Sh or .Ss contain other macros
549   Steffen Nurpmeso, savannah.gnu.org/bugs/index.php?45034
550   loc *  exist *  algo *  size *  imp **
551
552 - check that MANDOCERR_BADTAB is thrown in the right cases,
553   i.e. when finding a literal tab character in fill mode,
554   and possibly change the wording of the warning message
555   to refer to fill mode, not literal mode
556   See the mail from Werner LEMBERG on the groff list,
557   Fri, 14 Feb 2014 18:54:42 +0100 (CET)
558   loc *  exist **  algo **  size *  imp **
559
560 - warn about attempts to call non-callable macros
561   Steffen Nurpmeso  Tue, 11 Nov 2014 22:55:16 +0100
562   Note that formatting is inconsistent in groff.
563   .Fn Po prints "Po()", .Ar Sh prints "file ..." and no "Sh".
564   Relatively hard because the relevant code is scattered
565   all over mdoc_macro.c and all subtly different.
566   loc **  exist **  algo **  size **  imp **
567
568 - warn about "new sentence, new line"
569   loc **  exist **  algo ***  size *  imp **
570
571 - mandoc_special does not really check the escape sequence,
572   but just the overall format
573   loc **  exist **  algo ***  size **  imp **
574
575 - integrate mdoclint into mandoc ("end-of-line whitespace" thread)
576   from jmc@  Mon, 13 Jul 2009 17:12:09 +0100
577   from kristaps@  Mon, 13 Jul 2009 18:34:53 +0200
578   from jmc@  Mon, 13 Jul 2009 17:45:37 +0059
579   from kristaps@  Mon, 13 Jul 2009 19:02:03 +0200
580   (mostly done, check what remains)
581
582 - -Tlint parser errors and warnings to stdout
583   to tech@mdocml, naddy@  Wed, 28 Sep 2011 11:21:46 +0200
584   wait!  kristaps@  Sun, 02 Oct 2011 17:12:52 +0200
585
586 - for system errors, use errno/strerror/warn/err
587
588 ************************************************************************
589 * documentation issues
590 ************************************************************************
591
592 - mention hyphenation rules:
593   breaking at letter-letter in text mode (not macro args)
594   proper hyphenation is unimplemented
595
596 - talk about spacing around delimiters
597   to jmc@, kristaps@  Sat, 23 Apr 2011 17:41:27 +0200
598
599 - mark macros as: page structure domain, manual domain, general text domain
600   is this useful?
601
602 - mention /usr/share/misc/mdoc.template in mdoc(7)?
603
604 - Is all the content from http://www.std.com/obi/BSD/doc/usd/28.tbl/tbl
605   covered in tbl(7)?
606
607 ************************************************************************
608 * performance issues
609 ************************************************************************
610
611 - Why are we using MAP_SHARED, not MAP_PRIVATE for mmap(2)?
612   How does SQLITE_CONFIG_PAGECACHE actually work?  Document it!
613   from kristaps@  Sat, 09 Aug 2014 13:51:36 +0200
614
615 Several areas can be cleaned up to make mandoc even faster.  These are
616
617 - improve hashing mechanism for macros (quite important: performance)
618
619 - improve hashing mechanism for characters (not as important)
620
621 - the PDF file is HUGE: this can be reduced by using relative offsets
622
623 - instead of re-initialising the roff predefined-strings set before each
624   parse, create a read-only version the first time and copy it
625   loc *  exist **  algo **  size *  imp **
626
627 ************************************************************************
628 * structural issues
629 ************************************************************************
630
631 - Use libz directly instead of forking gunzip(1).
632   Suggested by bapt at FreeBSD among others.
633
634 - We use the input line number at several places to distinguish
635   same-line from different-line input.  That plainly doesn't work
636   with user-defined macros, leading to random breakage.
637
638 - Find better ways to prevent endless loops
639   in roff(7) macro and string expansion.
640
641 - Finish cleanup of date handling.
642   Decide which formats should be recognized where.
643   Update both mdoc(7) and man(7) documentation.
644   Triggered by  Tim van der Molen  Tue, 22 Feb 2011 20:30:45 +0100
645
646 - struct mparse refactoring
647   Steffen Nurpmeso  Thu, 04 Sep 2014 12:50:00 +0200
648
649 - Consider creating some views that will make the database more
650   readable from the sqlite3 shell.  Consider using them to
651   abstract from the database structure, too.
652   suggested by espie@  Sat, 19 Apr 2014 14:52:57 +0200
653
654 ************************************************************************
655 * CGI issues
656 ************************************************************************
657
658  - Enable HTTP compression by detecting gzip encoding and filtering
659    output through libz.
660  - Sandbox (see OpenSSH).
661  - Enable caching support via HTTP 304 and If-Modified-Since.
662  - Allow for cgi.h to be overridden by CGI environment variables.
663    Otherwise, binary distributions will inherit the compile-time
664    behaviour, which is not optimal.
665  - Have Mac OSX systems automatically disable -static compilation of the
666    CGI: -static isn't supported.
667
668 ************************************************************************
669 * to improve in the groff_mdoc(7) macros
670 ************************************************************************
671
672 - use uname(1) to set doc-default-operating-system at install time
673   tobimensch  Mon, 1 Dec 2014 00:25:07 +0100