-.\" $Id: mdoc.7,v 1.30 2009/06/17 14:08:47 kristaps Exp $
+.\" $Id: mdoc.7,v 1.41 2009/07/12 19:34:51 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: June 17 2009 $
+.Dd $Mdocdate: July 12 2009 $
.Dt MDOC 7
.Os
.\" SECTION
language is used to format
.Bx
.Ux
-manuals. In this reference document, we describe the syntax, ontology
-and structure of the
+manuals. In this reference document, we describe the syntax and
+structure of the
.Nm
language. Our reference implementation is
.Xr mandoc 1 .
.Sq \.
are parsed for macros. Other lines are interpreted within the scope of
prior macros:
-.Bd -literal -offset XXX
+.Bd -literal -offset indent
\&.Sh Macro lines change control state.
Other lines are interpreted within the current state.
.Ed
.\" SUB-SECTION
.Ss Reserved Characters
Within a macro line, the following characters are reserved:
-.Bl -tag -width Ds -offset XXXX -compact
+.Bl -tag -width Ds -offset indent -compact
.It \&.
.Pq period
.It \&,
.Pp
Characters may alternatively be escaped by a slash-asterisk,
.Sq \e* ,
-with the same combinations as described above. This form is deprecated.
+with the same combinations as described above.
+.Pp
+Terms may also be text-decorated using the
+.Sq \ef
+escape followed by a text-decoration letter: B (bold), I, (italic), or P
+and R (Roman, or reset). This form is not recommended.
+.\" SUB-SECTION
+.Ss Whitespace
+Unless in literal mode or specifically escaped, consecutive blocks of
+whitespace are pruned from input. These are later re-added, if
+applicable, by a front-end utility such as
+.Xr mandoc 1 .
.\" SECTION
.Sh STRUCTURE
-Macros are classified in an ontology described by their scope rules.
-Some macros are allowed to deviate from their classifications to
-preserve backward-compatibility with old macro combinations still found
-in the manual corpus. These are specifically noted on a per-macro
-basis.
+Each
+.Nm
+document must begin with the document prologue, containing, in order,
+.Sq \&.Dd ,
+.Sq \&.Dt ,
+and
+.Sq \&.Os .
+Following these, the document body must begin with the NAME section
+containing at least one
+.Sq \&.Nm
+followed by a
+.Sq \&.Nd
+macro.
+.Pp
+At least one free-form or macro line must follow this prologue.
+.\"
+.Ss Classification
+Macros are classified by their scope rules. Some macros are allowed to
+deviate from their classifications to preserve backward-compatibility
+with old macro combinations still found in the manual corpus. These are
+specifically noted on a per-macro basis.
.\" SUB-SECTION
.Ss Scope
.Bl -inset
.It Em Block
macros enclose other block macros, in-line macros or text, and
may span multiple lines.
-.Bl -inset -offset XXXX
+.Bl -inset -offset indent
.\" LIST-ITEM
.It Em Full-block
macros always span multiple lines. They consist of zero or
refers to block full-explicit and so on.
.\" PARAGRAPH
.Pp
-.Bl -tag -width 12n -offset XXXX -compact
+.Bl -tag -width 12n -offset indent -compact
.It BPE , BFE
corresponding explicit closure macro
.It BFI
one of the following scenarios (unless specifically noted otherwise):
.\" PARAGRAPH
.Pp
-.Bl -dash -offset XXXX -compact
+.Bl -dash -offset indent -compact
.It
a sequence of >0 space-separated
.Sx Reserved Characters ,
.\" PARAGRAPH
.Pp
Block full-explicit (may contain head, body, tail).
-.Bd -literal -offset XXXX
+.Bd -literal -offset indent
\&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBhead...\(rB
\(lBbody...\(rB
\&.Yc \(lBtail...\(rB
.\" PARAGRAPH
.Pp
Block full-implicit (may contain zero or more heads, body, no tail).
-.Bd -literal -offset XXXX
+.Bd -literal -offset indent
\&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBhead... \(lBTa head...\(rB\(rB
\(lBbody...\(rB
\&.Yc
.\" PARAGRAPH
.Pp
Block partial-explicit (may contain head, multi-line body, tail).
-.Bd -literal -offset XXXX
+.Bd -literal -offset indent
\&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBhead...\(rB
\(lBbody...\(rB
\&.Yc \(lBtail...\(rB
section may be followed by zero or more
.Sx Reserved Words .
These are in the block scope, but not in the body scope.
-.Bd -literal -offset XXXX
+.Bd -literal -offset indent
\&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBbody...\(rB \(lBreserved...\(rB
.Ed
.\" PARAGRAPH
.Pp
In-lines have \(>=0 scoped arguments.
-.Bd -literal -offset XXX
+.Bd -literal -offset indent
\&.Yy \(lB\-arg \(lBval...\(rB\(rB \(lBargs...\(rB
\&.Yy \(lB\-arg \(lBval...\(rB\(rB arg0 arg1 argN
.Ed
-.\"
+.\" SECTION
.Sh MACROS
This section contains a complete list of all
.Nm
-macros, arranged ontologically. A
+macros, arranged by classification. A
.Qq callable
macro is invoked subsequent to the initial macro-line macro. A
.Qq parsable
.Pc
don't have heads.
.Pp
-.Bl -column -compact -offset XXXX "MacroX" "CallableX" "ParsableX" "Closing"
+.Bl -column -compact -offset indent "MacroX" "CallableX" "ParsableX" "Closing"
.It Em Macro Ta Em Callable Ta Em Parsable Ta Em Closing
+.It \&.Nd Ta \&No Ta \&No Ta \&.Sh
.It \&.Sh Ta \&No Ta \&No Ta \&.Sh
.It \&.Ss Ta \&No Ta \&No Ta \&.Sh, \&.Ss
.It \&.It Ta \&No Ta Yes Ta \&.It, \&.El
the explicit scope rules. All contains bodies, some may contain heads
.Pq So \&Bf Sc .
.Pp
-.Bl -column -compact -offset XXXX "MacroX" "CallableX" "ParsableX" "closed by XXX"
+.Bl -column -compact -offset indent "MacroX" "CallableX" "ParsableX" "closed by XXX"
.It Em Macro Ta Em Callable Ta Em Parsable Ta Em Scope
.It \&.Bd Ta \&No Ta \&No Ta closed by \&.Ed
.It \&.Ed Ta \&No Ta \&No Ta opened by \&.Bd
All of these are callable and parsed for further macros. Their scopes
close at the invocation's end-of-line.
.Pp
-.Bl -column "MacroX" "CallableX" "ParsableX" -compact -offset XXXX
+.Bl -column "MacroX" "CallableX" "ParsableX" -compact -offset indent
.It Em Macro Ta Em Callable Ta Em Parsable
.It \&.Aq Ta Yes Ta Yes
.It \&.Op Ta Yes Ta Yes
may be broken by
.Sq \&.Oc
as in the following example:
-.Bd -literal -offset XXXX
+.Bd -literal -offset indent
\&.Oo
\&.Op Fl a Oc
.Ed
and/or tail
.Pq So \&.Ec Sc .
.Pp
-.Bl -column "MacroX" "CallableX" "ParsableX" "closed by XXXX" -compact -offset XXXX
+.Bl -column "MacroX" "CallableX" "ParsableX" "closed by XXXX" -compact -offset indent
.It Em Macro Ta Em Callable Ta Em Parsable Ta Em Scope
.It \&.Ao Ta Yes Ta Yes Ta closed by \&.Ac
.It \&.Ac Ta Yes Ta Yes Ta opened by \&.Ao
.Pq n ,
then the macro accepts an arbitrary number of arguments.
.Pp
-.Bl -column "MacroX" "CallableX" "ParsableX" "Arguments" -compact -offset XXXX
+.Bl -column "MacroX" "CallableX" "ParsableX" "Arguments" -compact -offset indent
.It Em Macro Ta Em Callable Ta Em Parsable Ta Em Arguments
.It \&.Dd Ta \&No Ta \&No Ta >0
.It \&.Dt Ta \&No Ta \&No Ta n
.It \&.Ic Ta Yes Ta Yes Ta >0
.It \&.In Ta \&No Ta \&No Ta n
.It \&.Li Ta Yes Ta Yes Ta n
-.It \&.Nd Ta \&No Ta \&No Ta n
.It \&.Nm Ta Yes Ta Yes Ta n
.It \&.Ot Ta \&No Ta \&No Ta n
.It \&.Pa Ta Yes Ta Yes Ta n
.Bl -dash -compact
.\" LIST-ITEM
.It
+Some character sequences in groff are not handled depending on escape
+style, e.g.,
+.Sq \e(ba
+and
+.Sq \e*(Ba
+may not be interchanged. This is no longer the case: all character
+sequences resolve to the same symbol, regardless the escape style.
+.\" LIST-ITEM
+.It
+Blocks of whitespace are stripped from both macro and free-form text
+lines (except when in literal mode), while groff would retain whitespace
+in free-form text lines.
+.\" LIST-ITEM
+.It
Historic groff has many un-callable macros. Most of these (excluding
some block-level macros) are now callable, conforming to the
non-historic groff version.
.\" LIST-ITEM
.It
The vertical bar
-.Sq \(Ba
+.Sq \(ba
made historic groff
.Qq go orbital
but is a proper delimiter in this implementation.
delimiter to render. This is not supported.
.\" LIST-ITEM
.It
-If an special-character control character
-.Sq \e
-is escaped, it will
-obviously not render the sequence. Even newer versions of groff seem to
-dither on this.
+If an special-character control character is escaped
+.Sq \e\e ,
+it will obviously not render the subsequent sequence. Even newer
+versions of groff seem to dither on this.
+.\" LIST-ITEM
+.It
+In groff, the
+.Sq \&.Fo
+macro only produces the first parameter. This is no longer the case.
.El
.\" SECTION
.Sh SEE ALSO
There's no way to refer to references in
.Sq \&.Rs/.Re
blocks.
+.\" LIST-ITEM
+.It
+The \-split and \-nosplit arguments to
+.Sq \&.An
+are inane.
+.\" LIST-ITEM
+.It
+The end-of-line whitespace warnings are superfluous holdovers from
+historic groff.
.El