=================================================================== RCS file: /cvs/mandoc/mandoc.1,v retrieving revision 1.7 retrieving revision 1.59 diff -u -p -r1.7 -r1.59 --- mandoc/mandoc.1 2009/03/23 09:42:43 1.7 +++ mandoc/mandoc.1 2010/04/13 05:26:49 1.59 @@ -1,225 +1,514 @@ -.\" $Id: mandoc.1,v 1.7 2009/03/23 09:42:43 kristaps Exp $ +.\" $Id: mandoc.1,v 1.59 2010/04/13 05:26:49 kristaps Exp $ .\" -.\" Copyright (c) 2009 Kristaps Dzonsons +.\" Copyright (c) 2009 Kristaps Dzonsons .\" .\" Permission to use, copy, modify, and distribute this software for any -.\" purpose with or without fee is hereby granted, provided that the -.\" above copyright notice and this permission notice appear in all -.\" copies. +.\" purpose with or without fee is hereby granted, provided that the above +.\" copyright notice and this permission notice appear in all copies. .\" -.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -.\" WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -.\" WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -.\" AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL -.\" DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -.\" PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -.\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -.\" PERFORMANCE OF THIS SOFTWARE. +.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: March 23 2009 $ -.Dt mandoc 1 +.Dd $Mdocdate: April 13 2010 $ +.Dt MANDOC 1 .Os -.\" SECTION .Sh NAME .Nm mandoc -.Nd format and display BSD manuals -.\" SECTION +.Nd format and display UNIX manuals .Sh SYNOPSIS .Nm mandoc .Op Fl V -.Op Fl f Ns Ar option... -.Op Fl W Ns Ar err... +.Op Fl f Ns Ar option +.Op Fl m Ns Ar format +.Op Fl O Ns Ar option .Op Fl T Ns Ar output -.Op Ar infile... -.\" SECTION +.Op Fl W Ns Ar err +.Op Ar file... .Sh DESCRIPTION The .Nm -utility formats a BSD -.Dq mdoc -manual page for display. The arguments are as follows: -.Bl -tag -width XXXXXXXXXXXX -.\" ITEM -.It Fl f Ns Ar option... -Override default compiler behaviour. See +utility formats +.Ux +manual pages for display. +The arguments are as follows: +.Bl -tag -width Ds +.It Fl f Ns Ar option +Comma-separated compiler options. +See .Sx Compiler Options for details. -.\" ITEM -.It Fl T -Output format. See +.It Fl m Ns Ar format +Input format. +See +.Sx Input Formats +for available formats. +Defaults to +.Fl m Ns Cm andoc . +.It Fl O Ns Ar option +Comma-separated output options. +See +.Sx Output Options +for details. +.It Fl T Ns Ar output +Output format. +See .Sx Output Formats -for available formats. Defaults to -.Fl T Ns Ar ascii . -.\" ITEM +for available formats. +Defaults to +.Fl T Ns Cm ascii . .It Fl V Print version and exit. -.\" ITEM -.It Fl W Ns Ar err... -Print warning messages. May be set to -.Fl W Ns Ar all -for all warnings, -.Ar compat -for groff/troff-compatibility warnings, or -.Ar syntax -for syntax warnings. If -.Fl W Ns Ar error -is specified, warnings are considered errors and cause utility -termination. Multiple +.It Fl W Ns Ar err +Comma-separated warning options. +Use +.Fl W Ns Cm all +to print warnings, +.Fl W Ns Cm error +for warnings to be considered errors and cause utility +termination. +Multiple .Fl W arguments may be comma-separated, such as -.Fl W Ns Ar error,all . -.\" ITEM -.It Ar infile... -Read input from zero or more -.Ar infile . -If unspecified, reads from stdin. If multiple files are specified, +.Fl W Ns Cm error , Ns Cm all . +.It Ar file +Read input from zero or more files. +If unspecified, reads from stdin. +If multiple files are specified, .Nm will halt with the first failed parse. .El -.\" PARAGRAPH .Pp -By default, -.Nm -reads from stdin and prints 78-column backspace-encoded output to stdout -as if -.Fl T Ns Ar ascii -were provided. -.\" PARAGRAPH +By default, +.Nm +reads +.Xr mdoc 7 +or +.Xr man 7 +text from stdin, implying +.Fl m Ns Cm andoc , +and produces +.Fl T Ns Cm ascii +output. .Pp .Ex -std mandoc -.\" SUB-SECTION -.Ss Reserved Words -The reserved words described in +.Ss Input Formats +The +.Nm +utility accepts .Xr mdoc 7 -are handled according to the following rules: -.Bl -enum -offset XXX -.It -Opening delimiters -.Po -.Sq \&( , -.Sq \&[ , and -.Sq \&{ -.Pc are not followed by whitespace. -.It -Closing delimiters -.Po -.Sq \&. , -.Sq \&, , -.Sq \&; , -.Sq \&: , -.Sq \&? , -.Sq \&! , -.Sq \&) , -.Sq \&] +.Xr man 7 +input with +.Fl m Ns Cm doc and -.Sq \&} -.Pc are not preceeded by whitespace. -.El -.\" PARAGRAPH +.Fl m Ns Cm an , +respectively. +The +.Xr mdoc 7 +format is +.Em strongly +recommended; +.Xr man 7 +should only be used for legacy manuals. .Pp -Note that reserved words only register as such as if they appear as -standalone tokens, either in parsed lines or streams of text. Thus, the -following fragment: -.Bd -literal -offset XXXX -this self is not that of the waking , empirically real man -.Ed -.\" PARAGRAPH +A third option, +.Fl m Ns Cm andoc , +which is also the default, determines encoding on-the-fly: if the first +non-comment macro is +.Sq \&Dd +or +.Sq \&Dt , +the +.Xr mdoc 7 +parser is used; otherwise, the +.Xr man 7 +parser is used. .Pp -\&...correctly adjusts the comma spacing to -.Dq this self is not that of the waking , empirically real man . -However, if the comma were part of -.Dq ,empirically , -it would not. -.\" SUB-SECTION +If multiple +files are specified with +.Fl m Ns Cm andoc , +each has its file-type determined this way. +If multiple files are +specified and +.Fl m Ns Cm doc +or +.Fl m Ns Cm an +is specified, then this format is used exclusively. .Ss Output Formats The .Nm utility accepts the following .Fl T -arguments: -.Bl -tag -width XXXXXXXXXXXX -offset XXXX -.It Ar ascii +arguments (see +.Sx OUTPUT ) : +.Bl -tag -width Ds +.It Fl T Ns Cm ascii Produce 7-bit ASCII output, backspace-encoded for bold and underline -styles. This is the default. -.It Ar tree -Produce an indented parse tree. -.It Ar lint +styles. +This is the default. +See +.Sx ASCII Output . +.It Fl T Ns Cm html +Produce strict HTML-4.01 output, with a sane default style. +See +.Sx HTML Output . +.It Fl T Ns Cm lint Parse only: produce no output. +Implies +.Fl W Ns Cm all +and +.Fl f Ns Cm strict . +.It Fl T Ns Cm tree +Produce an indented parse tree. +.It Fl T Ns Cm xhtml +Produce strict XHTML-1.0 output, with a sane default style. +See +.Sx XHTML Output . .El -.\" SUB-SECTION +.Pp +If multiple input files are specified, these will be processed by the +corresponding filter in-order. .Ss Compiler Options -Default compiler behaviour may be overriden with the +Default compiler behaviour may be overridden with the .Fl f flag. -.Bl -tag -width XXXXXXXXXXXX -offset XXXX -.It Fl f Ns Ar ign-scope -When rewinding the scope of a block macro, forces the compiler to ignore -scope violations. This can seriously mangle the resulting tree. -.It Fl f Ns Ar ign-escape +.Bl -tag -width Ds +.It Fl f Ns Cm ign-errors +When parsing multiple files, don't halt when one errors out. +Useful with +.Fl T Ns Cm lint +over a large set of manuals passed on the command line. +.It Fl f Ns Cm ign-escape Ignore invalid escape sequences. -.It Fl f Ns Ar ign-macro -Ignore unknown macros at the start of input lines. +This is the default, but the option can be used to override an earlier +.Fl f Ns Cm strict . +.It Fl f Ns Cm ign-scope +When rewinding the scope of a block macro, forces the compiler to ignore +scope violations. +This can seriously mangle the resulting tree. +.Pq mdoc only +.It Fl f Ns Cm no-ign-chars +Do not ignore disallowed characters. +.It Fl f Ns Cm no-ign-escape +Do not ignore invalid escape sequences. +.It Fl f Ns Cm no-ign-macro +Do not ignore unknown macros at the start of input lines. +.It Fl f Ns Cm strict +Implies +.Fl f Ns Cm no-ign-escape , +.Fl f Ns Cm no-ign-macro , +and +.Fl f Ns Cm no-ign-chars . .El -.\" PARAGRAPH +.Ss Output Options +For the time being, only +.Fl T Ns Ar html +and +.Fl T Ns Ar xhtml +accept output options: +.Bl -tag -width Ds +.It Fl O Ns Cm includes Ns = Ns Ar fmt +The string +.Ar fmt , +for example, +.Ar ../src/%I.html , +is used as a template for linked header files (usually via the +.Sq \&In +macro). +Instances of +.Sq \&%I +are replaced with the include filename. +The default is not to present a +hyperlink. +.It Fl O Ns Cm man Ns = Ns Ar fmt +The string +.Ar fmt , +for example, +.Ar ../html%S/%N.%S.html , +is used as a template for linked manuals (usually via the +.Sq \&Xr +macro). +Instances of +.Sq \&%N +and +.Sq %S +are replaced with the linked manual's name and section, respectively. +If no section is included, section 1 is assumed. +The default is not to +present a hyperlink. +.It Fl O Ns Cm style Ns = Ns Ar style.css +The file +.Ar style.css +is used for an external style-sheet. +This must be a valid absolute or +relative URI. +.El +.Sh OUTPUT +This section documents output details of +.Nm . +In general, output conforms to the traditional manual style of a header, +a body composed of sections and sub-sections, and a footer. .Pp -As with the -.Fl W -flag, multiple -.Fl f -options may be grouped and delimited with a comma. Using -.Fl f Ns Ar ign-scope,ign-escape , -for example, will try to ignore scope and character-escape errors. -.\" SECTION -.Sh EXAMPLES -To page this manual page on the terminal: -.\" PARAGRAPH +The text style of output characters (non-macro characters, punctuation, +and white-space) is dictated by context. .Pp -.D1 % mandoc \-Wall,error mandoc.1 2>&1 | less -.\" SECTION -.Sh SEE ALSO +White-space is generally stripped from input. +This can be changed with +character escapes (specified in +.Xr mandoc_char 7 ) +or literal modes (specified in .Xr mdoc 7 -.\" -.Sh AUTHORS +and +.Xr man 7 ) . +.Pp +If non-macro punctuation is set apart from words, such as in the phrase +.Dq to be \&, or not to be , +it's processed by +.Nm , +regardless of output format, according to the following rules: opening +punctuation +.Po +.Sq \&( , +.Sq \&[ , +and +.Sq \&{ +.Pc +is not followed by a space; closing punctuation +.Po +.Sq \&. , +.Sq \&, , +.Sq \&; , +.Sq \&: , +.Sq \&? , +.Sq \&! , +.Sq \&) , +.Sq \&] +and +.Sq \&} +.Pc +is not preceded by white-space. +.Pp +If the input is +.Xr mdoc 7 , +however, these rules are also applied to macro arguments when appropriate. +.Ss ASCII Output +Output produced by +.Fl T Ns Cm ascii , +which is the default, is rendered in standard 7-bit ASCII documented in +.Xr ascii 7 . +.Pp +Font styles are applied by using back-spaced encoding such that an +underlined character +.Sq c +is rendered as +.Sq _ Ns \e[bs] Ns c , +where +.Sq \e[bs] +is the back-space character number 8. +Emboldened characters are rendered as +.Sq c Ns \e[bs] Ns c . +.Pp +The special characters documented in +.Xr mandoc_char 7 +are rendered best-effort in an ASCII equivalent. +.Pp +Output width is limited to 78 visible columns unless literal input lines +exceed this limit. +.Ss HTML Output +Output produced by +.Fl T Ns Cm html +conforms to HTML-4.01 strict. +.Pp +Font styles and page structure are applied using CSS2. +By default, no font style is applied to any text, +although CSS2 is hard-coded to format +the basic structure of output. +.Pp The -.Nm -utility was written by -.An Kristaps Dzonsons Aq kristaps@openbsd.org . -.\" SECTION -.Sh CAVEATS -The -.Nm -utility in -.Fl T Ns Ar ascii -mode doesn't yet know how to display the following: +.Pa example.style.css +file documents the range of styles applied to output and, if used, will +cause rendered documents to appear as they do in +.Fl T Ns Cm ascii . .Pp -.Bl -bullet -compact -.It -The \-hang -.Sq \&Bl -list is not yet supported. -.El +Special characters are rendered in decimal-encoded UTF-8. +.Ss XHTML Output +Output produced by +.Fl T Ns Cm xhtml +conforms to XHTML-1.0 strict. .Pp -Other macros still aren't supported by virtue of nobody complaining -about their absence. Please report any omissions: this is a work in -progress. +See +.Sx HTML Output +for details; beyond generating XHTML tags instead of HTML tags, these +output modes are identical. +.Sh EXAMPLES +To page manuals to the terminal: .Pp -The following list documents differences between traditional -.Xr nroff 1 -output and -.Nm : +.D1 $ mandoc \-Wall,error \-fstrict mandoc.1 2\*(Gt&1 | less +.D1 $ mandoc mandoc.1 mdoc.3 mdoc.7 | less .Pp +To produce HTML manuals with +.Ar style.css +as the style-sheet: +.Pp +.D1 $ mandoc \-Thtml -Ostyle=style.css mdoc.7 \*(Gt mdoc.7.html +.Pp +To check over a large set of manuals: +.Pp +.Dl $ mandoc \-Tlint \-fign-errors `find /usr/src -name \e*\e.[1-9]` +.Sh COMPATIBILITY +This section summarises +.Nm +compatibility with +.Xr groff 1 . +Each input and output format is separately noted. +.Ss ASCII Compatibility .Bl -bullet -compact -.It -A list of display following +.It +The +.Sq \e~ +special character doesn't produce expected behaviour in +.Fl T Ns Cm ascii . +.It +The +.Sq \&Bd \-literal +and +.Sq \&Bd \-unfilled +macros of +.Xr mdoc 7 +in +.Fl T Ns Cm ascii +are synonyms, as are \-filled and \-ragged. +.It +In +.Xr groff 1 , +the +.Sq \&Pa +.Xr mdoc 7 +macro does not underline when scoped under an +.Sq \&It +in the FILES section. +This behaves correctly in +.Nm . +.It +A list or display following the .Sq \&Ss +.Xr mdoc 7 +macro in +.Fl T Ns Cm ascii does not assert a prior vertical break, just as it doesn't with .Sq \&Sh . .It -Special characters don't follow the current font style. -.\" LIST-ITEM +The +.Sq \&na +.Xr man 7 +macro in +.Fl T Ns Cm ascii +has no effect. .It -The \-literal and \-unfilled -.Sq \&Bd -displays types are synonyms, as are \-filled and \-ragged. +Words aren't hyphenated. +.It +In normal mode (not a literal block), blocks of spaces aren't preserved, +so double spaces following sentence closure are reduced to a single space; +.Xr groff 1 +retains spaces. +.It +Sentences are unilaterally monospaced. .El +.Ss HTML/XHTML Compatibility +.Bl -bullet -compact +.It +The +.Sq \efP +escape will revert the font to the previous +.Sq \ef +escape, not to the last rendered decoration, which is now dictated by +CSS instead of hard-coded. +It also will not span past the current scope, +for the same reason. +Note that in +.Sx ASCII Output +mode, this will work fine. +.It +The +.Xr mdoc 7 +.Sq \&Bl \-hang +and +.Sq \&Bl \-tag +list types render similarly (no break following overreached left-hand +side) due to the expressive constraints of HTML. +.It +The +.Xr man 7 +.Sq IP +and +.Sq TP +lists render similarly. +.El +.Sh SEE ALSO +.Xr man 7 , +.Xr mandoc_char 7 , +.Xr mdoc 7 +.Sh AUTHORS +The +.Nm +utility was written by +.An Kristaps Dzonsons Aq kristaps@bsd.lv . +.Sh CAVEATS +The +.Fl T Ns Cm html +and +.Fl T Ns Cm xhtml +CSS2 styling used for +.Fl m Ns Cm doc +input lists does not render properly in older browsers, such as Internet +Explorer 6 and earlier. +.Pp +In +.Fl T Ns Cm html +and +.Fl T Ns Cm xhtml , +the maximum size of an element attribute is determined by +.Dv BUFSIZ , +which is usually 1024 bytes. +Be aware of this when setting long link +formats such as +.Fl O Ns Cm style Ns = Ns Ar really/long/link . +.Pp +The +.Fl T Ns Cm html +and +.Fl T Ns Cm xhtml +output modes don't render the +.Sq \es +font size escape documented in +.Xr mdoc 7 +and +.Xr man 7 . +.Pp +Nesting elements within next-line element scopes of +.Fl m Ns Cm an , +such as +.Sq br +within an empty +.Sq B , +will confuse +.Fl T Ns Cm html +and +.Fl T Ns Cm xhtml +and cause them to forget the formatting of the prior next-line scope. +.Pp +The +.Sq i +macro in +.Fl m Ns Cm an +should italicise all subsequent text if a line argument is not provided. +This behaviour is not implemented. +The +.Sq \(aq +control character is an alias for the standard macro control character +and does not emit a line-break as stipulated in GNU troff.