]> git.cameronkatri.com Git - mandoc.git/blob - mandoc.1
various nits found with mandoc -Tlint
[mandoc.git] / mandoc.1
1 .\" $Id: mandoc.1,v 1.214 2017/07/04 14:40:38 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 4 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 An input file contains invalid syntax that cannot be safely interpreted.
723 By discarding part of the input or inserting missing tokens,
724 the parser is able to continue, and the error does not prevent
725 generation of formatted output, but typically, preparing that
726 output involves information loss, broken document structure
727 or unintended formatting, no matter whether
728 .Nm
729 or GNU troff is used.
730 In many cases, the output of
731 .Nm
732 and GNU troff is identical, but in some,
733 .Nm
734 is more resilient than GNU troff with respect to malformed input.
735 .Pp
736 Non-existent or unreadable input files are also reported on the
737 .Cm error
738 level.
739 In that case, the parser cannot even be started and no output
740 is produced from those input files.
741 .It Cm warning
742 An input file uses obsolete, discouraged or non-portable syntax.
743 All the same, the meaning of the input is unambiguous and a correct
744 rendering can be produced.
745 Documents causing warnings may render poorly when using other
746 formatting tools instead of
747 .Nm .
748 .It Cm style
749 An input file uses dubious or discouraged style.
750 This is not a complaint about the syntax, and probably neither
751 formatting nor portability are in danger.
752 While great care is taken to avoid false positives on the higher
753 message levels, the
754 .Cm style
755 level tries to reduce the probability that issues go unnoticed,
756 so it may occasionally issue bogus suggestions.
757 Please use your good judgement to decide whether any particular
758 .Cm style
759 suggestion really justifies a change to the input file.
760 .It Cm base
761 A convertion used in the base system of a specific operating system
762 is not adhered to.
763 These are not markup mistakes, and neither the quality of formatting
764 nor portability are in danger.
765 Messages of the
766 .Cm base
767 level are printed with the more intuitive
768 .Cm style
769 .Ar level
770 tag.
771 .El
772 .Pp
773 Messages of the
774 .Cm base ,
775 .Cm style ,
776 .Cm warning ,
777 .Cm error ,
778 and
779 .Cm unsupp
780 levels except those about non-existent or unreadable input files
781 are hidden unless their level, or a lower level, is requested using a
782 .Fl W
783 option or
784 .Fl T Cm lint
785 output mode.
786 .Pp
787 As indicated below, all
788 .Cm base
789 and some
790 .Cm style
791 checks are only performed if a specific operating system name occurs
792 in the arguments of the
793 .Fl W
794 command line option, of the
795 .Ic \&Os
796 macro, of the
797 .Fl Ios
798 command line option, or, if neither are present, in the return value
799 of the
800 .Xr uname 3
801 function.
802 .Ss Conventions for base system manuals
803 .Bl -ohang
804 .It Sy "Mdocdate found"
805 .Pq mdoc , Nx
806 The
807 .Ic \&Dd
808 macro uses CVS
809 .Ic Mdocdate
810 keyword substitution, which is not supported by the
811 .Nx
812 base system.
813 Consider using the conventional
814 .Dq "Month dd, yyyy"
815 format instead.
816 .It Sy "Mdocdate missing"
817 .Pq mdoc , Ox
818 The
819 .Ic \&Dd
820 macro does not use CVS
821 .Ic Mdocdate
822 keyword substitution, but using it is conventionally expected in the
823 .Ox
824 base system.
825 .It Sy "unknown architecture"
826 .Pq mdoc , Ox , Nx
827 The third argument of the
828 .Ic \&Dt
829 macro does not match any of the architectures this operating system
830 is running on.
831 .It Sy "operating system explicitly specified"
832 .Pq mdoc , Ox , Nx
833 The
834 .Ic \&Os
835 macro has an argument.
836 In the base system, it is conventionally left blank.
837 .It Sy "RCS id missing"
838 .Pq Ox , Nx
839 The manual page lacks the comment line with the RCS identifier
840 generated by CVS
841 .Ic OpenBSD
842 or
843 .Ic NetBSD
844 keyword substitution as conventionally used in these operating systems.
845 .It Sy "referenced manual not found"
846 .Pq mdoc
847 An
848 .Ic \&Xr
849 macro references a manual page that is not found in the base system.
850 The path to look for base system manuals is configurable at compile
851 time and defaults to
852 .Pa /usr/share/man : /usr/X11R6/man .
853 .El
854 .Ss Style suggestions
855 .Bl -ohang
856 .It Sy "legacy man(7) date format"
857 .Pq mdoc
858 The
859 .Ic \&Dd
860 macro uses the legacy
861 .Xr man 7
862 date format
863 .Dq yyyy-dd-mm .
864 Consider using the conventional
865 .Xr mdoc 7
866 date format
867 .Dq "Month dd, yyyy"
868 instead.
869 .It Sy "duplicate RCS id"
870 A single manual page contains two copies of the RCS identifier for
871 the same operating system.
872 Consider deleting the later instance and moving the first one up
873 to the top of the page.
874 .It Sy "typo in section name"
875 .Pq mdoc
876 Fuzzy string matching revealed that the argument of an
877 .Ic \&Sh
878 macro is similar, but not identical to a standard section name.
879 .It Sy "useless macro"
880 .Pq mdoc
881 A
882 .Ic \&Bt ,
883 .Ic \&Tn ,
884 or
885 .Ic \&Ud
886 macro was found.
887 Simply delete it: it serves no useful purpose.
888 .It Sy "consider using OS macro"
889 .Pq mdoc
890 A string was found in plain text or in a
891 .Ic \&Bx
892 macro that could be represented using
893 .Ic \&Ox ,
894 .Ic \&Nx ,
895 .Ic \&Fx ,
896 or
897 .Ic \&Dx .
898 .It Sy "errnos out of order"
899 .Pq mdoc, Nx
900 The
901 .Ic \&Er
902 items in a
903 .Ic \&Bl
904 list are not in alphabetical order.
905 .It Sy "duplicate errno"
906 .Pq mdoc, Nx
907 A
908 .Ic \&Bl
909 list contains two consecutive
910 .Ic \&It
911 entries describing the same
912 .Ic \&Er
913 number.
914 .It Sy "trailing delimiter"
915 .Pq mdoc
916 The last argument of an
917 .Ic \&Ex , \&Fo , \&Nd , \&Nm , \&Os , \&Sh , \&Ss , \&St ,
918 or
919 .Ic \&Sx
920 macro ends with a trailing delimiter.
921 This is usually bad style and often indicates typos.
922 Most likely, the delimiter can be removed.
923 .It Sy "no blank before trailing delimiter"
924 .Pq mdoc
925 The last argument of a macro that supports trailing delimiter
926 arguments is longer than one byte and ends with a trailing delimiter.
927 Consider inserting a blank such that the delimiter becomes a separate
928 argument, thus moving it out of the scope of the macro.
929 .It Sy "function name without markup"
930 .Pq mdoc
931 A word followed by an empty pair of parentheses occurs on a text line.
932 Consider using an
933 .Ic \&Fn
934 or
935 .Ic \&Xr
936 macro.
937 .El
938 .Ss Warnings related to the document prologue
939 .Bl -ohang
940 .It Sy "missing manual title, using UNTITLED"
941 .Pq mdoc
942 A
943 .Ic \&Dt
944 macro has no arguments, or there is no
945 .Ic \&Dt
946 macro before the first non-prologue macro.
947 .It Sy "missing manual title, using \(dq\(dq"
948 .Pq man
949 There is no
950 .Ic \&TH
951 macro, or it has no arguments.
952 .It Sy "lower case character in document title"
953 .Pq mdoc , man
954 The title is still used as given in the
955 .Ic \&Dt
956 or
957 .Ic \&TH
958 macro.
959 .It Sy "missing manual section, using \(dq\(dq"
960 .Pq mdoc , man
961 A
962 .Ic \&Dt
963 or
964 .Ic \&TH
965 macro lacks the mandatory section argument.
966 .It Sy "unknown manual section"
967 .Pq mdoc
968 The section number in a
969 .Ic \&Dt
970 line is invalid, but still used.
971 .It Sy "missing date, using today's date"
972 .Pq mdoc, man
973 The document was parsed as
974 .Xr mdoc 7
975 and it has no
976 .Ic \&Dd
977 macro, or the
978 .Ic \&Dd
979 macro has no arguments or only empty arguments;
980 or the document was parsed as
981 .Xr man 7
982 and it has no
983 .Ic \&TH
984 macro, or the
985 .Ic \&TH
986 macro has less than three arguments or its third argument is empty.
987 .It Sy "cannot parse date, using it verbatim"
988 .Pq mdoc , man
989 The date given in a
990 .Ic \&Dd
991 or
992 .Ic \&TH
993 macro does not follow the conventional format.
994 .It Sy "date in the future, using it anyway"
995 .Pq mdoc , man
996 The date given in a
997 .Ic \&Dd
998 or
999 .Ic \&TH
1000 macro is more than a day ahead of the current system
1001 .Xr time 3 .
1002 .It Sy "missing Os macro, using \(dq\(dq"
1003 .Pq mdoc
1004 The default or current system is not shown in this case.
1005 .It Sy "duplicate prologue macro"
1006 .Pq mdoc
1007 One of the prologue macros occurs more than once.
1008 The last instance overrides all previous ones.
1009 .It Sy "late prologue macro"
1010 .Pq mdoc
1011 A
1012 .Ic \&Dd
1013 or
1014 .Ic \&Os
1015 macro occurs after some non-prologue macro, but still takes effect.
1016 .It Sy "skipping late title macro"
1017 .Pq mdoc
1018 The
1019 .Ic \&Dt
1020 macro appears after the first non-prologue macro.
1021 Traditional formatters cannot handle this because
1022 they write the page header before parsing the document body.
1023 Even though this technical restriction does not apply to
1024 .Nm ,
1025 traditional semantics is preserved.
1026 The late macro is discarded including its arguments.
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 "fill mode already enabled, skipping"
1272 .Pq man
1273 A
1274 .Ic \&fi
1275 request occurs even though the document is still in fill mode,
1276 or already switched back to fill mode.
1277 It has no effect.
1278 .It Sy "fill mode already disabled, skipping"
1279 .Pq man
1280 An
1281 .Ic \&nf
1282 request occurs even though the document already switched to no-fill mode
1283 and did not switch back to fill mode yet.
1284 It has no effect.
1285 .It Sy "line scope broken"
1286 .Pq man
1287 While parsing the next-line scope of the previous macro,
1288 another macro is found that prematurely terminates the previous one.
1289 The previous, interrupted macro is deleted from the parse tree.
1290 .El
1291 .Ss "Warnings related to missing arguments"
1292 .Bl -ohang
1293 .It Sy "skipping empty request"
1294 .Pq roff , eqn
1295 The macro name is missing from a macro definition request,
1296 or an
1297 .Xr eqn 7
1298 control statement or operation keyword lacks its required argument.
1299 .It Sy "conditional request controls empty scope"
1300 .Pq roff
1301 A conditional request is only useful if any of the following
1302 follows it on the same logical input line:
1303 .Bl -dash -compact
1304 .It
1305 The
1306 .Sq \e{
1307 keyword to open a multi-line scope.
1308 .It
1309 A request or macro or some text, resulting in a single-line scope.
1310 .It
1311 The immediate end of the logical line without any intervening whitespace,
1312 resulting in next-line scope.
1313 .El
1314 Here, a conditional request is followed by trailing whitespace only,
1315 and there is no other content on its logical input line.
1316 Note that it doesn't matter whether the logical input line is split
1317 across multiple physical input lines using
1318 .Sq \e
1319 line continuation characters.
1320 This is one of the rare cases
1321 where trailing whitespace is syntactically significant.
1322 The conditional request controls a scope containing whitespace only,
1323 so it is unlikely to have a significant effect,
1324 except that it may control a following
1325 .Ic \&el
1326 clause.
1327 .It Sy "skipping empty macro"
1328 .Pq mdoc
1329 The indicated macro has no arguments and hence no effect.
1330 .It Sy "empty block"
1331 .Pq mdoc , man
1332 A
1333 .Ic \&Bd ,
1334 .Ic \&Bk ,
1335 .Ic \&Bl ,
1336 .Ic \&D1 ,
1337 .Ic \&Dl ,
1338 .Ic \&MT ,
1339 .Ic \&RS ,
1340 or
1341 .Ic \&UR
1342 block contains nothing in its body and will produce no output.
1343 .It Sy "empty argument, using 0n"
1344 .Pq mdoc
1345 The required width is missing after
1346 .Ic \&Bd
1347 or
1348 .Ic \&Bl
1349 .Fl offset
1350 or
1351 .Fl width .
1352 .It Sy "missing display type, using -ragged"
1353 .Pq mdoc
1354 The
1355 .Ic \&Bd
1356 macro is invoked without the required display type.
1357 .It Sy "list type is not the first argument"
1358 .Pq mdoc
1359 In a
1360 .Ic \&Bl
1361 macro, at least one other argument precedes the type argument.
1362 The
1363 .Nm
1364 utility copes with any argument order, but some other
1365 .Xr mdoc 7
1366 implementations do not.
1367 .It Sy "missing -width in -tag list, using 8n"
1368 .Pq mdoc
1369 Every
1370 .Ic \&Bl
1371 macro having the
1372 .Fl tag
1373 argument requires
1374 .Fl width ,
1375 too.
1376 .It Sy "missing utility name, using \(dq\(dq"
1377 .Pq mdoc
1378 The
1379 .Ic \&Ex Fl std
1380 macro is called without an argument before
1381 .Ic \&Nm
1382 has first been called with an argument.
1383 .It Sy "missing function name, using \(dq\(dq"
1384 .Pq mdoc
1385 The
1386 .Ic \&Fo
1387 macro is called without an argument.
1388 No function name is printed.
1389 .It Sy "empty head in list item"
1390 .Pq mdoc
1391 In a
1392 .Ic \&Bl
1393 .Fl diag ,
1394 .Fl hang ,
1395 .Fl inset ,
1396 .Fl ohang ,
1397 or
1398 .Fl tag
1399 list, an
1400 .Ic \&It
1401 macro lacks the required argument.
1402 The item head is left empty.
1403 .It Sy "empty list item"
1404 .Pq mdoc
1405 In a
1406 .Ic \&Bl
1407 .Fl bullet ,
1408 .Fl dash ,
1409 .Fl enum ,
1410 or
1411 .Fl hyphen
1412 list, an
1413 .Ic \&It
1414 block is empty.
1415 An empty list item is shown.
1416 .It Sy "missing argument, using next line"
1417 .Pq mdoc
1418 An
1419 .Ic \&It
1420 macro in a
1421 .Ic \&Bd Fl column
1422 list has no arguments.
1423 While
1424 .Nm
1425 uses the text or macros of the following line, if any, for the cell,
1426 other formatters may misformat the list.
1427 .It Sy "missing font type, using \efR"
1428 .Pq mdoc
1429 A
1430 .Ic \&Bf
1431 macro has no argument.
1432 It switches to the default font.
1433 .It Sy "unknown font type, using \efR"
1434 .Pq mdoc
1435 The
1436 .Ic \&Bf
1437 argument is invalid.
1438 The default font is used instead.
1439 .It Sy "nothing follows prefix"
1440 .Pq mdoc
1441 A
1442 .Ic \&Pf
1443 macro has no argument, or only one argument and no macro follows
1444 on the same input line.
1445 This defeats its purpose; in particular, spacing is not suppressed
1446 before the text or macros following on the next input line.
1447 .It Sy "empty reference block"
1448 .Pq mdoc
1449 An
1450 .Ic \&Rs
1451 macro is immediately followed by an
1452 .Ic \&Re
1453 macro on the next input line.
1454 Such an empty block does not produce any output.
1455 .It Sy "missing section argument"
1456 .Pq mdoc
1457 An
1458 .Ic \&Xr
1459 macro lacks its second, section number argument.
1460 The first argument, i.e. the name, is printed, but without subsequent
1461 parentheses.
1462 .It Sy "missing -std argument, adding it"
1463 .Pq mdoc
1464 An
1465 .Ic \&Ex
1466 or
1467 .Ic \&Rv
1468 macro lacks the required
1469 .Fl std
1470 argument.
1471 The
1472 .Nm
1473 utility assumes
1474 .Fl std
1475 even when it is not specified, but other implementations may not.
1476 .It Sy "missing option string, using \(dq\(dq"
1477 .Pq man
1478 The
1479 .Ic \&OP
1480 macro is invoked without any argument.
1481 An empty pair of square brackets is shown.
1482 .It Sy "missing resource identifier, using \(dq\(dq"
1483 .Pq man
1484 The
1485 .Ic \&MT
1486 or
1487 .Ic \&UR
1488 macro is invoked without any argument.
1489 An empty pair of angle brackets is shown.
1490 .It Sy "missing eqn box, using \(dq\(dq"
1491 .Pq eqn
1492 A diacritic mark or a binary operator is found,
1493 but there is nothing to the left of it.
1494 An empty box is inserted.
1495 .El
1496 .Ss "Warnings related to bad macro arguments"
1497 .Bl -ohang
1498 .It Sy "unterminated quoted argument"
1499 .Pq roff
1500 Macro arguments can be enclosed in double quote characters
1501 such that space characters and macro names contained in the quoted
1502 argument need not be escaped.
1503 The closing quote of the last argument of a macro can be omitted.
1504 However, omitting it is not recommended because it makes the code
1505 harder to read.
1506 .It Sy "duplicate argument"
1507 .Pq mdoc
1508 A
1509 .Ic \&Bd
1510 or
1511 .Ic \&Bl
1512 macro has more than one
1513 .Fl compact ,
1514 more than one
1515 .Fl offset ,
1516 or more than one
1517 .Fl width
1518 argument.
1519 All but the last instances of these arguments are ignored.
1520 .It Sy "skipping duplicate argument"
1521 .Pq mdoc
1522 An
1523 .Ic \&An
1524 macro has more than one
1525 .Fl split
1526 or
1527 .Fl nosplit
1528 argument.
1529 All but the first of these arguments are ignored.
1530 .It Sy "skipping duplicate display type"
1531 .Pq mdoc
1532 A
1533 .Ic \&Bd
1534 macro has more than one type argument; the first one is used.
1535 .It Sy "skipping duplicate list type"
1536 .Pq mdoc
1537 A
1538 .Ic \&Bl
1539 macro has more than one type argument; the first one is used.
1540 .It Sy "skipping -width argument"
1541 .Pq mdoc
1542 A
1543 .Ic \&Bl
1544 .Fl column ,
1545 .Fl diag ,
1546 .Fl ohang ,
1547 .Fl inset ,
1548 or
1549 .Fl item
1550 list has a
1551 .Fl width
1552 argument.
1553 That has no effect.
1554 .It Sy "wrong number of cells"
1555 In a line of a
1556 .Ic \&Bl Fl column
1557 list, the number of tabs or
1558 .Ic \&Ta
1559 macros is less than the number expected from the list header line
1560 or exceeds the expected number by more than one.
1561 Missing cells remain empty, and all cells exceeding the number of
1562 columns are joined into one single cell.
1563 .It Sy "unknown AT&T UNIX version"
1564 .Pq mdoc
1565 An
1566 .Ic \&At
1567 macro has an invalid argument.
1568 It is used verbatim, with
1569 .Qq "AT&T UNIX "
1570 prefixed to it.
1571 .It Sy "comma in function argument"
1572 .Pq mdoc
1573 An argument of an
1574 .Ic \&Fa
1575 or
1576 .Ic \&Fn
1577 macro contains a comma; it should probably be split into two arguments.
1578 .It Sy "parenthesis in function name"
1579 .Pq mdoc
1580 The first argument of an
1581 .Ic \&Fc
1582 or
1583 .Ic \&Fn
1584 macro contains an opening or closing parenthesis; that's probably wrong,
1585 parentheses are added automatically.
1586 .It Sy "unknown library name"
1587 .Pq mdoc, not on Ox
1588 An
1589 .Ic \&Lb
1590 macro has an unknown name argument and will be rendered as
1591 .Qq library Dq Ar name .
1592 .It Sy "invalid content in Rs block"
1593 .Pq mdoc
1594 An
1595 .Ic \&Rs
1596 block contains plain text or non-% macros.
1597 The bogus content is left in the syntax tree.
1598 Formatting may be poor.
1599 .It Sy "invalid Boolean argument"
1600 .Pq mdoc
1601 An
1602 .Ic \&Sm
1603 macro has an argument other than
1604 .Cm on
1605 or
1606 .Cm off .
1607 The invalid argument is moved out of the macro, which leaves the macro
1608 empty, causing it to toggle the spacing mode.
1609 .It Sy "unknown font, skipping request"
1610 .Pq man , tbl
1611 A
1612 .Xr roff 7
1613 .Ic \&ft
1614 request or a
1615 .Xr tbl 7
1616 .Ic \&f
1617 layout modifier has an unknown
1618 .Ar font
1619 argument.
1620 .It Sy "odd number of characters in request"
1621 .Pq roff
1622 A
1623 .Ic \&tr
1624 request contains an odd number of characters.
1625 The last character is mapped to the blank character.
1626 .El
1627 .Ss "Warnings related to plain text"
1628 .Bl -ohang
1629 .It Sy "blank line in fill mode, using .sp"
1630 .Pq mdoc
1631 The meaning of blank input lines is only well-defined in non-fill mode:
1632 In fill mode, line breaks of text input lines are not supposed to be
1633 significant.
1634 However, for compatibility with groff, blank lines in fill mode
1635 are replaced with
1636 .Ic \&sp
1637 requests.
1638 .It Sy "tab in filled text"
1639 .Pq mdoc , man
1640 The meaning of tab characters is only well-defined in non-fill mode:
1641 In fill mode, whitespace is not supposed to be significant
1642 on text input lines.
1643 As an implementation dependent choice, tab characters on text lines
1644 are passed through to the formatters in any case.
1645 Given that the text before the tab character will be filled,
1646 it is hard to predict which tab stop position the tab will advance to.
1647 .It Sy "whitespace at end of input line"
1648 .Pq mdoc , man , roff
1649 Whitespace at the end of input lines is almost never semantically
1650 significant \(em but in the odd case where it might be, it is
1651 extremely confusing when reviewing and maintaining documents.
1652 .It Sy "new sentence, new line"
1653 .Pq mdoc
1654 A new sentence starts in the middle of a text line.
1655 Start it on a new input line to help formatters produce correct spacing.
1656 .It Sy "bad comment style"
1657 .Pq roff
1658 Comment lines start with a dot, a backslash, and a double-quote character.
1659 The
1660 .Nm
1661 utility treats the line as a comment line even without the backslash,
1662 but leaving out the backslash might not be portable.
1663 .It Sy "invalid escape sequence"
1664 .Pq roff
1665 An escape sequence has an invalid opening argument delimiter, lacks the
1666 closing argument delimiter, or the argument has too few characters.
1667 If the argument is incomplete,
1668 .Ic \e*
1669 and
1670 .Ic \en
1671 expand to an empty string,
1672 .Ic \eB
1673 to the digit
1674 .Sq 0 ,
1675 and
1676 .Ic \ew
1677 to the length of the incomplete argument.
1678 All other invalid escape sequences are ignored.
1679 .It Sy "undefined string, using \(dq\(dq"
1680 .Pq roff
1681 If a string is used without being defined before,
1682 its value is implicitly set to the empty string.
1683 However, defining strings explicitly before use
1684 keeps the code more readable.
1685 .El
1686 .Ss "Warnings related to tables"
1687 .Bl -ohang
1688 .It Sy "tbl line starts with span"
1689 .Pq tbl
1690 The first cell in a table layout line is a horizontal span
1691 .Pq Sq Cm s .
1692 Data provided for this cell is ignored, and nothing is printed in the cell.
1693 .It Sy "tbl column starts with span"
1694 .Pq tbl
1695 The first line of a table layout specification
1696 requests a vertical span
1697 .Pq Sq Cm ^ .
1698 Data provided for this cell is ignored, and nothing is printed in the cell.
1699 .It Sy "skipping vertical bar in tbl layout"
1700 .Pq tbl
1701 A table layout specification contains more than two consecutive vertical bars.
1702 A double bar is printed, all additional bars are discarded.
1703 .El
1704 .Ss "Errors related to tables"
1705 .Bl -ohang
1706 .It Sy "non-alphabetic character in tbl options"
1707 .Pq tbl
1708 The table options line contains a character other than a letter,
1709 blank, or comma where the beginning of an option name is expected.
1710 The character is ignored.
1711 .It Sy "skipping unknown tbl option"
1712 .Pq tbl
1713 The table options line contains a string of letters that does not
1714 match any known option name.
1715 The word is ignored.
1716 .It Sy "missing tbl option argument"
1717 .Pq tbl
1718 A table option that requires an argument is not followed by an
1719 opening parenthesis, or the opening parenthesis is immediately
1720 followed by a closing parenthesis.
1721 The option is ignored.
1722 .It Sy "wrong tbl option argument size"
1723 .Pq tbl
1724 A table option argument contains an invalid number of characters.
1725 Both the option and the argument are ignored.
1726 .It Sy "empty tbl layout"
1727 .Pq tbl
1728 A table layout specification is completely empty,
1729 specifying zero lines and zero columns.
1730 As a fallback, a single left-justified column is used.
1731 .It Sy "invalid character in tbl layout"
1732 .Pq tbl
1733 A table layout specification contains a character that can neither
1734 be interpreted as a layout key character nor as a layout modifier,
1735 or a modifier precedes the first key.
1736 The invalid character is discarded.
1737 .It Sy "unmatched parenthesis in tbl layout"
1738 .Pq tbl
1739 A table layout specification contains an opening parenthesis,
1740 but no matching closing parenthesis.
1741 The rest of the input line, starting from the parenthesis, has no effect.
1742 .It Sy "tbl without any data cells"
1743 .Pq tbl
1744 A table does not contain any data cells.
1745 It will probably produce no output.
1746 .It Sy "ignoring data in spanned tbl cell"
1747 .Pq tbl
1748 A table cell is marked as a horizontal span
1749 .Pq Sq Cm s
1750 or vertical span
1751 .Pq Sq Cm ^
1752 in the table layout, but it contains data.
1753 The data is ignored.
1754 .It Sy "ignoring extra tbl data cells"
1755 .Pq tbl
1756 A data line contains more cells than the corresponding layout line.
1757 The data in the extra cells is ignored.
1758 .It Sy "data block open at end of tbl"
1759 .Pq tbl
1760 A data block is opened with
1761 .Cm T{ ,
1762 but never closed with a matching
1763 .Cm T} .
1764 The remaining data lines of the table are all put into one cell,
1765 and any remaining cells stay empty.
1766 .El
1767 .Ss "Errors related to roff, mdoc, and man code"
1768 .Bl -ohang
1769 .It Sy "input stack limit exceeded, infinite loop?"
1770 .Pq roff
1771 Explicit recursion limits are implemented for the following features,
1772 in order to prevent infinite loops:
1773 .Bl -dash -compact
1774 .It
1775 expansion of nested escape sequences
1776 including expansion of strings and number registers,
1777 .It
1778 expansion of nested user-defined macros,
1779 .It
1780 and
1781 .Ic \&so
1782 file inclusion.
1783 .El
1784 When a limit is hit, the output is incorrect, typically losing
1785 some content, but the parser can continue.
1786 .It Sy "skipping bad character"
1787 .Pq mdoc , man , roff
1788 The input file contains a byte that is not a printable
1789 .Xr ascii 7
1790 character.
1791 The message mentions the character number.
1792 The offending byte is replaced with a question mark
1793 .Pq Sq \&? .
1794 Consider editing the input file to replace the byte with an ASCII
1795 transliteration of the intended character.
1796 .It Sy "skipping unknown macro"
1797 .Pq mdoc , man , roff
1798 The first identifier on a request or macro line is neither recognized as a
1799 .Xr roff 7
1800 request, nor as a user-defined macro, nor, respectively, as an
1801 .Xr mdoc 7
1802 or
1803 .Xr man 7
1804 macro.
1805 It may be mistyped or unsupported.
1806 The request or macro is discarded including its arguments.
1807 .It Sy "skipping insecure request"
1808 .Pq roff
1809 An input file attempted to run a shell command
1810 or to read or write an external file.
1811 Such attempts are denied for security reasons.
1812 .It Sy "skipping item outside list"
1813 .Pq mdoc , eqn
1814 An
1815 .Ic \&It
1816 macro occurs outside any
1817 .Ic \&Bl
1818 list, or an
1819 .Xr eqn 7
1820 .Ic above
1821 delimiter occurs outside any pile.
1822 It is discarded including its arguments.
1823 .It Sy "skipping column outside column list"
1824 .Pq mdoc
1825 A
1826 .Ic \&Ta
1827 macro occurs outside any
1828 .Ic \&Bl Fl column
1829 block.
1830 It is discarded including its arguments.
1831 .It Sy "skipping end of block that is not open"
1832 .Pq mdoc , man , eqn , tbl , roff
1833 Various syntax elements can only be used to explicitly close blocks
1834 that have previously been opened.
1835 An
1836 .Xr mdoc 7
1837 block closing macro, a
1838 .Xr man 7
1839 .Ic \&ME , \&RE
1840 or
1841 .Ic \&UE
1842 macro, an
1843 .Xr eqn 7
1844 right delimiter or closing brace, or the end of an equation, table, or
1845 .Xr roff 7
1846 conditional request is encountered but no matching block is open.
1847 The offending request or macro is discarded.
1848 .It Sy "fewer RS blocks open, skipping"
1849 .Pq man
1850 The
1851 .Ic \&RE
1852 macro is invoked with an argument, but less than the specified number of
1853 .Ic \&RS
1854 blocks is open.
1855 The
1856 .Ic \&RE
1857 macro is discarded.
1858 .It Sy "inserting missing end of block"
1859 .Pq mdoc , tbl
1860 Various
1861 .Xr mdoc 7
1862 macros as well as tables require explicit closing by dedicated macros.
1863 A block that doesn't support bad nesting
1864 ends before all of its children are properly closed.
1865 The open child nodes are closed implicitly.
1866 .It Sy "appending missing end of block"
1867 .Pq mdoc , man , eqn , tbl , roff
1868 At the end of the document, an explicit
1869 .Xr mdoc 7
1870 block, a
1871 .Xr man 7
1872 next-line scope or
1873 .Ic \&MT , \&RS
1874 or
1875 .Ic \&UR
1876 block, an equation, table, or
1877 .Xr roff 7
1878 conditional or ignore block is still open.
1879 The open block is closed implicitly.
1880 .It Sy "escaped character not allowed in a name"
1881 .Pq roff
1882 Macro, string and register identifiers consist of printable,
1883 non-whitespace ASCII characters.
1884 Escape sequences and characters and strings expressed in terms of them
1885 cannot form part of a name.
1886 The first argument of an
1887 .Ic \&am ,
1888 .Ic \&as ,
1889 .Ic \&de ,
1890 .Ic \&ds ,
1891 .Ic \&nr ,
1892 or
1893 .Ic \&rr
1894 request, or any argument of an
1895 .Ic \&rm
1896 request, or the name of a request or user defined macro being called,
1897 is terminated by an escape sequence.
1898 In the cases of
1899 .Ic \&as ,
1900 .Ic \&ds ,
1901 and
1902 .Ic \&nr ,
1903 the request has no effect at all.
1904 In the cases of
1905 .Ic \&am ,
1906 .Ic \&de ,
1907 .Ic \&rr ,
1908 and
1909 .Ic \&rm ,
1910 what was parsed up to this point is used as the arguments to the request,
1911 and the rest of the input line is discarded including the escape sequence.
1912 When parsing for a request or a user-defined macro name to be called,
1913 only the escape sequence is discarded.
1914 The characters preceding it are used as the request or macro name,
1915 the characters following it are used as the arguments to the request or macro.
1916 .It Sy "NOT IMPLEMENTED: Bd -file"
1917 .Pq mdoc
1918 For security reasons, the
1919 .Ic \&Bd
1920 macro does not support the
1921 .Fl file
1922 argument.
1923 By requesting the inclusion of a sensitive file, a malicious document
1924 might otherwise trick a privileged user into inadvertently displaying
1925 the file on the screen, revealing the file content to bystanders.
1926 The argument is ignored including the file name following it.
1927 .It Sy "skipping display without arguments"
1928 .Pq mdoc
1929 A
1930 .Ic \&Bd
1931 block macro does not have any arguments.
1932 The block is discarded, and the block content is displayed in
1933 whatever mode was active before the block.
1934 .It Sy "missing list type, using -item"
1935 .Pq mdoc
1936 A
1937 .Ic \&Bl
1938 macro fails to specify the list type.
1939 .It Sy "argument is not numeric, using 1"
1940 .Pq roff
1941 The argument of a
1942 .Ic \&ce
1943 request is not a number.
1944 .It Sy "missing manual name, using \(dq\(dq"
1945 .Pq mdoc
1946 The first call to
1947 .Ic \&Nm ,
1948 or any call in the NAME section, lacks the required argument.
1949 .It Sy "uname(3) system call failed, using UNKNOWN"
1950 .Pq mdoc
1951 The
1952 .Ic \&Os
1953 macro is called without arguments, and the
1954 .Xr uname 3
1955 system call failed.
1956 As a workaround,
1957 .Nm
1958 can be compiled with
1959 .Sm off
1960 .Fl D Cm OSNAME=\(dq\e\(dq Ar string Cm \e\(dq\(dq .
1961 .Sm on
1962 .It Sy "unknown standard specifier"
1963 .Pq mdoc
1964 An
1965 .Ic \&St
1966 macro has an unknown argument and is discarded.
1967 .It Sy "skipping request without numeric argument"
1968 .Pq roff , eqn
1969 An
1970 .Ic \&it
1971 request or an
1972 .Xr eqn 7
1973 .Ic \&size
1974 or
1975 .Ic \&gsize
1976 statement has a non-numeric or negative argument or no argument at all.
1977 The invalid request or statement is ignored.
1978 .It Sy "NOT IMPLEMENTED: .so with absolute path or \(dq..\(dq"
1979 .Pq roff
1980 For security reasons,
1981 .Nm
1982 allows
1983 .Ic \&so
1984 file inclusion requests only with relative paths
1985 and only without ascending to any parent directory.
1986 By requesting the inclusion of a sensitive file, a malicious document
1987 might otherwise trick a privileged user into inadvertently displaying
1988 the file on the screen, revealing the file content to bystanders.
1989 .Nm
1990 only shows the path as it appears behind
1991 .Ic \&so .
1992 .It Sy ".so request failed"
1993 .Pq roff
1994 Servicing a
1995 .Ic \&so
1996 request requires reading an external file, but the file could not be
1997 opened.
1998 .Nm
1999 only shows the path as it appears behind
2000 .Ic \&so .
2001 .It Sy "skipping all arguments"
2002 .Pq mdoc , man , eqn , roff
2003 An
2004 .Xr mdoc 7
2005 .Ic \&Bt ,
2006 .Ic \&Ed ,
2007 .Ic \&Ef ,
2008 .Ic \&Ek ,
2009 .Ic \&El ,
2010 .Ic \&Lp ,
2011 .Ic \&Pp ,
2012 .Ic \&Re ,
2013 .Ic \&Rs ,
2014 or
2015 .Ic \&Ud
2016 macro, an
2017 .Ic \&It
2018 macro in a list that don't support item heads, a
2019 .Xr man 7
2020 .Ic \&LP ,
2021 .Ic \&P ,
2022 or
2023 .Ic \&PP
2024 macro, an
2025 .Xr eqn 7
2026 .Ic \&EQ
2027 or
2028 .Ic \&EN
2029 macro, or a
2030 .Xr roff 7
2031 .Ic \&br ,
2032 .Ic \&fi ,
2033 or
2034 .Ic \&nf
2035 request or
2036 .Sq \&..
2037 block closing request is invoked with at least one argument.
2038 All arguments are ignored.
2039 .It Sy "skipping excess arguments"
2040 .Pq mdoc , man , roff
2041 A macro or request is invoked with too many arguments:
2042 .Bl -dash -offset 2n -width 2n -compact
2043 .It
2044 .Ic \&Fo ,
2045 .Ic \&MT ,
2046 .Ic \&PD ,
2047 .Ic \&RS ,
2048 .Ic \&UR ,
2049 .Ic \&ft ,
2050 or
2051 .Ic \&sp
2052 with more than one argument
2053 .It
2054 .Ic \&An
2055 with another argument after
2056 .Fl split
2057 or
2058 .Fl nosplit
2059 .It
2060 .Ic \&RE
2061 with more than one argument or with a non-integer argument
2062 .It
2063 .Ic \&OP
2064 or a request of the
2065 .Ic \&de
2066 family with more than two arguments
2067 .It
2068 .Ic \&Dt
2069 with more than three arguments
2070 .It
2071 .Ic \&TH
2072 with more than five arguments
2073 .It
2074 .Ic \&Bd ,
2075 .Ic \&Bk ,
2076 or
2077 .Ic \&Bl
2078 with invalid arguments
2079 .El
2080 The excess arguments are ignored.
2081 .El
2082 .Ss Unsupported features
2083 .Bl -ohang
2084 .It Sy "input too large"
2085 .Pq mdoc , man
2086 Currently,
2087 .Nm
2088 cannot handle input files larger than its arbitrary size limit
2089 of 2^31 bytes (2 Gigabytes).
2090 Since useful manuals are always small, this is not a problem in practice.
2091 Parsing is aborted as soon as the condition is detected.
2092 .It Sy "unsupported control character"
2093 .Pq roff
2094 An ASCII control character supported by other
2095 .Xr roff 7
2096 implementations but not by
2097 .Nm
2098 was found in an input file.
2099 It is replaced by a question mark.
2100 .It Sy "unsupported roff request"
2101 .Pq roff
2102 An input file contains a
2103 .Xr roff 7
2104 request supported by GNU troff or Heirloom troff but not by
2105 .Nm ,
2106 and it is likely that this will cause information loss
2107 or considerable misformatting.
2108 .It Sy "eqn delim option in tbl"
2109 .Pq eqn , tbl
2110 The options line of a table defines equation delimiters.
2111 Any equation source code contained in the table will be printed unformatted.
2112 .It Sy "unsupported table layout modifier"
2113 .Pq tbl
2114 A table layout specification contains an
2115 .Sq Cm m
2116 modifier.
2117 The modifier is discarded.
2118 .It Sy "ignoring macro in table"
2119 .Pq tbl , mdoc , man
2120 A table contains an invocation of an
2121 .Xr mdoc 7
2122 or
2123 .Xr man 7
2124 macro or of an undefined macro.
2125 The macro is ignored, and its arguments are handled
2126 as if they were a text line.
2127 .El
2128 .Sh SEE ALSO
2129 .Xr apropos 1 ,
2130 .Xr man 1 ,
2131 .Xr eqn 7 ,
2132 .Xr man 7 ,
2133 .Xr mandoc_char 7 ,
2134 .Xr mdoc 7 ,
2135 .Xr roff 7 ,
2136 .Xr tbl 7
2137 .Sh HISTORY
2138 The
2139 .Nm
2140 utility first appeared in
2141 .Ox 4.8 .
2142 The option
2143 .Fl I
2144 appeared in
2145 .Ox 5.2 ,
2146 and
2147 .Fl aCcfhKklMSsw
2148 in
2149 .Ox 5.7 .
2150 .Sh AUTHORS
2151 .An -nosplit
2152 The
2153 .Nm
2154 utility was written by
2155 .An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
2156 and is maintained by
2157 .An Ingo Schwarze Aq Mt schwarze@openbsd.org .