Annotation of mandoc/mdoc.7, Revision 1.18
1.18 ! kristaps 1: .\" $Id: mdoc.7,v 1.17 2009/03/26 23:01:26 kristaps Exp $
1.1 kristaps 2: .\"
1.6 kristaps 3: .\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@openbsd.org>
1.1 kristaps 4: .\"
5: .\" Permission to use, copy, modify, and distribute this software for any
6: .\" purpose with or without fee is hereby granted, provided that the
7: .\" above copyright notice and this permission notice appear in all
8: .\" copies.
9: .\"
10: .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11: .\" WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12: .\" WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13: .\" AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14: .\" DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15: .\" PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16: .\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17: .\" PERFORMANCE OF THIS SOFTWARE.
18: .\"
19: .Dd $Mdocdate$
20: .Dt mdoc 7
21: .Os
22: .\" SECTION
23: .Sh NAME
24: .Nm mdoc
1.15 kristaps 25: .Nd mdoc language reference
1.1 kristaps 26: .\" SECTION
27: .Sh DESCRIPTION
28: The
29: .Nm mdoc
30: language is used to format
31: .Bx
32: .Ux
1.13 kristaps 33: manuals. In this reference document, we describe the syntax, ontology
34: and structure of the
35: .Nm
36: language.
37: .\" PARAGRAPH
38: .Pp
39: An
1.1 kristaps 40: .Nm
41: document follows simple rules: lines beginning with the control
1.13 kristaps 42: character
1.1 kristaps 43: .Sq \.
44: are parsed for macros. Other lines are interpreted within the scope of
1.13 kristaps 45: prior macros:
46: .Bd -literal -offset XXX
47: \&.Sh Macro lines change control state.
48: Other lines are interpreted within the current state.
49: .Ed
1.1 kristaps 50: .\" SECTION
1.13 kristaps 51: .Sh INPUT ENCODING
1.1 kristaps 52: .Nm
1.13 kristaps 53: documents may contain only graphable 7-bit ASCII characters, the space
54: character
1.1 kristaps 55: .Sq \ ,
56: and, in certain circumstances, the tab character
57: .Sq \et .
58: All manuals must have
59: .Sq \en
1.10 kristaps 60: line termination.
61: .Pp
62: The only time a blank line is acceptable is within
63: the context of
1.16 kristaps 64: .Sq \&.Bd \-literal
1.10 kristaps 65: or
1.16 kristaps 66: .Sq \&.Bd \-unfilled .
1.10 kristaps 67: .Pp
68: Tab characters
69: .Pq \et
70: are only acceptable when delimiting
1.16 kristaps 71: .Sq \&.Bl \-column
1.10 kristaps 72: and in
1.16 kristaps 73: .Sq \&.Bd \-literal
1.10 kristaps 74: or
1.16 kristaps 75: .Sq \&.Bd \-unfilled
1.10 kristaps 76: contexts.
1.1 kristaps 77: .\" SUB-SECTION
1.2 kristaps 78: .Ss Reserved Characters
79: Within a macro line, the following characters are reserved:
80: .Bl -tag -width 12n -offset XXXX -compact
1.1 kristaps 81: .It \&.
1.2 kristaps 82: .Pq period
1.1 kristaps 83: .It \&,
1.2 kristaps 84: .Pq comma
1.1 kristaps 85: .It \&:
1.2 kristaps 86: .Pq colon
1.1 kristaps 87: .It \&;
1.2 kristaps 88: .Pq semicolon
1.1 kristaps 89: .It \&(
1.2 kristaps 90: .Pq left-parenthesis
1.1 kristaps 91: .It \&)
1.2 kristaps 92: .Pq right-parenthesis
1.1 kristaps 93: .It \&[
1.2 kristaps 94: .Pq left-bracket
1.1 kristaps 95: .It \&]
1.2 kristaps 96: .Pq right-bracket
1.1 kristaps 97: .It \&?
1.2 kristaps 98: .Pq question
1.1 kristaps 99: .It \&!
1.5 kristaps 100: .Pq exclamation
1.1 kristaps 101: .El
1.5 kristaps 102: .\" PARAGRAPH
1.1 kristaps 103: .Pp
1.5 kristaps 104: Use of reserved characters is described in
105: .Sx Closure .
106: For general non-reserved use, characters must either be escaped with a
107: non-breaking space
1.1 kristaps 108: .Pq Sq \e&
1.5 kristaps 109: or, if applicable, an appropriate escape-sequence used.
1.1 kristaps 110: .\" SUB-SECTION
111: .Ss Special Characters
112: Special character sequences begin with the escape character
1.16 kristaps 113: .Sq \e
1.4 kristaps 114: followed by either an open-parenthesis
1.1 kristaps 115: .Sq \&(
116: for two-character sequences; an open-bracket
117: .Sq \&[
118: for n-character sequences (terminated at a close-bracket
119: .Sq \&] ) ;
120: or a single one-character sequence.
121: .Pp
122: Characters may alternatively be escaped by a slash-asterisk,
1.16 kristaps 123: .Sq \e* ,
1.4 kristaps 124: with the same combinations as described above. This form is deprecated.
125: .Pp
126: The following is a table of all available escapes.
1.1 kristaps 127: .Pp
128: Grammatic:
129: .Bl -tag -width 12n -offset "XXXX" -compact
1.16 kristaps 130: .It \e(em
1.1 kristaps 131: .Pq em-dash
1.16 kristaps 132: .It \e(en
1.1 kristaps 133: .Pq en-dash
134: .It \e-
135: .Pq hyphen
1.16 kristaps 136: .It \e\e
1.1 kristaps 137: .Pq back-slash
138: .It \e'
139: .Pq apostrophe
140: .It \e`
141: .Pq back-tick
1.16 kristaps 142: .It \e
1.1 kristaps 143: .Pq space
1.16 kristaps 144: .It \e.
1.1 kristaps 145: .Pq period
1.16 kristaps 146: .It \e(r!
1.8 kristaps 147: .Pq upside-down exclamation
1.16 kristaps 148: .It \e(r?
1.8 kristaps 149: .Pq upside-down question
1.1 kristaps 150: .El
151: .\" PARAGRAPH
152: .Pp
153: Enclosures:
154: .Bl -tag -width 12n -offset "XXXX" -compact
1.16 kristaps 155: .It \e(lh
1.5 kristaps 156: .Pq left hand
1.16 kristaps 157: .It \e(rh
1.5 kristaps 158: .Pq right hand
1.16 kristaps 159: .It \e(Fo
1.7 kristaps 160: .Pq left guillemet
1.16 kristaps 161: .It \e(Fc
1.7 kristaps 162: .Pq right guillemet
1.16 kristaps 163: .It \e(fo
1.7 kristaps 164: .Pq left guilsing
1.16 kristaps 165: .It \e(fc
1.7 kristaps 166: .Pq right guilsing
1.16 kristaps 167: .It \e(rC
1.1 kristaps 168: .Pq right brace
1.16 kristaps 169: .It \e(lC
1.1 kristaps 170: .Pq left brace
1.16 kristaps 171: .It \e(ra
1.1 kristaps 172: .Pq right angle
1.16 kristaps 173: .It \e(la
1.1 kristaps 174: .Pq left angle
1.16 kristaps 175: .It \e(rB
1.1 kristaps 176: .Pq right bracket
1.16 kristaps 177: .It \e(lB
1.1 kristaps 178: .Pq left bracket
1.16 kristaps 179: .It \eq
1.1 kristaps 180: .Pq double-quote
1.16 kristaps 181: .It \e(lq
1.1 kristaps 182: .Pq left double-quote
1.16 kristaps 183: .It \e(Lq
1.1 kristaps 184: .Pq left double-quote, deprecated
1.16 kristaps 185: .It \e(rq
1.1 kristaps 186: .Pq right double-quote
1.16 kristaps 187: .It \e(Rq
1.1 kristaps 188: .Pq right double-quote, deprecated
1.16 kristaps 189: .It \e(oq
1.1 kristaps 190: .Pq left single-quote
1.16 kristaps 191: .It \e(aq
1.1 kristaps 192: .Pq right single-quote
1.16 kristaps 193: .It \e(Bq
1.8 kristaps 194: .Pq right low double-quote
1.16 kristaps 195: .It \e(bq
1.8 kristaps 196: .Pq right low single-quote
1.1 kristaps 197: .El
198: .\" PARAGRAPH
199: .Pp
200: Indicatives:
201: .Bl -tag -width 12n -offset "XXXX" -compact
1.16 kristaps 202: .It \e(<-
1.1 kristaps 203: .Pq left arrow
1.16 kristaps 204: .It \e(->
1.1 kristaps 205: .Pq right arrow
1.16 kristaps 206: .It \e(ua
1.1 kristaps 207: .Pq up arrow
1.16 kristaps 208: .It \e(da
1.1 kristaps 209: .Pq down arrow
1.16 kristaps 210: .It \e(<>
1.5 kristaps 211: .Pq left-right arrow
1.16 kristaps 212: .It \e(lA
1.5 kristaps 213: .Pq left double-arrow
1.16 kristaps 214: .It \e(rA
1.5 kristaps 215: .Pq right double-arrow
1.16 kristaps 216: .It \e(uA
1.5 kristaps 217: .Pq up double-arrow
1.16 kristaps 218: .It \e(dA
1.5 kristaps 219: .Pq down double-arrow
1.16 kristaps 220: .It \e(hA
1.5 kristaps 221: .Pq left-right double-arrow
1.1 kristaps 222: .El
223: .\" PARAGRAPH
224: .Pp
225: Mathematical:
226: .Bl -tag -width 12n -offset "XXXX" -compact
1.16 kristaps 227: .It \e(es
1.9 kristaps 228: .Pq empty set
1.16 kristaps 229: .It \e(ca
1.9 kristaps 230: .Pq intersection
1.16 kristaps 231: .It \e(cu
1.9 kristaps 232: .Pq union
1.16 kristaps 233: .It \e(gr
1.9 kristaps 234: .Pq gradient
1.16 kristaps 235: .It \e(pd
1.9 kristaps 236: .Pq partial differential
1.16 kristaps 237: .It \e(ap
1.9 kristaps 238: .Pq similarity
1.16 kristaps 239: .It \e(=)
1.9 kristaps 240: .Pq proper superset
1.16 kristaps 241: .It \e((=
1.9 kristaps 242: .Pq proper subset
1.16 kristaps 243: .It \e(eq
1.9 kristaps 244: .Pq equals
1.16 kristaps 245: .It \e(di
1.9 kristaps 246: .Pq division
1.16 kristaps 247: .It \e(mu
1.9 kristaps 248: .Pq multiplication
1.16 kristaps 249: .It \e(pl
1.9 kristaps 250: .Pq addition
1.16 kristaps 251: .It \e(nm
1.9 kristaps 252: .Pq not element
1.16 kristaps 253: .It \e(mo
1.9 kristaps 254: .Pq element
1.16 kristaps 255: .It \e(Im
1.9 kristaps 256: .Pq imaginary
1.16 kristaps 257: .It \e(Re
1.9 kristaps 258: .Pq real
1.16 kristaps 259: .It \e(Ah
1.9 kristaps 260: .Pq aleph
1.16 kristaps 261: .It \e(te
1.9 kristaps 262: .Pq existential quantifier
1.16 kristaps 263: .It \e(fa
1.9 kristaps 264: .Pq universal quantifier
1.16 kristaps 265: .It \e(AN
1.9 kristaps 266: .Pq logical AND
1.16 kristaps 267: .It \e(OR
1.9 kristaps 268: .Pq logical OR
1.16 kristaps 269: .It \e(no
1.9 kristaps 270: .Pq logical NOT
1.16 kristaps 271: .It \e(st
1.9 kristaps 272: .Pq such that
1.16 kristaps 273: .It \e(tf
1.9 kristaps 274: .Pq therefore
1.16 kristaps 275: .It \e(~~
1.9 kristaps 276: .Pq approximate
1.16 kristaps 277: .It \e(~=
1.9 kristaps 278: .Pq approximately equals
1.16 kristaps 279: .It \e(=~
1.9 kristaps 280: .Pq congruent
1.16 kristaps 281: .It \e(Gt
1.1 kristaps 282: .Pq greater-than, deprecated
1.16 kristaps 283: .It \e(Lt
1.1 kristaps 284: .Pq less-than, deprecated
1.16 kristaps 285: .It \e(<=
1.1 kristaps 286: .Pq less-than-equal
1.16 kristaps 287: .It \e(Le
1.1 kristaps 288: .Pq less-than-equal, deprecated
1.16 kristaps 289: .It \e(>=
1.1 kristaps 290: .Pq greater-than-equal
1.16 kristaps 291: .It \e(Ge
1.1 kristaps 292: .Pq greater-than-equal
1.16 kristaps 293: .It \e(==
1.1 kristaps 294: .Pq equal
1.16 kristaps 295: .It \e(!=
1.1 kristaps 296: .Pq not equal
1.16 kristaps 297: .It \e(Ne
1.1 kristaps 298: .Pq not equal, deprecated
1.16 kristaps 299: .It \e(if
1.1 kristaps 300: .Pq infinity
1.16 kristaps 301: .It \e(If
1.1 kristaps 302: .Pq infinity, deprecated
1.16 kristaps 303: .It \e(na
1.1 kristaps 304: .Pq NaN , an extension
1.16 kristaps 305: .It \e(Na
1.1 kristaps 306: .Pq NaN, deprecated
1.16 kristaps 307: .It \e(+-
1.1 kristaps 308: .Pq plus-minus
1.16 kristaps 309: .It \e(Pm
1.1 kristaps 310: .Pq plus-minus, deprecated
1.16 kristaps 311: .It \e(**
1.1 kristaps 312: .Pq asterisk
313: .El
314: .\" PARAGRAPH
315: .Pp
1.7 kristaps 316: Ligatures:
1.1 kristaps 317: .Bl -tag -width 12n -offset "XXXX" -compact
1.16 kristaps 318: .It \e(ss
1.7 kristaps 319: .Pq German eszett
1.16 kristaps 320: .It \e(AE
1.5 kristaps 321: .Pq upper-case AE
1.16 kristaps 322: .It \e(ae
1.5 kristaps 323: .Pq lower-case AE
1.16 kristaps 324: .It \e(OE
1.5 kristaps 325: .Pq upper-case OE
1.16 kristaps 326: .It \e(oe
1.5 kristaps 327: .Pq lower-case OE
1.16 kristaps 328: .It \e(ff
1.7 kristaps 329: .Pq ff ligature
1.16 kristaps 330: .It \e(fi
1.7 kristaps 331: .Pq fi ligature
1.16 kristaps 332: .It \e(fl
1.7 kristaps 333: .Pq fl ligature
1.16 kristaps 334: .It \e(Fi
1.7 kristaps 335: .Pq ffi ligature
1.16 kristaps 336: .It \e(Fl
1.7 kristaps 337: .Pq ffl ligature
338: .El
339: .\" PARAGRAPH
340: .Pp
341: Diacritics and letters:
342: .Bl -tag -width 12n -offset "XXXX" -compact
1.16 kristaps 343: .It \e(ga
1.7 kristaps 344: .Pq grave accent
1.16 kristaps 345: .It \e(aa
1.7 kristaps 346: .Pq accute accent
1.16 kristaps 347: .It \e(a"
1.8 kristaps 348: .Pq umlaut accent
1.16 kristaps 349: .It \e(ad
1.7 kristaps 350: .Pq dieresis accent
1.16 kristaps 351: .It \e(a~
1.7 kristaps 352: .Pq tilde accent
1.16 kristaps 353: .It \e(a^
1.7 kristaps 354: .Pq circumflex accent
1.16 kristaps 355: .It \e(ac
1.7 kristaps 356: .Pq cedilla accent
1.16 kristaps 357: .It \e(ad
1.7 kristaps 358: .Pq dieresis accent
1.16 kristaps 359: .It \e(ah
1.7 kristaps 360: .Pq caron accent
1.16 kristaps 361: .It \e(ao
1.7 kristaps 362: .Pq ring accent
1.16 kristaps 363: .It \e(ho
1.7 kristaps 364: .Pq hook accent
1.16 kristaps 365: .It \e(ab
1.7 kristaps 366: .Pq breve accent
1.16 kristaps 367: .It \e(a-
1.7 kristaps 368: .Pq macron accent
1.16 kristaps 369: .It \e(-D
1.7 kristaps 370: .Pq upper-case eth
1.16 kristaps 371: .It \e(Sd
1.7 kristaps 372: .Pq lower-case eth
1.16 kristaps 373: .It \e(TP
1.7 kristaps 374: .Pq upper-case thorn
1.16 kristaps 375: .It \e(Tp
1.7 kristaps 376: .Pq lower-case thorn
1.16 kristaps 377: .It \e('A
1.5 kristaps 378: .Pq upper-case acute A
1.16 kristaps 379: .It \e('E
1.5 kristaps 380: .Pq upper-case acute E
1.16 kristaps 381: .It \e('I
1.5 kristaps 382: .Pq upper-case acute I
1.16 kristaps 383: .It \e('O
1.5 kristaps 384: .Pq upper-case acute O
1.16 kristaps 385: .It \e('U
1.5 kristaps 386: .Pq upper-case acute U
1.16 kristaps 387: .It \e('a
1.5 kristaps 388: .Pq lower-case acute a
1.16 kristaps 389: .It \e('e
1.5 kristaps 390: .Pq lower-case acute e
1.16 kristaps 391: .It \e('i
1.5 kristaps 392: .Pq lower-case acute i
1.16 kristaps 393: .It \e('o
1.5 kristaps 394: .Pq lower-case acute o
1.16 kristaps 395: .It \e('u
1.5 kristaps 396: .Pq lower-case acute u
1.16 kristaps 397: .It \e(`A
1.5 kristaps 398: .Pq upper-case grave A
1.16 kristaps 399: .It \e(`E
1.5 kristaps 400: .Pq upper-case grave E
1.16 kristaps 401: .It \e(`I
1.5 kristaps 402: .Pq upper-case grave I
1.16 kristaps 403: .It \e(`O
1.5 kristaps 404: .Pq upper-case grave O
1.16 kristaps 405: .It \e(`U
1.5 kristaps 406: .Pq upper-case grave U
1.16 kristaps 407: .It \e(`a
1.5 kristaps 408: .Pq lower-case grave a
1.16 kristaps 409: .It \e(`e
1.5 kristaps 410: .Pq lower-case grave e
1.16 kristaps 411: .It \e(`i
1.5 kristaps 412: .Pq lower-case grave i
1.16 kristaps 413: .It \e(`o
1.5 kristaps 414: .Pq lower-case grave o
1.16 kristaps 415: .It \e(`u
1.5 kristaps 416: .Pq lower-case grave u
1.16 kristaps 417: .It \e(~A
1.5 kristaps 418: .Pq upper-case tilde A
1.16 kristaps 419: .It \e(~N
1.5 kristaps 420: .Pq upper-case tilde N
1.16 kristaps 421: .It \e(~O
1.5 kristaps 422: .Pq upper-case tilde O
1.16 kristaps 423: .It \e(~a
1.5 kristaps 424: .Pq lower-case tilde a
1.16 kristaps 425: .It \e(~n
1.5 kristaps 426: .Pq lower-case tilde n
1.16 kristaps 427: .It \e(~o
1.5 kristaps 428: .Pq lower-case tilde o
1.16 kristaps 429: .It \e(:A
1.5 kristaps 430: .Pq upper-case dieresis A
1.16 kristaps 431: .It \e(:E
1.5 kristaps 432: .Pq upper-case dieresis E
1.16 kristaps 433: .It \e(:I
1.5 kristaps 434: .Pq upper-case dieresis I
1.16 kristaps 435: .It \e(:O
1.5 kristaps 436: .Pq upper-case dieresis O
1.16 kristaps 437: .It \e(:U
1.5 kristaps 438: .Pq upper-case dieresis U
1.16 kristaps 439: .It \e(:a
1.5 kristaps 440: .Pq lower-case dieresis a
1.16 kristaps 441: .It \e(:e
1.5 kristaps 442: .Pq lower-case dieresis e
1.16 kristaps 443: .It \e(:i
1.5 kristaps 444: .Pq lower-case dieresis i
1.16 kristaps 445: .It \e(:o
1.5 kristaps 446: .Pq lower-case dieresis o
1.16 kristaps 447: .It \e(:u
1.5 kristaps 448: .Pq lower-case dieresis u
1.16 kristaps 449: .It \e(:y
1.5 kristaps 450: .Pq lower-case dieresis y
1.16 kristaps 451: .It \e(^A
1.7 kristaps 452: .Pq upper-case circumflex A
1.16 kristaps 453: .It \e(^E
1.7 kristaps 454: .Pq upper-case circumflex E
1.16 kristaps 455: .It \e(^I
1.7 kristaps 456: .Pq upper-case circumflex I
1.16 kristaps 457: .It \e(^O
1.7 kristaps 458: .Pq upper-case circumflex O
1.16 kristaps 459: .It \e(^U
1.7 kristaps 460: .Pq upper-case circumflex U
1.16 kristaps 461: .It \e(^a
1.7 kristaps 462: .Pq lower-case circumflex a
1.16 kristaps 463: .It \e(^e
1.7 kristaps 464: .Pq lower-case circumflex e
1.16 kristaps 465: .It \e(^i
1.7 kristaps 466: .Pq lower-case circumflex i
1.16 kristaps 467: .It \e(^o
1.7 kristaps 468: .Pq lower-case circumflex o
1.16 kristaps 469: .It \e(^u
1.7 kristaps 470: .Pq lower-case circumflex u
1.16 kristaps 471: .It \e(,C
1.7 kristaps 472: .Pq upper-case cedilla C
1.16 kristaps 473: .It \e(,c
1.7 kristaps 474: .Pq lower-case cedilla c
1.16 kristaps 475: .It \e(/L
1.7 kristaps 476: .Pq upper-case stroke L
1.16 kristaps 477: .It \e(/l
1.7 kristaps 478: .Pq lower-case stroke l
1.16 kristaps 479: .It \e(/O
1.7 kristaps 480: .Pq upper-case stroke O
1.16 kristaps 481: .It \e(/o
1.7 kristaps 482: .Pq lower-case stroke o
1.16 kristaps 483: .It \e(oA
1.7 kristaps 484: .Pq upper-case ring A
1.16 kristaps 485: .It \e(oa
1.7 kristaps 486: .Pq lower-case ring a
487: .El
488: .\" PARAGRAPH
489: .Pp
490: Monetary:
491: .Bl -tag -width 12n -offset "XXXX" -compact
1.16 kristaps 492: .It \e(Cs
1.7 kristaps 493: .Pq Scandinavian
1.16 kristaps 494: .It \e(Do
1.7 kristaps 495: .Pq dollar
1.16 kristaps 496: .It \e(Po
1.7 kristaps 497: .Pq pound
1.16 kristaps 498: .It \e(Ye
1.7 kristaps 499: .Pq yen
1.16 kristaps 500: .It \e(Fn
1.7 kristaps 501: .Pq florin
1.16 kristaps 502: .It \e(ct
1.7 kristaps 503: .Pq cent
1.1 kristaps 504: .El
505: .\" PARAGRAPH
506: .Pp
507: Special symbols:
508: .Bl -tag -width 12n -offset "XXXX" -compact
1.18 ! kristaps 509: .It \e0
! 510: .Pq white-space
1.16 kristaps 511: .It \e(de
1.9 kristaps 512: .Pq degree
1.16 kristaps 513: .It \e(ps
1.9 kristaps 514: .Pq paragraph
1.16 kristaps 515: .It \e(sc
1.9 kristaps 516: .Pq section
1.16 kristaps 517: .It \e(dg
1.9 kristaps 518: .Pq dagger
1.16 kristaps 519: .It \e(dd
1.9 kristaps 520: .Pq double dagger
1.16 kristaps 521: .It \e(ci
1.8 kristaps 522: .Pq circle
1.16 kristaps 523: .It \e(ba
1.1 kristaps 524: .Pq bar
1.16 kristaps 525: .It \e(bb
1.8 kristaps 526: .Pq broken bar
1.16 kristaps 527: .It \e(Ba
1.1 kristaps 528: .Pq bar, deprecated
1.16 kristaps 529: .It \e(co
1.1 kristaps 530: .Pq copyright
1.16 kristaps 531: .It \e(rg
1.5 kristaps 532: .Pq registered
1.16 kristaps 533: .It \e(tm
1.5 kristaps 534: .Pq trademarked
1.16 kristaps 535: .It \e&
1.1 kristaps 536: .Pq non-breaking space
1.16 kristaps 537: .It \ee
1.1 kristaps 538: .Pq escape
1.16 kristaps 539: .It \e(Am
1.1 kristaps 540: .Pq ampersand, deprecated
541: .El
542: .\" SECTION
1.17 kristaps 543: .Sh STRUCTURE
1.13 kristaps 544: Macros are classified in an ontology described by their scope rules.
545: Some macros are allowed to deviate from their classifications to
546: preserve backward-compatibility with old macro combinations still found
547: in the manual corpus. These are specifically noted on a per-macro
548: basis.
1.4 kristaps 549: .\" SUB-SECTION
550: .Ss Scope
1.2 kristaps 551: .Bl -inset
1.1 kristaps 552: .\" LIST-ITEM
553: .It Em Block
1.2 kristaps 554: macros enclose other block macros, in-line macros or text, and
1.4 kristaps 555: may span multiple lines.
1.2 kristaps 556: .Bl -inset -offset XXXX
1.1 kristaps 557: .\" LIST-ITEM
558: .It Em Full-block
1.5 kristaps 559: macros always span multiple lines. They consist of zero or
1.2 kristaps 560: more
1.1 kristaps 561: .Qq heads ,
1.5 kristaps 562: subsequent macros or text on the same line following invocation; an
563: optional
1.1 kristaps 564: .Qq body ,
565: which spans subsequent lines of text or macros; and an optional
566: .Qq tail ,
567: macros or text on the same line following closure.
568: .\" LIST-ITEM
569: .It Em Partial-block
1.5 kristaps 570: macros may span multiple lines. They consists of a optional
1.1 kristaps 571: .Qq head ,
572: text immediately following invocation; always a
573: .Qq body ,
574: text or macros following the head on the same and subsequent lines; and
575: optionally a
576: .Qq tail ,
577: text immediately following closure.
578: .\" LIST-ITEM
579: .It Em In-line
1.4 kristaps 580: macros may only enclose text and span at most a single line.
581: .El
582: .El
583: .\" SUB-SECTION
584: .Ss Closure
585: Closure of a macro's scope depends first on its classification, then
586: on whether it's parsable. In this table,
587: .Sq BFE
588: refers to block full-explicit and so on.
589: .\" PARAGRAPH
590: .Pp
591: .Bl -tag -width 12n -offset XXXX -compact
592: .It BPE , BFE
593: corresponding explicit closure macro
594: .It BFI
595: end-of-file or a corresponding implicit closure macro
596: .It BPI
597: end-of-line (body may be closed by >0 space-separated
598: .Sx Reserved Characters ,
599: although block scope will still be open)
600: .It INL
601: end-of-line
1.1 kristaps 602: .El
1.4 kristaps 603: .\" PARAGRAPH
604: .Pp
605: If a macro (block or in-line) is parsable, it may also be closed out by
606: one of the following scenarios (unless specifically noted otherwise):
607: .\" PARAGRAPH
608: .Pp
609: .Bl -dash -offset XXXX -compact
610: .It
611: a sequence of >0 space-separated
612: .Sx Reserved Characters ,
613: .It
614: another macro,
615: .It
616: end-of-line, or
617: .It
618: completion of a set number of arguments.
619: .El
620: .\" PARAGRAPH
621: .Pp
622: If >0 space-separated
623: .Sx Reserved Characters
624: are followed by non-reserved characters, the behaviour differs per
625: macro. In general, scope of the macro is closed and re-opened:
626: subsequent tokens are interpreted as if the scope had just been opened.
627: In other circumstances, scope is simply closed out.
1.1 kristaps 628: .\" SECTION
1.2 kristaps 629: .Sh SYNTAX
1.17 kristaps 630: Macros are two or three characters in length. The syntax of macro
631: invocation depends on its classification.
1.2 kristaps 632: .Qq \-arg
633: refers to the macro arguments (which may contain zero or more values).
634: In these illustrations,
635: .Sq \&.Yo
636: opens the scope of a macro, and if specified,
637: .Sq \&.Yc
638: closes it out (closure may be implicit at end-of-line or end-of-file).
1.4 kristaps 639: .\" PARAGRAPH
1.2 kristaps 640: .Pp
1.4 kristaps 641: Block full-explicit (may contain head, body, tail).
1.2 kristaps 642: .Bd -literal -offset XXXX
1.4 kristaps 643: \&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBhead...\(rB
644: \(lBbody...\(rB
645: \&.Yc \(lBtail...\(rB
1.2 kristaps 646: .Ed
1.4 kristaps 647: .\" PARAGRAPH
1.2 kristaps 648: .Pp
1.4 kristaps 649: Block full-implicit (may contain zero or more heads, body, no tail).
1.2 kristaps 650: .Bd -literal -offset XXXX
1.4 kristaps 651: \&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBhead... \(lBTa head...\(rB\(rB
652: \(lBbody...\(rB
1.2 kristaps 653: \&.Yc
654: .Ed
1.4 kristaps 655: .\" PARAGRAPH
1.2 kristaps 656: .Pp
1.4 kristaps 657: Block partial-explicit (may contain head, multi-line body, tail).
1.2 kristaps 658: .Bd -literal -offset XXXX
659: \&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBhead...\(rB
1.4 kristaps 660: \(lBbody...\(rB
661: \&.Yc \(lBtail...\(rB
1.2 kristaps 662:
663: \&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBhead...\(rB \
1.4 kristaps 664: \(lBbody...\(rB \&Yc \(lBtail...\(rB
1.2 kristaps 665: .Ed
1.4 kristaps 666: .\" PARAGRAPH
1.2 kristaps 667: .Pp
1.4 kristaps 668: Block partial-implicit (no head, body, no tail). Note that the body
669: section may be followed by zero or more
670: .Sx Reserved Words .
671: These are in the block scope, but not in the body scope.
1.2 kristaps 672: .Bd -literal -offset XXXX
1.4 kristaps 673: \&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBbody...\(rB \(lBreserved...\(rB
1.2 kristaps 674: .Ed
1.4 kristaps 675: .\" PARAGRAPH
1.2 kristaps 676: .Pp
1.4 kristaps 677: In-lines have \(>=0 scoped arguments.
1.2 kristaps 678: .Bd -literal -offset XXX
1.4 kristaps 679: \&.Yy \(lB\-arg \(lBval...\(rB\(rB \(lBargs...\(rB
1.2 kristaps 680:
681: \&.Yy \(lB\-arg \(lBval...\(rB\(rB arg0 arg1 argN
682: .Ed
683: .\"
1.1 kristaps 684: .Sh MACROS
685: This section contains a complete list of all
686: .Nm
1.2 kristaps 687: macros, arranged ontologically. A
1.1 kristaps 688: .Qq callable
1.17 kristaps 689: macro is invoked subsequent to the initial macro-line macro. A
1.1 kristaps 690: .Qq parsable
1.2 kristaps 691: macro may be followed by further (ostensibly callable) macros.
1.1 kristaps 692: .\" SUB-SECTION
693: .Ss Block full-implicit
694: The head of these macros follows invocation; the body is the content of
695: subsequent lines prior to closure. None of these macros have tails;
696: some
697: .Po
1.16 kristaps 698: .Sq \&.It \-bullet ,
1.1 kristaps 699: .Sq \-hyphen ,
700: .Sq \-dash ,
1.2 kristaps 701: .Sq \-enum ,
702: .Sq \-item
1.1 kristaps 703: .Pc
704: don't have heads.
705: .Pp
706: .Bl -column "MacroX" "CallableX" "ParsableX" "Closing" -compact -offset XXXX
707: .It Em Macro Ta Em Callable Ta Em Parsable Ta Em Closing
708: .It \&.Sh Ta \&No Ta \&No Ta \&.Sh
709: .It \&.Ss Ta \&No Ta \&No Ta \&.Sh, \&.Ss
710: .It \&.It Ta \&No Ta Yes Ta \&.It, \&.El
711: .El
712: .\" SUB-SECTION
713: .Ss Block full-explicit
714: None of these macros are callable or parsed. The last column indicates
715: the explicit scope rules. All contains bodies, some may contain heads
716: .Pq So \&Bf Sc .
717: .Pp
718: .Bl -column "MacroX" "CallableX" "ParsableX" "closed by XXX" -compact -offset XXXX
719: .It Em Macro Ta Em Callable Ta Em Parsable Ta Em Scope
720: .It \&.Bd Ta \&No Ta \&No Ta closed by \&.Ed
721: .It \&.Ed Ta \&No Ta \&No Ta opened by \&.Bd
722: .It \&.Bl Ta \&No Ta \&No Ta closed by \&.El
723: .It \&.El Ta \&No Ta \&No Ta opened by \&.Bl
724: .It \&.Bf Ta \&No Ta \&No Ta closed by \&.Ef
725: .It \&.Ef Ta \&No Ta \&No Ta opened by \&.Bf
1.2 kristaps 726: .It \&.Bk Ta \&No Ta \&No Ta closed by \&.Ek
727: .It \&.Ek Ta \&No Ta \&No Ta opened by \&.Bk
1.1 kristaps 728: .El
729: .\" SUB-SECTION
730: .Ss Block partial-implicit
731: All of these are callable and parsed for further macros. Their scopes
732: close at the invocation's end-of-line.
733: .Pp
734: .Bl -column "MacroX" "CallableX" "ParsableX" -compact -offset XXXX
735: .It Em Macro Ta Em Callable Ta Em Parsable
736: .It \&.Aq Ta Yes Ta Yes
737: .It \&.Op Ta Yes Ta Yes
738: .It \&.Bq Ta Yes Ta Yes
739: .It \&.Dq Ta Yes Ta Yes
740: .It \&.Pq Ta Yes Ta Yes
741: .It \&.Qq Ta Yes Ta Yes
742: .It \&.Sq Ta Yes Ta Yes
743: .It \&.Brq Ta Yes Ta Yes
1.2 kristaps 744: .It \&.D1 Ta \&No Ta \&Yes
745: .It \&.Dl Ta \&No Ta Yes
746: .It \&.Ql Ta Yes Ta Yes
1.1 kristaps 747: .El
1.13 kristaps 748: .\" PARAGRAPH
749: .Pp
750: The
1.16 kristaps 751: .Sq \&.Op
752: may be broken by
753: .Sq \&.Oc
754: as in the following example:
1.13 kristaps 755: .Bd -literal -offset XXXX
756: \&.Oo
757: \&.Op Fl a Oc
758: .Ed
759: .Pp
760: In the above example, the scope of
1.16 kristaps 761: .Sq \&.Op
1.13 kristaps 762: is technically broken by
1.16 kristaps 763: .Sq \&.Oc ,
1.13 kristaps 764: however, due to the overwhelming existence of this sequence, it's
765: allowed.
1.1 kristaps 766: .\" SUB-SECTION
767: .Ss Block partial-explicit
768: Each of these contains at least a body and, in limited circumstances, a
769: head
1.16 kristaps 770: .Pq So \&.Fo Sc , So \&.Eo Sc
1.1 kristaps 771: and/or tail
1.16 kristaps 772: .Pq So \&.Ec Sc .
1.1 kristaps 773: .Pp
774: .Bl -column "MacroX" "CallableX" "ParsableX" "closed by XXXX" -compact -offset XXXX
775: .It Em Macro Ta Em Callable Ta Em Parsable Ta Em Scope
776: .It \&.Ao Ta Yes Ta Yes Ta closed by \&.Ac
777: .It \&.Ac Ta Yes Ta Yes Ta opened by \&.Ao
778: .It \&.Bc Ta Yes Ta Yes Ta closed by \&.Bo
779: .It \&.Bo Ta Yes Ta Yes Ta opened by \&.Bc
780: .It \&.Pc Ta Yes Ta Yes Ta closed by \&.Po
781: .It \&.Po Ta Yes Ta Yes Ta opened by \&.Pc
782: .It \&.Do Ta Yes Ta Yes Ta closed by \&.Dc
783: .It \&.Dc Ta Yes Ta Yes Ta opened by \&.Do
784: .It \&.Xo Ta Yes Ta Yes Ta closed by \&.Xc
785: .It \&.Xc Ta Yes Ta Yes Ta opened by \&.Xo
786: .It \&.Bro Ta Yes Ta Yes Ta closed by \&.Brc
787: .It \&.Brc Ta Yes Ta Yes Ta opened by \&.Bro
788: .It \&.Oc Ta Yes Ta Yes Ta closed by \&.Oo
789: .It \&.Oo Ta Yes Ta Yes Ta opened by \&.Oc
790: .It \&.So Ta Yes Ta Yes Ta closed by \&.Sc
791: .It \&.Sc Ta Yes Ta Yes Ta opened by \&.So
792: .It \&.Fc Ta Yes Ta Yes Ta opened by \&.Fo
793: .It \&.Fo Ta \&No Ta \&No Ta closed by \&.Fc
794: .It \&.Ec Ta Yes Ta Yes Ta opened by \&.Eo
795: .It \&.Eo Ta Yes Ta Yes Ta closed by \&.Ec
796: .It \&.Qc Ta Yes Ta Yes Ta opened by \&.Oo
797: .It \&.Qo Ta Yes Ta Yes Ta closed by \&.Oc
1.2 kristaps 798: .It \&.Re Ta \&No Ta \&No Ta opened by \&.Rs
799: .It \&.Rs Ta \&No Ta \&No Ta closed by \&.Re
1.1 kristaps 800: .El
801: .\" SUB-SECTION
1.2 kristaps 802: .Ss In-line
1.3 kristaps 803: In-line macros have only text children. If a number (or inequality) of
804: arguments is
805: .Pq n ,
806: then the macro accepts an arbitrary number of arguments.
1.2 kristaps 807: .Pp
808: .Bl -column "MacroX" "CallableX" "ParsableX" "Arguments" -compact -offset XXXX
809: .It Em Macro Ta Em Callable Ta Em Parsable Ta Em Arguments
1.3 kristaps 810: .It \&.Dd Ta \&No Ta \&No Ta >0
811: .It \&.Dt Ta \&No Ta \&No Ta n
812: .It \&.Os Ta \&No Ta \&No Ta n
1.2 kristaps 813: .It \&.Pp Ta \&No Ta \&No Ta 0
1.3 kristaps 814: .It \&.Ad Ta Yes Ta Yes Ta n
815: .It \&.An Ta \&No Ta Yes Ta n
816: .It \&.Ar Ta Yes Ta Yes Ta n
817: .It \&.Cd Ta Yes Ta \&No Ta >0
818: .It \&.Cm Ta Yes Ta Yes Ta n
1.11 kristaps 819: .It \&.Dv Ta Yes Ta Yes Ta n
1.3 kristaps 820: .It \&.Er Ta Yes Ta Yes Ta >0
1.11 kristaps 821: .It \&.Ev Ta Yes Ta Yes Ta n
1.3 kristaps 822: .It \&.Ex Ta \&No Ta \&No Ta 0
1.12 kristaps 823: .It \&.Fa Ta Yes Ta Yes Ta n
1.3 kristaps 824: .It \&.Fd Ta \&No Ta \&No Ta >0
825: .It \&.Fl Ta Yes Ta Yes Ta n
826: .It \&.Fn Ta Yes Ta Yes Ta >0
827: .It \&.Ft Ta \&No Ta Yes Ta n
828: .It \&.Ic Ta Yes Ta Yes Ta >0
829: .It \&.In Ta \&No Ta \&No Ta n
1.11 kristaps 830: .It \&.Li Ta Yes Ta Yes Ta n
1.3 kristaps 831: .It \&.Nd Ta \&No Ta \&No Ta n
832: .It \&.Nm Ta Yes Ta Yes Ta n
833: .It \&.Ot Ta \&No Ta \&No Ta n
834: .It \&.Pa Ta Yes Ta Yes Ta n
835: .It \&.Rv Ta \&No Ta \&No Ta 0
836: .It \&.St Ta \&No Ta Yes Ta 1
1.11 kristaps 837: .It \&.Va Ta Yes Ta Yes Ta n
1.3 kristaps 838: .It \&.Vt Ta Yes Ta Yes Ta >0
839: .It \&.Xr Ta Yes Ta Yes Ta >0, <3
840: .It \&.%A Ta \&No Ta \&No Ta >0
841: .It \&.%B Ta \&No Ta \&No Ta >0
842: .It \&.%C Ta \&No Ta \&No Ta >0
843: .It \&.%D Ta \&No Ta \&No Ta >0
844: .It \&.%I Ta \&No Ta \&No Ta >0
845: .It \&.%J Ta \&No Ta \&No Ta >0
846: .It \&.%N Ta \&No Ta \&No Ta >0
847: .It \&.%O Ta \&No Ta \&No Ta >0
848: .It \&.%P Ta \&No Ta \&No Ta >0
849: .It \&.%R Ta \&No Ta \&No Ta >0
850: .It \&.%T Ta \&No Ta \&No Ta >0
851: .It \&.%V Ta \&No Ta \&No Ta >0
852: .It \&.At Ta Yes Ta Yes Ta 1
853: .It \&.Bsx Ta Yes Ta Yes Ta n
854: .It \&.Bx Ta Yes Ta Yes Ta n
855: .It \&.Db Ta \&No Ta \&No Ta 1
1.11 kristaps 856: .It \&.Em Ta Yes Ta Yes Ta n
1.3 kristaps 857: .It \&.Fx Ta Yes Ta Yes Ta n
858: .It \&.Ms Ta \&No Ta Yes Ta >0
859: .It \&.No Ta Yes Ta Yes Ta 0
860: .It \&.Ns Ta Yes Ta Yes Ta 0
861: .It \&.Nx Ta Yes Ta Yes Ta n
862: .It \&.Ox Ta Yes Ta Yes Ta n
863: .It \&.Pf Ta \&No Ta Yes Ta 1
864: .It \&.Sm Ta \&No Ta \&No Ta 1
865: .It \&.Sx Ta Yes Ta Yes Ta >0
866: .It \&.Sy Ta Yes Ta Yes Ta >0
867: .It \&.Tn Ta Yes Ta Yes Ta >0
868: .It \&.Ux Ta Yes Ta Yes Ta n
1.6 kristaps 869: .It \&.Dx Ta Yes Ta Yes Ta n
1.3 kristaps 870: .It \&.Bt Ta \&No Ta \&No Ta 0
871: .It \&.Hf Ta \&No Ta \&No Ta n
872: .It \&.Fr Ta \&No Ta \&No Ta n
873: .It \&.Ud Ta \&No Ta \&No Ta 0
874: .It \&.Lb Ta \&No Ta \&No Ta 1
875: .It \&.Ap Ta Yes Ta Yes Ta 0
876: .It \&.Lp Ta \&No Ta \&No Ta 0
877: .It \&.Lk Ta \&No Ta Yes Ta >0
878: .It \&.Mt Ta \&No Ta Yes Ta >0
1.6 kristaps 879: .It \&.Es Ta \&No Ta \&No Ta 0
880: .It \&.En Ta \&No Ta \&No Ta 0
1.1 kristaps 881: .El
1.6 kristaps 882: .Pp
883: The
1.16 kristaps 884: .Sq \&.Ot ,
885: .Sq \&.Fr ,
886: .Sq \&.Es
1.6 kristaps 887: and
1.16 kristaps 888: .Sq \&.En ,
1.6 kristaps 889: macros are obsolete.
1.2 kristaps 890: .\" SECTION
1.4 kristaps 891: .Sh COMPATIBILITY
892: The mdoc language was traditionally a
893: .Qq roff
894: macro package; most existing manuals were written with mdoc syntax
895: dictated by system-dependent roff installations. This section documents
896: compatibility with these systems.
897: .Pp
898: .Bl -dash -compact
899: .\" LIST-ITEM
900: .It
1.16 kristaps 901: .Sq \&.Fo
1.5 kristaps 902: and
1.16 kristaps 903: .Sq \&.St
1.5 kristaps 904: historically weren't always callable. Both are now correctly callable.
905: .\" LIST-ITEM
906: .It
1.16 kristaps 907: .Sq \&.It \-nested
1.4 kristaps 908: is assumed for all lists: any list may be nested and
909: .Sq \-enum
910: lists will restart the sequence only for the sub-list.
911: .\" LIST-ITEM
912: .It
1.16 kristaps 913: .Sq \&.It \-column
1.4 kristaps 914: syntax where column widths may be preceeded by other arguments (instead
915: of proceeded) is not supported.
916: .\" LIST-ITEM
917: .It
918: The
1.16 kristaps 919: .Sq \&.At
1.4 kristaps 920: macro only accepts a single parameter.
921: .\" LIST-ITEM
922: .It
923: The system-name macros (
1.16 kristaps 924: .Ns Sq \&.At ,
925: .Sq \&.Bsx ,
926: .Sq \&.Bx ,
927: .Sq \&.Fx ,
928: .Sq \&.Nx ,
929: .Sq \&.Ox ,
1.4 kristaps 930: and
1.16 kristaps 931: .Sq \&.Ux )
1.4 kristaps 932: are callable.
933: .\" LIST-ITEM
934: .It
935: Some manuals use
1.16 kristaps 936: .Sq \&.Li
1.4 kristaps 937: incorrectly by following it with a reserved character and expecting the
938: delimiter to render. This is not supported.
939: .\" LIST-ITEM
940: .It
1.16 kristaps 941: .Sq \&.Cd
1.4 kristaps 942: is callable.
943: .El
944: .\" SECTION
1.2 kristaps 945: .Sh SEE ALSO
1.15 kristaps 946: .Xr mandoc 1
1.2 kristaps 947: .\" SECTION
948: .Sh AUTHORS
949: The
950: .Nm
951: utility was written by
1.6 kristaps 952: .An Kristaps Dzonsons Aq kristaps@openbsd.org .
1.5 kristaps 953: .\" SECTION
954: .Sh CAVEATS
955: There are several ambiguous parts of mdoc.
956: .Pp
957: .Bl -dash -compact
958: .\" LIST-ITEM
959: .It
1.16 kristaps 960: .Sq \&.Fa
1.5 kristaps 961: should be
1.16 kristaps 962: .Sq \&.Va
1.5 kristaps 963: as function arguments are variables.
964: .\" LIST-ITEM
965: .It
1.16 kristaps 966: .Sq \&.Ft
1.5 kristaps 967: should be
1.16 kristaps 968: .Sq \&.Vt
1.5 kristaps 969: as function return types are still types. Furthermore, the
1.16 kristaps 970: .Sq \&.Ft
1.5 kristaps 971: should be removed and
1.16 kristaps 972: .Sq \&.Fo ,
1.5 kristaps 973: which ostensibly follows it, should follow the same convention as
1.16 kristaps 974: .Sq \&.Va .
1.5 kristaps 975: .\" LIST-ITEM
976: .It
1.16 kristaps 977: .Sq \&.Va
1.5 kristaps 978: should formalise that only one or two arguments are acceptable: a
979: variable name and optional, preceeding type.
980: .\" LIST-ITEM
981: .It
1.16 kristaps 982: .Sq \&.Fd
1.5 kristaps 983: is ambiguous. It's commonly used to indicate an include file in the
984: synopsis section.
1.16 kristaps 985: .Sq \&.In
1.5 kristaps 986: should be used, instead.
987: .\" LIST-ITEM
988: .It
989: Only the
990: .Sq \-literal
991: argument to
1.16 kristaps 992: .Sq \&.Bd
1.5 kristaps 993: makes sense. The remaining ones should be removed.
994: .\" LIST-ITEM
995: .It
996: The
1.16 kristaps 997: .Sq \&.Xo
1.5 kristaps 998: and
1.16 kristaps 999: .Sq \&.Xc
1.5 kristaps 1000: macros should be deprecated.
1001: .\" LIST-ITEM
1002: .It
1003: The
1.16 kristaps 1004: .Sq \&.Dt
1.5 kristaps 1005: macro lacks clarity. It should be absolutely clear which title will
1006: render when formatting the manual page.
1.6 kristaps 1007: .\" LIST-ITEM
1008: .It
1009: A
1.16 kristaps 1010: .Sq \&.Lx
1.6 kristaps 1011: should be provided for Linux (\(`a la
1.16 kristaps 1012: .Sq \&.Ox ,
1013: .Sq \&.Nx
1.6 kristaps 1014: etc.).
1.14 kristaps 1015: .\" LIST-ITEM
1016: .It
1017: There's no way to refer to references in
1.16 kristaps 1018: .Sq \&.Rs/.Re
1.14 kristaps 1019: blocks.
1.5 kristaps 1020: .El
CVSweb