=================================================================== RCS file: /cvs/mandoc/mdoc.7,v retrieving revision 1.22 retrieving revision 1.34 diff -u -p -r1.22 -r1.34 --- mandoc/mdoc.7 2009/04/12 19:45:26 1.22 +++ mandoc/mdoc.7 2009/06/25 11:35:28 1.34 @@ -1,6 +1,6 @@ -.\" $Id: mdoc.7,v 1.22 2009/04/12 19:45:26 kristaps Exp $ +.\" $Id: mdoc.7,v 1.34 2009/06/25 11:35:28 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: June 25 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 @@ -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 XXXX -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 @@ -120,13 +137,35 @@ or a single one-character sequence. Characters may alternatively be escaped by a slash-asterisk, .Sq \e* , with the same combinations as described above. This form is deprecated. +.\" 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 @@ -261,11 +300,11 @@ In-lines have \(>=0 scoped arguments. \&.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,7 +323,7 @@ some .Pc don't have heads. .Pp -.Bl -column "MacroX" "CallableX" "ParsableX" "Closing" -compact -offset XXXX +.Bl -column -compact -offset XXXX "MacroX" "CallableX" "ParsableX" "Closing" .It Em Macro Ta Em Callable Ta Em Parsable Ta Em Closing .It \&.Sh Ta \&No Ta \&No Ta \&.Sh .It \&.Ss Ta \&No Ta \&No Ta \&.Sh, \&.Ss @@ -296,7 +335,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 XXXX "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 @@ -393,7 +432,7 @@ then the macro accepts an arbitrary number of argument .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,7 +444,7 @@ 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 @@ -436,7 +475,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 +494,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 +509,34 @@ 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 -and -.Sq \&.St -historically weren't always callable. Both are now correctly callable. +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 +551,17 @@ 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 +.Sq \e +is escaped, it will +obviously not render the sequence. Even newer versions of groff seem to +dither on this. .El .\" SECTION .Sh SEE ALSO @@ -531,10 +572,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 +640,9 @@ 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. .El