=================================================================== RCS file: /cvs/mandoc/mandoc.1,v retrieving revision 1.226 retrieving revision 1.267 diff -u -p -r1.226 -r1.267 --- mandoc/mandoc.1 2018/07/28 18:34:15 1.226 +++ mandoc/mandoc.1 2023/11/13 19:13:01 1.267 @@ -1,7 +1,7 @@ -.\" $Id: mandoc.1,v 1.226 2018/07/28 18:34:15 schwarze Exp $ +.\" $Id: mandoc.1,v 1.267 2023/11/13 19:13:01 schwarze Exp $ .\" +.\" Copyright (c) 2012, 2014-2023 Ingo Schwarze .\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons -.\" Copyright (c) 2012, 2014-2018 Ingo Schwarze .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: July 28 2018 $ +.Dd $Mdocdate: November 13 2023 $ .Dt MANDOC 1 .Os .Sh NAME @@ -52,13 +52,13 @@ The options are as follows: If the standard output is a terminal device and .Fl c is not specified, use -.Xr more 1 +.Xr less 1 to paginate the output, just like .Xr man 1 would. .It Fl c Copy the formatted manual pages to the standard output without using -.Xr more 1 +.Xr less 1 to paginate them. This is the default. It can be specified to override @@ -222,7 +222,8 @@ reads from standard input. .Pp The options .Fl fhklw -are also supported and are documented in man(1). +are also supported and are documented in +.Xr man 1 . In .Fl f and @@ -256,10 +257,28 @@ where is the back-space character number 8. Emboldened characters are rendered as .Sq c Ns \e[bs] Ns c . +This markup is typically converted to appropriate terminal sequences by +the pager or +.Xr ul 1 . +To remove the markup, pipe the output to +.Xr col 1 +.Fl b +instead. .Pp The special characters documented in .Xr mandoc_char 7 are rendered best-effort in an ASCII equivalent. +In particular, opening and closing +.Sq single quotes +are represented as characters number 0x60 and 0x27, respectively, +which agrees with all ASCII standards from 1965 to the latest +revision (2012) and which matches the traditional way in which +.Xr roff 7 +formatters represent single quotes in ASCII output. +This correct ASCII rendering may look strange with modern +Unicode-compatible fonts because contrary to ASCII, Unicode uses +the code point U+0060 for the grave accent only, never for an opening +quote. .Pp The following .Fl O @@ -268,10 +287,7 @@ arguments are accepted: .It Cm indent Ns = Ns Ar indent The left margin for normal text is set to .Ar indent -blank characters instead of the default of five for -.Xr mdoc 7 -and seven for -.Xr man 7 . +blank characters instead of the default of five. Increasing this is not recommended; it may result in degraded formatting, for example overfull lines or ugly line breaks. When output is to a pager on a terminal that is less than 66 columns @@ -282,14 +298,33 @@ Format input files in .Xr mdoc 7 output style. -Specifically, this suppresses the two additional blank lines near the -top and the bottom of each page, and it implies -.Fl O Cm indent Ns =5 . +This prints the operating system name rather than the page title +on the right side of the footer line. One useful application is for checking that .Fl T Cm man output formats in the same way as the .Xr mdoc 7 source it was generated from. +.It Cm tag Ns Op = Ns Ar term +If the formatted manual page is opened in a pager, +go to the definition of the +.Ar term +rather than showing the manual page from the beginning. +If no +.Ar term +is specified, reuse the first command line argument that is not a +.Ar section +number. +If that argument is in +.Xr apropos 1 +.Ar key Ns = Ns Ar val +format, only the +.Ar val +is used rather than the argument as a whole. +This is useful for commands like +.Ql man -akO tag Ic=ulimit +to search for a keyword and jump right to its definition +in the matching manual pages. .It Cm width Ns = Ns Ar width The output width is set to .Ar width @@ -303,21 +338,9 @@ and may exceed the output width. Output produced by .Fl T Cm html conforms to HTML5 using optional self-closing tags. -Default styles use only CSS1. Equations rendered from .Xr eqn 7 blocks use MathML. -.Pp -The -.Pa mandoc.css -file documents style-sheet classes available for customising output. -If a style-sheet is not specified with -.Fl O Cm style , -.Fl T Cm html -defaults to simple output (via an embedded style-sheet) -readable in any graphical or text-based web -browser. -.Pp Non-ASCII characters are rendered as hexadecimal Unicode character references. .Pp @@ -345,7 +368,7 @@ Instances of are replaced with the include filename. The default is not to present a hyperlink. -.It Cm man Ns = Ns Ar fmt +.It Cm man Ns = Ns Ar fmt Ns Op ; Ns Ar fmt The string .Ar fmt , for example, @@ -361,12 +384,83 @@ are replaced with the linked manual's name and section If no section is included, section 1 is assumed. The default is not to present a hyperlink. +If two formats are given and a file +.Ar %N.%S +exists in the current directory, the first format is used; +otherwise, the second format is used. .It Cm style Ns = Ns Ar style.css The file .Ar style.css -is used for an external style-sheet. +is used as an external stylesheet. This must be a valid absolute or relative URI. +.Pp +Using the file +.Pa mandoc.css +that is distributed with +.Nm +is recommended. +It provides an appearance similar to terminal output with some additional +features specific to +.Nm +HTML output, in particular making anchor locations that support +deep linking stand out visually by putting a dotted line under them, +providing tooltips showing the semantic function of elements (macro +names), providing some simple aspects of responsive web design, and +providing simple support for users who prefer a dark color scheme. +.Pp +Using a custom CSS file is possible, but writing it requires +proficiency in all of the languages HTML 5, CSS 4, and +.Xr mdoc 7 +and familiarity with the +.Nm Ns -specific +classes used in +.Pa mandoc.css . +Besides, while the file +.Pa mandoc.css +is always adapted to the HTML output generated by the +.Nm +version it is distributed with, maintaining a custom CSS file usually +requires adaptations each time +.Nm +is upgraded to a new version. +.Pp +If a stylesheet is not specified with +.Fl O Cm style , +.Fl T Cm html +embeds a minimal stylesheet into the HTML output, mostly to select +adequate font-style and font-weight attributes for various macros. +The result is readable in any graphical or text-based web browser, +but does not aim for looking similar to terminal output. +Instead, formatting is mostly left to browser defaults +and to user settings in the browser configuration. +.It Cm tag Ns Op = Ns Ar term +Same syntax and semantics as for +.Sx ASCII Output . +This is implemented by passing a +.Ic file:// +URI ending in a fragment identifier to the pager +rather than passing merely a file name. +When using this argument, use a pager supporting such URIs, for example +.Bd -literal -offset 3n +MANPAGER='lynx -force_html' man -T html -O tag=MANPAGER man +MANPAGER='w3m -T text/html' man -T html -O tag=toc mandoc +.Ed +.Pp +Consequently, for HTML output, this argument does not work with +.Xr more 1 +or +.Xr less 1 . +For example, +.Ql MANPAGER=less man -T html -O tag=toc mandoc +does not work because +.Xr less 1 +does not support +.Ic file:// +URIs. +.It Cm toc +If an input file contains at least two non-standard sections, +print a table of contents near the beginning of the output. .El .Ss Locale Output By default, @@ -397,13 +491,15 @@ This is useful for distributing manual sources to lega lacking .Xr mdoc 7 formatters. +Embedded +.Xr eqn 7 +and +.Xr tbl 7 +code is not supported. .Pp If the input format of a file is .Xr man 7 , -the input is copied to the output, expanding any -.Xr roff 7 -.Ic so -requests. +the input is copied to the output. The parser is also run, and as usual, the .Fl W level controls which @@ -415,10 +511,10 @@ Use to translate .Xr mdoc 7 input to the markdown format conforming to -.Lk http://daringfireball.net/projects/markdown/syntax.text\ +.Lk https://daringfireball.net/projects/markdown/syntax.text\ "John Gruber's 2004 specification" . The output also almost conforms to the -.Lk http://commonmark.org/ CommonMark +.Lk https://commonmark.org/ CommonMark specification. .Pp The character set used for the markdown output is ASCII. @@ -582,7 +678,7 @@ It never affects the interpretation of input files. Any non-empty value of the environment variable .Ev MANPAGER is used instead of the standard pagination program, -.Xr more 1 ; +.Xr less 1 ; see .Xr man 1 for details. @@ -596,8 +692,7 @@ Specifies the pagination program to use when .Ev MANPAGER is not defined. If neither PAGER nor MANPAGER is defined, -.Xr more 1 -.Fl s +.Xr less 1 is used. Only used if .Fl a @@ -652,7 +747,7 @@ No input files have been read. .It 6 An operating system error occurred, for example exhaustion of memory, file descriptors, or process table entries. -Such errors cause +Such errors may cause .Nm to exit at once, possibly in the middle of parsing or formatting a file. .El @@ -664,13 +759,13 @@ output mode implies .Sh EXAMPLES To page manuals to the terminal: .Pp -.Dl $ mandoc -l mandoc.1 man.1 apropos.1 makewhatis.8 +.Dl $ mandoc -a mandoc.1 man.1 apropos.1 makewhatis.8 .Pp To produce HTML manuals with -.Pa mandoc.css -as the style-sheet: +.Pa /usr/share/misc/mandoc.css +as the stylesheet: .Pp -.Dl $ mandoc \-T html -O style=mandoc.css mdoc.7 \*(Gt mdoc.7.html +.Dl $ mandoc \-T html -O style=/usr/share/misc/mandoc.css mdoc.7 > mdoc.7.html .Pp To check over a large set of manuals: .Pp @@ -678,7 +773,7 @@ To check over a large set of manuals: .Pp To produce a series of PostScript manuals for A4 paper: .Pp -.Dl $ mandoc \-T ps \-O paper=a4 mdoc.7 man.7 \*(Gt manuals.ps +.Dl $ mandoc \-T ps \-O paper=a4 mdoc.7 man.7 > manuals.ps .Pp Convert a modern .Xr mdoc 7 @@ -688,20 +783,34 @@ format, for use on systems lacking an .Xr mdoc 7 parser: .Pp -.Dl $ mandoc \-T man foo.mdoc \*(Gt foo.man +.Dl $ mandoc \-T man foo.mdoc > foo.man .Sh DIAGNOSTICS Messages displayed by .Nm follow this format: .Bd -ragged -offset indent .Nm : -.Ar file : Ns Ar line : Ns Ar column : level : message : macro args +.Ar file : Ns Ar line : Ns Ar column : level : message : macro argument ... .Pq Ar os .Ed .Pp -Line and column numbers start at 1. +The first three fields identify the +.Ar file +name, +.Ar line +number, and +.Ar column +number of the input file where the message was triggered. +The line and column numbers start at 1. Both are omitted for messages referring to an input file as a whole. -Macro names and arguments are omitted where meaningless. +All +.Ar level +and +.Ar message +strings are explained below. +The name of the +.Ar macro +triggering the message and its arguments are omitted where meaningless. The .Ar os operating system specifier is omitted for messages that are relevant @@ -716,6 +825,13 @@ fields. .Pp Message levels have the following meanings: .Bl -tag -width "warning" +.It Cm syserr +An operating system error occurred. +There isn't necessarily anything wrong with the input files. +Output may all the same be missing or incomplete. +.It Cm badarg +Invalid command line arguments were specified. +No input files have been read and no output is produced. .It Cm unsupp An input file uses unsupported low-level .Xr roff 7 @@ -741,7 +857,7 @@ message levels, the .Cm style level tries to reduce the probability that issues go unnoticed, so it may occasionally issue bogus suggestions. -Please use your good judgement to decide whether any particular +Use your judgement to decide whether any particular .Cm style suggestion really justifies a change to the input file. .It Cm base @@ -764,8 +880,7 @@ Messages of the .Cm error , and .Cm unsupp -levels except those about non-existent or unreadable input files -are hidden unless their level, or a lower level, is requested using a +levels are hidden unless their level, or a lower level, is requested using a .Fl W option or .Fl T Cm lint @@ -829,14 +944,6 @@ generated by CVS or .Ic NetBSD keyword substitution as conventionally used in these operating systems. -.It Sy "referenced manual not found" -.Pq mdoc -An -.Ic \&Xr -macro references a manual page that is not found in the base system. -The path to look for base system manuals is configurable at compile -time and defaults to -.Pa /usr/share/man : /usr/X11R6/man . .El .Ss Style suggestions .Bl -ohang @@ -923,6 +1030,35 @@ list contains two consecutive entries describing the same .Ic \&Er number. +.It Sy "referenced manual not found" +.Pq mdoc +An +.Ic \&Xr +macro references a manual page that was not found. +When running with +.Fl W Cm base , +the search is restricted to the base system, by default to +.Pa /usr/share/man : Ns Pa /usr/X11R6/man . +This path can be configured at compile time using the +.Dv MANPATH_BASE +preprocessor macro. +When running with +.Fl W Cm style , +the search is done along the full search path as described in the +.Xr man 1 +manual page, respecting the +.Fl m +and +.Fl M +command line options, the +.Ev MANPATH +environment variable, the +.Xr man.conf 5 +file and falling back to the default of +.Pa /usr/share/man : Ns Pa /usr/X11R6/man : Ns Pa /usr/local/man , +also configurable at compile time using the +.Dv MANPATH_DEFAULT +preprocessor macro. .It Sy "trailing delimiter" .Pq mdoc The last argument of an @@ -952,6 +1088,9 @@ An request occurs even though the document already switched to no-fill mode and did not switch back to fill mode yet. It has no effect. +.It Sy "input text line longer than 80 bytes" +Consider breaking the input text line +at one of the blank characters before column 80. .It Sy "verbatim \(dq--\(dq, maybe consider using \e(em" .Pq mdoc Even though the ASCII output device renders an em-dash as @@ -1005,7 +1144,21 @@ macro lacks the mandatory section argument. The section number in a .Ic \&Dt line is invalid, but still used. -.It Sy "missing date, using today's date" +.It Sy "filename/section mismatch" +.Pq mdoc , man +The name of the input file being processed is known and its file +name extension starts with a non-zero digit, but the +.Ic \&Dt +or +.Ic \&TH +macro contains a +.Ar section +argument that starts with a different non-zero digit. +The +.Ar section +argument is used as provided anyway. +Consider checking whether the file name or the argument need a correction. +.It Sy "missing date, using \(dq\(dq" .Pq mdoc, man The document was parsed as .Xr mdoc 7 @@ -1138,9 +1291,11 @@ The same standard section title occurs more than once. A standard section header occurs in a section of the manual where it normally isn't useful. .It Sy "cross reference to self" -.Pq mdoc +.Pq mdoc , man An .Ic \&Xr +or +.Ic \&MR macro refers to a name and section matching the section of the present manual page and a name mentioned in an .Ic \&Nm @@ -1343,10 +1498,8 @@ A .Ic \&Bl , .Ic \&D1 , .Ic \&Dl , -.Ic \&MT , -.Ic \&RS , or -.Ic \&UR +.Ic \&RS block contains nothing in its body and will produce no output. .It Sy "empty argument, using 0n" .Pq mdoc @@ -1461,12 +1614,16 @@ macro is immediately followed by an macro on the next input line. Such an empty block does not produce any output. .It Sy "missing section argument" -.Pq mdoc +.Pq mdoc , man An .Ic \&Xr +or +.Ic \&MR macro lacks its second, section number argument. -The first argument, i.e. the name, is printed, but without subsequent -parentheses. +The first argument, i.e. the name, is printed, but without a section number. +In the case of +.Ic \&Xr , +the parentheses are also omitted. .It Sy "missing -std argument, adding it" .Pq mdoc An @@ -1606,6 +1763,12 @@ or .Cm off . The invalid argument is moved out of the macro, which leaves the macro empty, causing it to toggle the spacing mode. +.It Sy "argument contains two font escapes" +.Pq roff +The second argument of a +.Ic char +request contains more than one font escape sequence. +A wrong font may remain active after using the character. .It Sy "unknown font, skipping request" .Pq man , tbl A @@ -1617,6 +1780,15 @@ request or a layout modifier has an unknown .Ar font argument. +.It Sy "ignoring distance argument" +.Pq roff +In addition to the margin character, an +.Ic \&mc +request has a second argument supposed to represent a distance, but the +.Nm +implementation of +.Ic \&mc +always ignores the second argument. .It Sy "odd number of characters in request" .Pq roff A @@ -1632,9 +1804,12 @@ The meaning of blank input lines is only well-defined In fill mode, line breaks of text input lines are not supposed to be significant. However, for compatibility with groff, blank lines in fill mode -are replaced with +are formatted like .Ic \&sp requests. +To request a paragraph break, use +.Ic \&Pp +instead of a blank line. .It Sy "tab in filled text" .Pq mdoc , man The meaning of tab characters is only well-defined in non-fill mode: @@ -1648,22 +1823,16 @@ it is hard to predict which tab stop position the tab .Pq mdoc A new sentence starts in the middle of a text line. Start it on a new input line to help formatters produce correct spacing. -.It Sy "invalid escape sequence" +.It Sy "invalid escape sequence argument" .Pq roff -An escape sequence has an invalid opening argument delimiter, lacks the -closing argument delimiter, or the argument has too few characters. -If the argument is incomplete, -.Ic \e* -and -.Ic \en -expand to an empty string, -.Ic \eB -to the digit -.Sq 0 , -and -.Ic \ew -to the length of the incomplete argument. -All other invalid escape sequences are ignored. +The argument of an escape sequence is of an invalid form. +Invalid escape sequences are ignored. +.It Sy "undefined escape, printing literally" +.Pq roff +In an escape sequence, the first character +right after the leading backslash is invalid. +That character is printed literally, +which is equivalent to ignoring the backslash. .It Sy "undefined string, using \(dq\(dq" .Pq roff If a string is used without being defined before, @@ -1727,6 +1896,10 @@ The invalid character is discarded. A table layout specification contains an opening parenthesis, but no matching closing parenthesis. The rest of the input line, starting from the parenthesis, has no effect. +.It Sy "ignoring excessive spacing in tbl layout" +.Pq tbl +A spacing modifier in a table layout is unreasonably large. +The default spacing of 3n is used instead. .It Sy "tbl without any data cells" .Pq tbl A table does not contain any data cells. @@ -1807,6 +1980,13 @@ or macro. It may be mistyped or unsupported. The request or macro is discarded including its arguments. +.It Sy "skipping request outside macro" +.Pq roff +A +.Ic shift +or +.Ic return +request occurs outside any macro definition and has no effect. .It Sy "skipping insecure request" .Pq roff An input file attempted to run a shell command @@ -1916,6 +2096,21 @@ When parsing for a request or a user-defined macro nam only the escape sequence is discarded. The characters preceding it are used as the request or macro name, the characters following it are used as the arguments to the request or macro. +.It Sy "using macro argument outside macro" +.Pq roff +The escape sequence \e$ occurs outside any macro definition +and expands to the empty string. +.It Sy "argument number is not numeric" +.Pq roff +The argument of the escape sequence \e$ is not a digit; +the escape sequence expands to the empty string. +.It Sy "negative argument, using 0" +.Pq roff +A +.Ic \&shift +request has a negative argument +or an argument that is negative due to integer overflow. +Macro argument numbering remains unchanged. .It Sy "NOT IMPLEMENTED: Bd -file" .Pq mdoc For security reasons, the @@ -1944,11 +2139,27 @@ macro fails to specify the list type. The argument of a .Ic \&ce request is not a number. +.It Sy "argument is not a character" +.Pq roff +The first argument of a +.Ic char +request is neither a single ASCII character +nor a single character escape sequence. +The request is ignored including all its arguments. +.It Sy "skipping unusable escape sequence" +.Pq roff +The first argument of an +.Ic mc +request is neither a single ASCII character +nor a single character escape sequence. +All arguments are ignored and printing of a margin character is disabled. .It Sy "missing manual name, using \(dq\(dq" -.Pq mdoc +.Pq mdoc , man The first call to .Ic \&Nm , -or any call in the NAME section, lacks the required argument. +or any call in the NAME section, lacks the required argument, or +.Ic \&MR +is called without any argument. .It Sy "uname(3) system call failed, using UNKNOWN" .Pq mdoc The @@ -1978,6 +2189,13 @@ or .Ic \&gsize statement has a non-numeric or negative argument or no argument at all. The invalid request or statement is ignored. +.It Sy "excessive shift" +.Pq roff +The argument of a +.Ic shift +request is larger than the number of arguments of the macro that is +currently being executed. +All macro arguments are deleted and \en(.$ is set to zero. .It Sy "NOT IMPLEMENTED: .so with absolute path or \(dq..\(dq" .Pq roff For security reasons, @@ -2069,6 +2287,8 @@ or a request of the family with more than two arguments .It .Ic \&Dt +or +.Ic \&MR with more than three arguments .It .Ic \&TH @@ -2082,6 +2302,60 @@ with invalid arguments .El The excess arguments are ignored. .El +.Ss "Errors related to escape sequences" +.Bl -ohang +.It Sy "incomplete escape sequence" +.Pq roff +The end of the input line is encountered +while parsing the argument of an escape sequence. +In this case, +.Ic \e* +and +.Ic \en +expand to an empty string, +.Ic \eB +to the digit +.Sq 0 , +and +.Ic \ew +to the length of the incomplete argument. +All other incomplete escape sequences are ignored. +.It Sy "invalid special character" +.Pq roff +A special character escape sequence is invalid, +for example a Unicode sequence pointing to a surrogate +or beyond the Unicode range, a \e[char...] escape sequence +representing a control character or pointing beyond the +.Vt unsigned char +range, or an invalid variable-length form +of a single-byte character escape sequence, for example writing +.Qq \e[e] +or +.Qq \e[~] +instead of +.Qq \ee +or +.Qq \e~ , +respectively. +The escape sequence is ignored. +.It Sy "unknown special character" +.Pq roff +The name given in a special character escape sequence is not known to +.Nm . +The escape sequence is ignored. +.It Sy "invalid escape argument delimiter" +.Pq roff +An escape sequence that expects a numerical argument +attempts to employ one of the characters +.Qq " %&()*+-./0123456789:<=>" +as an argument delimiter. +The escape sequence is ignored including the invalid opening delimiter +and the rest of the argument may appear as output text. +While various characters can be used as argument delimiters, +using the apostrophe-quote character +.Pq Sq \(aq +is recommended for readability and robustness. +.El .Ss Unsupported features .Bl -ohang .It Sy "input too large" @@ -2100,6 +2374,13 @@ implementations but not by .Nm was found in an input file. It is replaced by a question mark. +.It Sy "unsupported escape sequence" +.Pq roff +An input file contains an escape sequence supported by GNU troff +or Heirloom troff but not by +.Nm , +and it is likely that this will cause information loss +or considerable misformatting. .It Sy "unsupported roff request" .Pq roff An input file contains a @@ -2127,6 +2408,71 @@ or macro or of an undefined macro. The macro is ignored, and its arguments are handled as if they were a text line. +.It Sy "skipping tbl in -Tman mode" +.Pq mdoc , tbl +An input file contains the +.Ic \&TS +macro. +This message is only generated in +.Fl T Cm man +output mode, where +.Xr tbl 7 +input is not supported. +.It Sy "skipping eqn in -Tman mode" +.Pq mdoc , eqn +An input file contains the +.Ic \&EQ +macro. +This message is only generated in +.Fl T Cm man +output mode, where +.Xr eqn 7 +input is not supported. +.El +.Ss Bad command line arguments +.Bl -ohang +.It Sy "bad command line argument" +The argument following one of the +.Fl IKMmOTW +command line options is invalid, or a +.Ar file +given as a command line argument cannot be opened. +.It Sy "duplicate command line argument" +The +.Fl I +command line option was specified twice. +.It Sy "option has a superfluous value" +An argument to the +.Fl O +option has a value but does not accept one. +.It Sy "missing option value" +An argument to the +.Fl O +option has no argument but requires one. +.It Sy "bad option value" +An argument to the +.Fl O +.Cm indent +or +.Cm width +option has an invalid value. +.It Sy "duplicate option value" +The same +.Fl O +option is specified more than once. +.It Sy "no such tag" +The +.Fl O Cm tag +option was specified but the tag was not found in any of the displayed +manual pages. +.It Sy "\-Tmarkdown unsupported for man(7) input" +.Pq man +The +.Fl T Cm markdown +option was specified but an input file uses the +.Xr man 7 +language. +No output is produced for that input file. .El .Sh SEE ALSO .Xr apropos 1 ,