]> git.cameronkatri.com Git - mandoc.git/blob - mandoc.1
Re-write of eqn(7) parser and MathML output.
[mandoc.git] / mandoc.1
1 .\" $Id: mandoc.1,v 1.116 2014/10/10 08:44:24 kristaps Exp $
2 .\"
3 .\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4 .\" Copyright (c) 2012, 2014 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: October 10 2014 $
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 acfhklV
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
36 The
37 .Nm
38 utility formats
39 .Ux
40 manual pages for display.
41 .Pp
42 By default,
43 .Nm
44 reads
45 .Xr mdoc 7
46 or
47 .Xr man 7
48 text from stdin, implying
49 .Fl m Ns Cm andoc ,
50 and produces
51 .Fl T Ns Cm ascii
52 output.
53 .Pp
54 The options are as follows:
55 .Bl -tag -width Ds
56 .It Fl a
57 If the standard output is a terminal device and
58 .Fl c
59 is not specified, use
60 .Xr more 1
61 to paginate the output, just like
62 .Xr man 1
63 would.
64 .It Fl c
65 Copy the formatted manual pages to the standard output without using
66 .Xr more 1
67 to paginate them.
68 This is the default.
69 It can be specified to override
70 .Fl a .
71 .It Fl f
72 A synonym for
73 .Xr whatis 1 .
74 This overrides any earlier
75 .Fl k
76 and
77 .Fl l
78 options.
79 .Sm off
80 .It Fl I Cm os Li = Ar name
81 .Sm on
82 Override the default operating system
83 .Ar name
84 for the
85 .Xr mdoc 7
86 .Sq \&Os
87 macro.
88 .It Fl h
89 Display only the SYNOPSIS lines.
90 Implies
91 .Fl a .
92 .It Fl k
93 A synonym for
94 .Xr apropos 1 .
95 This overrides any earlier
96 .Fl f
97 and
98 .Fl l
99 options.
100 .It Fl l
101 A synonym for
102 .Fl a .
103 Also reverts any earlier
104 .Fl f
105 and
106 .Fl k
107 options.
108 .It Fl m Ns Ar format
109 Input format.
110 See
111 .Sx Input Formats
112 for available formats.
113 Defaults to
114 .Fl m Ns Cm andoc .
115 .It Fl O Ns Ar option
116 Comma-separated output options.
117 .It Fl T Ns Ar output
118 Output format.
119 See
120 .Sx Output Formats
121 for available formats.
122 Defaults to
123 .Fl T Ns Cm ascii .
124 .It Fl V
125 Print version and exit.
126 .It Fl W Ns Ar level
127 Specify the minimum message
128 .Ar level
129 to be reported on the standard error output and to affect the exit status.
130 The
131 .Ar level
132 can be
133 .Cm warning ,
134 .Cm error ,
135 or
136 .Cm fatal .
137 The default is
138 .Fl W Ns Cm fatal ;
139 .Fl W Ns Cm all
140 is an alias for
141 .Fl W Ns Cm warning .
142 See
143 .Sx EXIT STATUS
144 and
145 .Sx DIAGNOSTICS
146 for details.
147 .Pp
148 The special option
149 .Fl W Ns Cm stop
150 tells
151 .Nm
152 to exit after parsing a file that causes warnings or errors of at least
153 the requested level.
154 No formatted output will be produced from that file.
155 If both a
156 .Ar level
157 and
158 .Cm stop
159 are requested, they can be joined with a comma, for example
160 .Fl W Ns Cm error , Ns Cm stop .
161 .It Ar file
162 Read input from zero or more files.
163 If unspecified, reads from stdin.
164 If multiple files are specified,
165 .Nm
166 will halt with the first failed parse.
167 .El
168 .Pp
169 In
170 .Fl f
171 and
172 .Fl k
173 mode,
174 .Nm
175 also supports the options
176 .Fl CMmOSsw
177 described in the
178 .Xr apropos 1
179 manual.
180 .Ss Input Formats
181 The
182 .Nm
183 utility accepts
184 .Xr mdoc 7
185 and
186 .Xr man 7
187 input with
188 .Fl m Ns Cm doc
189 and
190 .Fl m Ns Cm an ,
191 respectively.
192 The
193 .Xr mdoc 7
194 format is
195 .Em strongly
196 recommended;
197 .Xr man 7
198 should only be used for legacy manuals.
199 .Pp
200 A third option,
201 .Fl m Ns Cm andoc ,
202 which is also the default, determines encoding on-the-fly: if the first
203 non-comment macro is
204 .Sq \&Dd
205 or
206 .Sq \&Dt ,
207 the
208 .Xr mdoc 7
209 parser is used; otherwise, the
210 .Xr man 7
211 parser is used.
212 .Pp
213 If multiple
214 files are specified with
215 .Fl m Ns Cm andoc ,
216 each has its file-type determined this way.
217 If multiple files are
218 specified and
219 .Fl m Ns Cm doc
220 or
221 .Fl m Ns Cm an
222 is specified, then this format is used exclusively.
223 .Ss Output Formats
224 The
225 .Nm
226 utility accepts the following
227 .Fl T
228 arguments, which correspond to output modes:
229 .Bl -tag -width "-Tlocale"
230 .It Fl T Ns Cm ascii
231 Produce 7-bit ASCII output.
232 This is the default.
233 See
234 .Sx ASCII Output .
235 .It Fl T Ns Cm html
236 Produce HTML5, CSS1, and MathML output.
237 See
238 .Sx HTML Output .
239 .It Fl T Ns Cm lint
240 Parse only: produce no output.
241 Implies
242 .Fl W Ns Cm warning .
243 .It Fl T Ns Cm locale
244 Encode output using the current locale.
245 See
246 .Sx Locale Output .
247 .It Fl T Ns Cm man
248 Produce
249 .Xr man 7
250 format output.
251 See
252 .Sx Man Output .
253 .It Fl T Ns Cm pdf
254 Produce PDF output.
255 See
256 .Sx PDF Output .
257 .It Fl T Ns Cm ps
258 Produce PostScript output.
259 See
260 .Sx PostScript Output .
261 .It Fl T Ns Cm tree
262 Produce an indented parse tree.
263 .It Fl T Ns Cm utf8
264 Encode output in the UTF\-8 multi-byte format.
265 See
266 .Sx UTF\-8 Output .
267 .It Fl T Ns Cm xhtml
268 This is a synonym for
269 .Fl T Ns Cm html .
270 .El
271 .Pp
272 If multiple input files are specified, these will be processed by the
273 corresponding filter in-order.
274 .Ss ASCII Output
275 Output produced by
276 .Fl T Ns Cm ascii ,
277 which is the default, is rendered in standard 7-bit ASCII documented in
278 .Xr ascii 7 .
279 .Pp
280 Font styles are applied by using back-spaced encoding such that an
281 underlined character
282 .Sq c
283 is rendered as
284 .Sq _ Ns \e[bs] Ns c ,
285 where
286 .Sq \e[bs]
287 is the back-space character number 8.
288 Emboldened characters are rendered as
289 .Sq c Ns \e[bs] Ns c .
290 .Pp
291 The special characters documented in
292 .Xr mandoc_char 7
293 are rendered best-effort in an ASCII equivalent.
294 If no equivalent is found,
295 .Sq \&?
296 is used instead.
297 .Pp
298 Output width is limited to 78 visible columns unless literal input lines
299 exceed this limit.
300 .Pp
301 The following
302 .Fl O
303 arguments are accepted:
304 .Bl -tag -width Ds
305 .It Cm indent Ns = Ns Ar indent
306 The left margin for normal text is set to
307 .Ar indent
308 blank characters instead of the default of five for
309 .Xr mdoc 7
310 and seven for
311 .Xr man 7 .
312 Increasing this is not recommended; it may result in degraded formatting,
313 for example overfull lines or ugly line breaks.
314 .It Cm width Ns = Ns Ar width
315 The output width is set to
316 .Ar width ,
317 which will normalise to \(>=60.
318 .El
319 .Ss HTML Output
320 Output produced by
321 .Fl T Ns Cm html
322 conforms to HTML5 using optional self-closing tags.
323 Default styles use only CSS1.
324 Equations rendered from
325 .Xr eqn 7
326 blocks use MathML.
327 .Pp
328 The
329 .Pa example.style.css
330 file documents style-sheet classes available for customising output.
331 If a style-sheet is not specified with
332 .Fl O Ns Ar style ,
333 .Fl T Ns Cm html
334 defaults to simple output (via an embedded style-sheet)
335 readable in any graphical or text-based web
336 browser.
337 .Pp
338 Special characters are rendered in decimal-encoded UTF\-8.
339 .Pp
340 The following
341 .Fl O
342 arguments are accepted:
343 .Bl -tag -width Ds
344 .It Cm fragment
345 Omit the
346 .Aq !DOCTYPE
347 declaration and the
348 .Aq html ,
349 .Aq head ,
350 and
351 .Aq body
352 elements and only emit the subtree below the
353 .Aq body
354 element.
355 The
356 .Cm style
357 argument will be ignored.
358 This is useful when embedding manual content within existing documents.
359 .It Cm includes Ns = Ns Ar fmt
360 The string
361 .Ar fmt ,
362 for example,
363 .Ar ../src/%I.html ,
364 is used as a template for linked header files (usually via the
365 .Sq \&In
366 macro).
367 Instances of
368 .Sq \&%I
369 are replaced with the include filename.
370 The default is not to present a
371 hyperlink.
372 .It Cm man Ns = Ns Ar fmt
373 The string
374 .Ar fmt ,
375 for example,
376 .Ar ../html%S/%N.%S.html ,
377 is used as a template for linked manuals (usually via the
378 .Sq \&Xr
379 macro).
380 Instances of
381 .Sq \&%N
382 and
383 .Sq %S
384 are replaced with the linked manual's name and section, respectively.
385 If no section is included, section 1 is assumed.
386 The default is not to
387 present a hyperlink.
388 .It Cm style Ns = Ns Ar style.css
389 The file
390 .Ar style.css
391 is used for an external style-sheet.
392 This must be a valid absolute or
393 relative URI.
394 .El
395 .Ss Locale Output
396 Locale-depending output encoding is triggered with
397 .Fl T Ns Cm locale .
398 This option is not available on all systems: systems without locale
399 support, or those whose internal representation is not natively UCS-4,
400 will fall back to
401 .Fl T Ns Cm ascii .
402 See
403 .Sx ASCII Output
404 for font style specification and available command-line arguments.
405 .Ss Man Output
406 Translate input format into
407 .Xr man 7
408 output format.
409 This is useful for distributing manual sources to legacy systems
410 lacking
411 .Xr mdoc 7
412 formatters.
413 .Pp
414 If
415 .Xr mdoc 7
416 is passed as input, it is translated into
417 .Xr man 7 .
418 If the input format is
419 .Xr man 7 ,
420 the input is copied to the output, expanding any
421 .Xr roff 7
422 .Sq so
423 requests.
424 The parser is also run, and as usual, the
425 .Fl W
426 level controls which
427 .Sx DIAGNOSTICS
428 are displayed before copying the input to the output.
429 .Ss PDF Output
430 PDF-1.1 output may be generated by
431 .Fl T Ns Cm pdf .
432 See
433 .Sx PostScript Output
434 for
435 .Fl O
436 arguments and defaults.
437 .Ss PostScript Output
438 PostScript
439 .Qq Adobe-3.0
440 Level-2 pages may be generated by
441 .Fl T Ns Cm ps .
442 Output pages default to letter sized and are rendered in the Times font
443 family, 11-point.
444 Margins are calculated as 1/9 the page length and width.
445 Line-height is 1.4m.
446 .Pp
447 Special characters are rendered as in
448 .Sx ASCII Output .
449 .Pp
450 The following
451 .Fl O
452 arguments are accepted:
453 .Bl -tag -width Ds
454 .It Cm paper Ns = Ns Ar name
455 The paper size
456 .Ar name
457 may be one of
458 .Ar a3 ,
459 .Ar a4 ,
460 .Ar a5 ,
461 .Ar legal ,
462 or
463 .Ar letter .
464 You may also manually specify dimensions as
465 .Ar NNxNN ,
466 width by height in millimetres.
467 If an unknown value is encountered,
468 .Ar letter
469 is used.
470 .El
471 .Ss UTF\-8 Output
472 Use
473 .Fl T Ns Cm utf8
474 to force a UTF\-8 locale.
475 See
476 .Sx Locale Output
477 for details and options.
478 .Sh ENVIRONMENT
479 .Bl -tag -width MANPAGER
480 .It Ev MANPAGER
481 Any non-empty value of the environment variable
482 .Ev MANPAGER
483 will be used instead of the standard pagination program,
484 .Xr more 1 .
485 .It Ev PAGER
486 Specifies the pagination program to use when
487 .Ev MANPAGER
488 is not defined.
489 If neither PAGER nor MANPAGER is defined,
490 .Pa /usr/bin/more Fl s
491 will be used.
492 .El
493 .Sh EXIT STATUS
494 The
495 .Nm
496 utility exits with one of the following values, controlled by the message
497 .Ar level
498 associated with the
499 .Fl W
500 option:
501 .Pp
502 .Bl -tag -width Ds -compact
503 .It 0
504 No warnings or errors occurred, or those that did were ignored because
505 they were lower than the requested
506 .Ar level .
507 .It 2
508 At least one warning occurred, but no error, and
509 .Fl W Ns Cm warning
510 was specified.
511 .It 3
512 At least one parsing error occurred, but no fatal error, and
513 .Fl W Ns Cm error
514 or
515 .Fl W Ns Cm warning
516 was specified.
517 .It 4
518 A fatal parsing error occurred.
519 .It 5
520 Invalid command line arguments were specified.
521 No input files have been read.
522 .It 6
523 An operating system error occurred, for example memory exhaustion or an
524 error accessing input files.
525 Such errors cause
526 .Nm
527 to exit at once, possibly in the middle of parsing or formatting a file.
528 .El
529 .Pp
530 Note that selecting
531 .Fl T Ns Cm lint
532 output mode implies
533 .Fl W Ns Cm warning .
534 .Sh EXAMPLES
535 To page manuals to the terminal:
536 .Pp
537 .Dl $ mandoc \-Wall,stop mandoc.1 2\*(Gt&1 | less
538 .Dl $ mandoc mandoc.1 mdoc.3 mdoc.7 | less
539 .Pp
540 To produce HTML manuals with
541 .Ar style.css
542 as the style-sheet:
543 .Pp
544 .Dl $ mandoc \-Thtml -Ostyle=style.css mdoc.7 \*(Gt mdoc.7.html
545 .Pp
546 To check over a large set of manuals:
547 .Pp
548 .Dl $ mandoc \-Tlint `find /usr/src -name \e*\e.[1-9]`
549 .Pp
550 To produce a series of PostScript manuals for A4 paper:
551 .Pp
552 .Dl $ mandoc \-Tps \-Opaper=a4 mdoc.7 man.7 \*(Gt manuals.ps
553 .Pp
554 Convert a modern
555 .Xr mdoc 7
556 manual to the older
557 .Xr man 7
558 format, for use on systems lacking an
559 .Xr mdoc 7
560 parser:
561 .Pp
562 .Dl $ mandoc \-Tman foo.mdoc \*(Gt foo.man
563 .Sh DIAGNOSTICS
564 Messages displayed by
565 .Nm
566 follow this format:
567 .Pp
568 .D1 Nm Ns : Ar file : Ns Ar line : Ns Ar column : level : message : macro args
569 .Pp
570 Line and column numbers start at 1.
571 Both are omitted for messages referring to an input file as a whole.
572 Macro names and arguments are omitted where meaningless.
573 Fatal messages about invalid command line arguments
574 or operating system errors, for example when memory is exhausted,
575 may also omit the
576 .Ar file
577 and
578 .Ar level
579 fields.
580 .Pp
581 Message levels have the following meanings:
582 .Bl -tag -width "warning"
583 .It Cm syserr
584 Opening or reading an input file failed, so the parser cannot
585 even be started and no output is produced from that input file.
586 .It Cm fatal
587 The parser is unable to parse a given input file at all.
588 No formatted output is produced from that input file.
589 .It Cm error
590 An input file contains syntax that cannot be safely interpreted,
591 either because it is invalid or because
592 .Nm
593 does not implement it yet.
594 By discarding part of the input or inserting missing tokens,
595 the parser is able to continue, and the error does not prevent
596 generation of formatted output, but typically, preparing that
597 output involves information loss, broken document structure
598 or unintended formatting.
599 .It Cm warning
600 An input file uses obsolete, discouraged or non-portable syntax.
601 All the same, the meaning of the input is unambiguous and a correct
602 rendering can be produced.
603 Documents causing warnings may render poorly when using other
604 formatting tools instead of
605 .Nm .
606 .El
607 .Pp
608 Messages of the
609 .Cm warning
610 and
611 .Cm error
612 levels are hidden unless their level, or a lower level, is requested using a
613 .Fl W
614 option or
615 .Fl T Ns Cm lint
616 output mode.
617 .Ss Warnings related to the document prologue
618 .Bl -ohang
619 .It Sy "missing manual title, using UNTITLED"
620 .Pq mdoc
621 A
622 .Ic \&Dt
623 macro has no arguments, or there is no
624 .Ic \&Dt
625 macro before the first non-prologue macro.
626 .It Sy "missing manual title, using \(dq\(dq"
627 .Pq man
628 There is no
629 .Ic \&TH
630 macro, or it has no arguments.
631 .It Sy "lower case character in document title"
632 .Pq mdoc , man
633 The title is still used as given in the
634 .Ic \&Dt
635 or
636 .Ic \&TH
637 macro.
638 .It Sy "missing manual section, using \(dq\(dq"
639 .Pq mdoc , man
640 A
641 .Ic \&Dt
642 or
643 .Ic \&TH
644 macro lacks the mandatory section argument.
645 .It Sy "unknown manual section"
646 .Pq mdoc
647 The section number in a
648 .Ic \&Dt
649 line is invalid, but still used.
650 .It Sy "unknown manual volume or arch"
651 .Pq mdoc
652 The volume name in a
653 .Ic \&Dt
654 line is invalid, but still used.
655 The manual is assumed to be architecture-independent.
656 .It Sy "missing date, using today's date"
657 .Pq mdoc, man
658 The document was parsed as
659 .Xr mdoc 7
660 and it has no
661 .Ic \&Dd
662 macro, or the
663 .Ic \&Dd
664 macro has no arguments or only empty arguments;
665 or the document was parsed as
666 .Xr man 7
667 and it has no
668 .Ic \&TH
669 macro, or the
670 .Ic \&TH
671 macro has less than three arguments or its third argument is empty.
672 .It Sy "cannot parse date, using it verbatim"
673 .Pq mdoc , man
674 The date given in a
675 .Ic \&Dd
676 or
677 .Ic \&TH
678 macro does not follow the conventional format.
679 .It Sy "missing Os macro, using \(dq\(dq"
680 .Pq mdoc
681 The default or current system is not shown in this case.
682 .It Sy "duplicate prologue macro"
683 .Pq mdoc
684 One of the prologue macros occurs more than once.
685 The last instance overrides all previous ones.
686 .It Sy "late prologue macro"
687 .Pq mdoc
688 A
689 .Ic \&Dd
690 or
691 .Ic \&Os
692 macro occurs after some non-prologue macro, but still takes effect.
693 .It Sy "skipping late title macro"
694 .Pq mdoc
695 The
696 .Ic \&Dt
697 macro can only occur before the first non-prologue macro
698 because traditional formatters write the page header
699 before parsing the document body.
700 Even though this technical restriction does not apply to
701 .Nm ,
702 traditional semantics is preserved.
703 The late macro is discarded including its arguments.
704 .It Sy "prologue macros out of order"
705 .Pq mdoc
706 The prologue macros are not given in the conventional order
707 .Ic \&Dd ,
708 .Ic \&Dt ,
709 .Ic \&Os .
710 All three macros are used even when given in another order.
711 .El
712 .Ss Warnings regarding document structure
713 .Bl -ohang
714 .It Sy ".so is fragile, better use ln(1)"
715 .Pq roff
716 Including files only works when the parser program runs with the correct
717 current working directory.
718 .It Sy "no document body"
719 .Pq mdoc , man
720 The document body contains neither text nor macros.
721 An empty document is shown, consisting only of a header and a footer line.
722 .It Sy "content before first section header"
723 .Pq mdoc , man
724 Some macros or text precede the first
725 .Ic \&Sh
726 or
727 .Ic \&SH
728 section header.
729 The offending macros and text are parsed and added to the top level
730 of the syntax tree, outside any section block.
731 .It Sy "first section is not NAME"
732 .Pq mdoc
733 The argument of the first
734 .Ic \&Sh
735 macro is not
736 .Sq NAME .
737 This may confuse
738 .Xr makewhatis 8
739 and
740 .Xr apropos 1 .
741 .It Sy "bad NAME section contents"
742 .Pq mdoc
743 The last node in the NAME section is not an
744 .Ic \&Nd
745 macro, or any preceding macro is not
746 .Ic \&Nm ,
747 or the NAME section is completely empty.
748 This may confuse
749 .Xr makewhatis 8
750 and
751 .Xr apropos 1 .
752 .It Sy "sections out of conventional order"
753 .Pq mdoc
754 A standard section occurs after another section it usually precedes.
755 All section titles are used as given,
756 and the order of sections is not changed.
757 .It Sy "duplicate section title"
758 .Pq mdoc
759 The same standard section title occurs more than once.
760 .It Sy "unexpected section"
761 .Pq mdoc
762 A standard section header occurs in a section of the manual
763 where it normally isn't useful.
764 .It Sy "unusual Xr order"
765 .Pq mdoc
766 In the SEE ALSO section, an
767 .Ic \&Xr
768 macro with a lower section number follows one with a higher number,
769 or two
770 .Ic \&Xr
771 macros refering to the same section are out of alphabetical order.
772 .It Sy "unusual Xr punctuation"
773 .Pq mdoc
774 In the SEE ALSO section, punctuation between two
775 .Ic \&Xr
776 macros differs from a single comma, or there is trailing punctuation
777 after the last
778 .Ic \&Xr
779 macro.
780 .It Sy "AUTHORS section without An macro"
781 .Pq mdoc
782 An AUTHORS sections contains no
783 .Ic \&An
784 macros, or only empty ones.
785 Probably, there are author names lacking markup.
786 .El
787 .Ss "Warnings related to macros and nesting"
788 .Bl -ohang
789 .It Sy "obsolete macro"
790 .Pq mdoc
791 See the
792 .Xr mdoc 7
793 manual for replacements.
794 .It Sy "skipping paragraph macro"
795 In
796 .Xr mdoc 7
797 documents, this happens
798 .Bl -dash -compact
799 .It
800 at the beginning and end of sections and subsections
801 .It
802 right before non-compact lists and displays
803 .It
804 at the end of items in non-column, non-compact lists
805 .It
806 and for multiple consecutive paragraph macros.
807 .El
808 In
809 .Xr man 7
810 documents, it happens
811 .Bl -dash -compact
812 .It
813 for empty
814 .Ic \&P ,
815 .Ic \&PP ,
816 and
817 .Ic \&LP
818 macros
819 .It
820 for
821 .Ic \&IP
822 macros having neither head nor body arguments
823 .It
824 for
825 .Ic \&br
826 or
827 .Ic \&sp
828 right after
829 .Ic \&SH
830 or
831 .Ic \&SS
832 .El
833 .It Sy "moving paragraph macro out of list"
834 .Pq mdoc
835 A list item in a
836 .Ic \&Bl
837 list contains a trailing paragraph macro.
838 The paragraph macro is moved after the end of the list.
839 .It Sy "skipping no-space macro"
840 .Pq mdoc
841 An input line begins with an
842 .Ic \&Ns
843 macro.
844 The macro is ignored.
845 .It Sy "blocks badly nested"
846 .Pq mdoc
847 If two blocks intersect, one should completely contain the other.
848 Otherwise, rendered output is likely to look strange in any output
849 format, and rendering in SGML-based output formats is likely to be
850 outright wrong because such languages do not support badly nested
851 blocks at all.
852 Typical examples of badly nested blocks are
853 .Qq Ic \&Ao \&Bo \&Ac \&Bc
854 and
855 .Qq Ic \&Ao \&Bq \&Ac .
856 In these examples,
857 .Ic \&Ac
858 breaks
859 .Ic \&Bo
860 and
861 .Ic \&Bq ,
862 respectively.
863 .It Sy "nested displays are not portable"
864 .Pq mdoc
865 A
866 .Ic \&Bd ,
867 .Ic \&D1 ,
868 or
869 .Ic \&Dl
870 display occurs nested inside another
871 .Ic \&Bd
872 display.
873 This works with
874 .Nm ,
875 but fails with most other implementations.
876 .It Sy "moving content out of list"
877 .Pq mdoc
878 A
879 .Ic \&Bl
880 list block contains text or macros before the first
881 .Ic \&It
882 macro.
883 The offending children are moved before the beginning of the list.
884 .It Sy ".Vt block has child macro"
885 .Pq mdoc
886 The
887 .Ic \&Vt
888 macro supports plain text arguments only.
889 Formatting may be ugly and semantic searching
890 for the affected content might not work.
891 .It Sy "fill mode already enabled, skipping"
892 .Pq man
893 A
894 .Ic \&fi
895 request occurs even though the document is still in fill mode,
896 or already switched back to fill mode.
897 It has no effect.
898 .It Sy "fill mode already disabled, skipping"
899 .Pq man
900 An
901 .Ic \&nf
902 request occurs even though the document already switched to no-fill mode
903 and did not switch back to fill mode yet.
904 It has no effect.
905 .It Sy "line scope broken"
906 .Pq man
907 While parsing the next-line scope of the previous macro,
908 another macro is found that prematurely terminates the previous one.
909 The previous, interrupted macro is deleted from the parse tree.
910 .El
911 .Ss "Warnings related to missing arguments"
912 .Bl -ohang
913 .It Sy "skipping empty request"
914 .Pq roff
915 The macro name is missing from a macro definition request.
916 .It Sy "conditional request controls empty scope"
917 .Pq roff
918 A conditional request is only useful if any of the following
919 follows it on the same logical input line:
920 .Bl -dash -compact
921 .It
922 The
923 .Sq \e{
924 keyword to open a multi-line scope.
925 .It
926 A request or macro or some text, resulting in a single-line scope.
927 .It
928 The immediate end of the logical line without any intervening whitespace,
929 resulting in next-line scope.
930 .El
931 Here, a conditional request is followed by trailing whitespace only,
932 and there is no other content on its logical input line.
933 Note that it doesn't matter whether the logical input line is split
934 across multiple physical input lines using
935 .Sq \e
936 line continuation characters.
937 This is one of the rare cases
938 where trailing whitespace is syntactically significant.
939 The conditional request controls a scope containing whitespace only,
940 so it is unlikely to have a significant effect,
941 except that it may control a following
942 .Ic \&el
943 clause.
944 .It Sy "skipping empty macro"
945 .Pq mdoc
946 The indicated macro has no arguments and hence no effect.
947 .It Sy "empty argument, using 0n"
948 .Pq mdoc
949 The required width is missing after
950 .Ic \&Bd
951 or
952 .Ic \&Bl
953 .Fl offset
954 or
955 .Fl width.
956 .It Sy "argument count wrong"
957 .Pq mdoc , man
958 The indicated macro has too few or too many arguments.
959 The syntax tree will contain the wrong number of arguments as given.
960 Formatting behaviour depends on the specific macro in question.
961 Note that the same message may also occur as an ERROR, see below.
962 .It Sy "missing display type, using -ragged"
963 .Pq mdoc
964 The
965 .Ic \&Bd
966 macro is invoked without the required display type.
967 .It Sy "list type is not the first argument"
968 .Pq mdoc
969 In a
970 .Ic \&Bl
971 macro, at least one other argument precedes the type argument.
972 The
973 .Nm
974 utility copes with any argument order, but some other
975 .Xr mdoc 7
976 implementations do not.
977 .It Sy "missing -width in -tag list, using 8n"
978 .Pq mdoc
979 Every
980 .Ic \&Bl
981 macro having the
982 .Fl tag
983 argument requires
984 .Fl width ,
985 too.
986 .It Sy "missing utility name, using \(dq\(dq"
987 .Pq mdoc
988 The
989 .Ic \&Ex Fl std
990 macro is called without an argument before
991 .Ic \&Nm
992 has first been called with an argument.
993 .It Sy "empty head in list item"
994 .Pq mdoc
995 In a
996 .Ic \&Bl
997 .Fl diag ,
998 .Fl hang ,
999 .Fl inset ,
1000 .Fl ohang ,
1001 or
1002 .Fl tag
1003 list, an
1004 .Ic \&It
1005 macro lacks the required argument.
1006 The item head is left empty.
1007 .It Sy "empty list item"
1008 .Pq mdoc
1009 In a
1010 .Ic \&Bl
1011 .Fl bullet ,
1012 .Fl dash ,
1013 .Fl enum ,
1014 or
1015 .Fl hyphen
1016 list, an
1017 .Ic \&It
1018 block is empty.
1019 An empty list item is shown.
1020 .It Sy "missing font type"
1021 .Pq mdoc
1022 A
1023 .Ic \&Bf
1024 macro has no argument.
1025 It switches to the default font,
1026 .Cm \efR .
1027 .It Sy "unknown font type"
1028 .Pq mdoc
1029 The
1030 .Ic \&Bf
1031 argument is invalid.
1032 The default font
1033 .Cm \efR
1034 is used instead.
1035 .It Sy "missing -std argument, adding it"
1036 .Pq mdoc
1037 An
1038 .Ic \&Ex
1039 or
1040 .Ic \&Rv
1041 macro lacks the required
1042 .Fl std
1043 argument.
1044 The
1045 .Nm
1046 utility assumes
1047 .Fl std
1048 even when it is not specified, but other implementations may not.
1049 .El
1050 .Ss "Warnings related to bad macro arguments"
1051 .Bl -ohang
1052 .It Sy "unterminated quoted argument"
1053 .Pq roff
1054 Macro arguments can be enclosed in double quote characters
1055 such that space characters and macro names contained in the quoted
1056 argument need not be escaped.
1057 The closing quote of the last argument of a macro can be omitted.
1058 However, omitting it is not recommended because it makes the code
1059 harder to read.
1060 .It Sy "duplicate argument"
1061 .Pq mdoc
1062 A
1063 .Ic \&Bd
1064 or
1065 .Ic \&Bl
1066 macro has more than one
1067 .Fl compact ,
1068 more than one
1069 .Fl offset ,
1070 or more than one
1071 .Fl width
1072 argument.
1073 All but the last instances of these arguments are ignored.
1074 .It Sy "skipping duplicate argument"
1075 .Pq mdoc
1076 An
1077 .Ic \&An
1078 macro has more than one
1079 .Fl split
1080 or
1081 .Fl nosplit
1082 argument.
1083 All but the first of these arguments are ignored.
1084 .It Sy "skipping duplicate display type"
1085 .Pq mdoc
1086 A
1087 .Ic \&Bd
1088 macro has more than one type argument; the first one is used.
1089 .It Sy "skipping duplicate list type"
1090 .Pq mdoc
1091 A
1092 .Ic \&Bl
1093 macro has more than one type argument; the first one is used.
1094 .It Sy "skipping -width argument"
1095 .Pq mdoc
1096 A
1097 .Ic \&Bl
1098 .Fl column ,
1099 .Fl diag ,
1100 .Fl ohang ,
1101 .Fl inset ,
1102 or
1103 .Fl item
1104 list has a
1105 .Fl width
1106 argument.
1107 That has no effect.
1108 .It Sy "unknown AT&T UNIX version"
1109 .Pq mdoc
1110 An
1111 .Ic \&At
1112 macro has an invalid argument.
1113 It is used verbatim, with
1114 .Qq "AT&T UNIX "
1115 prefixed to it.
1116 .It Sy "comma in function argument"
1117 .Pq mdoc
1118 An argument of an
1119 .Ic \&Fa
1120 or
1121 .Ic \&Fn
1122 macro contains a comma; it should probably be split into two arguments.
1123 .It Sy "invalid content in Rs block"
1124 .Pq mdoc
1125 An
1126 .Ic \&Rs
1127 block contains plain text or non-% macros.
1128 The bogus content is left in the syntax tree.
1129 Formatting may be poor.
1130 .It Sy "invalid Boolean argument"
1131 .Pq mdoc
1132 An
1133 .Ic \&Sm
1134 macro has an argument other than
1135 .Cm on
1136 or
1137 .Cm off .
1138 The invalid argument is moved out of the macro, which leaves the macro
1139 empty, causing it to toggle the spacing mode.
1140 .It Sy "unknown font, skipping request"
1141 .Pq man , tbl
1142 A
1143 .Xr roff 7
1144 .Ic \&ft
1145 request or a
1146 .Xr tbl 7
1147 .Ic \&f
1148 layout modifier has an unknown
1149 .Ar font
1150 argument.
1151 .El
1152 .Ss "Warnings related to plain text"
1153 .Bl -ohang
1154 .It Sy "blank line in fill mode, using .sp"
1155 .Pq mdoc
1156 The meaning of blank input lines is only well-defined in non-fill mode:
1157 In fill mode, line breaks of text input lines are not supposed to be
1158 significant.
1159 However, for compatibility with groff, blank lines in fill mode
1160 are replaced with
1161 .Ic \&sp
1162 requests.
1163 .It Sy "tab in filled text"
1164 .Pq mdoc , man
1165 The meaning of tab characters is only well-defined in non-fill mode:
1166 In fill mode, whitespace is not supposed to be significant
1167 on text input lines.
1168 As an implementation dependent choice, tab characters on text lines
1169 are passed through to the formatters in any case.
1170 Given that the text before the tab character will be filled,
1171 it is hard to predict which tab stop position the tab will advance to.
1172 .It Sy "whitespace at end of input line"
1173 .Pq mdoc , man , roff
1174 Whitespace at the end of input lines is almost never semantically
1175 significant \(em but in the odd case where it might be, it is
1176 extremely confusing when reviewing and maintaining documents.
1177 .It Sy "bad comment style"
1178 .Pq roff
1179 Comment lines start with a dot, a backslash, and a double-quote character.
1180 The
1181 .Nm
1182 utility treats the line as a comment line even without the backslash,
1183 but leaving out the backslash might not be portable.
1184 .It Sy "invalid escape sequence"
1185 .Pq roff
1186 An escape sequence has an invalid opening argument delimiter, lacks the
1187 closing argument delimiter, or the argument has too few characters.
1188 If the argument is incomplete,
1189 .Ic \e*
1190 and
1191 .Ic \en
1192 expand to an empty string,
1193 .Ic \eB
1194 to the digit
1195 .Sq 0 ,
1196 and
1197 .Ic \ew
1198 to the length of the incomplete argument.
1199 All other invalid escape sequences are ignored.
1200 .It Sy "undefined string, using \(dq\(dq"
1201 .Pq roff
1202 If a string is used without being defined before,
1203 its value is implicitly set to the empty string.
1204 However, defining strings explicitly before use
1205 keeps the code more readable.
1206 .El
1207 .Ss "Errors related to equations"
1208 .Bl -inset -compact
1209 .It "unexpected equation scope closure"
1210 .It "equation scope open on exit"
1211 .It "overlapping equation scopes"
1212 .It "unexpected end of equation"
1213 .It "equation syntax error"
1214 .El
1215 .Ss "Errors related to tables"
1216 .Bl -inset -compact
1217 .It "bad table syntax"
1218 .It "bad table option"
1219 .It "bad table layout"
1220 .It "no table layout cells specified"
1221 .It "no table data cells specified"
1222 .It "ignore data in cell"
1223 .It "data block still open"
1224 .It "ignoring extra data cells"
1225 .El
1226 .Ss "Errors related to roff, mdoc, and man code"
1227 .Bl -ohang
1228 .It Sy "input stack limit exceeded, infinite loop?"
1229 .Pq roff
1230 Explicit recursion limits are implemented for the following features,
1231 in order to prevent infinite loops:
1232 .Bl -dash -compact
1233 .It
1234 expansion of nested escape sequences
1235 including expansion of strings and number registers,
1236 .It
1237 expansion of nested user-defined macros,
1238 .It
1239 and
1240 .Ic \&so
1241 file inclusion.
1242 .El
1243 When a limit is hit, the output is incorrect, typically losing
1244 some content, but the parser can continue.
1245 .It Sy "skipping bad character"
1246 .Pq mdoc , man , roff
1247 The input file contains a byte that is not a printable
1248 .Xr ascii 7
1249 character.
1250 The message mentions the character number.
1251 The offending byte is replaced with a question mark
1252 .Pq Sq \&? .
1253 Consider editing the input file to replace the byte with an ASCII
1254 transliteration of the intended character.
1255 .It Sy "skipping unknown macro"
1256 .Pq mdoc , man , roff
1257 The first identifier on a request or macro line is neither recognized as a
1258 .Xr roff 7
1259 request, nor as a user-defined macro, nor, respectively, as an
1260 .Xr mdoc 7
1261 or
1262 .Xr man 7
1263 macro.
1264 It may be mistyped or unsupported.
1265 The request or macro is discarded including its arguments.
1266 .It Sy "skipping item outside list"
1267 .Pq mdoc
1268 An
1269 .Ic \&It
1270 macro occurs outside any
1271 .Ic \&Bl
1272 list.
1273 It is discarded including its arguments.
1274 .It Sy "skipping column outside column list"
1275 .Pq mdoc
1276 A
1277 .Ic \&Ta
1278 macro occurs outside any
1279 .Ic \&Bl Fl column
1280 block.
1281 It is discarded including its arguments.
1282 .It Sy "skipping end of block that is not open"
1283 .Pq mdoc , man , eqn , tbl , roff
1284 Various syntax elements can only be used to explicitly close blocks
1285 that have previously been opened.
1286 An
1287 .Xr mdoc 7
1288 block closing macro, a
1289 .Xr man 7
1290 .Ic \&RE
1291 or
1292 .Ic \&UE
1293 macro, or the end of an equation, table, or
1294 .Xr roff 7
1295 conditional request is encountered but no matching block is open.
1296 The offending request or macro is discarded.
1297 .It Sy "inserting missing end of block"
1298 .Pq mdoc , tbl
1299 Various
1300 .Xr mdoc 7
1301 macros as well as tables require explicit closing by dedicated macros.
1302 A block that doesn't support bad nesting
1303 ends before all of its children are properly closed.
1304 The open child nodes are closed implicitly.
1305 .It Sy "scope open on exit"
1306 .Pq mdoc , man , eqn , tbl , roff
1307 At the end of the document, an explicit
1308 .Xr mdoc 7
1309 block, a
1310 .Xr man 7
1311 next-line scope or
1312 .Ic \&RS
1313 or
1314 .Ic \&UR
1315 block, an equation, table, or
1316 .Xr roff 7
1317 conditional or ignore block is still open.
1318 The open block is closed implicitly.
1319 .It Sy "escaped character not allowed in a name"
1320 .Pq roff
1321 Macro, string and register identifiers consist of printable,
1322 non-whitespace ASCII characters.
1323 Escape sequences and characters and strings expressed in terms of them
1324 cannot form part of a name.
1325 The first argument of an
1326 .Ic \&am ,
1327 .Ic \&as ,
1328 .Ic \&de ,
1329 .Ic \&ds ,
1330 .Ic \&nr ,
1331 or
1332 .Ic \&rr
1333 request, or any argument of an
1334 .Ic \&rm
1335 request, or the name of a request or user defined macro being called,
1336 is terminated by an escape sequence.
1337 In the cases of
1338 .Ic \&as ,
1339 .Ic \&ds ,
1340 and
1341 .Ic \&nr ,
1342 the request has no effect at all.
1343 In the cases of
1344 .Ic \&am ,
1345 .Ic \&de ,
1346 .Ic \&rr ,
1347 and
1348 .Ic \&rm ,
1349 what was parsed up to this point is used as the arguments to the request,
1350 and the rest of the input line is discarded including the escape sequence.
1351 When parsing for a request or a user-defined macro name to be called,
1352 only the escape sequence is discarded.
1353 The characters preceding it are used as the request or macro name,
1354 the characters following it are used as the arguments to the request or macro.
1355 .It Sy "argument count wrong"
1356 .Pq mdoc , man , roff
1357 The indicated request or macro has too few or too many arguments.
1358 The syntax tree will contain the wrong number of arguments as given.
1359 Formatting behaviour depends on the specific request or macro in question.
1360 Note that the same message may also occur as a WARNING, see above.
1361 .It Sy "missing list type, using -item"
1362 .Pq mdoc
1363 A
1364 .Ic \&Bl
1365 macro fails to specify the list type.
1366 .It Sy "missing manual name, using \(dq\(dq"
1367 .Pq mdoc
1368 The first call to
1369 .Ic \&Nm
1370 lacks the required argument.
1371 .It Sy "uname(3) system call failed, using UNKNOWN"
1372 .Pq mdoc
1373 The
1374 .Ic \&Os
1375 macro is called without arguments, and the
1376 .Xr uname 3
1377 system call failed.
1378 As a workaround,
1379 .Nm
1380 can be compiled with
1381 .Sm off
1382 .Fl D Cm OSNAME=\(dq\e\(dq Ar string Cm \e\(dq\(dq .
1383 .Sm on
1384 .It Sy "unknown standard specifier"
1385 .Pq mdoc
1386 An
1387 .Ic \&St
1388 macro has an unknown argument and is discarded.
1389 .It Sy "skipping request without numeric argument"
1390 .Pq roff
1391 An
1392 .Ic \&it
1393 request has a non-numeric or negative argument or no argument at all.
1394 The invalid request is ignored.
1395 .It Sy "skipping all arguments"
1396 .Pq mdoc , man , eqn , roff
1397 An
1398 .Xr mdoc 7
1399 .Ic \&Bt ,
1400 .Ic \&Ed ,
1401 .Ic \&Ef ,
1402 .Ic \&Ek ,
1403 .Ic \&El ,
1404 .Ic \&Re ,
1405 or
1406 .Ic \&Ud
1407 macro, an
1408 .Ic \&It
1409 macro in a list that don't support item heads, a
1410 .Xr man 7
1411 .Ic \&LP ,
1412 .Ic \&P ,
1413 or
1414 .Ic \&PP
1415 macro, an
1416 .Xr eqn 7
1417 .Ic \&EN
1418 macro, or a
1419 .Xr roff 7
1420 .Sq \&..
1421 block closing request is invoked with at least one argument.
1422 All arguments are ignored.
1423 .It Sy "skipping excess arguments"
1424 .Pq mdoc , roff
1425 The
1426 .Ic \&Bf
1427 macro is invoked with more than one argument, or a request of the
1428 .Ic \&de
1429 family is invoked with more than two arguments.
1430 The excess arguments are ignored.
1431 .El
1432 .Ss FATAL errors
1433 .Bl -ohang
1434 .It Sy "input too large"
1435 .Pq mdoc , man
1436 Currently,
1437 .Nm
1438 cannot handle input files larger than its arbitrary size limit
1439 of 2^31 bytes (2 Gigabytes).
1440 Since useful manuals are always small, this is not a problem in practice.
1441 Parsing is aborted as soon as the condition is detected.
1442 .It Sy "NOT IMPLEMENTED: Bd -file"
1443 .Pq mdoc
1444 For security reasons, the
1445 .Ic \&Bd
1446 macro does not support the
1447 .Fl file
1448 argument.
1449 By requesting the inclusion of a sensitive file, a malicious document
1450 might otherwise trick a privileged user into inadvertently displaying
1451 the file on the screen, revealing the file content to bystanders.
1452 The parser exits immediately.
1453 .It Sy "NOT IMPLEMENTED: .so with absolute path or \(dq..\(dq"
1454 .Pq roff
1455 For security reasons,
1456 .Nm
1457 allows
1458 .Ic \&so
1459 file inclusion requests only with relative paths
1460 and only without ascending to any parent directory.
1461 By requesting the inclusion of a sensitive file, a malicious document
1462 might otherwise trick a privileged user into inadvertently displaying
1463 the file on the screen, revealing the file content to bystanders.
1464 The parser exits immediately.
1465 .It Sy ".so request failed"
1466 .Pq roff
1467 Servicing a
1468 .Ic \&so
1469 request requires reading an external file.
1470 While trying to do so, an
1471 .Xr open 2 ,
1472 .Xr stat 2 ,
1473 or
1474 .Xr read 2
1475 system call failed.
1476 The parser exits immediately.
1477 Before showing this message,
1478 .Nm
1479 always shows another message explaining why the system call failed.
1480 .El
1481 .Sh COMPATIBILITY
1482 This section summarises
1483 .Nm
1484 compatibility with GNU troff.
1485 Each input and output format is separately noted.
1486 .Ss ASCII Compatibility
1487 .Bl -bullet -compact
1488 .It
1489 Unrenderable unicode codepoints specified with
1490 .Sq \e[uNNNN]
1491 escapes are printed as
1492 .Sq \&?
1493 in mandoc.
1494 In GNU troff, these raise an error.
1495 .It
1496 The
1497 .Sq \&Bd \-literal
1498 and
1499 .Sq \&Bd \-unfilled
1500 macros of
1501 .Xr mdoc 7
1502 in
1503 .Fl T Ns Cm ascii
1504 are synonyms, as are \-filled and \-ragged.
1505 .It
1506 In historic GNU troff, the
1507 .Sq \&Pa
1508 .Xr mdoc 7
1509 macro does not underline when scoped under an
1510 .Sq \&It
1511 in the FILES section.
1512 This behaves correctly in
1513 .Nm .
1514 .It
1515 A list or display following the
1516 .Sq \&Ss
1517 .Xr mdoc 7
1518 macro in
1519 .Fl T Ns Cm ascii
1520 does not assert a prior vertical break, just as it doesn't with
1521 .Sq \&Sh .
1522 .It
1523 The
1524 .Sq \&na
1525 .Xr man 7
1526 macro in
1527 .Fl T Ns Cm ascii
1528 has no effect.
1529 .It
1530 Words aren't hyphenated.
1531 .El
1532 .Ss HTML Compatibility
1533 .Bl -bullet -compact
1534 .It
1535 The
1536 .Sq \efP
1537 escape will revert the font to the previous
1538 .Sq \ef
1539 escape, not to the last rendered decoration, which is now dictated by
1540 CSS instead of hard-coded.
1541 It also will not span past the current scope,
1542 for the same reason.
1543 Note that in
1544 .Sx ASCII Output
1545 mode, this will work fine.
1546 .It
1547 The
1548 .Xr mdoc 7
1549 .Sq \&Bl \-hang
1550 and
1551 .Sq \&Bl \-tag
1552 list types render similarly (no break following overreached left-hand
1553 side) due to the expressive constraints of HTML.
1554 .It
1555 The
1556 .Xr man 7
1557 .Sq IP
1558 and
1559 .Sq TP
1560 lists render similarly.
1561 .El
1562 .Sh SEE ALSO
1563 .Xr eqn 7 ,
1564 .Xr man 7 ,
1565 .Xr mandoc_char 7 ,
1566 .Xr mdoc 7 ,
1567 .Xr roff 7 ,
1568 .Xr tbl 7
1569 .Sh AUTHORS
1570 The
1571 .Nm
1572 utility was written by
1573 .An Kristaps Dzonsons Aq Mt kristaps@bsd.lv .
1574 .Sh CAVEATS
1575 In
1576 .Fl T Ns Cm html
1577 and
1578 .Fl T Ns Cm xhtml ,
1579 the maximum size of an element attribute is determined by
1580 .Dv BUFSIZ ,
1581 which is usually 1024 bytes.
1582 Be aware of this when setting long link
1583 formats such as
1584 .Fl O Ns Cm style Ns = Ns Ar really/long/link .
1585 .Pp
1586 Nesting elements within next-line element scopes of
1587 .Fl m Ns Cm an ,
1588 such as
1589 .Sq br
1590 within an empty
1591 .Sq B ,
1592 will confuse
1593 .Fl T Ns Cm html
1594 and
1595 .Fl T Ns Cm xhtml
1596 and cause them to forget the formatting of the prior next-line scope.
1597 .Pp
1598 The
1599 .Sq \(aq
1600 control character is an alias for the standard macro control character
1601 and does not emit a line-break as stipulated in GNU troff.