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