xref: /illumos-gate/usr/src/man/man1/mandoc.1 (revision 9abc7a57)
1.\"	$Id: mandoc.1,v 1.164 2015/11/05 17:47:51 schwarze Exp $
2.\"
3.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4.\" Copyright (c) 2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
5.\"
6.\" Permission to use, copy, modify, and distribute this software for any
7.\" purpose with or without fee is hereby granted, provided that the above
8.\" copyright notice and this permission notice appear in all copies.
9.\"
10.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17.\"
18.Dd $Mdocdate: November 5 2015 $
19.Dt MANDOC 1
20.Os
21.Sh NAME
22.Nm mandoc
23.Nd format and display UNIX manuals
24.Sh SYNOPSIS
25.Nm mandoc
26.Op Fl acfhkl
27.Op Fl I Cm os Ns = Ns Ar name
28.Op Fl K Ar encoding
29.Op Fl m Ns Ar format
30.Op Fl O Ar option
31.Op Fl T Ar output
32.Op Fl W Ar level
33.Op Ar
34.Sh DESCRIPTION
35The
36.Nm
37utility formats
38.Ux
39manual pages for display.
40.Pp
41By default,
42.Nm
43reads
44.Xr mdoc 5
45or
46.Xr man 5
47text from stdin, implying
48.Fl m Ns Cm andoc ,
49and produces
50.Fl T Cm locale
51output.
52.Pp
53The options are as follows:
54.Bl -tag -width Ds
55.It Fl a
56If the standard output is a terminal device and
57.Fl c
58is not specified, use
59.Xr more 1
60to paginate the output, just like
61.Xr man 1
62would.
63.It Fl c
64Copy the formatted manual pages to the standard output without using
65.Xr more 1
66to paginate them.
67This is the default.
68It can be specified to override
69.Fl a .
70.It Fl f
71A synonym for
72.Xr whatis 1 .
73This overrides any earlier
74.Fl k
75and
76.Fl l
77options.
78.It Fl I Cm os Ns = Ns Ar name
79Override the default operating system
80.Ar name
81for the
82.Xr mdoc 5
83.Sq \&Os
84and for the
85.Xr man 5
86.Sq \&TH
87macro.
88.It Fl h
89Display only the SYNOPSIS lines.
90Implies
91.Fl c .
92.It Fl K Ar encoding
93Specify the input encoding.
94The supported
95.Ar encoding
96arguments are
97.Cm us-ascii ,
98.Cm iso-8859-1 ,
99and
100.Cm utf-8 .
101If not specified, autodetection uses the first match:
102.Bl -tag -width iso-8859-1
103.It Cm utf-8
104if the first three bytes of the input file
105are the UTF-8 byte order mark (BOM, 0xefbbbf)
106.It Ar encoding
107if the first or second line of the input file matches the
108.Sy emacs
109mode line format
110.Pp
111.D1 .\e" -*- Oo ...; Oc coding: Ar encoding ; No -*-
112.It Cm utf-8
113if the first non-ASCII byte in the file introduces a valid UTF-8 sequence
114.It Cm iso-8859-1
115otherwise
116.El
117.It Fl l
118A synonym for
119.Fl a .
120.It Fl m Ns Ar format
121Input format.
122See
123.Sx Input Formats
124for available formats.
125Defaults to
126.Fl m Ns Cm andoc .
127.It Fl O Ar option
128Comma-separated output options.
129.It Fl T Ar output
130Output format.
131See
132.Sx Output Formats
133for available formats.
134Defaults to
135.Fl T Cm locale .
136.It Fl W Ar level
137Specify the minimum message
138.Ar level
139to be reported on the standard error output and to affect the exit status.
140The
141.Ar level
142can be
143.Cm warning ,
144.Cm error ,
145or
146.Cm unsupp ;
147.Cm all
148is an alias for
149.Cm warning .
150By default,
151.Nm
152is silent.
153See
154.Sx EXIT STATUS
155and
156.Sx DIAGNOSTICS
157for details.
158.Pp
159The special option
160.Fl W Cm stop
161tells
162.Nm
163to exit after parsing a file that causes warnings or errors of at least
164the requested level.
165No formatted output will be produced from that file.
166If both a
167.Ar level
168and
169.Cm stop
170are requested, they can be joined with a comma, for example
171.Fl W Cm error , Ns Cm stop .
172.It Ar file
173Read input from zero or more files.
174If unspecified, reads from stdin.
175If multiple files are specified,
176.Nm
177will halt with the first failed parse.
178.El
179.Ss Input Formats
180The
181.Nm
182utility accepts
183.Xr mdoc 5
184and
185.Xr man 5
186input with
187.Fl m Ns Cm doc
188and
189.Fl m Ns Cm an ,
190respectively.
191The
192.Xr mdoc 5
193format is
194.Em strongly
195recommended;
196.Xr man 5
197should only be used for legacy manuals.
198.Pp
199A third option,
200.Fl m Ns Cm andoc ,
201which is also the default, determines encoding on-the-fly: if the first
202non-comment macro is
203.Sq \&Dd
204or
205.Sq \&Dt ,
206the
207.Xr mdoc 5
208parser is used; otherwise, the
209.Xr man 5
210parser is used.
211.Pp
212If multiple
213files are specified with
214.Fl m Ns Cm andoc ,
215each has its file-type determined this way.
216If multiple files are
217specified and
218.Fl m Ns Cm doc
219or
220.Fl m Ns Cm an
221is specified, then this format is used exclusively.
222.Ss Output Formats
223The
224.Nm
225utility accepts the following
226.Fl T
227arguments, which correspond to output modes:
228.Bl -tag -width "-T locale"
229.It Fl T Cm ascii
230Produce 7-bit ASCII output.
231See
232.Sx ASCII Output .
233.It Fl T Cm html
234Produce HTML5, CSS1, and MathML output.
235See
236.Sx HTML Output .
237.It Fl T Ns Cm lint
238Parse only: produce no output.
239Implies
240.Fl W Cm warning .
241.It Fl T Cm locale
242Encode output using the current locale.
243This is the default.
244See
245.Sx Locale Output .
246.It Fl T Cm man
247Produce
248.Xr man 5
249format output.
250See
251.Sx Man Output .
252.It Fl T Cm pdf
253Produce PDF output.
254See
255.Sx PDF Output .
256.It Fl T Cm ps
257Produce PostScript output.
258See
259.Sx PostScript Output .
260.It Fl T Cm tree
261Produce an indented parse tree.
262.It Fl T Cm utf8
263Encode output in the UTF\-8 multi-byte format.
264See
265.Sx UTF\-8 Output .
266.It Fl T Cm xhtml
267This is a synonym for
268.Fl T Cm html .
269.El
270.Pp
271If multiple input files are specified, these will be processed by the
272corresponding filter in-order.
273.Ss ASCII Output
274Output produced by
275.Fl T Cm ascii
276is rendered in standard 7-bit ASCII documented in
277.Xr ascii 5 .
278.Pp
279Font styles are applied by using back-spaced encoding such that an
280underlined character
281.Sq c
282is rendered as
283.Sq _ Ns \e[bs] Ns c ,
284where
285.Sq \e[bs]
286is the back-space character number 8.
287Emboldened characters are rendered as
288.Sq c Ns \e[bs] Ns c .
289.Pp
290The special characters documented in
291.Xr mandoc_char 5
292are rendered best-effort in an ASCII equivalent.
293.Pp
294Output width is limited to 78 visible columns unless literal input lines
295exceed this limit.
296.Pp
297The following
298.Fl O
299arguments are accepted:
300.Bl -tag -width Ds
301.It Cm indent Ns = Ns Ar indent
302The left margin for normal text is set to
303.Ar indent
304blank characters instead of the default of five for
305.Xr mdoc 5
306and seven for
307.Xr man 5 .
308Increasing this is not recommended; it may result in degraded formatting,
309for example overfull lines or ugly line breaks.
310.It Cm width Ns = Ns Ar width
311The output width is set to
312.Ar width ,
313which will normalise to \(>=58.
314.El
315.Ss HTML Output
316Output produced by
317.Fl T Cm html
318conforms to HTML5 using optional self-closing tags.
319Default styles use only CSS1.
320Equations rendered from
321.Xr eqn 5
322blocks use MathML.
323.Pp
324The
325.Pa mandoc.css
326file documents style-sheet classes available for customising output.
327If a style-sheet is not specified with
328.Fl O Cm style ,
329.Fl T Cm html
330defaults to simple output (via an embedded style-sheet)
331readable in any graphical or text-based web
332browser.
333.Pp
334Special characters are rendered in decimal-encoded UTF\-8.
335.Pp
336The following
337.Fl O
338arguments are accepted:
339.Bl -tag -width Ds
340.It Cm fragment
341Omit the <!DOCTYPE> declaration and the <html>, <head>, and <body>
342elements and only emit the subtree below the <body> element.
343The
344.Cm style
345argument will be ignored.
346This is useful when embedding manual content within existing documents.
347.It Cm includes Ns = Ns Ar fmt
348The string
349.Ar fmt ,
350for example,
351.Ar ../src/%I.html ,
352is used as a template for linked header files (usually via the
353.Sq \&In
354macro).
355Instances of
356.Sq \&%I
357are replaced with the include filename.
358The default is not to present a
359hyperlink.
360.It Cm man Ns = Ns Ar fmt
361The string
362.Ar fmt ,
363for example,
364.Ar ../html%S/%N.%S.html ,
365is used as a template for linked manuals (usually via the
366.Sq \&Xr
367macro).
368Instances of
369.Sq \&%N
370and
371.Sq %S
372are replaced with the linked manual's name and section, respectively.
373If no section is included, section 1 is assumed.
374The default is not to
375present a hyperlink.
376.It Cm style Ns = Ns Ar style.css
377The file
378.Ar style.css
379is used for an external style-sheet.
380This must be a valid absolute or
381relative URI.
382.El
383.Ss Locale Output
384Locale-depending output encoding is triggered with
385.Fl T Cm locale .
386This is the default.
387.Ss Man Output
388Translate input format into
389.Xr man 5
390output format.
391This is useful for distributing manual sources to legacy systems
392lacking
393.Xr mdoc 5
394formatters.
395.Pp
396If
397.Xr mdoc 5
398is passed as input, it is translated into
399.Xr man 5 .
400If the input format is
401.Xr man 5 ,
402the input is copied to the output, expanding any
403.Xr mandoc_roff 5
404.Sq so
405requests.
406The parser is also run, and as usual, the
407.Fl W
408level controls which
409.Sx DIAGNOSTICS
410are displayed before copying the input to the output.
411.Ss PDF Output
412PDF-1.1 output may be generated by
413.Fl T Cm pdf .
414See
415.Sx PostScript Output
416for
417.Fl O
418arguments and defaults.
419.Ss PostScript Output
420PostScript
421.Qq Adobe-3.0
422Level-2 pages may be generated by
423.Fl T Cm ps .
424Output pages default to letter sized and are rendered in the Times font
425family, 11-point.
426Margins are calculated as 1/9 the page length and width.
427Line-height is 1.4m.
428.Pp
429Special characters are rendered as in
430.Sx ASCII Output .
431.Pp
432The following
433.Fl O
434arguments are accepted:
435.Bl -tag -width Ds
436.It Cm paper Ns = Ns Ar name
437The paper size
438.Ar name
439may be one of
440.Ar a3 ,
441.Ar a4 ,
442.Ar a5 ,
443.Ar legal ,
444or
445.Ar letter .
446You may also manually specify dimensions as
447.Ar NNxNN ,
448width by height in millimetres.
449If an unknown value is encountered,
450.Ar letter
451is used.
452.El
453.Ss UTF\-8 Output
454Use
455.Fl T Cm utf8
456to force a UTF\-8 locale.
457See
458.Sx Locale Output
459for details and options.
460.Ss Syntax tree output
461Use
462.Fl T Cm tree
463to show a human readable representation of the syntax tree.
464It is useful for debugging the source code of manual pages.
465The exact format is subject to change, so don't write parsers for it.
466Each output line shows one syntax tree node.
467Child nodes are indented with respect to their parent node.
468The columns are:
469.Pp
470.Bl -enum -compact
471.It
472For macro nodes, the macro name; for text and
473.Xr tbl 5
474nodes, the content.
475There is a special format for
476.Xr eqn 5
477nodes.
478.It
479Node type (text, elem, block, head, body, body-end, tail, tbl, eqn).
480.It
481Flags:
482.Bl -dash -compact
483.It
484An opening parenthesis if the node is an opening delimiter.
485.It
486An asterisk if the node starts a new input line.
487.It
488The input line number (starting at one).
489.It
490A colon.
491.It
492The input column number (starting at one).
493.It
494A closing parenthesis if the node is a closing delimiter.
495.It
496A full stop if the node ends a sentence.
497.El
498.El
499.Sh EXIT STATUS
500The
501.Nm
502utility exits with one of the following values, controlled by the message
503.Ar level
504associated with the
505.Fl W
506option:
507.Pp
508.Bl -tag -width Ds -compact
509.It 0
510No warnings or errors occurred, or those that did were ignored because
511they were lower than the requested
512.Ar level .
513.It 2
514At least one warning occurred, but no error, and
515.Fl W Cm warning
516was specified.
517.It 3
518At least one parsing error occurred,
519but no unsupported feature was encountered, and
520.Fl W Cm error
521or
522.Fl W Cm warning
523was specified.
524.It 4
525At least one unsupported feature was encountered, and
526.Fl W Cm unsupp ,
527.Fl W Cm error
528or
529.Fl W Cm warning
530was specified.
531.It 5
532Invalid command line arguments were specified.
533No input files have been read.
534.It 6
535An operating system error occurred, for example exhaustion
536of memory, file descriptors, or process table entries.
537Such errors cause
538.Nm
539to exit at once, possibly in the middle of parsing or formatting a file.
540.El
541.Pp
542Note that selecting
543.Fl T Cm lint
544output mode implies
545.Fl W Cm warning .
546.Sh EXAMPLES
547To page manuals to the terminal:
548.Pp
549.Dl $ mandoc \-W all,stop mandoc.1 2\*(Gt&1 | less
550.Dl $ mandoc mandoc.1 mdoc.3 mdoc.5 | less
551.Pp
552To produce HTML manuals with
553.Pa mandoc.css
554as the style-sheet:
555.Pp
556.Dl $ mandoc \-T html -Ostyle=mandoc.css mdoc.5 \*(Gt mdoc.5.html
557.Pp
558To check over a large set of manuals:
559.Pp
560.Dl $ mandoc \-T lint \(gafind /usr/src -name \e*\e.[1-9]\(ga
561.Pp
562To produce a series of PostScript manuals for A4 paper:
563.Pp
564.Dl $ mandoc \-T ps \-O paper=a4 mdoc.5 man.5 \*(Gt manuals.ps
565.Pp
566Convert a modern
567.Xr mdoc 5
568manual to the older
569.Xr man 5
570format, for use on systems lacking an
571.Xr mdoc 5
572parser:
573.Pp
574.Dl $ mandoc \-T man foo.mdoc \*(Gt foo.man
575.Sh DIAGNOSTICS
576Messages displayed by
577.Nm
578follow this format:
579.Pp
580.D1 Nm Ns : Ar file : Ns Ar line : Ns Ar column : level : message : macro args
581.Pp
582Line and column numbers start at 1.
583Both are omitted for messages referring to an input file as a whole.
584Macro names and arguments are omitted where meaningless.
585Fatal messages about invalid command line arguments
586or operating system errors, for example when memory is exhausted,
587may also omit the
588.Ar file
589and
590.Ar level
591fields.
592.Pp
593Message levels have the following meanings:
594.Bl -tag -width "warning"
595.It Cm unsupp
596An input file uses unsupported low-level
597.Xr mandoc_roff 5
598features.
599The output may be incomplete and/or misformatted,
600so using GNU troff instead of
601.Nm
602to process the file may be preferable.
603.It Cm error
604An input file contains invalid syntax that cannot be safely interpreted.
605By discarding part of the input or inserting missing tokens,
606the parser is able to continue, and the error does not prevent
607generation of formatted output, but typically, preparing that
608output involves information loss, broken document structure
609or unintended formatting, no matter whether
610.Nm
611or GNU troff is used.
612In many cases, the output of
613.Nm
614and GNU troff is identical, but in some,
615.Nm
616is more resilient than GNU troff with respect to malformed input.
617.Pp
618Non-existent or unreadable input files are also reported on the
619.Cm error
620level.
621In that case, the parser cannot even be started and no output
622is produced from those input files.
623.It Cm warning
624An input file uses obsolete, discouraged or non-portable syntax.
625All the same, the meaning of the input is unambiguous and a correct
626rendering can be produced.
627Documents causing warnings may render poorly when using other
628formatting tools instead of
629.Nm .
630.El
631.Pp
632Messages of the
633.Cm warning ,
634.Cm error ,
635and
636.Cm unsupp
637levels except those about non-existent or unreadable input files
638are hidden unless their level, or a lower level, is requested using a
639.Fl W
640option or
641.Fl T Cm lint
642output mode.
643.Ss Warnings related to the document prologue
644.Bl -ohang
645.It Sy "missing manual title, using UNTITLED"
646.Pq mdoc
647A
648.Ic \&Dt
649macro has no arguments, or there is no
650.Ic \&Dt
651macro before the first non-prologue macro.
652.It Sy "missing manual title, using \(dq\(dq"
653.Pq man
654There is no
655.Ic \&TH
656macro, or it has no arguments.
657.It Sy "lower case character in document title"
658.Pq mdoc , man
659The title is still used as given in the
660.Ic \&Dt
661or
662.Ic \&TH
663macro.
664.It Sy "missing manual section, using \(dq\(dq"
665.Pq mdoc , man
666A
667.Ic \&Dt
668or
669.Ic \&TH
670macro lacks the mandatory section argument.
671.It Sy "unknown manual section"
672.Pq mdoc
673The section number in a
674.Ic \&Dt
675line is invalid, but still used.
676.It Sy "missing date, using today's date"
677.Pq mdoc, man
678The document was parsed as
679.Xr mdoc 5
680and it has no
681.Ic \&Dd
682macro, or the
683.Ic \&Dd
684macro has no arguments or only empty arguments;
685or the document was parsed as
686.Xr man 5
687and it has no
688.Ic \&TH
689macro, or the
690.Ic \&TH
691macro has less than three arguments or its third argument is empty.
692.It Sy "cannot parse date, using it verbatim"
693.Pq mdoc , man
694The date given in a
695.Ic \&Dd
696or
697.Ic \&TH
698macro does not follow the conventional format.
699.It Sy "missing Os macro, using \(dq\(dq"
700.Pq mdoc
701The default or current system is not shown in this case.
702.It Sy "duplicate prologue macro"
703.Pq mdoc
704One of the prologue macros occurs more than once.
705The last instance overrides all previous ones.
706.It Sy "late prologue macro"
707.Pq mdoc
708A
709.Ic \&Dd
710or
711.Ic \&Os
712macro occurs after some non-prologue macro, but still takes effect.
713.It Sy "skipping late title macro"
714.Pq mdoc
715The
716.Ic \&Dt
717macro appears after the first non-prologue macro.
718Traditional formatters cannot handle this because
719they write the page header before parsing the document body.
720Even though this technical restriction does not apply to
721.Nm ,
722traditional semantics is preserved.
723The late macro is discarded including its arguments.
724.It Sy "prologue macros out of order"
725.Pq mdoc
726The prologue macros are not given in the conventional order
727.Ic \&Dd ,
728.Ic \&Dt ,
729.Ic \&Os .
730All three macros are used even when given in another order.
731.El
732.Ss Warnings regarding document structure
733.Bl -ohang
734.It Sy ".so is fragile, better use ln(1)"
735.Pq roff
736Including files only works when the parser program runs with the correct
737current working directory.
738.It Sy "no document body"
739.Pq mdoc , man
740The document body contains neither text nor macros.
741An empty document is shown, consisting only of a header and a footer line.
742.It Sy "content before first section header"
743.Pq mdoc , man
744Some macros or text precede the first
745.Ic \&Sh
746or
747.Ic \&SH
748section header.
749The offending macros and text are parsed and added to the top level
750of the syntax tree, outside any section block.
751.It Sy "first section is not NAME"
752.Pq mdoc
753The argument of the first
754.Ic \&Sh
755macro is not
756.Sq NAME .
757This may confuse
758.Xr makewhatis 8
759and
760.Xr apropos 1 .
761.It Sy "NAME section without name"
762.Pq mdoc
763The NAME section does not contain any
764.Ic \&Nm
765child macro.
766.It Sy "NAME section without description"
767.Pq mdoc
768The NAME section lacks the mandatory
769.Ic \&Nd
770child macro.
771.It Sy "description not at the end of NAME"
772.Pq mdoc
773The NAME section does contain an
774.Ic \&Nd
775child macro, but other content follows it.
776.It Sy "bad NAME section content"
777.Pq mdoc
778The NAME section contains plain text or macros other than
779.Ic \&Nm
780and
781.Ic \&Nd .
782.It Sy "missing description line, using \(dq\(dq"
783.Pq mdoc
784The
785.Ic \&Nd
786macro lacks the required argument.
787The title line of the manual will end after the dash.
788.It Sy "sections out of conventional order"
789.Pq mdoc
790A standard section occurs after another section it usually precedes.
791All section titles are used as given,
792and the order of sections is not changed.
793.It Sy "duplicate section title"
794.Pq mdoc
795The same standard section title occurs more than once.
796.It Sy "unexpected section"
797.Pq mdoc
798A standard section header occurs in a section of the manual
799where it normally isn't useful.
800.It Sy "unusual Xr order"
801.Pq mdoc
802In the SEE ALSO section, an
803.Ic \&Xr
804macro with a lower section number follows one with a higher number,
805or two
806.Ic \&Xr
807macros referring to the same section are out of alphabetical order.
808.It Sy "unusual Xr punctuation"
809.Pq mdoc
810In the SEE ALSO section, punctuation between two
811.Ic \&Xr
812macros differs from a single comma, or there is trailing punctuation
813after the last
814.Ic \&Xr
815macro.
816.It Sy "AUTHORS section without An macro"
817.Pq mdoc
818An AUTHORS sections contains no
819.Ic \&An
820macros, or only empty ones.
821Probably, there are author names lacking markup.
822.El
823.Ss "Warnings related to macros and nesting"
824.Bl -ohang
825.It Sy "obsolete macro"
826.Pq mdoc
827See the
828.Xr mdoc 5
829manual for replacements.
830.It Sy "macro neither callable nor escaped"
831.Pq mdoc
832The name of a macro that is not callable appears on a macro line.
833It is printed verbatim.
834If the intention is to call it, move it to its own input line;
835otherwise, escape it by prepending
836.Sq \e& .
837.It Sy "skipping paragraph macro"
838In
839.Xr mdoc 5
840documents, this happens
841.Bl -dash -compact
842.It
843at the beginning and end of sections and subsections
844.It
845right before non-compact lists and displays
846.It
847at the end of items in non-column, non-compact lists
848.It
849and for multiple consecutive paragraph macros.
850.El
851In
852.Xr man 5
853documents, it happens
854.Bl -dash -compact
855.It
856for empty
857.Ic \&P ,
858.Ic \&PP ,
859and
860.Ic \&LP
861macros
862.It
863for
864.Ic \&IP
865macros having neither head nor body arguments
866.It
867for
868.Ic \&br
869or
870.Ic \&sp
871right after
872.Ic \&SH
873or
874.Ic \&SS
875.El
876.It Sy "moving paragraph macro out of list"
877.Pq mdoc
878A list item in a
879.Ic \&Bl
880list contains a trailing paragraph macro.
881The paragraph macro is moved after the end of the list.
882.It Sy "skipping no-space macro"
883.Pq mdoc
884An input line begins with an
885.Ic \&Ns
886macro.
887The macro is ignored.
888.It Sy "blocks badly nested"
889.Pq mdoc
890If two blocks intersect, one should completely contain the other.
891Otherwise, rendered output is likely to look strange in any output
892format, and rendering in SGML-based output formats is likely to be
893outright wrong because such languages do not support badly nested
894blocks at all.
895Typical examples of badly nested blocks are
896.Qq Ic \&Ao \&Bo \&Ac \&Bc
897and
898.Qq Ic \&Ao \&Bq \&Ac .
899In these examples,
900.Ic \&Ac
901breaks
902.Ic \&Bo
903and
904.Ic \&Bq ,
905respectively.
906.It Sy "nested displays are not portable"
907.Pq mdoc
908A
909.Ic \&Bd ,
910.Ic \&D1 ,
911or
912.Ic \&Dl
913display occurs nested inside another
914.Ic \&Bd
915display.
916This works with
917.Nm ,
918but fails with most other implementations.
919.It Sy "moving content out of list"
920.Pq mdoc
921A
922.Ic \&Bl
923list block contains text or macros before the first
924.Ic \&It
925macro.
926The offending children are moved before the beginning of the list.
927.It Sy "fill mode already enabled, skipping"
928.Pq man
929A
930.Ic \&fi
931request occurs even though the document is still in fill mode,
932or already switched back to fill mode.
933It has no effect.
934.It Sy "fill mode already disabled, skipping"
935.Pq man
936An
937.Ic \&nf
938request occurs even though the document already switched to no-fill mode
939and did not switch back to fill mode yet.
940It has no effect.
941.It Sy "line scope broken"
942.Pq man
943While parsing the next-line scope of the previous macro,
944another macro is found that prematurely terminates the previous one.
945The previous, interrupted macro is deleted from the parse tree.
946.El
947.Ss "Warnings related to missing arguments"
948.Bl -ohang
949.It Sy "skipping empty request"
950.Pq roff , eqn
951The macro name is missing from a macro definition request,
952or an
953.Xr eqn 5
954control statement or operation keyword lacks its required argument.
955.It Sy "conditional request controls empty scope"
956.Pq roff
957A conditional request is only useful if any of the following
958follows it on the same logical input line:
959.Bl -dash -compact
960.It
961The
962.Sq \e{
963keyword to open a multi-line scope.
964.It
965A request or macro or some text, resulting in a single-line scope.
966.It
967The immediate end of the logical line without any intervening whitespace,
968resulting in next-line scope.
969.El
970Here, a conditional request is followed by trailing whitespace only,
971and there is no other content on its logical input line.
972Note that it doesn't matter whether the logical input line is split
973across multiple physical input lines using
974.Sq \e
975line continuation characters.
976This is one of the rare cases
977where trailing whitespace is syntactically significant.
978The conditional request controls a scope containing whitespace only,
979so it is unlikely to have a significant effect,
980except that it may control a following
981.Ic \&el
982clause.
983.It Sy "skipping empty macro"
984.Pq mdoc
985The indicated macro has no arguments and hence no effect.
986.It Sy "empty block"
987.Pq mdoc , man
988A
989.Ic \&Bd ,
990.Ic \&Bk ,
991.Ic \&Bl ,
992.Ic \&D1 ,
993.Ic \&Dl ,
994.Ic \&RS ,
995or
996.Ic \&UR
997block contains nothing in its body and will produce no output.
998.It Sy "empty argument, using 0n"
999.Pq mdoc
1000The required width is missing after
1001.Ic \&Bd
1002or
1003.Ic \&Bl
1004.Fl offset
1005or
1006.Fl width.
1007.It Sy "missing display type, using -ragged"
1008.Pq mdoc
1009The
1010.Ic \&Bd
1011macro is invoked without the required display type.
1012.It Sy "list type is not the first argument"
1013.Pq mdoc
1014In a
1015.Ic \&Bl
1016macro, at least one other argument precedes the type argument.
1017The
1018.Nm
1019utility copes with any argument order, but some other
1020.Xr mdoc 5
1021implementations do not.
1022.It Sy "missing -width in -tag list, using 8n"
1023.Pq mdoc
1024Every
1025.Ic \&Bl
1026macro having the
1027.Fl tag
1028argument requires
1029.Fl width ,
1030too.
1031.It Sy "missing utility name, using \(dq\(dq"
1032.Pq mdoc
1033The
1034.Ic \&Ex Fl std
1035macro is called without an argument before
1036.Ic \&Nm
1037has first been called with an argument.
1038.It Sy "missing function name, using \(dq\(dq"
1039.Pq mdoc
1040The
1041.Ic \&Fo
1042macro is called without an argument.
1043No function name is printed.
1044.It Sy "empty head in list item"
1045.Pq mdoc
1046In a
1047.Ic \&Bl
1048.Fl diag ,
1049.Fl hang ,
1050.Fl inset ,
1051.Fl ohang ,
1052or
1053.Fl tag
1054list, an
1055.Ic \&It
1056macro lacks the required argument.
1057The item head is left empty.
1058.It Sy "empty list item"
1059.Pq mdoc
1060In a
1061.Ic \&Bl
1062.Fl bullet ,
1063.Fl dash ,
1064.Fl enum ,
1065or
1066.Fl hyphen
1067list, an
1068.Ic \&It
1069block is empty.
1070An empty list item is shown.
1071.It Sy "missing font type, using \efR"
1072.Pq mdoc
1073A
1074.Ic \&Bf
1075macro has no argument.
1076It switches to the default font.
1077.It Sy "unknown font type, using \efR"
1078.Pq mdoc
1079The
1080.Ic \&Bf
1081argument is invalid.
1082The default font is used instead.
1083.It Sy "nothing follows prefix"
1084.Pq mdoc
1085A
1086.Ic \&Pf
1087macro has no argument, or only one argument and no macro follows
1088on the same input line.
1089This defeats its purpose; in particular, spacing is not suppressed
1090before the text or macros following on the next input line.
1091.It Sy "empty reference block"
1092.Pq mdoc
1093An
1094.Ic \&Rs
1095macro is immediately followed by an
1096.Ic \&Re
1097macro on the next input line.
1098Such an empty block does not produce any output.
1099.It Sy "missing -std argument, adding it"
1100.Pq mdoc
1101An
1102.Ic \&Ex
1103or
1104.Ic \&Rv
1105macro lacks the required
1106.Fl std
1107argument.
1108The
1109.Nm
1110utility assumes
1111.Fl std
1112even when it is not specified, but other implementations may not.
1113.It Sy "missing option string, using \(dq\(dq"
1114.Pq man
1115The
1116.Ic \&OP
1117macro is invoked without any argument.
1118An empty pair of square brackets is shown.
1119.It Sy "missing resource identifier, using \(dq\(dq"
1120.Pq man
1121The
1122.Ic \&UR
1123macro is invoked without any argument.
1124An empty pair of angle brackets is shown.
1125.It Sy "missing eqn box, using \(dq\(dq"
1126.Pq eqn
1127A diacritic mark or a binary operator is found,
1128but there is nothing to the left of it.
1129An empty box is inserted.
1130.El
1131.Ss "Warnings related to bad macro arguments"
1132.Bl -ohang
1133.It Sy "unterminated quoted argument"
1134.Pq roff
1135Macro arguments can be enclosed in double quote characters
1136such that space characters and macro names contained in the quoted
1137argument need not be escaped.
1138The closing quote of the last argument of a macro can be omitted.
1139However, omitting it is not recommended because it makes the code
1140harder to read.
1141.It Sy "duplicate argument"
1142.Pq mdoc
1143A
1144.Ic \&Bd
1145or
1146.Ic \&Bl
1147macro has more than one
1148.Fl compact ,
1149more than one
1150.Fl offset ,
1151or more than one
1152.Fl width
1153argument.
1154All but the last instances of these arguments are ignored.
1155.It Sy "skipping duplicate argument"
1156.Pq mdoc
1157An
1158.Ic \&An
1159macro has more than one
1160.Fl split
1161or
1162.Fl nosplit
1163argument.
1164All but the first of these arguments are ignored.
1165.It Sy "skipping duplicate display type"
1166.Pq mdoc
1167A
1168.Ic \&Bd
1169macro has more than one type argument; the first one is used.
1170.It Sy "skipping duplicate list type"
1171.Pq mdoc
1172A
1173.Ic \&Bl
1174macro has more than one type argument; the first one is used.
1175.It Sy "skipping -width argument"
1176.Pq mdoc
1177A
1178.Ic \&Bl
1179.Fl column ,
1180.Fl diag ,
1181.Fl ohang ,
1182.Fl inset ,
1183or
1184.Fl item
1185list has a
1186.Fl width
1187argument.
1188That has no effect.
1189.It Sy "wrong number of cells"
1190In a line of a
1191.Ic \&Bl Fl column
1192list, the number of tabs or
1193.Ic \&Ta
1194macros is less than the number expected from the list header line
1195or exceeds the expected number by more than one.
1196Missing cells remain empty, and all cells exceeding the number of
1197columns are joined into one single cell.
1198.It Sy "unknown AT&T UNIX version"
1199.Pq mdoc
1200An
1201.Ic \&At
1202macro has an invalid argument.
1203It is used verbatim, with
1204.Qq "AT&T UNIX "
1205prefixed to it.
1206.It Sy "comma in function argument"
1207.Pq mdoc
1208An argument of an
1209.Ic \&Fa
1210or
1211.Ic \&Fn
1212macro contains a comma; it should probably be split into two arguments.
1213.It Sy "parenthesis in function name"
1214.Pq mdoc
1215The first argument of an
1216.Ic \&Fc
1217or
1218.Ic \&Fn
1219macro contains an opening or closing parenthesis; that's probably wrong,
1220parentheses are added automatically.
1221.It Sy "invalid content in Rs block"
1222.Pq mdoc
1223An
1224.Ic \&Rs
1225block contains plain text or non-% macros.
1226The bogus content is left in the syntax tree.
1227Formatting may be poor.
1228.It Sy "invalid Boolean argument"
1229.Pq mdoc
1230An
1231.Ic \&Sm
1232macro has an argument other than
1233.Cm on
1234or
1235.Cm off .
1236The invalid argument is moved out of the macro, which leaves the macro
1237empty, causing it to toggle the spacing mode.
1238.It Sy "unknown font, skipping request"
1239.Pq man , tbl
1240A
1241.Xr mandoc_roff 5
1242.Ic \&ft
1243request or a
1244.Xr tbl 5
1245.Ic \&f
1246layout modifier has an unknown
1247.Ar font
1248argument.
1249.It Sy "odd number of characters in request"
1250.Pq roff
1251A
1252.Ic \&tr
1253request contains an odd number of characters.
1254The last character is mapped to the blank character.
1255.El
1256.Ss "Warnings related to plain text"
1257.Bl -ohang
1258.It Sy "blank line in fill mode, using .sp"
1259.Pq mdoc
1260The meaning of blank input lines is only well-defined in non-fill mode:
1261In fill mode, line breaks of text input lines are not supposed to be
1262significant.
1263However, for compatibility with groff, blank lines in fill mode
1264are replaced with
1265.Ic \&sp
1266requests.
1267.It Sy "tab in filled text"
1268.Pq mdoc , man
1269The meaning of tab characters is only well-defined in non-fill mode:
1270In fill mode, whitespace is not supposed to be significant
1271on text input lines.
1272As an implementation dependent choice, tab characters on text lines
1273are passed through to the formatters in any case.
1274Given that the text before the tab character will be filled,
1275it is hard to predict which tab stop position the tab will advance to.
1276.It Sy "whitespace at end of input line"
1277.Pq mdoc , man , roff
1278Whitespace at the end of input lines is almost never semantically
1279significant \(em but in the odd case where it might be, it is
1280extremely confusing when reviewing and maintaining documents.
1281.It Sy "bad comment style"
1282.Pq roff
1283Comment lines start with a dot, a backslash, and a double-quote character.
1284The
1285.Nm
1286utility treats the line as a comment line even without the backslash,
1287but leaving out the backslash might not be portable.
1288.It Sy "invalid escape sequence"
1289.Pq roff
1290An escape sequence has an invalid opening argument delimiter, lacks the
1291closing argument delimiter, or the argument has too few characters.
1292If the argument is incomplete,
1293.Ic \e*
1294and
1295.Ic \en
1296expand to an empty string,
1297.Ic \eB
1298to the digit
1299.Sq 0 ,
1300and
1301.Ic \ew
1302to the length of the incomplete argument.
1303All other invalid escape sequences are ignored.
1304.It Sy "undefined string, using \(dq\(dq"
1305.Pq roff
1306If a string is used without being defined before,
1307its value is implicitly set to the empty string.
1308However, defining strings explicitly before use
1309keeps the code more readable.
1310.El
1311.Ss "Warnings related to tables"
1312.Bl -ohang
1313.It Sy "tbl line starts with span"
1314.Pq tbl
1315The first cell in a table layout line is a horizontal span
1316.Pq Sq Cm s .
1317Data provided for this cell is ignored, and nothing is printed in the cell.
1318.It Sy "tbl column starts with span"
1319.Pq tbl
1320The first line of a table layout specification
1321requests a vertical span
1322.Pq Sq Cm ^ .
1323Data provided for this cell is ignored, and nothing is printed in the cell.
1324.It Sy "skipping vertical bar in tbl layout"
1325.Pq tbl
1326A table layout specification contains more than two consecutive vertical bars.
1327A double bar is printed, all additional bars are discarded.
1328.El
1329.Ss "Errors related to tables"
1330.Bl -ohang
1331.It Sy "non-alphabetic character in tbl options"
1332.Pq tbl
1333The table options line contains a character other than a letter,
1334blank, or comma where the beginning of an option name is expected.
1335The character is ignored.
1336.It Sy "skipping unknown tbl option"
1337.Pq tbl
1338The table options line contains a string of letters that does not
1339match any known option name.
1340The word is ignored.
1341.It Sy "missing tbl option argument"
1342.Pq tbl
1343A table option that requires an argument is not followed by an
1344opening parenthesis, or the opening parenthesis is immediately
1345followed by a closing parenthesis.
1346The option is ignored.
1347.It Sy "wrong tbl option argument size"
1348.Pq tbl
1349A table option argument contains an invalid number of characters.
1350Both the option and the argument are ignored.
1351.It Sy "empty tbl layout"
1352.Pq tbl
1353A table layout specification is completely empty,
1354specifying zero lines and zero columns.
1355As a fallback, a single left-justified column is used.
1356.It Sy "invalid character in tbl layout"
1357.Pq tbl
1358A table layout specification contains a character that can neither
1359be interpreted as a layout key character nor as a layout modifier,
1360or a modifier precedes the first key.
1361The invalid character is discarded.
1362.It Sy "unmatched parenthesis in tbl layout"
1363.Pq tbl
1364A table layout specification contains an opening parenthesis,
1365but no matching closing parenthesis.
1366The rest of the input line, starting from the parenthesis, has no effect.
1367.It Sy "tbl without any data cells"
1368.Pq tbl
1369A table does not contain any data cells.
1370It will probably produce no output.
1371.It Sy "ignoring data in spanned tbl cell"
1372.Pq tbl
1373A table cell is marked as a horizontal span
1374.Pq Sq Cm s
1375or vertical span
1376.Pq Sq Cm ^
1377in the table layout, but it contains data.
1378The data is ignored.
1379.It Sy "ignoring extra tbl data cells"
1380.Pq tbl
1381A data line contains more cells than the corresponding layout line.
1382The data in the extra cells is ignored.
1383.It Sy "data block open at end of tbl"
1384.Pq tbl
1385A data block is opened with
1386.Cm T{ ,
1387but never closed with a matching
1388.Cm T} .
1389The remaining data lines of the table are all put into one cell,
1390and any remaining cells stay empty.
1391.El
1392.Ss "Errors related to roff, mdoc, and man code"
1393.Bl -ohang
1394.It Sy "input stack limit exceeded, infinite loop?"
1395.Pq roff
1396Explicit recursion limits are implemented for the following features,
1397in order to prevent infinite loops:
1398.Bl -dash -compact
1399.It
1400expansion of nested escape sequences
1401including expansion of strings and number registers,
1402.It
1403expansion of nested user-defined macros,
1404.It
1405and
1406.Ic \&so
1407file inclusion.
1408.El
1409When a limit is hit, the output is incorrect, typically losing
1410some content, but the parser can continue.
1411.It Sy "skipping bad character"
1412.Pq mdoc , man , roff
1413The input file contains a byte that is not a printable
1414.Xr ascii 5
1415character.
1416The message mentions the character number.
1417The offending byte is replaced with a question mark
1418.Pq Sq \&? .
1419Consider editing the input file to replace the byte with an ASCII
1420transliteration of the intended character.
1421.It Sy "skipping unknown macro"
1422.Pq mdoc , man , roff
1423The first identifier on a request or macro line is neither recognized as a
1424.Xr mandoc_roff 5
1425request, nor as a user-defined macro, nor, respectively, as an
1426.Xr mdoc 5
1427or
1428.Xr man 5
1429macro.
1430It may be mistyped or unsupported.
1431The request or macro is discarded including its arguments.
1432.It Sy "skipping insecure request"
1433.Pq roff
1434An input file attempted to run a shell command
1435or to read or write an external file.
1436Such attempts are denied for security reasons.
1437.It Sy "skipping item outside list"
1438.Pq mdoc , eqn
1439An
1440.Ic \&It
1441macro occurs outside any
1442.Ic \&Bl
1443list, or an
1444.Xr eqn 5
1445.Ic above
1446delimiter occurs outside any pile.
1447It is discarded including its arguments.
1448.It Sy "skipping column outside column list"
1449.Pq mdoc
1450A
1451.Ic \&Ta
1452macro occurs outside any
1453.Ic \&Bl Fl column
1454block.
1455It is discarded including its arguments.
1456.It Sy "skipping end of block that is not open"
1457.Pq mdoc , man , eqn , tbl , roff
1458Various syntax elements can only be used to explicitly close blocks
1459that have previously been opened.
1460An
1461.Xr mdoc 5
1462block closing macro, a
1463.Xr man 5
1464.Ic \&RE
1465or
1466.Ic \&UE
1467macro, an
1468.Xr eqn 5
1469right delimiter or closing brace, or the end of an equation, table, or
1470.Xr mandoc_roff 5
1471conditional request is encountered but no matching block is open.
1472The offending request or macro is discarded.
1473.It Sy "fewer RS blocks open, skipping"
1474.Pq man
1475The
1476.Ic \&RE
1477macro is invoked with an argument, but less than the specified number of
1478.Ic \&RS
1479blocks is open.
1480The
1481.Ic \&RE
1482macro is discarded.
1483.It Sy "inserting missing end of block"
1484.Pq mdoc , tbl
1485Various
1486.Xr mdoc 5
1487macros as well as tables require explicit closing by dedicated macros.
1488A block that doesn't support bad nesting
1489ends before all of its children are properly closed.
1490The open child nodes are closed implicitly.
1491.It Sy "appending missing end of block"
1492.Pq mdoc , man , eqn , tbl , roff
1493At the end of the document, an explicit
1494.Xr mdoc 5
1495block, a
1496.Xr man 5
1497next-line scope or
1498.Ic \&RS
1499or
1500.Ic \&UR
1501block, an equation, table, or
1502.Xr mandoc_roff 5
1503conditional or ignore block is still open.
1504The open block is closed implicitly.
1505.It Sy "escaped character not allowed in a name"
1506.Pq roff
1507Macro, string and register identifiers consist of printable,
1508non-whitespace ASCII characters.
1509Escape sequences and characters and strings expressed in terms of them
1510cannot form part of a name.
1511The first argument of an
1512.Ic \&am ,
1513.Ic \&as ,
1514.Ic \&de ,
1515.Ic \&ds ,
1516.Ic \&nr ,
1517or
1518.Ic \&rr
1519request, or any argument of an
1520.Ic \&rm
1521request, or the name of a request or user defined macro being called,
1522is terminated by an escape sequence.
1523In the cases of
1524.Ic \&as ,
1525.Ic \&ds ,
1526and
1527.Ic \&nr ,
1528the request has no effect at all.
1529In the cases of
1530.Ic \&am ,
1531.Ic \&de ,
1532.Ic \&rr ,
1533and
1534.Ic \&rm ,
1535what was parsed up to this point is used as the arguments to the request,
1536and the rest of the input line is discarded including the escape sequence.
1537When parsing for a request or a user-defined macro name to be called,
1538only the escape sequence is discarded.
1539The characters preceding it are used as the request or macro name,
1540the characters following it are used as the arguments to the request or macro.
1541.It Sy "NOT IMPLEMENTED: Bd -file"
1542.Pq mdoc
1543For security reasons, the
1544.Ic \&Bd
1545macro does not support the
1546.Fl file
1547argument.
1548By requesting the inclusion of a sensitive file, a malicious document
1549might otherwise trick a privileged user into inadvertently displaying
1550the file on the screen, revealing the file content to bystanders.
1551The argument is ignored including the file name following it.
1552.It Sy "skipping display without arguments"
1553.Pq mdoc
1554A
1555.Ic \&Bd
1556block macro does not have any arguments.
1557The block is discarded, and the block content is displayed in
1558whatever mode was active before the block.
1559.It Sy "missing list type, using -item"
1560.Pq mdoc
1561A
1562.Ic \&Bl
1563macro fails to specify the list type.
1564.It Sy "missing manual name, using \(dq\(dq"
1565.Pq mdoc
1566The first call to
1567.Ic \&Nm
1568lacks the required argument.
1569.It Sy "uname(3) system call failed, using UNKNOWN"
1570.Pq mdoc
1571The
1572.Ic \&Os
1573macro is called without arguments, and the
1574.Xr uname 3
1575system call failed.
1576As a workaround,
1577.Nm
1578can be compiled with
1579.Sm off
1580.Fl D Cm OSNAME=\(dq\e\(dq Ar string Cm \e\(dq\(dq .
1581.Sm on
1582.It Sy "unknown standard specifier"
1583.Pq mdoc
1584An
1585.Ic \&St
1586macro has an unknown argument and is discarded.
1587.It Sy "skipping request without numeric argument"
1588.Pq roff , eqn
1589An
1590.Ic \&it
1591request or an
1592.Xr eqn 5
1593.Ic \&size
1594or
1595.Ic \&gsize
1596statement has a non-numeric or negative argument or no argument at all.
1597The invalid request or statement is ignored.
1598.It Sy "NOT IMPLEMENTED: .so with absolute path or \(dq..\(dq"
1599.Pq roff
1600For security reasons,
1601.Nm
1602allows
1603.Ic \&so
1604file inclusion requests only with relative paths
1605and only without ascending to any parent directory.
1606By requesting the inclusion of a sensitive file, a malicious document
1607might otherwise trick a privileged user into inadvertently displaying
1608the file on the screen, revealing the file content to bystanders.
1609.Nm
1610only shows the path as it appears behind
1611.Ic \&so .
1612.It Sy ".so request failed"
1613.Pq roff
1614Servicing a
1615.Ic \&so
1616request requires reading an external file, but the file could not be
1617opened.
1618.Nm
1619only shows the path as it appears behind
1620.Ic \&so .
1621.It Sy "skipping all arguments"
1622.Pq mdoc , man , eqn , roff
1623An
1624.Xr mdoc 5
1625.Ic \&Bt ,
1626.Ic \&Ed ,
1627.Ic \&Ef ,
1628.Ic \&Ek ,
1629.Ic \&El ,
1630.Ic \&Lp ,
1631.Ic \&Pp ,
1632.Ic \&Re ,
1633.Ic \&Rs ,
1634or
1635.Ic \&Ud
1636macro, an
1637.Ic \&It
1638macro in a list that don't support item heads, a
1639.Xr man 5
1640.Ic \&LP ,
1641.Ic \&P ,
1642or
1643.Ic \&PP
1644macro, an
1645.Xr eqn 5
1646.Ic \&EQ
1647or
1648.Ic \&EN
1649macro, or a
1650.Xr mandoc_roff 5
1651.Ic \&br ,
1652.Ic \&fi ,
1653or
1654.Ic \&nf
1655request or
1656.Sq \&..
1657block closing request is invoked with at least one argument.
1658All arguments are ignored.
1659.It Sy "skipping excess arguments"
1660.Pq mdoc , man , roff
1661A macro or request is invoked with too many arguments:
1662.Bl -dash -offset 2n -width 2n -compact
1663.It
1664.Ic \&Fo ,
1665.Ic \&PD ,
1666.Ic \&RS ,
1667.Ic \&UR ,
1668.Ic \&ft ,
1669or
1670.Ic \&sp
1671with more than one argument
1672.It
1673.Ic \&An
1674with another argument after
1675.Fl split
1676or
1677.Fl nosplit
1678.It
1679.Ic \&RE
1680with more than one argument or with a non-integer argument
1681.It
1682.Ic \&OP
1683or a request of the
1684.Ic \&de
1685family with more than two arguments
1686.It
1687.Ic \&Dt
1688with more than three arguments
1689.It
1690.Ic \&TH
1691with more than five arguments
1692.It
1693.Ic \&Bd ,
1694.Ic \&Bk ,
1695or
1696.Ic \&Bl
1697with invalid arguments
1698.El
1699The excess arguments are ignored.
1700.El
1701.Ss Unsupported features
1702.Bl -ohang
1703.It Sy "input too large"
1704.Pq mdoc , man
1705Currently,
1706.Nm
1707cannot handle input files larger than its arbitrary size limit
1708of 2^31 bytes (2 Gigabytes).
1709Since useful manuals are always small, this is not a problem in practice.
1710Parsing is aborted as soon as the condition is detected.
1711.It Sy "unsupported control character"
1712.Pq roff
1713An ASCII control character supported by other
1714.Xr mandoc_roff 5
1715implementations but not by
1716.Nm
1717was found in an input file.
1718It is replaced by a question mark.
1719.It Sy "unsupported roff request"
1720.Pq roff
1721An input file contains a
1722.Xr mandoc_roff 5
1723request supported by GNU troff or Heirloom troff but not by
1724.Nm ,
1725and it is likely that this will cause information loss
1726or considerable misformatting.
1727.It Sy "eqn delim option in tbl"
1728.Pq eqn , tbl
1729The options line of a table defines equation delimiters.
1730Any equation source code contained in the table will be printed unformatted.
1731.It Sy "unsupported table layout modifier"
1732.Pq tbl
1733A table layout specification contains an
1734.Sq Cm m
1735modifier.
1736The modifier is discarded.
1737.It Sy "ignoring macro in table"
1738.Pq tbl , mdoc , man
1739A table contains an invocation of an
1740.Xr mdoc 5
1741or
1742.Xr man 5
1743macro or of an undefined macro.
1744The macro is ignored, and its arguments are handled
1745as if they were a text line.
1746.El
1747.Sh SEE ALSO
1748.Xr eqn 5 ,
1749.Xr man 5 ,
1750.Xr mandoc_char 5 ,
1751.Xr mandoc_roff 5 ,
1752.Xr mdoc 5 ,
1753.Xr tbl 5
1754.Sh AUTHORS
1755.An -nosplit
1756The
1757.Nm
1758utility was written by
1759.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
1760and is maintained by
1761.An Ingo Schwarze Aq Mt schwarze@openbsd.org .
1762.Sh BUGS
1763In
1764.Fl T Cm html ,
1765the maximum size of an element attribute is determined by
1766.Dv BUFSIZ ,
1767which is usually 1024 bytes.
1768Be aware of this when setting long link
1769formats such as
1770.Fl O Cm style Ns = Ns Ar really/long/link .
1771