version 1.5, 2009/03/16 22:19:19 |
version 1.13, 2009/03/22 08:52:27 |
|
|
.\" $Id$ |
.\" $Id$ |
.\" |
.\" |
.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se> |
.\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@openbsd.org> |
.\" |
.\" |
.\" Permission to use, copy, modify, and distribute this software for any |
.\" Permission to use, copy, modify, and distribute this software for any |
.\" purpose with or without fee is hereby granted, provided that the |
.\" purpose with or without fee is hereby granted, provided that the |
|
|
language is used to format |
language is used to format |
.Bx |
.Bx |
.Ux |
.Ux |
manuals. An |
manuals. In this reference document, we describe the syntax, ontology |
|
and structure of the |
.Nm |
.Nm |
|
language. |
|
.\" PARAGRAPH |
|
.Pp |
|
An |
|
.Nm |
document follows simple rules: lines beginning with the control |
document follows simple rules: lines beginning with the control |
character |
character |
.Sq \. |
.Sq \. |
are parsed for macros. Other lines are interpreted within the scope of |
are parsed for macros. Other lines are interpreted within the scope of |
prior macros. This document describes the encoding, ontology and syntax |
prior macros: |
of these macros. |
.Bd -literal -offset XXX |
|
\&.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 |
.\" SECTION |
.Sh CHARACTER ENCODING |
.Sh INPUT ENCODING |
.Nm |
.Nm |
documents may contain only printable alphanumeric characters, the space |
documents may contain only graphable 7-bit ASCII characters, the space |
character |
character |
.Sq \ , |
.Sq \ , |
and, in certain circumstances, the tab character |
and, in certain circumstances, the tab character |
.Sq \et . |
.Sq \et . |
All manuals must have |
All manuals must have |
.Sq \en |
.Sq \en |
line termination. |
line termination. |
|
.Pp |
|
The only time a blank line is acceptable is within |
|
the context of |
|
.Sq \&Bd \-literal |
|
or |
|
.Sq \&Bd \-unfilled . |
|
.Pp |
|
Tab characters |
|
.Pq \et |
|
are only acceptable when delimiting |
|
.Sq \&Bl \-column |
|
and in |
|
.Sq \&Bd \-literal |
|
or |
|
.Sq \&Bd \-unfilled |
|
contexts. |
.\" SUB-SECTION |
.\" SUB-SECTION |
.Ss Reserved Characters |
.Ss Reserved Characters |
Within a macro line, the following characters are reserved: |
Within a macro line, the following characters are reserved: |
|
|
.Pq space |
.Pq space |
.It \\. |
.It \\. |
.Pq period |
.Pq period |
|
.It \\(r! |
|
.Pq upside-down exclamation |
|
.It \\(r? |
|
.Pq upside-down question |
.El |
.El |
.\" PARAGRAPH |
.\" PARAGRAPH |
.Pp |
.Pp |
|
|
.Pq left hand |
.Pq left hand |
.It \\(rh |
.It \\(rh |
.Pq right hand |
.Pq right hand |
.It \\(<< |
.It \\(Fo |
.Pq left guillemot |
.Pq left guillemet |
.It \\(>> |
.It \\(Fc |
.Pq right guillemot |
.Pq right guillemet |
|
.It \\(fo |
|
.Pq left guilsing |
|
.It \\(fc |
|
.Pq right guilsing |
.It \\(rC |
.It \\(rC |
.Pq right brace |
.Pq right brace |
.It \\(lC |
.It \\(lC |
|
|
.Pq left single-quote |
.Pq left single-quote |
.It \\(aq |
.It \\(aq |
.Pq right single-quote |
.Pq right single-quote |
|
.It \\(Bq |
|
.Pq right low double-quote |
|
.It \\(bq |
|
.Pq right low single-quote |
.El |
.El |
.\" PARAGRAPH |
.\" PARAGRAPH |
.Pp |
.Pp |
|
|
.Pp |
.Pp |
Mathematical: |
Mathematical: |
.Bl -tag -width 12n -offset "XXXX" -compact |
.Bl -tag -width 12n -offset "XXXX" -compact |
|
.It \\(es |
|
.Pq empty set |
|
.It \\(ca |
|
.Pq intersection |
|
.It \\(cu |
|
.Pq union |
|
.It \\(gr |
|
.Pq gradient |
|
.It \\(pd |
|
.Pq partial differential |
|
.It \\(ap |
|
.Pq similarity |
|
.It \\(=) |
|
.Pq proper superset |
|
.It \\((= |
|
.Pq proper subset |
|
.It \\(eq |
|
.Pq equals |
|
.It \\(di |
|
.Pq division |
|
.It \\(mu |
|
.Pq multiplication |
|
.It \\(pl |
|
.Pq addition |
|
.It \\(nm |
|
.Pq not element |
|
.It \\(mo |
|
.Pq element |
|
.It \\(Im |
|
.Pq imaginary |
|
.It \\(Re |
|
.Pq real |
|
.It \\(Ah |
|
.Pq aleph |
|
.It \\(te |
|
.Pq existential quantifier |
|
.It \\(fa |
|
.Pq universal quantifier |
|
.It \\(AN |
|
.Pq logical AND |
|
.It \\(OR |
|
.Pq logical OR |
|
.It \\(no |
|
.Pq logical NOT |
|
.It \\(st |
|
.Pq such that |
|
.It \\(tf |
|
.Pq therefore |
|
.It \\(~~ |
|
.Pq approximate |
|
.It \\(~= |
|
.Pq approximately equals |
|
.It \\(=~ |
|
.Pq congruent |
.It \\(Gt |
.It \\(Gt |
.Pq greater-than, deprecated |
.Pq greater-than, deprecated |
.It \\(Lt |
.It \\(Lt |
|
|
.El |
.El |
.\" PARAGRAPH |
.\" PARAGRAPH |
.Pp |
.Pp |
Diacritics and letter combinations: |
Ligatures: |
.Bl -tag -width 12n -offset "XXXX" -compact |
.Bl -tag -width 12n -offset "XXXX" -compact |
.It \\(ga |
.It \\(ss |
.Pq accent grave |
.Pq German eszett |
.It \\(aa |
|
.Pq accent accute |
|
.It \\(ad |
|
.Pq accent dieresis |
|
.It \\(a~ |
|
.Pq accent tilde |
|
.It \\(AE |
.It \\(AE |
.Pq upper-case AE |
.Pq upper-case AE |
.It \\(ae |
.It \\(ae |
Line 240 Diacritics and letter combinations: |
|
Line 330 Diacritics and letter combinations: |
|
.Pq upper-case OE |
.Pq upper-case OE |
.It \\(oe |
.It \\(oe |
.Pq lower-case OE |
.Pq lower-case OE |
|
.It \\(ff |
|
.Pq ff ligature |
|
.It \\(fi |
|
.Pq fi ligature |
|
.It \\(fl |
|
.Pq fl ligature |
|
.It \\(Fi |
|
.Pq ffi ligature |
|
.It \\(Fl |
|
.Pq ffl ligature |
|
.El |
|
.\" PARAGRAPH |
|
.Pp |
|
Diacritics and letters: |
|
.Bl -tag -width 12n -offset "XXXX" -compact |
|
.It \\(ga |
|
.Pq grave accent |
|
.It \\(aa |
|
.Pq accute accent |
|
.It \\(a" |
|
.Pq umlaut accent |
|
.It \\(ad |
|
.Pq dieresis accent |
|
.It \\(a~ |
|
.Pq tilde accent |
|
.It \\(a^ |
|
.Pq circumflex accent |
|
.It \\(ac |
|
.Pq cedilla accent |
|
.It \\(ad |
|
.Pq dieresis accent |
|
.It \\(ah |
|
.Pq caron accent |
|
.It \\(ao |
|
.Pq ring accent |
|
.It \\(ho |
|
.Pq hook accent |
|
.It \\(ab |
|
.Pq breve accent |
|
.It \\(a- |
|
.Pq macron accent |
|
.It \\(-D |
|
.Pq upper-case eth |
|
.It \\(Sd |
|
.Pq lower-case eth |
|
.It \\(TP |
|
.Pq upper-case thorn |
|
.It \\(Tp |
|
.Pq lower-case thorn |
.It \\('A |
.It \\('A |
.Pq upper-case acute A |
.Pq upper-case acute A |
.It \\('E |
.It \\('E |
Line 314 Diacritics and letter combinations: |
|
Line 453 Diacritics and letter combinations: |
|
.Pq lower-case dieresis u |
.Pq lower-case dieresis u |
.It \\(:y |
.It \\(:y |
.Pq lower-case dieresis y |
.Pq lower-case dieresis y |
|
.It \\(^A |
|
.Pq upper-case circumflex A |
|
.It \\(^E |
|
.Pq upper-case circumflex E |
|
.It \\(^I |
|
.Pq upper-case circumflex I |
|
.It \\(^O |
|
.Pq upper-case circumflex O |
|
.It \\(^U |
|
.Pq upper-case circumflex U |
|
.It \\(^a |
|
.Pq lower-case circumflex a |
|
.It \\(^e |
|
.Pq lower-case circumflex e |
|
.It \\(^i |
|
.Pq lower-case circumflex i |
|
.It \\(^o |
|
.Pq lower-case circumflex o |
|
.It \\(^u |
|
.Pq lower-case circumflex u |
|
.It \\(,C |
|
.Pq upper-case cedilla C |
|
.It \\(,c |
|
.Pq lower-case cedilla c |
|
.It \\(/L |
|
.Pq upper-case stroke L |
|
.It \\(/l |
|
.Pq lower-case stroke l |
|
.It \\(/O |
|
.Pq upper-case stroke O |
|
.It \\(/o |
|
.Pq lower-case stroke o |
|
.It \\(oA |
|
.Pq upper-case ring A |
|
.It \\(oa |
|
.Pq lower-case ring a |
.El |
.El |
.\" PARAGRAPH |
.\" PARAGRAPH |
.Pp |
.Pp |
|
Monetary: |
|
.Bl -tag -width 12n -offset "XXXX" -compact |
|
.It \\(Cs |
|
.Pq Scandinavian |
|
.It \\(Do |
|
.Pq dollar |
|
.It \\(Po |
|
.Pq pound |
|
.It \\(Ye |
|
.Pq yen |
|
.It \\(Fn |
|
.Pq florin |
|
.It \\(ct |
|
.Pq cent |
|
.El |
|
.\" PARAGRAPH |
|
.Pp |
Special symbols: |
Special symbols: |
.Bl -tag -width 12n -offset "XXXX" -compact |
.Bl -tag -width 12n -offset "XXXX" -compact |
.It \\(bu |
.It \\(de |
.Pq bullet |
.Pq degree |
|
.It \\(ps |
|
.Pq paragraph |
|
.It \\(sc |
|
.Pq section |
|
.It \\(dg |
|
.Pq dagger |
|
.It \\(dd |
|
.Pq double dagger |
|
.It \\(ci |
|
.Pq circle |
.It \\(ba |
.It \\(ba |
.Pq bar |
.Pq bar |
|
.It \\(bb |
|
.Pq broken bar |
.It \\(Ba |
.It \\(Ba |
.Pq bar, deprecated |
.Pq bar, deprecated |
.It \\(co |
.It \\(co |
Line 340 Special symbols: |
|
Line 544 Special symbols: |
|
.El |
.El |
.\" SECTION |
.\" SECTION |
.Sh ONTOLOGY |
.Sh ONTOLOGY |
Macros are classified in an ontology described by scope rules. |
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. |
.\" SUB-SECTION |
.\" SUB-SECTION |
.Ss Scope |
.Ss Scope |
.Bl -inset |
.Bl -inset |
Line 540 close at the invocation's end-of-line. |
|
Line 748 close at the invocation's end-of-line. |
|
.It \&.Dl Ta \&No Ta Yes |
.It \&.Dl Ta \&No Ta Yes |
.It \&.Ql Ta Yes Ta Yes |
.It \&.Ql Ta Yes Ta Yes |
.El |
.El |
|
.\" PARAGRAPH |
|
.Pp |
|
The |
|
.Sq \&Op |
|
may be broken by \&Oc as in the following example: |
|
.Bd -literal -offset XXXX |
|
\&.Oo |
|
\&.Op Fl a Oc |
|
.Ed |
|
.Pp |
|
In the above example, the scope of |
|
.Sq \&Op |
|
is technically broken by |
|
.Sq \&Oc , |
|
however, due to the overwhelming existence of this sequence, it's |
|
allowed. |
.\" SUB-SECTION |
.\" SUB-SECTION |
.Ss Block partial-explicit |
.Ss Block partial-explicit |
Each of these contains at least a body and, in limited circumstances, a |
Each of these contains at least a body and, in limited circumstances, a |
Line 593 then the macro accepts an arbitrary number of argument |
|
Line 817 then the macro accepts an arbitrary number of argument |
|
.It \&.Ar Ta Yes Ta Yes Ta n |
.It \&.Ar Ta Yes Ta Yes Ta n |
.It \&.Cd Ta Yes Ta \&No Ta >0 |
.It \&.Cd Ta Yes Ta \&No Ta >0 |
.It \&.Cm Ta Yes Ta Yes Ta n |
.It \&.Cm Ta Yes Ta Yes Ta n |
.It \&.Dv Ta Yes Ta Yes Ta >0 |
.It \&.Dv Ta Yes Ta Yes Ta n |
.It \&.Er Ta Yes Ta Yes Ta >0 |
.It \&.Er Ta Yes Ta Yes Ta >0 |
.It \&.Ev Ta Yes Ta Yes Ta >0 |
.It \&.Ev Ta Yes Ta Yes Ta n |
.It \&.Ex Ta \&No Ta \&No Ta 0 |
.It \&.Ex Ta \&No Ta \&No Ta 0 |
.It \&.Fa Ta Yes Ta Yes Ta >0 |
.It \&.Fa Ta Yes Ta Yes Ta n |
.It \&.Fd Ta \&No Ta \&No Ta >0 |
.It \&.Fd Ta \&No Ta \&No Ta >0 |
.It \&.Fl Ta Yes Ta Yes Ta n |
.It \&.Fl Ta Yes Ta Yes Ta n |
.It \&.Fn Ta Yes Ta Yes Ta >0 |
.It \&.Fn Ta Yes Ta Yes Ta >0 |
.It \&.Ft Ta \&No Ta Yes Ta n |
.It \&.Ft Ta \&No Ta Yes Ta n |
.It \&.Ic Ta Yes Ta Yes Ta >0 |
.It \&.Ic Ta Yes Ta Yes Ta >0 |
.It \&.In Ta \&No Ta \&No Ta n |
.It \&.In Ta \&No Ta \&No Ta n |
.It \&.Li Ta Yes Ta Yes Ta >0 |
.It \&.Li Ta Yes Ta Yes Ta n |
.It \&.Nd Ta \&No Ta \&No Ta n |
.It \&.Nd Ta \&No Ta \&No Ta n |
.It \&.Nm Ta Yes Ta Yes Ta n |
.It \&.Nm Ta Yes Ta Yes Ta n |
.It \&.Ot Ta \&No Ta \&No Ta n |
.It \&.Ot Ta \&No Ta \&No Ta n |
.It \&.Pa Ta Yes Ta Yes Ta n |
.It \&.Pa Ta Yes Ta Yes Ta n |
.It \&.Rv Ta \&No Ta \&No Ta 0 |
.It \&.Rv Ta \&No Ta \&No Ta 0 |
.It \&.St Ta \&No Ta Yes Ta 1 |
.It \&.St Ta \&No Ta Yes Ta 1 |
.It \&.Va Ta Yes Ta Yes Ta >0 |
.It \&.Va Ta Yes Ta Yes Ta n |
.It \&.Vt Ta Yes Ta Yes Ta >0 |
.It \&.Vt Ta Yes Ta Yes Ta >0 |
.It \&.Xr Ta Yes Ta Yes Ta >0, <3 |
.It \&.Xr Ta Yes Ta Yes Ta >0, <3 |
.It \&.%A Ta \&No Ta \&No Ta >0 |
.It \&.%A Ta \&No Ta \&No Ta >0 |
Line 630 then the macro accepts an arbitrary number of argument |
|
Line 854 then the macro accepts an arbitrary number of argument |
|
.It \&.Bsx Ta Yes Ta Yes Ta n |
.It \&.Bsx Ta Yes Ta Yes Ta n |
.It \&.Bx Ta Yes Ta Yes Ta n |
.It \&.Bx Ta Yes Ta Yes Ta n |
.It \&.Db Ta \&No Ta \&No Ta 1 |
.It \&.Db Ta \&No Ta \&No Ta 1 |
.It \&.Em Ta Yes Ta Yes Ta >0 |
.It \&.Em Ta Yes Ta Yes Ta n |
.It \&.Fx Ta Yes Ta Yes Ta n |
.It \&.Fx Ta Yes Ta Yes Ta n |
.It \&.Ms Ta \&No Ta Yes Ta >0 |
.It \&.Ms Ta \&No Ta Yes Ta >0 |
.It \&.No Ta Yes Ta Yes Ta 0 |
.It \&.No Ta Yes Ta Yes Ta 0 |
Line 643 then the macro accepts an arbitrary number of argument |
|
Line 867 then the macro accepts an arbitrary number of argument |
|
.It \&.Sy Ta Yes Ta Yes Ta >0 |
.It \&.Sy Ta Yes Ta Yes Ta >0 |
.It \&.Tn Ta Yes Ta Yes Ta >0 |
.It \&.Tn Ta Yes Ta Yes Ta >0 |
.It \&.Ux Ta Yes Ta Yes Ta n |
.It \&.Ux Ta Yes Ta Yes Ta n |
|
.It \&.Dx Ta Yes Ta Yes Ta n |
.It \&.Bt Ta \&No Ta \&No Ta 0 |
.It \&.Bt Ta \&No Ta \&No Ta 0 |
.It \&.Hf Ta \&No Ta \&No Ta n |
.It \&.Hf Ta \&No Ta \&No Ta n |
.It \&.Fr Ta \&No Ta \&No Ta n |
.It \&.Fr Ta \&No Ta \&No Ta n |
Line 652 then the macro accepts an arbitrary number of argument |
|
Line 877 then the macro accepts an arbitrary number of argument |
|
.It \&.Lp Ta \&No Ta \&No Ta 0 |
.It \&.Lp Ta \&No Ta \&No Ta 0 |
.It \&.Lk Ta \&No Ta Yes Ta >0 |
.It \&.Lk Ta \&No Ta Yes Ta >0 |
.It \&.Mt Ta \&No Ta Yes Ta >0 |
.It \&.Mt Ta \&No Ta Yes Ta >0 |
|
.It \&.Es Ta \&No Ta \&No Ta 0 |
|
.It \&.En Ta \&No Ta \&No Ta 0 |
.El |
.El |
|
.Pp |
|
The |
|
.Sq \&Ot , |
|
.Sq \&Fr , |
|
.Sq \&Es |
|
and |
|
.Sq \&En , |
|
macros are obsolete. |
.\" SECTION |
.\" SECTION |
.Sh COMPATIBILITY |
.Sh COMPATIBILITY |
The mdoc language was traditionally a |
The mdoc language was traditionally a |
|
|
The |
The |
.Nm |
.Nm |
utility was written by |
utility was written by |
.An Kristaps Dzonsons Aq kristaps@kth.se . |
.An Kristaps Dzonsons Aq kristaps@openbsd.org . |
.\" SECTION |
.\" SECTION |
.Sh CAVEATS |
.Sh CAVEATS |
There are several ambiguous parts of mdoc. |
There are several ambiguous parts of mdoc. |
|
|
.Sq \&Dt |
.Sq \&Dt |
macro lacks clarity. It should be absolutely clear which title will |
macro lacks clarity. It should be absolutely clear which title will |
render when formatting the manual page. |
render when formatting the manual page. |
|
.\" LIST-ITEM |
|
.It |
|
A |
|
.Sq \&Lx |
|
should be provided for Linux (\(`a la |
|
.Sq \&Ox , |
|
.Sq \&Nx |
|
etc.). |
.El |
.El |