531 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			531 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\"	$Id: mandoc.1,v 1.63 2010/06/11 07:15:42 kristaps Exp $
 | 
						|
.\"
 | 
						|
.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@bsd.lv>
 | 
						|
.\"
 | 
						|
.\" 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.
 | 
						|
.\"
 | 
						|
.\" 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: June 11 2010 $
 | 
						|
.Dt MANDOC 1
 | 
						|
.Os
 | 
						|
.Sh NAME
 | 
						|
.Nm mandoc
 | 
						|
.Nd format and display UNIX manuals
 | 
						|
.Sh SYNOPSIS
 | 
						|
.Nm mandoc
 | 
						|
.Op Fl V
 | 
						|
.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 Fl W Ns Ar err
 | 
						|
.Op Ar file...
 | 
						|
.Sh DESCRIPTION
 | 
						|
The
 | 
						|
.Nm
 | 
						|
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.
 | 
						|
.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 Cm ascii .
 | 
						|
.It Fl V
 | 
						|
Print version and exit.
 | 
						|
.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 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
 | 
						|
.Pp
 | 
						|
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
 | 
						|
.Ss Input Formats
 | 
						|
The
 | 
						|
.Nm
 | 
						|
utility accepts
 | 
						|
.Xr mdoc 7
 | 
						|
and
 | 
						|
.Xr man 7
 | 
						|
input with
 | 
						|
.Fl m Ns Cm doc
 | 
						|
and
 | 
						|
.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
 | 
						|
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
 | 
						|
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 (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.
 | 
						|
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 ps
 | 
						|
Produce PostScript output.
 | 
						|
See
 | 
						|
.Sx PostScript Output .
 | 
						|
.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
 | 
						|
.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 overridden with the
 | 
						|
.Fl f
 | 
						|
flag.
 | 
						|
.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.
 | 
						|
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-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
 | 
						|
and
 | 
						|
.Fl f Ns Cm no-ign-macro .
 | 
						|
.El
 | 
						|
.Ss Output Options
 | 
						|
The
 | 
						|
.Fl T Ns Ar html
 | 
						|
and
 | 
						|
.Fl T Ns Ar xhtml
 | 
						|
modes accept the following 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
 | 
						|
.Pp
 | 
						|
The
 | 
						|
.Fl T Ns Ar ascii
 | 
						|
mode accepts the following output option:
 | 
						|
.Bl -tag -width Ds
 | 
						|
.It Fl O Ns Cm width Ns = Ns Ar width
 | 
						|
The output width is set to
 | 
						|
.Ar width ,
 | 
						|
which will normalise to \(>=60.
 | 
						|
.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
 | 
						|
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 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
 | 
						|
.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
 | 
						|
Special characters are rendered in decimal-encoded UTF-8.
 | 
						|
.Ss PostScript Output
 | 
						|
PostScript Level 2 pages may be generated by
 | 
						|
.Fl T Ns Cm ps .
 | 
						|
Output pages are US-letter sized (215.9 x 279.4 mm) and rendered in
 | 
						|
fixed, 10-point Courier font.
 | 
						|
.Ss XHTML Output
 | 
						|
Output produced by
 | 
						|
.Fl T Ns Cm 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
 | 
						|
To page manuals to the terminal:
 | 
						|
.Pp
 | 
						|
.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
 | 
						|
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
 | 
						|
The
 | 
						|
.Sq \&na
 | 
						|
.Xr man 7
 | 
						|
macro in
 | 
						|
.Fl T Ns Cm ascii
 | 
						|
has no effect.
 | 
						|
.It
 | 
						|
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.
 |