xref: /dragonfly/contrib/mdocml/mandoc.1 (revision cfd1aba3)
1.\"	$Id: mandoc.1,v 1.103 2013/07/13 19:41:16 schwarze Exp $
2.\"
3.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4.\" Copyright (c) 2012 Ingo Schwarze <schwarze@openbsd.org>
5.\"
6.\" Permission to use, copy, modify, and distribute this software for any
7.\" purpose with or without fee is hereby granted, provided that the above
8.\" copyright notice and this permission notice appear in all copies.
9.\"
10.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17.\"
18.Dd $Mdocdate: July 13 2013 $
19.Dt MANDOC 1
20.Os
21.Sh NAME
22.Nm mandoc
23.Nd format and display UNIX manuals
24.Sh SYNOPSIS
25.Nm mandoc
26.Op Fl V
27.Sm off
28.Op Fl I Cm os Li = Ar name
29.Sm on
30.Op Fl m Ns Ar format
31.Op Fl O Ns Ar option
32.Op Fl T Ns Ar output
33.Op Fl W Ns Ar level
34.Op Ar
35.Sh DESCRIPTION
36The
37.Nm
38utility formats
39.Ux
40manual pages for display.
41.Pp
42By default,
43.Nm
44reads
45.Xr mdoc 7
46or
47.Xr man 7
48text from stdin, implying
49.Fl m Ns Cm andoc ,
50and produces
51.Fl T Ns Cm ascii
52output.
53.Pp
54The arguments are as follows:
55.Bl -tag -width Ds
56.Sm off
57.It Fl I Cm os Li = Ar name
58.Sm on
59Override the default operating system
60.Ar name
61for the
62.Xr mdoc 7
63.Sq \&Os
64macro.
65.It Fl m Ns Ar format
66Input format.
67See
68.Sx Input Formats
69for available formats.
70Defaults to
71.Fl m Ns Cm andoc .
72.It Fl O Ns Ar option
73Comma-separated output options.
74.It Fl T Ns Ar output
75Output format.
76See
77.Sx Output Formats
78for available formats.
79Defaults to
80.Fl T Ns Cm ascii .
81.It Fl V
82Print version and exit.
83.It Fl W Ns Ar level
84Specify the minimum message
85.Ar level
86to be reported on the standard error output and to affect the exit status.
87The
88.Ar level
89can be
90.Cm warning ,
91.Cm error ,
92or
93.Cm fatal .
94The default is
95.Fl W Ns Cm fatal ;
96.Fl W Ns Cm all
97is an alias for
98.Fl W Ns Cm warning .
99See
100.Sx EXIT STATUS
101and
102.Sx DIAGNOSTICS
103for details.
104.Pp
105The special option
106.Fl W Ns Cm stop
107tells
108.Nm
109to exit after parsing a file that causes warnings or errors of at least
110the requested level.
111No formatted output will be produced from that file.
112If both a
113.Ar level
114and
115.Cm stop
116are requested, they can be joined with a comma, for example
117.Fl W Ns Cm error , Ns Cm stop .
118.It Ar file
119Read input from zero or more files.
120If unspecified, reads from stdin.
121If multiple files are specified,
122.Nm
123will halt with the first failed parse.
124.El
125.Ss Input Formats
126The
127.Nm
128utility accepts
129.Xr mdoc 7
130and
131.Xr man 7
132input with
133.Fl m Ns Cm doc
134and
135.Fl m Ns Cm an ,
136respectively.
137The
138.Xr mdoc 7
139format is
140.Em strongly
141recommended;
142.Xr man 7
143should only be used for legacy manuals.
144.Pp
145A third option,
146.Fl m Ns Cm andoc ,
147which is also the default, determines encoding on-the-fly: if the first
148non-comment macro is
149.Sq \&Dd
150or
151.Sq \&Dt ,
152the
153.Xr mdoc 7
154parser is used; otherwise, the
155.Xr man 7
156parser is used.
157.Pp
158If multiple
159files are specified with
160.Fl m Ns Cm andoc ,
161each has its file-type determined this way.
162If multiple files are
163specified and
164.Fl m Ns Cm doc
165or
166.Fl m Ns Cm an
167is specified, then this format is used exclusively.
168.Ss Output Formats
169The
170.Nm
171utility accepts the following
172.Fl T
173arguments, which correspond to output modes:
174.Bl -tag -width "-Tlocale"
175.It Fl T Ns Cm ascii
176Produce 7-bit ASCII output.
177This is the default.
178See
179.Sx ASCII Output .
180.It Fl T Ns Cm html
181Produce strict CSS1/HTML-4.01 output.
182See
183.Sx HTML Output .
184.It Fl T Ns Cm lint
185Parse only: produce no output.
186Implies
187.Fl W Ns Cm warning .
188.It Fl T Ns Cm locale
189Encode output using the current locale.
190See
191.Sx Locale Output .
192.It Fl T Ns Cm man
193Produce
194.Xr man 7
195format output.
196See
197.Sx Man Output .
198.It Fl T Ns Cm pdf
199Produce PDF output.
200See
201.Sx PDF Output .
202.It Fl T Ns Cm ps
203Produce PostScript output.
204See
205.Sx PostScript Output .
206.It Fl T Ns Cm tree
207Produce an indented parse tree.
208.It Fl T Ns Cm utf8
209Encode output in the UTF\-8 multi-byte format.
210See
211.Sx UTF\-8 Output .
212.It Fl T Ns Cm xhtml
213Produce strict CSS1/XHTML-1.0 output.
214See
215.Sx XHTML Output .
216.El
217.Pp
218If multiple input files are specified, these will be processed by the
219corresponding filter in-order.
220.Ss ASCII Output
221Output produced by
222.Fl T Ns Cm ascii ,
223which is the default, is rendered in standard 7-bit ASCII documented in
224.Xr ascii 7 .
225.Pp
226Font styles are applied by using back-spaced encoding such that an
227underlined character
228.Sq c
229is rendered as
230.Sq _ Ns \e[bs] Ns c ,
231where
232.Sq \e[bs]
233is the back-space character number 8.
234Emboldened characters are rendered as
235.Sq c Ns \e[bs] Ns c .
236.Pp
237The special characters documented in
238.Xr mandoc_char 7
239are rendered best-effort in an ASCII equivalent.
240If no equivalent is found,
241.Sq \&?
242is used instead.
243.Pp
244Output width is limited to 78 visible columns unless literal input lines
245exceed this limit.
246.Pp
247The following
248.Fl O
249arguments are accepted:
250.Bl -tag -width Ds
251.It Cm indent Ns = Ns Ar indent
252The left margin for normal text is set to
253.Ar indent
254blank characters instead of the default of five for
255.Xr mdoc 7
256and seven for
257.Xr man 7 .
258Increasing this is not recommended; it may result in degraded formatting,
259for example overfull lines or ugly line breaks.
260.It Cm width Ns = Ns Ar width
261The output width is set to
262.Ar width ,
263which will normalise to \(>=60.
264.El
265.Ss HTML Output
266Output produced by
267.Fl T Ns Cm html
268conforms to HTML-4.01 strict.
269.Pp
270The
271.Pa example.style.css
272file documents style-sheet classes available for customising output.
273If a style-sheet is not specified with
274.Fl O Ns Ar style ,
275.Fl T Ns Cm html
276defaults to simple output readable in any graphical or text-based web
277browser.
278.Pp
279Special characters are rendered in decimal-encoded UTF\-8.
280.Pp
281The following
282.Fl O
283arguments are accepted:
284.Bl -tag -width Ds
285.It Cm fragment
286Omit the
287.Aq !DOCTYPE
288declaration and the
289.Aq html ,
290.Aq head ,
291and
292.Aq body
293elements and only emit the subtree below the
294.Aq body
295element.
296The
297.Cm style
298argument will be ignored.
299This is useful when embedding manual content within existing documents.
300.It Cm includes Ns = Ns Ar fmt
301The string
302.Ar fmt ,
303for example,
304.Ar ../src/%I.html ,
305is used as a template for linked header files (usually via the
306.Sq \&In
307macro).
308Instances of
309.Sq \&%I
310are replaced with the include filename.
311The default is not to present a
312hyperlink.
313.It Cm man Ns = Ns Ar fmt
314The string
315.Ar fmt ,
316for example,
317.Ar ../html%S/%N.%S.html ,
318is used as a template for linked manuals (usually via the
319.Sq \&Xr
320macro).
321Instances of
322.Sq \&%N
323and
324.Sq %S
325are replaced with the linked manual's name and section, respectively.
326If no section is included, section 1 is assumed.
327The default is not to
328present a hyperlink.
329.It Cm style Ns = Ns Ar style.css
330The file
331.Ar style.css
332is used for an external style-sheet.
333This must be a valid absolute or
334relative URI.
335.El
336.Ss Locale Output
337Locale-depending output encoding is triggered with
338.Fl T Ns Cm locale .
339This option is not available on all systems: systems without locale
340support, or those whose internal representation is not natively UCS-4,
341will fall back to
342.Fl T Ns Cm ascii .
343See
344.Sx ASCII Output
345for font style specification and available command-line arguments.
346.Ss Man Output
347Translate input format into
348.Xr man 7
349output format.
350This is useful for distributing manual sources to legacy systems
351lacking
352.Xr mdoc 7
353formatters.
354.Pp
355If
356.Xr mdoc 7
357is passed as input, it is translated into
358.Xr man 7 .
359If the input format is
360.Xr man 7 ,
361the input is copied to the output, expanding any
362.Xr roff 7
363.Sq so
364requests.
365The parser is also run, and as usual, the
366.Fl W
367level controls which
368.Sx DIAGNOSTICS
369are displayed before copying the input to the output.
370.Ss PDF Output
371PDF-1.1 output may be generated by
372.Fl T Ns Cm pdf .
373See
374.Sx PostScript Output
375for
376.Fl O
377arguments and defaults.
378.Ss PostScript Output
379PostScript
380.Qq Adobe-3.0
381Level-2 pages may be generated by
382.Fl T Ns Cm ps .
383Output pages default to letter sized and are rendered in the Times font
384family, 11-point.
385Margins are calculated as 1/9 the page length and width.
386Line-height is 1.4m.
387.Pp
388Special characters are rendered as in
389.Sx ASCII Output .
390.Pp
391The following
392.Fl O
393arguments are accepted:
394.Bl -tag -width Ds
395.It Cm paper Ns = Ns Ar name
396The paper size
397.Ar name
398may be one of
399.Ar a3 ,
400.Ar a4 ,
401.Ar a5 ,
402.Ar legal ,
403or
404.Ar letter .
405You may also manually specify dimensions as
406.Ar NNxNN ,
407width by height in millimetres.
408If an unknown value is encountered,
409.Ar letter
410is used.
411.El
412.Ss UTF\-8 Output
413Use
414.Fl T Ns Cm utf8
415to force a UTF\-8 locale.
416See
417.Sx Locale Output
418for details and options.
419.Ss XHTML Output
420Output produced by
421.Fl T Ns Cm xhtml
422conforms to XHTML-1.0 strict.
423.Pp
424See
425.Sx HTML Output
426for details; beyond generating XHTML tags instead of HTML tags, these
427output modes are identical.
428.Sh EXIT STATUS
429The
430.Nm
431utility exits with one of the following values, controlled by the message
432.Ar level
433associated with the
434.Fl W
435option:
436.Pp
437.Bl -tag -width Ds -compact
438.It 0
439No warnings or errors occurred, or those that did were ignored because
440they were lower than the requested
441.Ar level .
442.It 2
443At least one warning occurred, but no error, and
444.Fl W Ns Cm warning
445was specified.
446.It 3
447At least one parsing error occurred, but no fatal error, and
448.Fl W Ns Cm error
449or
450.Fl W Ns Cm warning
451was specified.
452.It 4
453A fatal parsing error occurred.
454.It 5
455Invalid command line arguments were specified.
456No input files have been read.
457.It 6
458An operating system error occurred, for example memory exhaustion or an
459error accessing input files.
460Such errors cause
461.Nm
462to exit at once, possibly in the middle of parsing or formatting a file.
463.El
464.Pp
465Note that selecting
466.Fl T Ns Cm lint
467output mode implies
468.Fl W Ns Cm warning .
469.Sh EXAMPLES
470To page manuals to the terminal:
471.Pp
472.Dl $ mandoc \-Wall,stop mandoc.1 2\*(Gt&1 | less
473.Dl $ mandoc mandoc.1 mdoc.3 mdoc.7 | less
474.Pp
475To produce HTML manuals with
476.Ar style.css
477as the style-sheet:
478.Pp
479.Dl $ mandoc \-Thtml -Ostyle=style.css mdoc.7 \*(Gt mdoc.7.html
480.Pp
481To check over a large set of manuals:
482.Pp
483.Dl $ mandoc \-Tlint `find /usr/src -name \e*\e.[1-9]`
484.Pp
485To produce a series of PostScript manuals for A4 paper:
486.Pp
487.Dl $ mandoc \-Tps \-Opaper=a4 mdoc.7 man.7 \*(Gt manuals.ps
488.Pp
489Convert a modern
490.Xr mdoc 7
491manual to the older
492.Xr man 7
493format, for use on systems lacking an
494.Xr mdoc 7
495parser:
496.Pp
497.Dl $ mandoc \-Tman foo.mdoc \*(Gt foo.man
498.Sh DIAGNOSTICS
499Standard error messages reporting parsing errors are prefixed by
500.Pp
501.Sm off
502.D1 Ar file : line : column : \ level :
503.Sm on
504.Pp
505where the fields have the following meanings:
506.Bl -tag -width "column"
507.It Ar file
508The name of the input file causing the message.
509.It Ar line
510The line number in that input file.
511Line numbering starts at 1.
512.It Ar column
513The column number in that input file.
514Column numbering starts at 1.
515If the issue is caused by a word, the column number usually
516points to the first character of the word.
517.It Ar level
518The message level, printed in capital letters.
519.El
520.Pp
521Message levels have the following meanings:
522.Bl -tag -width "warning"
523.It Cm fatal
524The parser is unable to parse a given input file at all.
525No formatted output is produced from that input file.
526.It Cm error
527An input file contains syntax that cannot be safely interpreted,
528either because it is invalid or because
529.Nm
530does not implement it yet.
531By discarding part of the input or inserting missing tokens,
532the parser is able to continue, and the error does not prevent
533generation of formatted output, but typically, preparing that
534output involves information loss, broken document structure
535or unintended formatting.
536.It Cm warning
537An input file uses obsolete, discouraged or non-portable syntax.
538All the same, the meaning of the input is unambiguous and a correct
539rendering can be produced.
540Documents causing warnings may render poorly when using other
541formatting tools instead of
542.Nm .
543.El
544.Pp
545Messages of the
546.Cm warning
547and
548.Cm error
549levels are hidden unless their level, or a lower level, is requested using a
550.Fl W
551option or
552.Fl T Ns Cm lint
553output mode.
554.Pp
555The
556.Nm
557utility may also print messages related to invalid command line arguments
558or operating system errors, for example when memory is exhausted or
559input files cannot be read.
560Such messages do not carry the prefix described above.
561.Sh COMPATIBILITY
562This section summarises
563.Nm
564compatibility with GNU troff.
565Each input and output format is separately noted.
566.Ss ASCII Compatibility
567.Bl -bullet -compact
568.It
569Unrenderable unicode codepoints specified with
570.Sq \e[uNNNN]
571escapes are printed as
572.Sq \&?
573in mandoc.
574In GNU troff, these raise an error.
575.It
576The
577.Sq \&Bd \-literal
578and
579.Sq \&Bd \-unfilled
580macros of
581.Xr mdoc 7
582in
583.Fl T Ns Cm ascii
584are synonyms, as are \-filled and \-ragged.
585.It
586In historic GNU troff, the
587.Sq \&Pa
588.Xr mdoc 7
589macro does not underline when scoped under an
590.Sq \&It
591in the FILES section.
592This behaves correctly in
593.Nm .
594.It
595A list or display following the
596.Sq \&Ss
597.Xr mdoc 7
598macro in
599.Fl T Ns Cm ascii
600does not assert a prior vertical break, just as it doesn't with
601.Sq \&Sh .
602.It
603The
604.Sq \&na
605.Xr man 7
606macro in
607.Fl T Ns Cm ascii
608has no effect.
609.It
610Words aren't hyphenated.
611.El
612.Ss HTML/XHTML Compatibility
613.Bl -bullet -compact
614.It
615The
616.Sq \efP
617escape will revert the font to the previous
618.Sq \ef
619escape, not to the last rendered decoration, which is now dictated by
620CSS instead of hard-coded.
621It also will not span past the current scope,
622for the same reason.
623Note that in
624.Sx ASCII Output
625mode, this will work fine.
626.It
627The
628.Xr mdoc 7
629.Sq \&Bl \-hang
630and
631.Sq \&Bl \-tag
632list types render similarly (no break following overreached left-hand
633side) due to the expressive constraints of HTML.
634.It
635The
636.Xr man 7
637.Sq IP
638and
639.Sq TP
640lists render similarly.
641.El
642.Sh SEE ALSO
643.Xr eqn 7 ,
644.Xr man 7 ,
645.Xr mandoc_char 7 ,
646.Xr mdoc 7 ,
647.Xr roff 7 ,
648.Xr tbl 7
649.Sh AUTHORS
650The
651.Nm
652utility was written by
653.An Kristaps Dzonsons Aq Mt kristaps@bsd.lv .
654.Sh CAVEATS
655In
656.Fl T Ns Cm html
657and
658.Fl T Ns Cm xhtml ,
659the maximum size of an element attribute is determined by
660.Dv BUFSIZ ,
661which is usually 1024 bytes.
662Be aware of this when setting long link
663formats such as
664.Fl O Ns Cm style Ns = Ns Ar really/long/link .
665.Pp
666Nesting elements within next-line element scopes of
667.Fl m Ns Cm an ,
668such as
669.Sq br
670within an empty
671.Sq B ,
672will confuse
673.Fl T Ns Cm html
674and
675.Fl T Ns Cm xhtml
676and cause them to forget the formatting of the prior next-line scope.
677.Pp
678The
679.Sq \(aq
680control character is an alias for the standard macro control character
681and does not emit a line-break as stipulated in GNU troff.
682