-.\" $Id: mandoc.1,v 1.10 2009/03/26 16:23:22 kristaps Exp $
+.\" $Id: mandoc.1,v 1.41 2009/10/03 16:36:06 kristaps Exp $
.\"
-.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@openbsd.org>
+.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
.\"
.\" 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 26 2009 $
-.Dt mandoc 1
+.Dd $Mdocdate: October 3 2009 $
+.Dt MANDOC 1
.Os
-.\" SECTION
+.
+.
.Sh NAME
.Nm mandoc
.Nd format and display UNIX manuals
-.\" SECTION
+.
+.
.Sh SYNOPSIS
.Nm mandoc
-.Op Fl V
.Op Fl f Ns Ar option...
.Op Fl m Ns Ar format
-.Op Fl W Ns Ar err...
+.Op Fl o Ns Ar option...
.Op Fl T Ns Ar output
+.Op Fl V
+.Op Fl W Ns Ar err...
.Op Ar infile...
-.\" SECTION
+.
+.
.Sh DESCRIPTION
The
.Nm
-utility formats
+utility formats
.Ux
manual pages for display. The arguments are as follows:
-.Bl -tag -width XXXXXXXXXXXX
-.\" ITEM
+.
+.Bl -tag -width Ds
.It Fl f Ns Ar option...
-Override default compiler behaviour. See
+Comma-separated compiler options. See
.Sx Compiler Options
for details.
-.\" ITEM
-.It Fl m
+.
+.It Fl m Ns Ar format
Input format. See
.Sx Input Formats
for available formats. Defaults to
-.Fl m Ns Ar doc .
-.\" ITEM
-.It Fl T
+.Fl m Ns Ar 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
+.
.It Fl V
Print version and exit.
-.\" ITEM
+.
.It Fl W Ns Ar err...
-Print warning messages. May be set to
+Comma-separated warning options. Use
.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
+to print warnings,
+.Fl W Ns Ar 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 .
.Nm
will halt with the first failed parse.
.El
-.\" PARAGRAPH
+.
.Pp
-By default,
-.Nm
-reads
+By default,
+.Nm
+reads
.Xr mdoc 7
+or
+.Xr man 7
text from stdin, implying
-.Fl m Ns Ar mdoc ,
+.Fl m Ns Ar andoc ,
and prints 78-column backspace-encoded output to stdout as if
.Fl T Ns Ar ascii
were provided.
-.\" PARAGRAPH
+.
.Pp
.Ex -std mandoc
-.\" SUB-SECTION
-.Ss Reserved Words (mdoc only)
-The reserved words described in
-.Xr mdoc 7
-are handled according to the following rules:
-.Bl -enum -offset XXX
-.It
-Opening delimiters
+.
+.
+.Ss Punctuation and Spacing
+If punctuation is set apart from words, such as in the phrase
+.Dq to be \&, or not to be ,
+it's processed by
+.Nm
+according to the following rules: opening punctuation
.Po
-.Sq \&( ,
-.Sq \&[ ,
+.Sq \&( ,
+.Sq \&[ ,
and
.Sq \&{
-.Pc are not followed by whitespace.
-.It
-Closing delimiters
+.Pc
+is not followed by a space; closing punctuation
.Po
-.Sq \&. ,
-.Sq \&, ,
-.Sq \&; ,
-.Sq \&: ,
-.Sq \&? ,
-.Sq \&! ,
-.Sq \&) ,
-.Sq \&]
+.Sq \&. ,
+.Sq \&, ,
+.Sq \&; ,
+.Sq \&: ,
+.Sq \&? ,
+.Sq \&! ,
+.Sq \&) ,
+.Sq \&]
and
.Sq \&}
-.Pc are not preceeded by whitespace.
-.El
-.\" PARAGRAPH
+.Pc
+is not preceded by whitespace.
+.
.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
+If the input is
+.Xr mdoc 7 ,
+these rules are also applied to macro arguments when appropriate.
+.
.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
+White-space, in non-literal (normal) mode, is stripped from input and
+replaced on output by a single space. Thus, if you wish to preserve multiple
+spaces, they must be space-escaped or used in a literal display mode, e.g.,
+.Sq \&Bd \-literal
+in
+.Xr mdoc 7 .
+.
+.
.Ss Input Formats
The
.Nm
.Xr mdoc 7
format is
.Em strongly
-recommended;
+recommended;
.Xr man 7
should only be used for legacy manuals.
-.\" SUB-SECTION
+.
+.Pp
+A third option,
+.Fl m Ns Ar 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
+If multiple
+files are specified with
+.Fl m Ns Ar andoc ,
+each has its file-type determined this way. If multiple files are
+specified and
+.Fl m Ns Ar doc
+or
+.Fl m Ns Ar 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
+.
+.Bl -tag -width Ds
+.It Fl T Ns Ar ascii
Produce 7-bit ASCII output, backspace-encoded for bold and underline
styles. This is the default.
-.It Ar tree
+.
+.It Fl T Ns Ar html
+Produce strict HTML-4.01 output, with a sane default style.
+.
+.It Fl T Ns Ar tree
Produce an indented parse tree.
-.It Ar lint
+.
+.It Fl T Ns Ar lint
Parse only: produce no 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
+.
+.Bl -tag -width Ds
.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.
.Pq mdoc only
-.It Fl f Ns Ar ign-escape
-Ignore invalid escape sequences.
-.It Fl f Ns Ar ign-macro
-Ignore unknown macros at the start of input lines.
+.
+.It Fl f Ns Ar no-ign-escape
+Don't ignore invalid escape sequences.
+.
+.It Fl f Ns Ar no-ign-macro
+Do not ignore unknown macros at the start of input lines.
+.
+.It Fl f Ns Ar no-ign-chars
+Do not ignore disallowed characters.
+.
+.It Fl f Ns Ar strict
+Implies
+.Fl f Ns Ar no-ign-escape ,
+.Fl f Ns Ar no-ign-macro
+and
+.Fl f Ns Ar no-ign-chars .
+.
+.It Fl f Ns Ar ign-errors
+Don't halt when encountering parse errors. Useful with
+.Fl T Ns Ar lint
+over a large set of manuals passed on the command line.
.El
-.\" PARAGRAPH
-.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
+.
+.Ss Output Options
+For the time being, only
+.Fl T Ns Ar html
+is the only mode with output options:
+.Bl -tag -width Ds
+.It Fl o Ns Ar style=style.css
+The file
+.Ar style.css
+is used for an external style-sheet. This must be a valid absolute or
+relative URI.
+.It Fl o Ns Ar includes=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 Ar man=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.
+.El
+.
.Sh EXAMPLES
-To page this manual page on the terminal:
-.\" PARAGRAPH
+To page manuals to the terminal:
+.
.Pp
-.D1 % mandoc \-Wall,error mandoc.1 2>&1 | less
-.\" SECTION
-.Sh SEE ALSO
-.Xr mdoc 7 ,
-.Xr man 7
-.\"
-.Sh AUTHORS
-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:
+.D1 % mandoc \-Wall,error \-fstrict mandoc.1 2>&1 | less
+.D1 % mandoc mandoc.1 mdoc.3 mdoc.7 | less
+.
.Pp
-.Bl -bullet -compact
-.It
-The \-hang
-.Sq \&.Bl
-list is not yet supported.
-.El
+To produce HTML manuals with
+.Ar style.css
+as the style-sheet:
.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.
+.D1 % mandoc \-Thtml -ostyle=style.css mdoc.7 > mdoc.7.html
.Pp
-The following list documents differences between traditional
-.Xr nroff 1
-output and
-.Nm :
+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 output
.Bl -bullet -compact
-.It
-A list of display following
-.Sq \&.Ss
+.It
+The
+.Sq \e~
+special character doesn't produce expected behaviour in
+.Fl T Ns Ar ascii .
+.
+.It
+The
+.Sq \&Bd \-literal
+and
+.Sq \&Bd \-unfilled
+macros of
+.Xr mdoc 7
+in
+.Fl T Ns Ar 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
+.Sq \&Ss
+.Xr mdoc 7
+macro in
+.Fl T Ns Ar ascii
does not assert a prior vertical break, just as it doesn't with
-.Sq \&.Sh .
+.Sq \&Sh .
+.
+.It
+The
+.Sq \&na
+.Xr man 7
+macro in
+.Fl T Ns Ar ascii
+has no effect.
+.
+.It
+Words aren't hyphenated.
+.
.It
-Special characters don't follow the current font style.
-.\" LIST-ITEM
+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
-The \-literal and \-unfilled
-.Sq \&.Bd
-displays types are synonyms, as are \-filled and \-ragged.
+Sentences are unilaterally monospaced.
.El
+.\" SECTION
+.Sh SEE ALSO
+.Xr mandoc_char 7 ,
+.Xr mdoc 7 ,
+.Xr man 7
+.
+.Sh AUTHORS
+The
+.Nm
+utility was written by
+.An Kristaps Dzonsons Aq kristaps@kth.se .
+.
+.Sh CAVEATS
+In
+.Fl T Ns Ar html ,
+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 with
+.Fl o Ns Ar man=fmt .