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