]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc.7
Err/warn fix (schwarze@openbsd.org).
[mandoc.git] / mdoc.7
diff --git a/mdoc.7 b/mdoc.7
index 35d1fb386a4790c78c72588eaeb369316d16b760..4fa97a45f3f6ec95fc67dde037024119b723ca8e 100644 (file)
--- a/mdoc.7
+++ b/mdoc.7
@@ -1,4 +1,4 @@
-.\"    $Id: mdoc.7,v 1.29 2009/06/16 19:13:28 kristaps Exp $
+.\"    $Id: mdoc.7,v 1.42 2009/07/13 07:23:07 kristaps Exp $
 .\"
 .\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
 .\"
 .\"
 .\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
 .\"
@@ -14,7 +14,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\" 
 .\" 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 16 2009 $
+.Dd $Mdocdate: July 13 2009 $
 .Dt MDOC 7
 .Os
 .\" SECTION
 .Dt MDOC 7
 .Os
 .\" SECTION
@@ -28,8 +28,8 @@ The
 language is used to format 
 .Bx 
 .Ux
 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 .
 .Nm
 language.  Our reference implementation is
 .Xr mandoc 1 .
@@ -46,7 +46,7 @@ character
 .Sq \.
 are parsed for macros.  Other lines are interpreted within the scope of
 prior macros:
 .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
 \&.Sh Macro lines change control state.
 Other lines are interpreted within the current state.
 .Ed
@@ -90,7 +90,7 @@ optionally followed by whitespace, is ignored.
 .\" SUB-SECTION
 .Ss Reserved Characters
 Within a macro line, the following characters are reserved:
 .\" 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 \&,
 .It \&.
 .Pq period
 .It \&,
@@ -136,14 +136,41 @@ or a single one-character sequence.
 .Pp
 Characters may alternatively be escaped by a slash-asterisk,
 .Sq \e* ,
 .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
 .\" 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 
 .\" SUB-SECTION
 .Ss Scope
 .Bl -inset 
@@ -151,7 +178,7 @@ basis.
 .It Em Block
 macros enclose other block macros, in-line macros or text, and
 may span multiple lines.
 .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 
 .\" LIST-ITEM
 .It Em Full-block
 macros always span multiple lines.  They consist of zero or 
@@ -186,7 +213,7 @@ on whether it's parsable.  In this table,
 refers to block full-explicit and so on.
 .\" PARAGRAPH
 .Pp
 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
 .It BPE , BFE
 corresponding explicit closure macro
 .It BFI
@@ -204,7 +231,7 @@ If a macro (block or in-line) is parsable, it may also be closed out by
 one of the following scenarios (unless specifically noted otherwise):
 .\" PARAGRAPH
 .Pp
 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 ,
 .It 
 a sequence of >0 space-separated
 .Sx Reserved Characters ,
@@ -237,7 +264,7 @@ closes it out (closure may be implicit at end-of-line or end-of-file).
 .\" PARAGRAPH
 .Pp
 Block full-explicit (may contain head, body, tail).
 .\" 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 
 \&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBhead...\(rB 
 \(lBbody...\(rB 
 \&.Yc \(lBtail...\(rB 
@@ -245,7 +272,7 @@ Block full-explicit (may contain head, body, tail).
 .\" PARAGRAPH
 .Pp
 Block full-implicit (may contain zero or more heads, body, no tail).
 .\" 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
 \&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBhead... \(lBTa head...\(rB\(rB 
 \(lBbody...\(rB 
 \&.Yc
@@ -253,7 +280,7 @@ Block full-implicit (may contain zero or more heads, body, no tail).
 .\" PARAGRAPH
 .Pp
 Block partial-explicit (may contain head, multi-line body, tail).
 .\" 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 
 \&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBhead...\(rB 
 \(lBbody...\(rB 
 \&.Yc \(lBtail...\(rB 
@@ -267,22 +294,22 @@ Block partial-implicit (no head, body, no tail).  Note that the body
 section may be followed by zero or more 
 .Sx Reserved Words .
 These are in the block scope, but not in the body scope.
 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.
 \&.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
 \&.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
 .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
 .Qq callable
 macro is invoked subsequent to the initial macro-line macro.  A
 .Qq parsable
@@ -301,8 +328,9 @@ some
 .Pc
 don't have heads.
 .Pp
 .Pc
 don't have heads.
 .Pp
-.Bl -column "MacroX" "CallableX" "ParsableX" "Closing" -compact -offset XXXX
+.Bl -column -compact -offset indent "MacroX" "CallableX" "ParsableX" "Closing"
 .It Em Macro Ta Em Callable Ta Em Parsable Ta Em 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
 .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
@@ -313,7 +341,7 @@ None of these macros are callable or parsed.  The last column indicates
 the explicit scope rules.  All contains bodies, some may contain heads 
 .Pq So \&Bf Sc .
 .Pp
 the explicit scope rules.  All contains bodies, some may contain heads 
 .Pq So \&Bf Sc .
 .Pp
-.Bl -column "MacroX" "CallableX" "ParsableX" "closed by XXX" -compact -offset XXXX
+.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
 .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
@@ -329,7 +357,7 @@ the explicit scope rules.  All contains bodies, some may contain heads
 All of these are callable and parsed for further macros.  Their scopes
 close at the invocation's end-of-line.
 .Pp
 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
 .It Em Macro Ta Em Callable Ta Em Parsable
 .It \&.Aq    Ta    Yes   Ta    Yes
 .It \&.Op    Ta    Yes   Ta    Yes
@@ -350,7 +378,7 @@ The
 may be broken by 
 .Sq \&.Oc 
 as in the following example:
 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
 \&.Oo
 \&.Op Fl a Oc
 .Ed
@@ -369,7 +397,7 @@ head
 and/or tail 
 .Pq So \&.Ec Sc .
 .Pp
 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
 .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
@@ -403,7 +431,7 @@ arguments is
 .Pq n , 
 then the macro accepts an arbitrary number of arguments.
 .Pp
 .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 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
@@ -426,7 +454,6 @@ then the macro accepts an arbitrary number of arguments.
 .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 \&.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
 .It \&.Nm    Ta    Yes   Ta    Yes     Ta    n
 .It \&.Ot    Ta    \&No  Ta    \&No    Ta    n
 .It \&.Pa    Ta    Yes   Ta    Yes     Ta    n
@@ -500,13 +527,27 @@ file re-write
 .Bl -dash -compact
 .\" LIST-ITEM
 .It
 .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 
 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.
 made historic groff
 .Qq go orbital
 but is a proper delimiter in this implementation.
@@ -535,11 +576,15 @@ incorrectly by following it with a reserved character and expecting the
 delimiter to render.  This is not supported.
 .\" LIST-ITEM
 .It
 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
 .El
 .\" SECTION
 .Sh SEE ALSO
@@ -618,4 +663,9 @@ etc.).
 There's no way to refer to references in
 .Sq \&.Rs/.Re
 blocks.
 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.
 .El
 .El