=================================================================== RCS file: /cvs/mandoc/mdoc.7,v retrieving revision 1.16 retrieving revision 1.42 diff -u -p -r1.16 -r1.42 --- mandoc/mdoc.7 2009/03/26 16:23:22 1.16 +++ mandoc/mdoc.7 2009/07/13 07:23:07 1.42 @@ -1,23 +1,21 @@ -.\" $Id: mdoc.7,v 1.16 2009/03/26 16:23:22 kristaps Exp $ +.\" $Id: mdoc.7,v 1.42 2009/07/13 07:23:07 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 copyright notice and this permission notice appear in all -.\" copies. +.\" 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. +.\" 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: March 26 2009 $ -.Dt mdoc 7 +.Dd $Mdocdate: July 13 2009 $ +.Dt MDOC 7 .Os .\" SECTION .Sh NAME @@ -30,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 @@ -43,15 +46,10 @@ 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 -.\" PARAGRAPH -.Pp -Macros are two- or three-character sequences whose scope rules, rules -that dictate handling of subsequent-line or same-line arguments, are -governed by one of five classifications described in this document. .\" SECTION .Sh INPUT ENCODING .Nm @@ -80,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 \&, @@ -103,6 +111,8 @@ Within a macro line, the following characters are rese .Pq question .It \&! .Pq exclamation +.It \&| +.Pq vertical bar .El .\" PARAGRAPH .Pp @@ -126,429 +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 -The following is a table of all available escapes. -.Pp -Grammatic: -.Bl -tag -width 12n -offset "XXXX" -compact -.It \e(em -.Pq em-dash -.It \e(en -.Pq en-dash -.It \e- -.Pq hyphen -.It \e\e -.Pq back-slash -.It \e' -.Pq apostrophe -.It \e` -.Pq back-tick -.It \e -.Pq space -.It \e. -.Pq period -.It \e(r! -.Pq upside-down exclamation -.It \e(r? -.Pq upside-down question -.El -.\" PARAGRAPH -.Pp -Enclosures: -.Bl -tag -width 12n -offset "XXXX" -compact -.It \e(lh -.Pq left hand -.It \e(rh -.Pq right hand -.It \e(Fo -.Pq left guillemet -.It \e(Fc -.Pq right guillemet -.It \e(fo -.Pq left guilsing -.It \e(fc -.Pq right guilsing -.It \e(rC -.Pq right brace -.It \e(lC -.Pq left brace -.It \e(ra -.Pq right angle -.It \e(la -.Pq left angle -.It \e(rB -.Pq right bracket -.It \e(lB -.Pq left bracket -.It \eq -.Pq double-quote -.It \e(lq -.Pq left double-quote -.It \e(Lq -.Pq left double-quote, deprecated -.It \e(rq -.Pq right double-quote -.It \e(Rq -.Pq right double-quote, deprecated -.It \e(oq -.Pq left single-quote -.It \e(aq -.Pq right single-quote -.It \e(Bq -.Pq right low double-quote -.It \e(bq -.Pq right low single-quote -.El -.\" PARAGRAPH -.Pp -Indicatives: -.Bl -tag -width 12n -offset "XXXX" -compact -.It \e(<- -.Pq left arrow -.It \e(-> -.Pq right arrow -.It \e(ua -.Pq up arrow -.It \e(da -.Pq down arrow -.It \e(<> -.Pq left-right arrow -.It \e(lA -.Pq left double-arrow -.It \e(rA -.Pq right double-arrow -.It \e(uA -.Pq up double-arrow -.It \e(dA -.Pq down double-arrow -.It \e(hA -.Pq left-right double-arrow -.El -.\" PARAGRAPH -.Pp -Mathematical: -.Bl -tag -width 12n -offset "XXXX" -compact -.It \e(es -.Pq empty set -.It \e(ca -.Pq intersection -.It \e(cu -.Pq union -.It \e(gr -.Pq gradient -.It \e(pd -.Pq partial differential -.It \e(ap -.Pq similarity -.It \e(=) -.Pq proper superset -.It \e((= -.Pq proper subset -.It \e(eq -.Pq equals -.It \e(di -.Pq division -.It \e(mu -.Pq multiplication -.It \e(pl -.Pq addition -.It \e(nm -.Pq not element -.It \e(mo -.Pq element -.It \e(Im -.Pq imaginary -.It \e(Re -.Pq real -.It \e(Ah -.Pq aleph -.It \e(te -.Pq existential quantifier -.It \e(fa -.Pq universal quantifier -.It \e(AN -.Pq logical AND -.It \e(OR -.Pq logical OR -.It \e(no -.Pq logical NOT -.It \e(st -.Pq such that -.It \e(tf -.Pq therefore -.It \e(~~ -.Pq approximate -.It \e(~= -.Pq approximately equals -.It \e(=~ -.Pq congruent -.It \e(Gt -.Pq greater-than, deprecated -.It \e(Lt -.Pq less-than, deprecated -.It \e(<= -.Pq less-than-equal -.It \e(Le -.Pq less-than-equal, deprecated -.It \e(>= -.Pq greater-than-equal -.It \e(Ge -.Pq greater-than-equal -.It \e(== -.Pq equal -.It \e(!= -.Pq not equal -.It \e(Ne -.Pq not equal, deprecated -.It \e(if -.Pq infinity -.It \e(If -.Pq infinity, deprecated -.It \e(na -.Pq NaN , an extension -.It \e(Na -.Pq NaN, deprecated -.It \e(+- -.Pq plus-minus -.It \e(Pm -.Pq plus-minus, deprecated -.It \e(** -.Pq asterisk -.El -.\" PARAGRAPH -.Pp -Ligatures: -.Bl -tag -width 12n -offset "XXXX" -compact -.It \e(ss -.Pq German eszett -.It \e(AE -.Pq upper-case AE -.It \e(ae -.Pq lower-case AE -.It \e(OE -.Pq upper-case OE -.It \e(oe -.Pq lower-case OE -.It \e(ff -.Pq ff ligature -.It \e(fi -.Pq fi ligature -.It \e(fl -.Pq fl ligature -.It \e(Fi -.Pq ffi ligature -.It \e(Fl -.Pq ffl ligature -.El -.\" PARAGRAPH -.Pp -Diacritics and letters: -.Bl -tag -width 12n -offset "XXXX" -compact -.It \e(ga -.Pq grave accent -.It \e(aa -.Pq accute accent -.It \e(a" -.Pq umlaut accent -.It \e(ad -.Pq dieresis accent -.It \e(a~ -.Pq tilde accent -.It \e(a^ -.Pq circumflex accent -.It \e(ac -.Pq cedilla accent -.It \e(ad -.Pq dieresis accent -.It \e(ah -.Pq caron accent -.It \e(ao -.Pq ring accent -.It \e(ho -.Pq hook accent -.It \e(ab -.Pq breve accent -.It \e(a- -.Pq macron accent -.It \e(-D -.Pq upper-case eth -.It \e(Sd -.Pq lower-case eth -.It \e(TP -.Pq upper-case thorn -.It \e(Tp -.Pq lower-case thorn -.It \e('A -.Pq upper-case acute A -.It \e('E -.Pq upper-case acute E -.It \e('I -.Pq upper-case acute I -.It \e('O -.Pq upper-case acute O -.It \e('U -.Pq upper-case acute U -.It \e('a -.Pq lower-case acute a -.It \e('e -.Pq lower-case acute e -.It \e('i -.Pq lower-case acute i -.It \e('o -.Pq lower-case acute o -.It \e('u -.Pq lower-case acute u -.It \e(`A -.Pq upper-case grave A -.It \e(`E -.Pq upper-case grave E -.It \e(`I -.Pq upper-case grave I -.It \e(`O -.Pq upper-case grave O -.It \e(`U -.Pq upper-case grave U -.It \e(`a -.Pq lower-case grave a -.It \e(`e -.Pq lower-case grave e -.It \e(`i -.Pq lower-case grave i -.It \e(`o -.Pq lower-case grave o -.It \e(`u -.Pq lower-case grave u -.It \e(~A -.Pq upper-case tilde A -.It \e(~N -.Pq upper-case tilde N -.It \e(~O -.Pq upper-case tilde O -.It \e(~a -.Pq lower-case tilde a -.It \e(~n -.Pq lower-case tilde n -.It \e(~o -.Pq lower-case tilde o -.It \e(:A -.Pq upper-case dieresis A -.It \e(:E -.Pq upper-case dieresis E -.It \e(:I -.Pq upper-case dieresis I -.It \e(:O -.Pq upper-case dieresis O -.It \e(:U -.Pq upper-case dieresis U -.It \e(:a -.Pq lower-case dieresis a -.It \e(:e -.Pq lower-case dieresis e -.It \e(:i -.Pq lower-case dieresis i -.It \e(:o -.Pq lower-case dieresis o -.It \e(:u -.Pq lower-case dieresis u -.It \e(:y -.Pq lower-case dieresis y -.It \e(^A -.Pq upper-case circumflex A -.It \e(^E -.Pq upper-case circumflex E -.It \e(^I -.Pq upper-case circumflex I -.It \e(^O -.Pq upper-case circumflex O -.It \e(^U -.Pq upper-case circumflex U -.It \e(^a -.Pq lower-case circumflex a -.It \e(^e -.Pq lower-case circumflex e -.It \e(^i -.Pq lower-case circumflex i -.It \e(^o -.Pq lower-case circumflex o -.It \e(^u -.Pq lower-case circumflex u -.It \e(,C -.Pq upper-case cedilla C -.It \e(,c -.Pq lower-case cedilla c -.It \e(/L -.Pq upper-case stroke L -.It \e(/l -.Pq lower-case stroke l -.It \e(/O -.Pq upper-case stroke O -.It \e(/o -.Pq lower-case stroke o -.It \e(oA -.Pq upper-case ring A -.It \e(oa -.Pq lower-case ring a -.El -.\" PARAGRAPH -.Pp -Monetary: -.Bl -tag -width 12n -offset "XXXX" -compact -.It \e(Cs -.Pq Scandinavian -.It \e(Do -.Pq dollar -.It \e(Po -.Pq pound -.It \e(Ye -.Pq yen -.It \e(Fn -.Pq florin -.It \e(ct -.Pq cent -.El -.\" PARAGRAPH -.Pp -Special symbols: -.Bl -tag -width 12n -offset "XXXX" -compact -.It \e(de -.Pq degree -.It \e(ps -.Pq paragraph -.It \e(sc -.Pq section -.It \e(dg -.Pq dagger -.It \e(dd -.Pq double dagger -.It \e(ci -.Pq circle -.It \e(ba -.Pq bar -.It \e(bb -.Pq broken bar -.It \e(Ba -.Pq bar, deprecated -.It \e(co -.Pq copyright -.It \e(rg -.Pq registered -.It \e(tm -.Pq trademarked -.It \e& -.Pq non-breaking space -.It \ee -.Pq escape -.It \e(Am -.Pq ampersand, deprecated -.El +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 ONTOLOGY -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. +.Sh STRUCTURE +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 @@ -556,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 @@ -591,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 @@ -609,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 , @@ -630,8 +252,8 @@ subsequent tokens are interpreted as if the scope had In other circumstances, scope is simply closed out. .\" SECTION .Sh SYNTAX -Macros are generally two and at times three characters in length. The -syntax of macro invocation depends on its classification. +Macros are two or three characters in length. The syntax of macro +invocation depends on its classification. .Qq \-arg refers to the macro arguments (which may contain zero or more values). In these illustrations, @@ -642,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 @@ -650,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 @@ -658,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 @@ -672,24 +294,24 @@ 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 may be invoked subsequent to the initial macro-line macro. A +macro is invoked subsequent to the initial macro-line macro. A .Qq parsable macro may be followed by further (ostensibly callable) macros. .\" SUB-SECTION @@ -706,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 @@ -718,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 @@ -734,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 @@ -755,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 @@ -774,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 @@ -808,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 @@ -827,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 @@ -856,9 +478,9 @@ then the macro accepts an arbitrary number of argument .It \&.Bsx Ta Yes Ta Yes Ta n .It \&.Bx Ta Yes Ta Yes Ta n .It \&.Db Ta \&No Ta \&No Ta 1 -.It \&.Em Ta Yes Ta Yes Ta n +.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 @@ -877,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 @@ -892,29 +514,54 @@ 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 .It .Sq \&.It \-column -syntax where column widths may be preceeded by other arguments (instead +syntax where column widths may be preceded by other arguments (instead of proceeded) is not supported. .\" LIST-ITEM .It @@ -923,39 +570,35 @@ 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 -.Xr mandoc 1 +.Xr mandoc 1 , +.Xr mandoc_char 7 .\" SECTION .Sh AUTHORS 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 @@ -979,7 +622,7 @@ which ostensibly follows it, should follow the same co .It .Sq \&.Va should formalise that only one or two arguments are acceptable: a -variable name and optional, preceeding type. +variable name and optional, preceding type. .\" LIST-ITEM .It .Sq \&.Fd @@ -1020,4 +663,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