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