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