=================================================================== RCS file: /cvs/mandoc/mdoc.7,v retrieving revision 1.22 retrieving revision 1.41 diff -u -p -r1.22 -r1.41 --- mandoc/mdoc.7 2009/04/12 19:45:26 1.22 +++ mandoc/mdoc.7 2009/07/12 19:34:51 1.41 @@ -1,6 +1,6 @@ -.\" $Id: mdoc.7,v 1.22 2009/04/12 19:45:26 kristaps Exp $ +.\" $Id: mdoc.7,v 1.41 2009/07/12 19:34:51 kristaps Exp $ .\" -.\" Copyright (c) 2009 Kristaps Dzonsons +.\" Copyright (c) 2009 Kristaps Dzonsons .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -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. .\" -.Dd $Mdocdate: April 12 2009 $ +.Dd $Mdocdate: July 12 2009 $ .Dt MDOC 7 .Os .\" SECTION @@ -28,10 +28,15 @@ The 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. +language. Our reference implementation is +.Xr mandoc 1 . +The +.Sx COMPATIBILITY +section describes compatibility with +.Xr groff 1 . .\" PARAGRAPH .Pp An @@ -41,7 +46,7 @@ character .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 @@ -73,9 +78,19 @@ or .Sq \&.Bd \-unfilled contexts. .\" SUB-SECTION +.Ss Comments +Anything following a +.Sq \e" +delimiter is considered a comment (unless the +.Sq \e +itself has been escaped) and is ignored to the end of line. +Furthermore, a macro line with only a control character +.Sq \. , +optionally followed by whitespace, is ignored. +.\" SUB-SECTION .Ss Reserved Characters Within a macro line, the following characters are reserved: -.Bl -tag -width 12n -offset XXXX -compact +.Bl -tag -width Ds -offset indent -compact .It \&. .Pq period .It \&, @@ -96,6 +111,8 @@ Within a macro line, the following characters are rese .Pq question .It \&! .Pq exclamation +.It \&| +.Pq vertical bar .El .\" PARAGRAPH .Pp @@ -119,14 +136,41 @@ or a single one-character sequence. .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 @@ -134,7 +178,7 @@ basis. .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 @@ -169,7 +213,7 @@ on whether it's parsable. In this table, 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 @@ -187,7 +231,7 @@ If a macro (block or in-line) is parsable, it may also 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 , @@ -220,7 +264,7 @@ closes it out (closure may be implicit at end-of-line .\" 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 @@ -228,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). -.Bd -literal -offset XXXX +.Bd -literal -offset indent \&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBhead... \(lBTa head...\(rB\(rB \(lBbody...\(rB \&.Yc @@ -236,7 +280,7 @@ Block full-implicit (may contain zero or more heads, b .\" 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 @@ -250,22 +294,22 @@ Block partial-implicit (no head, body, no tail). Note 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 @@ -284,8 +328,9 @@ some .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 \&.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 @@ -296,7 +341,7 @@ None of these macros are callable or parsed. The last 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 @@ -312,7 +357,7 @@ the explicit scope rules. All contains bodies, some m 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 @@ -333,7 +378,7 @@ The 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 @@ -352,7 +397,7 @@ head 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 @@ -386,14 +431,14 @@ arguments is .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 \&.Os Ta \&No Ta \&No Ta n .It \&.Pp Ta \&No Ta \&No Ta 0 .It \&.Ad Ta Yes Ta Yes Ta n -.It \&.An Ta \&No Ta Yes Ta n +.It \&.An Ta Yes Ta Yes Ta n .It \&.Ar Ta Yes Ta Yes Ta n .It \&.Cd Ta Yes Ta \&No Ta >0 .It \&.Cm Ta Yes Ta Yes Ta n @@ -405,11 +450,10 @@ then the macro accepts an arbitrary number of argument .It \&.Fd Ta \&No Ta \&No Ta >0 .It \&.Fl Ta Yes Ta Yes Ta n .It \&.Fn Ta Yes Ta Yes Ta >0 -.It \&.Ft Ta \&No Ta Yes Ta n +.It \&.Ft 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 @@ -436,7 +480,7 @@ then the macro accepts an arbitrary number of argument .It \&.Db Ta \&No Ta \&No Ta 1 .It \&.Em Ta Yes Ta Yes Ta >0 .It \&.Fx Ta Yes Ta Yes Ta n -.It \&.Ms Ta \&No Ta Yes Ta >0 +.It \&.Ms Ta Yes Ta Yes Ta >0 .It \&.No Ta Yes Ta Yes Ta 0 .It \&.Ns Ta Yes Ta Yes Ta 0 .It \&.Nx Ta Yes Ta Yes Ta n @@ -455,8 +499,8 @@ then the macro accepts an arbitrary number of argument .It \&.Lb Ta \&No Ta \&No Ta 1 .It \&.Ap Ta Yes Ta Yes Ta 0 .It \&.Lp Ta \&No Ta \&No Ta 0 -.It \&.Lk Ta \&No Ta Yes Ta >0 -.It \&.Mt Ta \&No Ta Yes Ta >0 +.It \&.Lk Ta Yes Ta Yes Ta n +.It \&.Mt Ta Yes Ta Yes Ta >0 .It \&.Es Ta \&No Ta \&No Ta 0 .It \&.En Ta \&No Ta \&No Ta 0 .El @@ -470,23 +514,48 @@ and macros are obsolete. .\" SECTION .Sh COMPATIBILITY -The mdoc language was traditionally a -.Qq roff -macro package; most existing manuals were written with mdoc syntax -dictated by system-dependent roff installations. This section documents -compatibility with these systems. +This section documents compatibility with other roff implementations, at +this time limited to +.Xr groff 1 . +The term +.Qq historic groff +refers to those versions before the +.Pa doc.tmac +file re-write +.Pq somewhere between 1.15 and 1.19 . .Pp .Bl -dash -compact .\" LIST-ITEM .It -.Sq \&.Fo +Some character sequences in groff are not handled depending on escape +style, e.g., +.Sq \e(ba and -.Sq \&.St -historically weren't always callable. Both are now correctly callable. +.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 +made historic groff +.Qq go orbital +but is a proper delimiter in this implementation. +.\" LIST-ITEM +.It .Sq \&.It \-nested -is assumed for all lists: any list may be nested and +is assumed for all lists (it wasn't in historic groff): any list may be +nested and .Sq \-enum lists will restart the sequence only for the sub-list. .\" LIST-ITEM @@ -501,26 +570,21 @@ The macro only accepts a single parameter. .\" LIST-ITEM .It -The system-name macros ( -.Ns Sq \&.At , -.Sq \&.Bsx , -.Sq \&.Bx , -.Sq \&.Fx , -.Sq \&.Nx , -.Sq \&.Ox , -and -.Sq \&.Ux ) -are callable. -.\" LIST-ITEM -.It Some manuals use .Sq \&.Li incorrectly by following it with a reserved character and expecting the delimiter to render. This is not supported. .\" LIST-ITEM .It -.Sq \&.Cd -is callable. +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 @@ -531,10 +595,10 @@ is callable. The .Nm utility was written by -.An Kristaps Dzonsons Aq kristaps@openbsd.org . +.An Kristaps Dzonsons Aq kristaps@kth.se . .\" SECTION .Sh CAVEATS -There are several ambiguous parts of mdoc. +There are many ambiguous parts of mdoc. .Pp .Bl -dash -compact .\" LIST-ITEM @@ -599,4 +663,13 @@ etc.). 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