-.\" $Id: mandoc.1,v 1.33 2009/08/20 12:26:15 kristaps Exp $
+.\" $Id: mandoc.1,v 1.50 2010/01/29 14:39:38 kristaps Exp $
.\"
.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
.\"
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: August 20 2009 $
+.Dd $Mdocdate: January 29 2010 $
.Dt MANDOC 1
.Os
.
.
.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...
.
.
.
.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.
.
for available formats. Defaults to
.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
Print version and exit.
.
.It Fl W Ns Ar err...
-Configure warning messages. Use
+Comma-separated warning options. Use
.Fl W Ns Ar all
to print warnings,
.Fl W Ns Ar error
.Xr man 7
text from stdin, implying
.Fl m Ns Ar andoc ,
-and prints 78-column backspace-encoded output to stdout as if
+and produces
.Fl T Ns Ar ascii
-were provided.
+output.
.
.Pp
.Ex -std mandoc
.
.
-.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 \&[ ,
-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 whitespace.
-.
-.Pp
-If the input is
-.Xr mdoc 7 ,
-these rules are also applied to macro arguments when appropriate.
-.
-.Pp
-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
.Nm
utility accepts the following
.Fl T
-arguments:
+arguments (see
+.Sx OUTPUT ) :
.
.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.
+styles. This is the default. See
+.Sx ASCII Output .
+.
+.It Fl T Ns Ar html
+Produce strict HTML-4.01 output, with a sane default style. See
+.Sx HTML Output .
+.
+.It Fl T Ns Ar xhtml
+Produce strict XHTML-1.0 output, with a sane default style. See
+.Sx XHTML Output .
.
.It Fl T Ns Ar tree
Produce an indented parse tree.
.
.
.Ss Compiler Options
-Default compiler behaviour may be overriden with the
+Default compiler behaviour may be overridden with the
.Fl f
flag.
.
scope violations. This can seriously mangle the resulting tree.
.Pq mdoc only
.
+.It Fl f Ns Ar ign-escape
+Ignore invalid escape sequences.
+This is the default, but the option can be used to override an earlier
+.Fl f Ns Ar strict .
+.
.It Fl f Ns Ar no-ign-escape
Don't ignore invalid escape sequences.
.
over a large set of manuals passed on the command line.
.El
.
+.
+.Ss Output Options
+For the time being, only
+.Fl T Ns Ar html
+accepts 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 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,no-ign-escape ,
-for example, will try to ignore scope and not ignore character-escape
-errors.
+The text style of output characters (non-macro characters, punctuation,
+and white-space) is dictated by context.
+.Pp
+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
+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 Ar 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 Ar 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
+.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 Ar ascii .
+.Pp
+Special characters are rendered in decimal-encoded UTF-8.
+.
+.
+.Ss XHTML Output
+Output produced by
+.Fl T Ns Ar xhtml
+conforms to XHTML-1.0 strict.
+.Pp
+See
+.Sx HTML Output
+for details; beyond generating XHTML tags instead of HTML tags, these
+output modes are identical.
.
.
.Sh EXAMPLES
.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 > mdoc.7.html
+.Pp
To check over a large set of manuals:
.
.Pp
Each input and output format is separately noted.
.
.
-.Ss ASCII output
+.Ss ASCII Compatibility
.Bl -bullet -compact
.It
-The
+The
.Sq \e~
-special character doesn't produce expected behaviour in
+special character doesn't produce expected behaviour in
.Fl T Ns Ar ascii .
.
.It
-The
+The
.Sq \&Bd \-literal
-and
+and
.Sq \&Bd \-unfilled
macros of
.Xr mdoc 7
are synonyms, as are \-filled and \-ragged.
.
.It
-In
+In
.Xr groff 1 ,
the
.Sq \&Pa
.It
The
.Sq \&na
-and
-.Sq \&Dt
.Xr man 7
-macros in
+macro in
.Fl T Ns Ar ascii
-have no effect.
+has no effect.
.
.It
Words aren't hyphenated.
.It
Sentences are unilaterally monospaced.
.El
-.\" SECTION
+.
+.
+.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 mandoc_char 7 ,
.Xr mdoc 7 ,
.Xr man 7
-.\" SECTION
+.
.Sh AUTHORS
The
.Nm
utility was written by
.An Kristaps Dzonsons Aq kristaps@kth.se .
+.
+.
+.Sh CAVEATS
+The
+.Fl T Ns Ar html
+and
+.Fl T Ns Ar xhtml
+CSS2 styling used for
+.Fl m Ns Ar doc
+input lists does not render properly in brain-dead browsers, such as
+Internet Explorer 6 and earlier.
+.Pp
+In
+.Fl T Ns Ar html
+and
+.Fl T Ns Ar 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, e.g.,
+.Fl O Ns Ar style=really/long/link .
+.Pp
+The
+.Fl T Ns Ar html
+and
+.Fl T Ns Ar xhtml
+output modes don't render the
+.Sq \es
+font size escape documented in
+.Xr mdoc 7
+and
+.Xr man 7 .