1 .\" $Id: mdoc.7,v 1.44 2009/07/17 12:08:08 kristaps Exp $
3 .\" Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
5 .\" Permission to use, copy, modify, and distribute this software for any
6 .\" purpose with or without fee is hereby granted, provided that the above
7 .\" copyright notice and this permission notice appear in all copies.
9 .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 .Dd $Mdocdate: July 17 2009 $
20 .\" SECTION---------------------------------------------
23 .Nd mdoc language reference
24 .\" SECTION---------------------------------------------
28 language is used to format
31 manuals. In this reference document, we describe its syntax, structure,
32 and usage. Our reference implementation is
36 section describes compatibility with
38 .\" PARAGRAPH------------
42 document follows simple rules: lines beginning with the control
45 are parsed for macros. Other lines are interpreted within the scope of
47 .Bd -literal -offset indent
48 \&.Sh Macro lines change control state.
49 Other lines are interpreted within the current state.
51 .\" SECTION---------------------------------------------
54 documents may contain only graphable 7-bit ASCII characters, the space
55 character, and, in certain circumstances, the tab character. All
59 .\" SUB-SECTION----------------------
63 whether in a macro or free-form text line, is ignored to the end of
64 line. A macro line with only a control character and comment escape,
67 .\" SUB-SECTION----------------------
68 .Ss Reserved Characters
69 Within a macro line, the following characters are reserved:
70 .Bl -tag -width Ds -offset indent -compact
94 .\" PARAGRAPH------------
96 Use of reserved characters is described in
98 For general use in macro lines, these characters must either be escaped
99 with a non-breaking space
101 or, if applicable, an appropriate escape sequence used.
102 .\" SUB-SECTION----------------------
103 .Ss Special Characters
104 Special characters may occur in both macro and free-form lines.
105 Sequences begin with the escape character
107 followed by either an open-parenthesis
109 for two-character sequences; an open-bracket
111 for n-character sequences (terminated at a close-bracket
113 or a single one-character sequence. See
115 for a complete list. Examples include
121 .\" PARAGRAPH------------
123 An alternative escape sequence is
126 but this method is discouraged for compatibility reasons.
127 .\" PARAGRAPH------------
130 also be text-decorated using the
132 escape followed by an indicator: B (bold), I, (italic), or P and R
133 (Roman, or reset). This form is not recommended.
134 .\" SUB-SECTION----------------------
136 In general, consecutive blocks of whitespace are pruned from input.
137 These are later re-added, when applicable, by
139 .\" PARAGRAPH------------
141 Blank lines are permitted within
145 contexts. Tab characters are only acceptable when delimiting
152 .\" SECTION---------------------------------------------
156 document must begin with a document prologue, containing, in order,
161 (using this manual as an example):
162 .Bd -literal -offset indent
168 \&.Nd mdoc language reference
171 Following these, the document body must begin with the NAME section
172 containing at least one
176 .\" PARAGRAPH------------
178 Subsequent SYNOPSIS and DESCRIPTION sections are strongly encouraged,
180 .\" SECTION---------------------------------------------
182 Every line beginning with the control character
184 is processed for macros, two- or three-character semantic annotations.
185 .\" PARAGRAPH------------
187 The syntax of macro depends on its classification. In this section,
189 refers to macro arguments, which may be followed by zero or more
193 opens the scope of a macro; and if specified,
196 .\" PARAGRAPH------------
200 column indicates that the macro may be called subsequent to the initial
203 column indicates whether the macro may be followed by further
204 (ostensibly callable) macros. The
206 column, if applicable, describes closure rules.
207 .\" SUB-SECTION----------------------
208 .Ss Block full-explicit
209 Multi-line scope closed by an explicit closing macro. All macros
210 contains bodies; only
213 .Bd -literal -offset indent
214 \&.Yo \(lB\-arg \(lBparm...\(rB\(rB \(lBhead...\(rB
218 .\" PARAGRAPH------------
220 .Bl -column -compact -offset indent "MacroX" "CallableX" "ParsableX" "closed by XXX"
221 .It Em Macro Ta Em Callable Ta Em Parsable Ta Em Scope
222 .It \&Bd Ta \&No Ta \&No Ta closed by \&Ed
223 .It \&Bf Ta \&No Ta \&No Ta closed by \&Ef
224 .It \&Bk Ta \&No Ta \&No Ta closed by \&Ek
225 .It \&Bl Ta \&No Ta \&No Ta closed by \&El
226 .It \&Ed Ta \&No Ta \&No Ta opened by \&Bd
227 .It \&Ef Ta \&No Ta \&No Ta opened by \&Bf
228 .It \&Ek Ta \&No Ta \&No Ta opened by \&Bk
229 .It \&El Ta \&No Ta \&No Ta opened by \&Bl
231 .\" SUB-SECTION----------------------
232 .Ss Block full-implicit
233 Multi-line scope closed by end-of-file or implicitly by another macro.
234 All macros have bodies; some
242 don't have heads, while
244 may have multiple heads.
245 .Bd -literal -offset indent
246 \&.Yo \(lB\-arg \(lBparm...\(rB\(rB \(lBhead... \(lBTa head...\(rB\(rB
249 .\" PARAGRAPH------------
251 .Bl -column -compact -offset indent "MacroX" "CallableX" "ParsableX" "closed by XXXXXXXXXXX"
252 .It Em Macro Ta Em Callable Ta Em Parsable Ta Em Scope
253 .It \&It Ta \&No Ta Yes Ta closed by \&It, \&El
254 .It \&Nd Ta \&No Ta \&No Ta closed by \&Sh
255 .It \&Sh Ta \&No Ta \&No Ta closed by \&Sh
256 .It \&Ss Ta \&No Ta \&No Ta closed by \&Sh, \&Ss
258 .\" SUB-SECTION----------------------
259 .Ss Block partial-explicit
260 Like block full-explicit, but also with single-line scope. Each
261 has at least a body and, in limited circumstances, a head
262 .Pq So \&Fo Sc , So \&Eo Sc
265 .Bd -literal -offset indent
266 \&.Yo \(lB\-arg \(lBparm...\(rB\(rB \(lBhead...\(rB
268 \&.Yc \(lBtail...\(rB
270 \&.Yo \(lB\-arg \(lBparm...\(rB\(rB \(lBhead...\(rB \
271 \(lBbody...\(rB \&Yc \(lBtail...\(rB
273 .\" PARAGRAPH------------
275 .Bl -column "MacroX" "CallableX" "ParsableX" "closed by XXXX" -compact -offset indent
276 .It Em Macro Ta Em Callable Ta Em Parsable Ta Em Scope
277 .It \&Ac Ta Yes Ta Yes Ta opened by \&Ao
278 .It \&Ao Ta Yes Ta Yes Ta closed by \&Ac
279 .It \&Bc Ta Yes Ta Yes Ta closed by \&Bo
280 .It \&Bo Ta Yes Ta Yes Ta opened by \&Bc
281 .It \&Brc Ta Yes Ta Yes Ta opened by \&Bro
282 .It \&Bro Ta Yes Ta Yes Ta closed by \&Brc
283 .It \&Dc Ta Yes Ta Yes Ta opened by \&Do
284 .It \&Do Ta Yes Ta Yes Ta closed by \&Dc
285 .It \&Ec Ta Yes Ta Yes Ta opened by \&Eo
286 .It \&Eo Ta Yes Ta Yes Ta closed by \&Ec
287 .It \&Fc Ta Yes Ta Yes Ta opened by \&Fo
288 .It \&Fo Ta \&No Ta \&No Ta closed by \&Fc
289 .It \&Oc Ta Yes Ta Yes Ta closed by \&Oo
290 .It \&Oo Ta Yes Ta Yes Ta opened by \&Oc
291 .It \&Pc Ta Yes Ta Yes Ta closed by \&Po
292 .It \&Po Ta Yes Ta Yes Ta opened by \&Pc
293 .It \&Qc Ta Yes Ta Yes Ta opened by \&Oo
294 .It \&Qo Ta Yes Ta Yes Ta closed by \&Oc
295 .It \&Re Ta \&No Ta \&No Ta opened by \&Rs
296 .It \&Rs Ta \&No Ta \&No Ta closed by \&Re
297 .It \&Sc Ta Yes Ta Yes Ta opened by \&So
298 .It \&So Ta Yes Ta Yes Ta closed by \&Sc
299 .It \&Xc Ta Yes Ta Yes Ta opened by \&Xo
300 .It \&Xo Ta Yes Ta Yes Ta closed by \&Xc
302 .\" SUB-SECTION----------------------
303 .Ss Block partial-implicit
304 Like block full-implicit, but with single-line scope closed by
305 .Sx Reserved Characters
307 .Bd -literal -offset indent
308 \&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBbody...\(rB \(lBres...\(rB
310 .\" PARAGRAPH------------
312 .Bl -column "MacroX" "CallableX" "ParsableX" -compact -offset indent
313 .It Em Macro Ta Em Callable Ta Em Parsable
314 .It \&Aq Ta Yes Ta Yes
315 .It \&Bq Ta Yes Ta Yes
316 .It \&Brq Ta Yes Ta Yes
317 .It \&D1 Ta \&No Ta \&Yes
318 .It \&Dl Ta \&No Ta Yes
319 .It \&Dq Ta Yes Ta Yes
320 .It \&Op Ta Yes Ta Yes
321 .It \&Pq Ta Yes Ta Yes
322 .It \&Ql Ta Yes Ta Yes
323 .It \&Qq Ta Yes Ta Yes
324 .It \&Sq Ta Yes Ta Yes
326 .\" SUB-SECTION----------------------
329 .Sx Reserved Characters ,
330 end of line, fixed argument lengths, and/or subsequent macros. In-line
331 macros have only text children. If a number (or inequality) of
334 then the macro accepts an arbitrary number of arguments.
335 .Bd -literal -offset indent
336 \&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBargs...\(rB \(lbres...\(rb
338 \&.Yo \(lB\-arg \(lBval...\(rB\(rB \(lBargs...\(rB Yc...
340 \&.Yo \(lB\-arg \(lBval...\(rB\(rB arg0 arg1 argN
342 .\" PARAGRAPH------------
344 .Bl -column "MacroX" "CallableX" "ParsableX" "Arguments" -compact -offset indent
345 .It Em Macro Ta Em Callable Ta Em Parsable Ta Em Arguments
346 .It \&%A Ta \&No Ta \&No Ta >0
347 .It \&%B Ta \&No Ta \&No Ta >0
348 .It \&%C Ta \&No Ta \&No Ta >0
349 .It \&%D Ta \&No Ta \&No Ta >0
350 .It \&%I Ta \&No Ta \&No Ta >0
351 .It \&%J Ta \&No Ta \&No Ta >0
352 .It \&%N Ta \&No Ta \&No Ta >0
353 .It \&%O Ta \&No Ta \&No Ta >0
354 .It \&%P Ta \&No Ta \&No Ta >0
355 .It \&%R Ta \&No Ta \&No Ta >0
356 .It \&%T Ta \&No Ta \&No Ta >0
357 .It \&%V Ta \&No Ta \&No Ta >0
358 .It \&Ad Ta Yes Ta Yes Ta n
359 .It \&An Ta Yes Ta Yes Ta n
360 .It \&Ap Ta Yes Ta Yes Ta 0
361 .It \&Ar Ta Yes Ta Yes Ta n
362 .It \&At Ta Yes Ta Yes Ta 1
363 .It \&Bsx Ta Yes Ta Yes Ta n
364 .It \&Bt Ta \&No Ta \&No Ta 0
365 .It \&Bx Ta Yes Ta Yes Ta n
366 .It \&Cd Ta Yes Ta \&No Ta >0
367 .It \&Cm Ta Yes Ta Yes Ta n
368 .It \&Db Ta \&No Ta \&No Ta 1
369 .It \&Dd Ta \&No Ta \&No Ta >0
370 .It \&Dt Ta \&No Ta \&No Ta n
371 .It \&Dv Ta Yes Ta Yes Ta n
372 .It \&Dx Ta Yes Ta Yes Ta n
373 .It \&Em Ta Yes Ta Yes Ta >0
374 .It \&En Ta \&No Ta \&No Ta 0
375 .It \&Er Ta Yes Ta Yes Ta >0
376 .It \&Es Ta \&No Ta \&No Ta 0
377 .It \&Ev Ta Yes Ta Yes Ta n
378 .It \&Ex Ta \&No Ta \&No Ta 0
379 .It \&Fa Ta Yes Ta Yes Ta n
380 .It \&Fd Ta \&No Ta \&No Ta >0
381 .It \&Fl Ta Yes Ta Yes Ta n
382 .It \&Fn Ta Yes Ta Yes Ta >0
383 .It \&Fr Ta \&No Ta \&No Ta n
384 .It \&Ft Ta Yes Ta Yes Ta n
385 .It \&Fx Ta Yes Ta Yes Ta n
386 .It \&Hf Ta \&No Ta \&No Ta n
387 .It \&Ic Ta Yes Ta Yes Ta >0
388 .It \&In Ta \&No Ta \&No Ta n
389 .It \&Lb Ta \&No Ta \&No Ta 1
390 .It \&Li Ta Yes Ta Yes Ta n
391 .It \&Lk Ta Yes Ta Yes Ta n
392 .It \&Lp Ta \&No Ta \&No Ta 0
393 .It \&Ms Ta Yes Ta Yes Ta >0
394 .It \&Mt Ta Yes Ta Yes Ta >0
395 .It \&Nm Ta Yes Ta Yes Ta n
396 .It \&No Ta Yes Ta Yes Ta 0
397 .It \&Ns Ta Yes Ta Yes Ta 0
398 .It \&Nx Ta Yes Ta Yes Ta n
399 .It \&Os Ta \&No Ta \&No Ta n
400 .It \&Ot Ta \&No Ta \&No Ta n
401 .It \&Ox Ta Yes Ta Yes Ta n
402 .It \&Pa Ta Yes Ta Yes Ta n
403 .It \&Pf Ta \&No Ta Yes Ta 1
404 .It \&Pp Ta \&No Ta \&No Ta 0
405 .It \&Rv Ta \&No Ta \&No Ta 0
406 .It \&Sm Ta \&No Ta \&No Ta 1
407 .It \&St Ta \&No Ta Yes Ta 1
408 .It \&Sx Ta Yes Ta Yes Ta >0
409 .It \&Sy Ta Yes Ta Yes Ta >0
410 .It \&Tn Ta Yes Ta Yes Ta >0
411 .It \&Ud Ta \&No Ta \&No Ta 0
412 .It \&Ux Ta Yes Ta Yes Ta n
413 .It \&Va Ta Yes Ta Yes Ta n
414 .It \&Vt Ta Yes Ta Yes Ta >0
415 .It \&Xr Ta Yes Ta Yes Ta >0, <3
416 .It \&br Ta \&No Ta \&No Ta 0
418 .\" SECTION---------------------------------------------
420 This section documents compatibility with other roff implementations, at
425 refers to those versions before the
428 .Pq somewhere between 1.15 and 1.19 .
429 .\" PARAGRAPH------------
434 Some character sequences in groff are not handled depending on escape
439 may not be interchanged. This is no longer the case: all character
440 sequences resolve to the same symbol, regardless the escape style.
443 Blocks of whitespace are stripped from both macro and free-form text
444 lines (except when in literal mode), while groff would retain whitespace
445 in free-form text lines.
448 Historic groff has many un-callable macros. Most of these (excluding
449 some block-level macros) are now callable, conforming to the
450 non-historic groff version.
457 but is a proper delimiter in this implementation.
461 is assumed for all lists (it wasn't in historic groff): any list may be
464 lists will restart the sequence only for the sub-list.
468 syntax where column widths may be preceded by other arguments (instead
469 of proceeded) is not supported.
474 macro only accepts a single parameter.
479 incorrectly by following it with a reserved character and expecting the
480 delimiter to render. This is not supported.
483 If an special-character control character is escaped
485 it will obviously not render the subsequent sequence. Even newer
486 versions of groff seem to dither on this.
491 macro only produces the first parameter. This is no longer the case.
493 .\" SECTION---------------------------------------------
497 .\" SECTION---------------------------------------------
501 utility was written by
502 .An Kristaps Dzonsons Aq kristaps@kth.se .
503 .\" SECTION---------------------------------------------
505 There are many ambiguous parts of mdoc.
506 .\" PARAGRAPH------------
514 as function arguments are variables.
520 as function return types are still types. Furthermore, the
522 should be removed and
524 which ostensibly follows it, should follow the same convention as
529 should formalise that only one or two arguments are acceptable: a
530 variable name and optional, preceding type.
534 is ambiguous. It's commonly used to indicate an include file in the
537 should be used, instead.
544 makes sense. The remaining ones should be removed.
551 macros should be deprecated.
556 macro lacks clarity. It should be absolutely clear which title will
557 render when formatting the manual page.
562 should be provided for Linux (\(`a la
568 There's no way to refer to references in
573 The \-split and \-nosplit arguments to