]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/mdocml/TODO
Update Annapurna Alpine HAL to a newer version.
[FreeBSD/FreeBSD.git] / contrib / mdocml / TODO
1 ************************************************************************
2 * Official mandoc TODO.
3 * $Id: TODO,v 1.218 2016/06/05 21:06:04 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 - In -man -Thtml, .nf does not preserve indentation.
420   It should either convert blanks to &nbsp;
421   or use <pre> rather than <div> (like .Bd -literal does).
422   Reported by afresh1@  12 Apr 2016 14:35:45 -0700
423
424 - .Bf at the beginning of a paragraph inserts a bogus 1ex horizontal
425   space, see for example random(3).  Introduced in
426   http://mdocml.bsd.lv/cgi-bin/cvsweb/mdoc_html.c.diff?r1=1.91&r2=1.92
427   reported by deraadt@ Mon, 28 Sep 2015 20:14:13 -0600 (MDT)
428   loc **  exist **  algo **  size *  imp *
429
430 - jsg on icb, Nov 3, 2014:
431   try to guess Xr in man(7) for hyperlinking
432
433 - The tables used to render the three-part page headers actually force
434   the width of the <body> to the max-width given for <html>.
435   Not yet sure how to fix that...
436   Observed by an Anonymous Coward on undeadly.org:
437   http://undeadly.org/cgi?action=article&sid=20140925064244&pid=1
438   loc *  exist *  algo **  size *  imp ***
439
440 - consider whether <var> can be used for Ar Dv Er Ev Fa Va.
441   from bentley@  Wed, 13 Aug 2014 09:17:55 -0600
442
443 - generate <img> tags in HTML
444   idea from florian@  Tue, 7 Apr 2015 00:26:28 +0000
445   may be possible to implement with .Lk img://something.png alt_text
446
447 - check https://github.com/trentm/mdocml
448
449 ************************************************************************
450 * formatting issues: gratuitous differences
451 ************************************************************************
452
453 - .Fn reopens a new scope after punctuation in mandoc,
454   but closes its scope for good in groff.
455   Do we want to change mandoc or groff?
456   Steffen Nurpmeso  Sat, 08 Nov 2014 13:34:59 +0100
457   loc *  exist **  algo **  size *  imp **
458
459 - In .Bl -enum -width 0n, groff continues one the same line after
460   the number, mandoc breaks the line.
461   mail to kristaps@  Mon, 20 Jul 2009 02:21:39 +0200
462   loc *  exist **  algo **  size *  imp **
463
464 - .Pp between two .It in .Bl -column should produce one,
465   not two blank lines, see e.g. login.conf(5).
466   reported by jmc@  Sun, 17 Apr 2011 14:04:58 +0059
467   reported again by sthen@  Wed, 18 Jan 2012 02:09:39 +0000 (UTC)
468   loc *  exist ***  algo **  size *  imp **
469
470 - If the *first* line after .It is .Pp, break the line right after
471   the tag, do not pad with space characters before breaking.
472   See the description of the a, c, and i commands in sed(1).
473   loc *  exist **  algo **  size *  imp **
474
475 - If the first line after .It is .D1, do not assert a blank line
476   in between, see for example tmux(1).
477   reported by nicm@  13 Jan 2011 00:18:57 +0000
478   loc *  exist **  algo **  size *  imp **
479
480 - Trailing punctuation after .It should trigger EOS spacing.
481   reported by Nicolas Joly  Sat, 17 Nov 2012 11:49:54 +0100
482   Probably, this should be fixed somewhere in termp_it_pre(), not sure.
483   loc *  exist **  algo **  size *  imp **
484
485 - .Nx 1.0a
486   should be "NetBSD 1.0A", not "NetBSD 1.0a",
487   see OpenBSD ccdconfig(8).
488   loc *  exist *  algo *  size *  imp **
489
490 - In .Bl -tag, if a tag exceeds the right margin and must be continued
491   on the next line, it must be indented by -width, not width+1;
492   see "rule block|pass" in OpenBSD ifconfig(8).
493   loc *  exist ***  algo **  size *  imp **
494
495 - When the -width string contains macros, the macros must be rendered
496   before measuring the width, for example
497     .Bl -tag -width ".Dv message"
498   in magic(5), located in src/usr.bin/file, is the same
499   as -width 7n, not -width 11n.
500   The same applies to .Bl -column column widths;
501   reported again by Nicolas Joly Thu, 1 Mar 2012 13:41:26 +0100 via wiz@ 5 Mar
502   reported again by Franco Fichtner Fri, 27 Sep 2013 21:02:28 +0200
503   loc ***  exist ***  algo ***  size **  imp ***
504   An easy partial fix would be to just skip the first word if it starts
505   with a dot, including any following white space, when measuring.
506   loc *  exist *  algo *  size *  imp ***
507
508 - The \& zero-width character counts as output.
509   That is, when it is alone on a line between two .Pp,
510   we want three blank lines, not two as in mandoc.
511   loc **  exist **  algo **  size *  imp **
512
513 - Header lines of excessive length:
514   Port OpenBSD man_term.c rev. 1.25 to mdoc_term.c
515   and document it in mdoc(7) and man(7) COMPATIBILITY
516   found while talking to Chris Bennett
517   loc *  exist *  algo *  size *  imp *
518
519 - Sequences of multiple man(7) paragraphs (.PP, .IP) interspersed
520   with .ps and .nf/.fi produce execessive blank lines, see libJudy
521   and graphics/dcmtk.  The parser reorg may help with this.
522
523 - trailing whitespace must be ignored even when followed by a font escape,
524   see for example
525     makes
526     \fBdig \fR
527     operate in batch mode
528   in dig(1).
529   loc **  exist **  algo **  size *  imp **
530
531 ************************************************************************
532 * portability
533 ************************************************************************
534
535 - systems having UTF-8 but not en_US.UTF-8
536   call locale(1) from ./configure, select a UTF-8-locale,
537   and use that for test-wchar.c and term_ascii.c
538   to Markus Waldeck  Sat, 18 Jul 2015 01:55:37 +0200
539   loc *  exist *  algo *  size *  imp *
540
541 ************************************************************************
542 * warning issues
543 ************************************************************************
544
545 - provide a way in mandoc(1) to warn about broken .Xr links;
546   probably cannot be on by default in -Tlint because it needs
547   to access the manpath and mandoc.db(3) after parsing.
548   asked for by jmc@ Fri, 4 Dec 2015 22:39:40 +0000
549
550 - Report errors in -O suboption parsing.
551   loc *  exist *  algo *  size *  imp **
552
553 - warn when .Sh or .Ss contain other macros
554   Steffen Nurpmeso, savannah.gnu.org/bugs/index.php?45034
555   loc *  exist *  algo *  size *  imp **
556
557 - check that MANDOCERR_BADTAB is thrown in the right cases,
558   i.e. when finding a literal tab character in fill mode,
559   and possibly change the wording of the warning message
560   to refer to fill mode, not literal mode
561   See the mail from Werner LEMBERG on the groff list,
562   Fri, 14 Feb 2014 18:54:42 +0100 (CET)
563   loc *  exist **  algo **  size *  imp **
564
565 - warn about attempts to call non-callable macros
566   Steffen Nurpmeso  Tue, 11 Nov 2014 22:55:16 +0100
567   Note that formatting is inconsistent in groff.
568   .Fn Po prints "Po()", .Ar Sh prints "file ..." and no "Sh".
569   Relatively hard because the relevant code is scattered
570   all over mdoc_macro.c and all subtly different.
571   loc **  exist **  algo **  size **  imp **
572
573 - warn about "new sentence, new line"
574   loc **  exist **  algo ***  size *  imp **
575
576 - mandoc_special does not really check the escape sequence,
577   but just the overall format
578   loc **  exist **  algo ***  size **  imp **
579
580 - integrate mdoclint into mandoc ("end-of-line whitespace" thread)
581   from jmc@  Mon, 13 Jul 2009 17:12:09 +0100
582   from kristaps@  Mon, 13 Jul 2009 18:34:53 +0200
583   from jmc@  Mon, 13 Jul 2009 17:45:37 +0059
584   from kristaps@  Mon, 13 Jul 2009 19:02:03 +0200
585   (mostly done, check what remains)
586
587 - -Tlint parser errors and warnings to stdout
588   to tech@mdocml, naddy@  Wed, 28 Sep 2011 11:21:46 +0200
589   wait!  kristaps@  Sun, 02 Oct 2011 17:12:52 +0200
590
591 ************************************************************************
592 * documentation issues
593 ************************************************************************
594
595 - mention hyphenation rules:
596   breaking at letter-letter in text mode (not macro args)
597   proper hyphenation is unimplemented
598
599 - talk about spacing around delimiters
600   to jmc@, kristaps@  Sat, 23 Apr 2011 17:41:27 +0200
601
602 - mark macros as: page structure domain, manual domain, general text domain
603   is this useful?
604
605 - mention /usr/share/misc/mdoc.template in mdoc(7)?
606
607 - Is all the content from http://www.std.com/obi/BSD/doc/usd/28.tbl/tbl
608   covered in tbl(7)?
609
610 ************************************************************************
611 * performance issues
612 ************************************************************************
613
614 - Why are we using MAP_SHARED, not MAP_PRIVATE for mmap(2)?
615   How does SQLITE_CONFIG_PAGECACHE actually work?  Document it!
616   from kristaps@  Sat, 09 Aug 2014 13:51:36 +0200
617
618 Several areas can be cleaned up to make mandoc even faster.  These are
619
620 - improve hashing mechanism for macros (quite important: performance)
621
622 - improve hashing mechanism for characters (not as important)
623
624 - the PDF file is HUGE: this can be reduced by using relative offsets
625
626 - instead of re-initialising the roff predefined-strings set before each
627   parse, create a read-only version the first time and copy it
628   loc *  exist **  algo **  size *  imp **
629
630 ************************************************************************
631 * structural issues
632 ************************************************************************
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