summaryrefslogtreecommitdiffstats
path: root/tmac/an.tmac
diff options
context:
space:
mode:
Diffstat (limited to 'tmac/an.tmac')
-rw-r--r--tmac/an.tmac1574
1 files changed, 1574 insertions, 0 deletions
diff --git a/tmac/an.tmac b/tmac/an.tmac
new file mode 100644
index 0000000..9e38ba5
--- /dev/null
+++ b/tmac/an.tmac
@@ -0,0 +1,1574 @@
+.\" groff implementation of man(7) package
+.\"
+.\" Copyright (C) 1989-2023 Free Software Foundation, Inc.
+.\" Written by James Clark (jjc@jclark.com)
+.\" Enhanced by: Werner Lemberg <wl@gnu.org>
+.\" Larry Kollar <kollar@alltel.net>
+.\" G. Branden Robinson <g.branden.robinson@gmail.com>
+.\"
+.\" Thanks to Deri James for illustrating PDF bookmark features.
+.\"
+.\" This file is part of groff.
+.\"
+.\" groff is free software; you can redistribute it and/or modify it
+.\" under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation, either version 3 of the License, or
+.\" (at your option) any later version.
+.\"
+.\" groff is distributed in the hope that it will be useful, but WITHOUT
+.\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+.\" or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+.\" License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program. If not, see
+.\" <http://www.gnu.org/licenses/>.
+.
+.
+.\" Put site additions in the file man.local, loaded near the end of
+.\" this file. To add things to TH, use '.am1 TH'.
+.
+.if !\n(.g \
+. ab groff man macros require groff extensions; aborting
+.
+.do if d TH .nx
+.
+.do nr *groff_an_tmac_C \n[.cp]
+.cp 0
+.
+.\" Package-internal names start with "an-" and are subject to change,
+.\" such as migration to "an*" (in progress).
+.
+.\" Define a string for use in diagnostic messages.
+.ds an an.tmac\"
+.
+.\" We use the .stringup request from groff 1.23, but nothing breaks if
+.\" it is undefined; the output is unchanged in appearance from earlier
+.\" releases.
+.if (\n[.x]\n[.y] < 118) \{\
+. ds an-msg \*[an]: groff man macros require groff 1.18 or later,\"
+. as an-msg " but found groff \n[.x].\n[.y]; aborting\"
+. ab \*[an-msg]
+.\}
+.
+.\" === Define macros. ===
+.\"
+.\" Macros that are part of the external interface (TH, SH, P, etc.) or
+.\" that are called by traps of any kind must be defined with `de1`
+.\" because they might be called from a context where compatibility mode
+.\" is enabled. For other macros, `de` suffices.
+.
+.de an-warn
+. tm \*[an]:\\n[.F]:\\n[.c]: warning: \\$*
+..
+.
+.de an-style-warn
+. if \\n[CHECKSTYLE] \
+. tm \*[an]:\\n[.F]:\\n[.c]: style: \\$*
+..
+.
+.de an-deprecation-warn
+. if (\\n[CHECKSTYLE] > 1) \
+. an-style-warn use of deprecated macro: .\\$0
+..
+.
+.de1 an-blank-line-trap
+. if (\\n[CHECKSTYLE] > 2) \
+. an-style-warn blank line in input
+. sp
+..
+.
+.de1 an-leading-space-trap
+. if (\\n[CHECKSTYLE] > 2) \
+. if \\n[.u] \
+. an-style-warn \\n[lsn] leading space(s) on input line
+. br
+. nop \h'\\n[lss]u'\c
+..
+.
+.\" Define alternate requests to handle continuous rendering.
+.\"
+.\" This .ne replacement avoids page breaks; instead, the page length is
+.\" increased to the necessary amount.
+.de an-ne
+. ie \\n[.$] .nr an-amount (v;\\$*)
+. el .nr an-amount 1v
+. if (\\n[an-amount] >= \\n[.t]) \
+. pl +(\\n[an-amount]u - \\n[.t]u + 1v)
+. rr an-amount
+..
+.
+.\" This .bp replacement for continuous rendering mode adjusts the page
+.\" length to the current position so that no empty lines are inserted.
+.de an-bp
+. pl \\n[nl]u
+..
+.
+.\" We need an end-of-input macro to flush any pending output line and
+.\" write the footer for the final man page rendered. We can also be
+.\" called by andoc when switching to an mdoc(7) page, irrespective of
+.\" continuous rendering mode.
+.de1 an-end
+. if !r an-TH-was-called .return
+. if \\n[cR] \{\
+. \" We might have a pending output line that is not yet broken, and
+. \" also be 1v from the bottom of the page. If we break (or flush)
+. \" the output line now, the page will get ejected afterward and
+. \" troff will exit because we're in an end-of-input macro--our
+. \" footer will never be output. So, if that is the case, further
+. \" extend the page length by 1v.
+. if ((\\n[.p] - \\n[nl]) <= \\n[.V]) .pl +1v
+. br
+. pl +1v
+. sp 1v
+. an-footer
+. \" If we're processing multiple documents and have started a new
+. \" one, draw a line between this footer and the next header.
+. if !'\\n[.F]'' \{\
+. pl +1v
+. nf
+. ti 0
+. nop \D'l \\n[LL]u 0'
+. fi
+. \}
+. \}
+. rr an-TH-was-called
+. ch an-header
+. an*break-page-with-new-number
+..
+.
+.\" Move macros into place for continuous rendering.
+.de an-set-up-continuous-rendering
+. rn ne an-real-ne
+. rn bp an-real-bp
+. rn an-ne ne
+. rn an-bp bp
+. em an-end
+..
+.
+.de an*reset-hyphenation-mode
+. ie \\n[HY] \{\
+. \" No page breaks occur in continuous rendering.
+. ie \\n[cR] \
+. nr an*hyphenation-mode \\n[\\*[locale]*hyphenation-mode-base]
+. el \
+. nr an*hyphenation-mode \\n[\\*[locale]*hyphenation-mode-trap]
+. \}
+. el \
+. nr an*hyphenation-mode 0
+. hy \\n[an*hyphenation-mode]
+..
+.
+.de an-reset-tab-stops
+. ta T .5i
+..
+.
+.de an-reset-paragraph-spacing
+. ie \\n[.$] .nr PD (v;\\$1)
+. el .nr PD (.4v >? \n[.V])
+..
+.
+.de an-reset-margin-and-inset-level
+. nr an-inset-level 1
+. nr an-margin \\n[IN]
+. nr an-saved-margin1 \\n[IN]
+. nr an-prevailing-indent \\n[IN]
+. nr an-saved-prevailing-indent1 \\n[IN]
+..
+.
+.\" Break the page and update its number depending on the C (consecutive
+.\" numbering) register.
+.\"
+.\" Corner case: if formatting multiple documents and P (starting page
+.\" number) is defined but C is not set, start numbering each document
+.\" at \n[P]. Not strictly necessary if not switching macro packages.
+.de an*break-page-with-new-number
+. ie \\n[C] .bp (\\n[%] + 1) \" argument NOT redundant before page 1
+. el \{\
+. ie r P .bp \\n[P]
+. el .bp 1
+. \}
+..
+.
+.\" Localize manual section titles for English.
+.de an*localize-strings
+. ds an*section1 General Commands Manual\"
+. ds an*section2 System Calls Manual\"
+. ds an*section3 Library Functions Manual\"
+. ds an*section4 Kernel Interfaces Manual\"
+. ds an*section5 File Formats Manual\"
+. ds an*section6 Games Manual\"
+. ds an*section7 Miscellaneous Information Manual\"
+. ds an*section8 System Manager's Manual\"
+. ds an*section9 Kernel Developer's Manual\"
+..
+.
+.\" Write a bookmark/anchor/link target $2 at hierarchical depth $1.
+.de an*bookmark
+. if \\n[an*is-output-pdf] .pdfbookmark \\$1 \\$2
+..
+.
+.\" Begin man page.
+.\" .TH topic section[ extra1[ extra2[ extra3]]]
+.de1 TH
+. if ((\\n[.$] < 2) : (\\n[.$] > 5)) \
+. an-style-warn .\\$0 expects 2 to 5 arguments, got \\n[.$]
+.
+. blm an-blank-line-trap
+. lsm an-leading-space-trap
+.
+. \" If batch processing (rendering multiple) man page documents, we
+. \" must handle the end of a previous document.
+. if \\n[an*need-titles-reset] \{\
+. if \\n[cR] .an-end
+.
+. \" Clear the page header trap so it is not sprung with stale
+. \" information.
+. ch an-header
+. an*break-page-with-new-number
+. \}
+. if \\n[C] .rr P
+.
+. nr an-TH-was-called 1 \" an-end can make certain assumptions.
+.
+. \" Set up rendering parameters. We do this in TH instead of only
+. \" once when initializing the package because when rendering multiple
+. \" pages, a previous page might have changed them.
+.
+. fam \\*[an*body-family]
+. ft R
+.
+. nr PS 10z \" default type size
+. nr PS-SS 10z
+. nr PS-SH 10.95z
+. nr VS 12p
+.
+. \" use sizes similar to LaTeX
+. if t \{\
+. ie (\\n[S] == 11) \{\
+. nr PS 10.95z
+. nr PS-SS 10.95z
+. nr PS-SH 12z
+. nr VS 13.6p
+. \}
+. el \{\
+. if (\\n[S] == 12) \{\
+. nr PS 12z
+. nr PS-SS 12z
+. nr PS-SH 14.4z
+. nr VS 14.5p
+. \}
+. \}
+. \}
+.
+. \" The previous document rendered in a batch may have been in a
+. \" different language. If this one is in English, (re-)init strings.
+. if '\\*[locale]'english' .an*localize-strings
+.
+. ps \\n[PS]u
+. vs \\n[VS]u
+. ad \\*[AD]
+. ll \\n[LL]u
+.
+. \" We've seen no tbl(1) tables yet in this document.
+. rr TW
+. nr an-was-tbl-failure-reported 0
+.
+. an*reset-hyphenation-mode
+. an-reset-tab-stops
+. an-reset-paragraph-spacing
+. an-reset-margin-and-inset-level
+.
+. nr an-tag-separation 1n
+. nr an-need-no-space-mode 0
+. nr an-need-break 0
+. nr an-is-in-diversion 0
+. nr an*is-in-example 0
+.
+. ds an*topic "\\$1\"
+. if \\n[CT] .stringup an*topic
+. ds an*section "\\$2\"
+. ie (\\n[.$] > 4) .ds an-extra3 "\\$5\"
+. el \{\
+. \" Simulate switch/case in roff.
+. ie '\\$2'1' .ds an-extra3 \\*[an*section1]\"
+. el \{.ie '\\$2'2' .ds an-extra3 \\*[an*section2]\"
+. el \{.ie '\\$2'3' .ds an-extra3 \\*[an*section3]\"
+. el \{.ie '\\$2'4' .ds an-extra3 \\*[an*section4]\"
+. el \{.ie '\\$2'5' .ds an-extra3 \\*[an*section5]\"
+. el \{.ie '\\$2'6' .ds an-extra3 \\*[an*section6]\"
+. el \{.ie '\\$2'7' .ds an-extra3 \\*[an*section7]\"
+. el \{.ie '\\$2'8' .ds an-extra3 \\*[an*section8]\"
+. el \{.ie '\\$2'9' .ds an-extra3 \\*[an*section9]\"
+. el .ds an-extra3 \" empty
+. \}\}\}\}\}\}\}\}
+. \}
+.
+. ds an-extra1 "\\$3\"
+. ie (\\n[.$] > 3) .ds an-extra2 "\\$4\"
+. el .ds an-extra2 \" empty; but .AT/.UC can override
+.
+. if '\\*[an-extra1]'' \{\
+. ds an-msg .\\$0 missing third argument; suggest document\"
+. as an-msg " modification date in ISO 8601 format (YYYY-MM-DD)\"
+. an-style-warn \\*[an-msg]
+. rm an-msg
+. \}
+.
+. if '\\*[an-extra2]'' \{\
+. ds an-msg .\\$0 missing fourth argument; suggest package/project\"
+. \" Yes, that's one double quote, then three, then two.
+. as an-msg " name and version (e.g., """groff 1.23.0"")\"
+. an-style-warn \\*[an-msg]
+. rm an-msg
+. \}
+.
+. if '\\$5\\*[an-extra3]'' \{\
+. ds an-msg .\\$0 missing fifth argument and second argument '\\$2'\"
+. as an-msg " not a recognized manual section; specify its title\"
+. an-style-warn \\*[an-msg]
+. rm an-msg
+. \}
+.
+. \" Initialize environment for headers and footers.
+. ev an*env-header-and-footer
+. ps \\n[PS]u
+. vs \\n[VS]u
+. lt \\n[LT]u
+. an*abbreviate-page-topic
+. \" If AT or UC is called, we will need to abbreviate again.
+. an*abbreviate-inner-footer
+. ev
+.
+. \" HTML gets the topic without any abbreviation, since it's metadata.
+. if \\n[an*is-output-html] \{\
+. DEVTAG-TL
+. nop \\*[an*topic]
+. DEVTAG-EO-TL
+. \}
+.
+. \" A bookmark is attached to the page header, but only on the first
+. \" page of the document.
+. nr an*was-TH-bookmark-emitted 0
+. an-header
+.
+. if !\\n[cR] \{\
+. wh 0 an-header
+. ie r FT .nr an*footer-location \\n[FT]
+. el .nr an*footer-location (-.5i)
+. wh \\n[an*footer-location]u an-footer
+. wh (\\n[an*footer-location]u - .5i) an-break-body-text
+. rr an*footer-location
+. \}
+. \}
+.
+. nr an*need-titles-reset 1
+..
+.
+.\" Support legacy AT&T and BSD Unix man pages.
+.
+.\" Designate an AT&T Unix man page.
+.\" .AT [system-id[ release-id]]
+.de1 AT
+. nop \\*[an-deprecation-warn]\\
+. ds an-extra2 "7th Edition\"
+. if "\\$1"3" .ds an-extra2 "7th Edition\"
+. if "\\$1"4" .ds an-extra2 "System III\"
+. if "\\$1"5" \{\
+. ie "\\$2"" .ds an-extra2 "System V\"
+. el .ds an-extra2 "System V Release \\$2\"
+. \}
+. ev an*env-header-and-footer
+. an*abbreviate-inner-footer
+. ev
+..
+.
+.\" Designate a BSD Unix man page.
+.\" .UC [system-id]
+.de1 UC
+. nop \\*[an-deprecation-warn]\\
+. ds an-extra2 "3rd Berkeley Distribution\"
+. if "\\$1"3" .ds an-extra2 "3rd Berkeley Distribution\"
+. if "\\$1"4" .ds an-extra2 "4th Berkeley Distribution\"
+. if "\\$1"5" .ds an-extra2 "4.2 Berkeley Distribution\"
+. if "\\$1"6" .ds an-extra2 "4.3 Berkeley Distribution\"
+. if "\\$1"7" .ds an-extra2 "4.4 Berkeley Distribution\"
+. ev an*env-header-and-footer
+. an*abbreviate-inner-footer
+. ev
+..
+.
+.\" Restore tab stops to defaults.
+.de1 DT
+. nop \\*[an-deprecation-warn]\\
+. an-reset-tab-stops
+..
+.
+.\" Restore inter-paragraph spacing to default (or set it to argument).
+.\" .PD [distance]
+.de1 PD
+. nop \\*[an-deprecation-warn]\\
+. nop \\*[an-reset-paragraph-spacing]\\
+..
+.
+.\" Write the page header; can be redefined by man.local.
+.\"
+.\" In continuous rendering mode, we need to extend the page length to
+.\" accommodate the vertical size of our header (plus any spacing).
+.if d PT .ig
+.de1 PT
+. ie \\n[cR] .pl +1v
+. el .sp .5i
+. if !\\n[an*was-TH-bookmark-emitted] \{\
+. an*bookmark 1 \E*[an*page-ref-string]
+. nr an*was-TH-bookmark-emitted 1
+. \}
+. tl '\\*[an-pageref]'\\*[an-extra3]'\\*[an-pageref]'
+. ie \\n[cR] \{\
+. pl +1v
+. sp 1v
+. \}
+. el .sp |1i
+..
+.
+.\" Write the page footer; can be redefined by man.local.
+.\"
+.\" In continuous rendering mode, we need to extend the page length to
+.\" accommodate the vertical size of our footer (plus any spacing).
+.if d BT .ig
+.de1 BT
+. if \\n[cR] .pl +1v
+. ie \\n[D] \{\
+. if o .tl '\\*[an*ifoot]'\\*[an-extra1]'\\*[an*ofoot]'
+. if e .tl '\\*[an*ofoot]'\\*[an-extra1]'\\*[an*ifoot]'
+. \}
+. el \
+. tl '\\*[an*ifoot]'\\*[an-extra1]'\\*[an*ofoot]'
+..
+.
+.\" Abbreviate the page topic if it's too long for the header. Leaves
+.\" string an-pageref defined for use in .PT and .an-footer. Also
+.\" leaves an*topic-abbv for possible use by .PT and .BT re-definers.
+.\" Call this only from within the header/footer environment.
+.de an*abbreviate-page-topic
+. ds an*topic-abbv \\*[an*topic]\" might not get abbreviated at all
+. ds an*topic-string \\*[an*topic]\"
+. ds an-ellipsis \|.\|.\|.\|\"
+. \" an*page-ref-string is left unmodified for internal use, such as
+. \" PDF bookmarks.
+. ds an*page-ref-string \\*[an*topic](\\*[an*section])\"
+. ds an-pageref \\*[an*topic-abbv](\\*[an*section])\"
+. nr an-header-width \\w'\\*[an-pageref]\\*[an-extra3]\\*[an-pageref]'
+. while (\\n[an-header-width] >= \\n[.lt]) \{\
+. \" The page topic is too long; trim some bits out of the middle.
+. length an*topic-length \\*[an*topic-string]
+. \" roff uses truncating division. Remove an additional character
+. \" on each side of the midpoint to account for the ellipsis we add
+. \" later.
+. nr an-mark1 (\\n[an*topic-length] / 2 - 2)
+. nr an-mark2 (\\n[an*topic-length] / 2 + 2)
+. ds an-prefix \\*[an*topic-string]\"
+. ds an-suffix \\*[an*topic-string]\"
+. \" Use extremum operators to ensure that the first and last
+. \" characters of the topic remain intact (in cases of pathological
+. \" shortening).
+. substring an-prefix 0 (\\n[an-mark1] >? 1)
+. substring an-suffix (\\n[an-mark2] <? \\n[an*topic-length] - 1) -1
+. ds an*topic-string \\*[an-prefix]\\*[an-suffix]\"
+. ds an*topic-abbv \\*[an-prefix]\\*[an-ellipsis]\\*[an-suffix]\"
+. \" Remeasure the formatted topic; give up if we made no progress.
+. length an*topic-new-length \\*[an*topic-string]
+. ie (\\n[an*topic-new-length] >= \\n[an*topic-length]) \
+. break
+. ds an-pageref \\*[an*topic-abbv](\\*[an*section])\"
+. nr an-header-width \
+ \\w'\\*[an-pageref]\\*[an-extra3]\\*[an-pageref]'
+. \}
+. ds an-pageref \\*[an-lic]\f[\\*[MF]]\\*[an*topic-abbv]\\*[an-ic]\
+\f[R](\\*[an*section])\"
+. rr an*topic-length-prev
+. rr an-mark1
+. rr an-mark2
+. rm an-prefix
+. rm an-suffix
+. rm an*topic-string
+. rr an*topic-length
+. rr an-header-width
+. rm an-ellipsis
+..
+.
+.\" Iterate through concatenation of arguments as a string. If a bare
+.\" backslash is found, make `an*string-contains-backslash` true. Our
+.\" caller should delete this register when done with it.
+.de an*scan-string-for-backslash
+. nr an*string-contains-backslash 0
+. nr an*index 0
+. length an*max-index \\$*
+. while (\\n[an*index] < \\n[an*max-index]) \{\
+. ds an*char \\$*
+. substring an*char \\n[an*index] \\n[an*index]
+. ec @
+. \" Use a weird delimiter to reduce lexical colorizer confusion.
+. if _@*[an*char]_\\_ .nr an*string-contains-backslash 1
+. ec
+. if \\n[an*string-contains-backslash] .break
+. nr an*index +1
+. \}
+. rm an*char
+. rr an*max-index
+. rr an*index
+..
+.
+.\" Abbreviate the `an-extra2` string (set by .TH) if it's too long for
+.\" the footer. The formatted width of the inner footer plus half that
+.\" of the center footer must be less than half the title width or we
+.\" must abbreviate. By default, `an-extra2` is placed as the inner
+.\" footer. We call its (potential) abbreviation `an*ifoot` here and
+.\" leave it defined for .BT use. (`an*ofoot` is not treated the same
+.\" way. `an-footer` regenerates it on every page because the page
+.\" number changes if present.) Shorten the inner footer if necessary
+.\" by trimming characters off the end, replacing them with an ellipsis.
+.de an*abbreviate-inner-footer
+. ds an*ifoot \\*[an-extra2]\"
+. nr an*half-title-width (\\n[.lt] / 2u)
+. nr an*half-cfoot-width (\w'\\*[an-extra1]' / 2u)
+. nr an*half-footer-width \
+ (\w'\\*[an*ifoot]' + \\n[an*half-cfoot-width])
+. if (\\n[an*half-footer-width] < \\n[an*half-title-width]) \{\
+. rr an*half-footer-width
+. rr an*half-cfoot-width
+. rr an*half-title-width
+. return
+. \}
+. an*scan-string-for-backslash \\*[an*ifoot]
+. if \\n[an*string-contains-backslash] \{\
+. an-warn not abbreviating fourth argument to 'TH' '\\*[an*ifoot]': \
+contains unsupported escape sequence
+. rr an*string-contains-backslash
+. rr an*half-footer-width
+. rr an*half-cfoot-width
+. rr an*half-title-width
+. return
+. \}
+. ds an*saved-ifoot \\*[an*ifoot]
+. ds an*ellipsis \|.\|.\|.\|\"
+. \" Remeasure with ellipsis added to inner footer so that henceforth,
+. \" the measured width strictly decreases.
+. nr an*half-footer-width \
+ (\w'\\*[an*ifoot]\\*[an*ellipsis]' + \\n[an*half-cfoot-width])
+. nr an*end-index (-2)
+. while (\\n[an*half-footer-width] >= \\n[an*half-title-width]) \{\
+. ds an*ifoot \\*[an*saved-ifoot]
+. substring an*ifoot 0 \\n[an*end-index]
+. \" Measure the string again and give up if we made no progress.
+. nr an*new-half-footer-width \
+ (\w'\\*[an*ifoot]\\*[an*ellipsis]' + \\n[an*half-cfoot-width])
+. ie (\\n[an*new-half-footer-width] >= \\n[an*half-footer-width]) \
+. break
+. nr an*half-footer-width \\n[an*new-half-footer-width]
+. nr an*end-index -1
+. \}
+. ds an*ifoot \\*[an*ifoot]\\*[an*ellipsis]\"
+. rr an*end-index
+. rr an*new-half-footer-width
+. rm an*ellipsis
+. rm an*saved-ifoot
+. rr an*string-contains-backslash
+. rr an*half-footer-width
+. rr an*half-cfoot-width
+. rr an*half-title-width
+..
+.
+.\" Prepare the header for a page of the document.
+.de1 an-header
+. if \\n[an-suppress-header-and-footer] .return
+. ev an*env-header-and-footer
+. PT
+. ev
+. ns
+..
+.
+.\" Schedule a page break when the next output line is written (not
+.\" called if continuously rendering).
+.de1 an-break-body-text
+' bp
+..
+.
+.\" Prepare the footer for a page of the document.
+.de1 an-footer
+. if \\n[an-suppress-header-and-footer] .return
+. ev an*env-header-and-footer
+. ie \\n[cR] \
+. ds an*ofoot "\\*[an-pageref]\"
+. el \{\
+. ds an*ofoot \\n[%]\"
+. if r X \{\
+. if (\\n[%] > \\n[X]) \{\
+. nr an-page-letter (\\n[%] - \\n[X])
+. ds an*ofoot \\n[X]\\n[an-page-letter]\"
+. \}
+. \}
+. \}
+. BT
+. rm an*ofoot
+. ev
+..
+.
+.\" Output the tag of a tagged paragraph, or of an indented paragraph
+.\" (IP) that has a tag. Whether we break depends on the tag width.
+.de an-write-paragraph-tag
+. br
+. di
+. ad \\*[AD]
+. nr an-is-in-diversion 0
+. ll
+. \" We must emit the diversion in a separate environment to ensure
+. \" that a possible margin character is printed correctly.
+. ev an-env-paragraph-tag
+. evc 0
+. mc
+. nf
+. in \\n[an-margin]u
+. \" Prevent page break between the tag and the rest of the paragraph.
+. ne (2v + 1u)
+. \" Does the tag fit within the paragraph indentation?
+. nr an-tag-fits \
+ (\\n[dl] + \\n[an-tag-separation] <= \\n[an-prevailing-indent])
+. if \\n[an-tag-fits] .DEVTAG-COL 1
+. an-div
+. if \\n[an-tag-fits] .sp -1v
+. ev
+. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
+. if \\n[an-tag-fits] .DEVTAG-COL 2
+. rr an-tag-fits
+..
+.
+.\" Handle macros that may take an "argument" on the next input line
+.\" producing written or drawn output: .SH, .SS, .B, .I, .SM, .SB--and
+.\" .TP, which does so mandatorily.
+.de1 an-input-trap
+. if \\n[an-devtag-needs-end-of-heading] .DEVTAG-EO-H
+. nr an-devtag-needs-end-of-heading 0
+. if \\n[an-devtag-needs-second-column] .DEVTAG-COL 2
+. nr an-devtag-needs-second-column 0
+. ft R
+. ps \\n[PS]u
+. vs \\n[VS]u
+. if \\n[an-need-break] \{\
+. br
+. nr an-need-break 0
+. \}
+. if \\n[an-need-no-space-mode] \{\
+. ns
+. nr an-need-no-space-mode 0
+. \}
+. if \\n[an-is-in-diversion] .an-write-paragraph-tag
+..
+.
+.\" Break a paragraph. Restore defaults, except for indentation.
+.de an-break-paragraph
+. ft R
+. ps \\n[PS]u
+. vs \\n[VS]u
+. sp \\n[PD]u
+. ns
+..
+.
+.\" Set arguments (or next input line producing written or drawn output
+.\" if none) as a section heading.
+.de1 SH
+. fam \\*[an*body-family]
+. an-break-paragraph
+. an-reset-margin-and-inset-level
+. fi
+. in \\n[an-margin]u
+. ti 0
+. nr an-devtag-needs-end-of-heading 1
+. DEVTAG-SH 1
+. it 1 an-input-trap
+. nr an-need-no-space-mode 1
+. nr an-need-break 1
+. ps \\n[PS-SH]u
+. ne (2v + 1u)
+. ft \\*[HF]
+. if \\n[an-remap-I-style-in-headings] .ftr I \\*[an-heading-family]BI
+. if \\n[.$] \{\
+. ds an-section-heading \\$*\"
+. if \\n[CS] .stringup an-section-heading
+. an*bookmark 2 \E*[an-section-heading]
+. nop \&\\*[an-section-heading]
+. \}
+. if \\n[an-remap-I-style-in-headings] .ftr I I
+..
+.
+.\" Set arguments (or next input line producing written or drawn output
+.\" if none) as a subsection heading.
+.de1 SS
+. fam \\*[an*body-family]
+. an-break-paragraph
+. an-reset-margin-and-inset-level
+. fi
+. in \\n[IN]u
+. ti \\n[SN]u
+. nr an-devtag-needs-end-of-heading 1
+. DEVTAG-SH 2
+. it 1 an-input-trap
+. nr an-need-no-space-mode 1
+. nr an-need-break 1
+. ps \\n[PS-SS]u
+. ne (2v + 1u)
+. ft \\*[HF]
+. if \\n[an-remap-I-style-in-headings] .ftr I \\*[an-heading-family]BI
+. if \\n[.$] \{\
+. ds an*subsection-heading \\$*\"
+. an*bookmark 3 \E*[an*subsection-heading]
+. nop \&\\$*
+. \}
+. if \\n[an-remap-I-style-in-headings] .ftr I I
+..
+.
+.\" Set arguments (or next input line producing written or drawn output
+.\" if none) in bold style.
+.de1 B
+. it 1 an-input-trap
+. ft B
+. if \\n[.$] \&\\$*
+..
+.
+.\" Set arguments (or next input line producing written or drawn output
+.\" if none) in italic style.
+.de1 I
+. it 1 an-input-trap
+. ft I
+. if \\n[.$] \,\\$*\/
+..
+.
+.\" Set arguments (or next input line producing written or drawn output
+.\" if none) at smaller type size.
+.de1 SM
+. it 1 an-input-trap
+. ps -1
+. if \\n[.$] \&\\$*
+..
+.
+.\" Set arguments (or next input line producing written or drawn output
+.\" if none) in bold style at smaller type size.
+.de1 SB
+. it 1 an-input-trap
+. ps -1
+. ft B
+. if \\n[.$] \&\\$*
+..
+.
+.\" Set an ordinary paragraph.
+.de1 P
+. an-break-paragraph
+. in \\n[an-margin]u
+. nr an-prevailing-indent \\n[IN]
+..
+.
+.\" Accommodate ms(7) paragraphing refugees.
+.als LP P
+.als PP P
+.
+.\" Set a tagged paragraph. The tag must be on the next input line
+.\" producing written or drawn output.
+.\" .TP [indent]
+.de1 TP
+. an-break-paragraph
+. if \\n[.$] .nr an-prevailing-indent (n;\\$1)
+. itc 1 an-input-trap
+. in 0
+. if !\\n[an-is-in-diversion] \{\
+. ll -\\n[an-margin]u
+. di an-div
+. na
+. \}
+. nr an-is-in-diversion 1
+..
+.
+.\" Set an indented paragraph.
+.\" .IP [marker[ indentation-amount]]
+.de1 IP
+. an-break-paragraph
+. ie !\\n[.$] \{\
+. ne (1v + 1u)
+. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
+. \}
+. el \{\
+. ie (\\n[.$] > 1) .TP "\\$2"
+. el .TP
+. nop \&\\$1
+. \}
+..
+.
+.\" Set a paragraph with a hanging indentation.
+.\" .HP [indent]
+.de1 HP
+. if !\\n[mS] \\*[an-deprecation-warn]\c
+. an-break-paragraph
+. ne (1v + 1u)
+. if \\n[.$] .nr an-prevailing-indent (n;\\$1)
+. in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
+. ti \\n[an-margin]u
+. DEVTAG-COL 1
+. nr an-devtag-needs-second-column 1
+..
+.
+.\" === Define alternating font macros. ===
+.\"
+.\" Implementation notes:
+.\"
+.\" We always emit a dummy character \& before the first argument. This
+.\" is necessary only when the calling man page is in compatibility
+.\" mode; it works around the surprising AT&T semantics of \f escapes at
+.\" the beginning of an input line. See "Implementation differences" in
+.\" groff_diff(7) or the groff Texinfo manual.
+.\"
+.\" The italic correction escapes can be visually confusing. We apply
+.\" the following rules, always on the same input line.
+.\" (1) Before any italic argument, emit a left italic correction \,
+.\" before switching to the italic style.
+.\" (2) After any italic argument, emit an italic correction \/
+.\" before switching to another style.
+.\" It is true that these macros cannot know what style is used in the
+.\" input stream before or after they are called. We can make
+.\" assumptions based on pragmatics. In most cases, the caller will not
+.\" precede a call to one of these macros with \c, or add it to the
+.\" final argument given to one of these calls; when \c is absent, what
+.\" is adjacent must be a word space or output line boundary, so italic
+.\" corrections don't matter. If \c _is_ used by the caller, we can
+.\" assume that the adjacent glyphs before an IB or IR call, or the
+.\" following ones after a BI or RI call, will not be italic (and thus
+.\" will benefit from the italic correction we provide); otherwise the
+.\" caller would simply have added the relevant characters to the
+.\" arguments of the macro call.
+.\"
+.
+.\" Set each argument in bold and italics, alternately.
+.de1 BI
+. if (\\n[.$] < 2) \
+. an-style-warn .\\$0 expects at least 2 arguments, got \\n[.$]
+. if \\n[.$] \{\
+. ds an-result \&\"
+. while (\\n[.$] >= 2) \{\
+. as an-result \f[B]\\$1\,\f[I]\\$2\/\"
+. shift 2
+. \}
+. if \\n[.$] .as an-result \f[B]\\$1\"
+. nop \\*[an-result]
+. rm an-result
+. ft R
+. \}
+..
+.
+.\" Set each argument in bold and roman, alternately.
+.de1 BR
+. if (\\n[.$] < 2) \
+. an-style-warn .\\$0 expects at least 2 arguments, got \\n[.$]
+. if \\n[.$] \{\
+. ds an-result \&\"
+. while (\\n[.$] >= 2) \{\
+. as an-result \f[B]\\$1\f[R]\\$2\"
+. shift 2
+. \}
+. if \\n[.$] .as an-result \f[B]\\$1\"
+. nop \\*[an-result]
+. rm an-result
+. ft R
+. \}
+..
+.
+.\" Set each argument in italics and bold, alternately.
+.de1 IB
+. if (\\n[.$] < 2) \
+. an-style-warn .\\$0 expects at least 2 arguments, got \\n[.$]
+. if \\n[.$] \{\
+. ds an-result \&\"
+. while (\\n[.$] >= 2) \{\
+. as an-result \,\f[I]\\$1\/\f[B]\\$2\"
+. shift 2
+. \}
+. if \\n[.$] .as an-result \,\f[I]\\$1\/\"
+. nop \\*[an-result]
+. rm an-result
+. ft R
+. \}
+..
+.
+.\" Set each argument in italics and roman, alternately.
+.de1 IR
+. if (\\n[.$] < 2) \
+. an-style-warn .\\$0 expects at least 2 arguments, got \\n[.$]
+. if \\n[.$] \{\
+. ds an-result \&\"
+. while (\\n[.$] >= 2) \{\
+. as an-result \,\f[I]\\$1\/\f[R]\\$2\"
+. shift 2
+. \}
+. if \\n[.$] .as an-result \,\f[I]\\$1\/\"
+. nop \\*[an-result]
+. rm an-result
+. ft R
+. \}
+..
+.
+.\" Set each argument in roman and bold, alternately.
+.de1 RB
+. if (\\n[.$] < 2) \
+. an-style-warn .\\$0 expects at least 2 arguments, got \\n[.$]
+. if \\n[.$] \{\
+. ds an-result \&\"
+. while (\\n[.$] >= 2) \{\
+. as an-result \f[R]\\$1\f[B]\\$2\"
+. shift 2
+. \}
+. if \\n[.$] .as an-result \f[R]\\$1\"
+. nop \\*[an-result]
+. rm an-result
+. ft R
+. \}
+..
+.
+.\" Set each argument in roman and italics, alternately.
+.de1 RI
+. if (\\n[.$] < 2) \
+. an-style-warn .\\$0 expects at least 2 arguments, got \\n[.$]
+. if \\n[.$] \{\
+. ds an-result \&\"
+. while (\\n[.$] >= 2) \{\
+. as an-result \f[R]\\$1\,\f[I]\\$2\/\"
+. shift 2
+. \}
+. if \\n[.$] .as an-result \f[R]\\$1\"
+. nop \\*[an-result]
+. rm an-result
+. ft R
+. \}
+..
+.
+.\" Start a relative inset level (by the amount given in the argument).
+.\" .RS [inset-amount]
+.de1 RS
+. nr an-saved-margin\\n[an-inset-level] \\n[an-margin]
+. nr an-saved-prevailing-indent\\n[an-inset-level] \
+ \\n[an-prevailing-indent]
+. ie \\n[.$] .nr an-margin +(n;\\$1)
+. el .nr an-margin +\\n[an-prevailing-indent]
+. in \\n[an-margin]u
+. nr an-prevailing-indent \\n[IN]
+. nr an-inset-level +1
+..
+.
+.\" End relative inset level, backing up by one level (or to the level
+.\" given by the argument).
+.\" .RE [inset-level]
+.de1 RE
+. ie \\n[.$] .nr an-RE-requested-level \\$1
+. el .nr an-RE-requested-level (\\n[an-inset-level] - 1)
+. ie \\n[.$] \{\
+. if (\\n[an-RE-requested-level] = \\n[an-inset-level]) \
+. ds an-RE-problem already at level \\n[an-inset-level]\"
+. if (\\n[an-RE-requested-level] > \\n[an-inset-level]) \
+. ds an-RE-problem too large\"
+. if (\\n[an-RE-requested-level] < 1) \
+. ds an-RE-problem too small\"
+. if d an-RE-problem \
+. an-style-warn argument """\\$1""" to .\\$0 \\*[an-RE-problem]
+. rm an-RE-problem
+. \}
+. el .if !(\\n[an-RE-requested-level]) .an-style-warn unbalanced .\\$0
+. rr an-RE-requested-level
+. ie \\n[.$] .nr an-inset-level ((;\\$1) <? \\n[an-inset-level])
+. el .nr an-inset-level -1
+. nr an-inset-level (1 >? \\n[an-inset-level])
+. nr an-margin \\n[an-saved-margin\\n[an-inset-level]]
+. nr an-prevailing-indent \
+ \\n[an-saved-prevailing-indent\\n[an-inset-level]]
+. in \\n[an-margin]u
+..
+.
+.\" Deprecated: Style an option with an argument (mandatory if
+.\" specified) for a command synopsis.
+.\" .OP flag [option-parameter]
+.de1 OP
+. nop \\*[an-deprecation-warn]\\
+. if ((\\n[.$] < 1) : (\\n[.$] > 2)) \
+. an-style-warn .\\$0 expects 1 or 2 arguments, got \\n[.$]
+. ie (\\n[.$] > 1) \
+. RI [\\f[B]\\$1\f[] \~\\$2 ]
+. el \
+. RB [ \\$1 ]
+..
+.
+.\" Begin an example (typically of source code or shell input).
+.de1 EX
+. br
+. if \\n[an*is-in-example] \{\
+. an-style-warn ignoring .\\$0 while already in example
+. return
+. \}
+. ds an*saved-family \\n[.fam]
+. nr an*saved-font \\n[.f]
+. nr an*saved-paragraph-distance \\n[PD]
+. nr PD 1v
+. nf
+. \" If using the DVI output device, we have no constant-width fonts of
+. \" bold weight and, relatedly, no constant-width family (because that
+. \" requires all four styles). Remap the bold styles to normal ones.
+. ie '\*[.T]'dvi' \{\
+. ftr R CW
+. ftr B CW
+. ftr I CWI
+. ftr BI CWI
+. \}
+. el .fam \\*[an*example-family]
+. ft R
+. nr an*is-in-example 1
+..
+.
+.\" End example.
+.de EE
+. br
+. if !\\n[an*is-in-example] \{\
+. an-style-warn ignoring .\\$0 while not in example
+. return
+. \}
+. \" Undo the remappings from `EX`.
+. ie '\*[.T]'dvi' \{\
+. ftr R
+. ftr B
+. ftr I
+. ftr BI
+. \}
+. fam \\*[an*saved-family]
+. ft \\n[an*saved-font]
+. nr PD \\n[an*saved-paragraph-distance]
+. fi
+. rr an*saved-paragraph-distance
+. rr an*saved-font
+. rm an*saved-family
+. nr an*is-in-example 0
+..
+.
+.\" Store the argument and begin a diversion for link text.
+.de an*begin-hyperlink
+. ds an*hyperlink \\$1\"
+. \" We want the diversion to format as if it has an indentation of
+. \" zero (that comes for free when we switch environments), and we
+. \" want the line length reduced by the amount of indentation that
+. \" obtains when we output it.
+. nr an*saved-line-length \\n[.l]
+. nr an*saved-indentation \\n[.i]
+. \" We can only hyperlink if we're not in a diversion.
+. \" XXX: There's no fundamental reason for that, just a simple matter
+. \" of macro programming.
+. nr an*is-in-link-text-diversion 0
+. if '\\n(.z'' .nr an*is-in-link-text-diversion 1
+. if (\\n[an*is-in-link-text-diversion] & \\n[an*do-hyperlink]) \{\
+. \" Start diversion in a new environment.
+. ev an*link-text-env
+. di an*link-text-div
+. ll (\\n[an*saved-line-length]u - \\n[an*saved-indentation]u)
+. \}
+. rr an*saved-indentation
+. rr an*saved-line-length
+..
+.
+.\" Emit hyperlinked text with optional trailing text.
+.\"
+.\" The caller should set the `an*prefix` string if the hyperlink should
+.\" be prefixed with a scheme; for example, email addresses get
+.\" "mailto:", but this need not be visible when rendering an email
+.\" address on a device incapable of hyperlinking.
+.de an*end-hyperlink
+. ie (\\n[an*is-in-link-text-diversion] & \\n[an*do-hyperlink]) \{\
+. br
+. di
+. ev
+.
+. \" Was any link text present?
+. ie \\n[dn] \{\
+. if \\n[an*is-output-html] \
+. nop \X^html:<a href="\\*[an*prefix]\\*[an*hyperlink]">^\c
+. if \\n[an*is-output-terminal] \
+. nop \X^tty: link \\*[an*prefix]\\*[an*hyperlink]^\c
+. \" Strip off the final newline of the diversion and emit it.
+. chop an*link-text-div
+. an*link-text-div
+\c\" XXX: If we .nop this, HTML output is corrupted (Savannah #63470).
+. if \\n[an*is-output-html] \
+. nop \X^html:</a>^\c
+. if \\n[an*is-output-terminal] \
+. nop \X^tty: link^\c
+. \}
+. \" If there was no link text, format URI as its own link text. We
+. \" don't add angle brackets here.
+. el \{\
+. if \\n[an*is-output-html] \
+. nop \X^html:<a href="\\*[an*prefix]\\*[an*hyperlink]">\
+\\*[an*hyperlink]</a>^\c
+. if \\n[an*is-output-terminal] \
+. nop \X^tty: link \\*[an*prefix]\\*[an*hyperlink]^\
+\\*[an*hyperlink]\X^tty: link^\c
+. \}
+. nop \&\\$1\"
+. \}
+. \" If not hyperlinking, format URI in angle brackets. There was no
+. \" diversion, so the link text has already been formatted normally.
+. el \{\
+. nh
+. nop \\[la]\\*[an*hyperlink]\\[ra]\\$1
+. hy \\n[an*hyphenation-mode]
+. \}
+.
+. rr an*is-in-link-text-diversion
+..
+.
+.\" Begin email hyperlink. Input until the next `ME` call is stored in
+.\" a diversion; it becomes the link text for the hyperlinked address.
+.\" .MT nobody@example.com
+.de1 MT
+. if !(\\n[.$] = 1) \
+. an-style-warn .\\$0 expects 1 argument, got \\n[.$]
+. ds an*prefix mailto:
+. an*begin-hyperlink \\$1
+..
+.
+.\" End email hyperlink. The optional argument supplies trailing
+.\" punctuation (or, rarely, other text) after link text.
+.\" .ME [trailing-text]
+.de1 ME
+. an*end-hyperlink \\$1
+. rm an*prefix
+..
+.
+.\" Begin web hyperlink. Input until the next `UE` call is stored in
+.\" a diversion; it becomes the link text for the hyperlinked address.
+.\" .UR nobody@example.com
+.de1 UR
+. if !(\\n[.$] = 1) \
+. an-style-warn .\\$0 expects 1 argument, got \\n[.$]
+. ds an*prefix \" empty
+. an*begin-hyperlink \\$1
+..
+.
+.\" End web hyperlink. The optional argument supplies trailing
+.\" punctuation (or, rarely, other text) after link text.
+.\" .UE [trailing-text]
+.de1 UE
+. an*end-hyperlink \\$1
+. rm an*prefix
+..
+.
+.\" There is no standardized format for man page URLs, but the default
+.\" is expected to work (or be harmlessly ignored) everywhere except
+.\" macOS. Override in man.local if desired.
+.nr an*MR-URL-format 1
+.
+.\" Set a man page cross reference.
+.\" .MR page-topic page-section [trailing-text]
+.de1 MR
+. if ((\\n[.$] < 2) : (\\n[.$] > 3)) \
+. an-style-warn .\\$0 expects 2 or 3 arguments, got \\n[.$]
+. ds an*url man:\\$1(\\$2)\" used everywhere but macOS
+. if (\\n[an*MR-URL-format] = 2) \
+. ds an*url x-man-page://\\$2/\\$1\" macOS/Mac OS X since 10.3
+. if (\\n[an*MR-URL-format] = 3) \
+. ds an*url man:\\$1.\\$2\" Bwana (Mac OS X)
+. if (\\n[an*MR-URL-format] = 4) \
+. ds an*url x-man-doc://\\$2/\\$1\" ManOpen (Mac OS X pre-2005)
+. nh
+. if \\n[an*do-hyperlink] \{\
+. if \\n[an*is-output-html] \
+. nop \X^html:<a href="\\*[an*url]">^\c
+. if \\n[an*is-output-terminal] \
+. nop \X^tty: link \\*[an*url]^\c
+. \}
+. nop \&\\*[an-lic]\f[\\*[MF]]\\$1\\*[an-ic]\f[R](\\$2)\c
+. if \\n[an*do-hyperlink] \{\
+. if \\n[an*is-output-html] \
+. nop \X^html:</a>^\c
+. if \\n[an*is-output-terminal] \
+. nop \X^tty: link^\c
+. \}
+. nop \&\\$3
+. hy \\n[an*hyphenation-mode]
+..
+.
+.\" tbl(1) table support
+.
+.\" Start table.
+.de1 TS
+. \" If continuous rendering, tell tbl not to use keeps.
+. ie \\n[cR] .nr 3usekeeps 0
+. el .nr 3usekeeps 1
+. if \\n[an*is-output-html] \{\
+. nr an-TS-ll \\n[.l]
+. ll 1000n
+. \}
+. HTML-IMAGE
+..
+.
+.\" Start another table in the same region (ignored).
+.de1 T&
+..
+.
+.\" End table.
+.de1 TE
+. HTML-IMAGE-END
+. if \\n[an*is-output-html] .ll \\n[an-TS-ll]u
+. if !r TW .if !\\n[an-was-tbl-failure-reported] \{\
+. ds an-msg tbl preprocessor failed, or it or soelim was not run;\"
+. as an-msg " table(s) likely not rendered\"
+. as an-msg " (TE macro called with TW register undefined)\"
+. an-warn \\*[an-msg]
+. rm an-msg
+. nr an-was-tbl-failure-reported 1
+. \}
+..
+.
+.\" eqn(1) equation support
+.
+.\" Start equation.
+.de1 EQ
+. if \\n[an*is-output-html] \{\
+. nr an-EQ-ll \\n[.l]
+. ll 1000n
+. \}
+. HTML-IMAGE
+..
+.
+.\" End equation.
+.de1 EN
+. HTML-IMAGE-END
+. if \\n[an*is-output-html] .ll \\n[an-EQ-ll]u
+..
+.
+.
+.\" === Define strings. ===
+.\"
+.\" These strings must work in compatibility mode also.
+.
+.ds S \s'\\n(PSu'\"
+.ie c\[rg] .ds R \(rg\"
+.el .ds R (Reg.)\"
+.ie c\[tm] .ds Tm \(tm\"
+.el .ds Tm (TM)\"
+.ie c\[lq] .ds lq \(lq\"
+.el .ds lq ""\"
+.ie c\[rq] .ds rq \(rq\"
+.el .ds rq ""\"
+.
+.\" === Define/remap characters. ===
+.
+.\" For UTF-8, map the minus sign to the hyphen-minus to facilitate
+.\" copy and paste of code examples, file names, and URLs embedding it.
+.if '\*[.T]'utf8' \
+. char \- \N'45'
+.
+.\" === Initialize. ===
+.
+.mso devtag.tmac
+.nr an-devtag-needs-end-of-heading 0
+.nr an-devtag-needs-second-column 0
+.
+.\" Track whether the strings that set header and footer text need to be
+.\" reconfigured. This happens when batch-rendering and starting a new
+.\" page.
+.nr an*need-titles-reset 0
+.
+.nr an*is-output-html 0
+.if '\*[.T]'html' .nr an*is-output-html 1
+.nr an*is-output-pdf 0
+.if '\*[.T]'pdf' .nr an*is-output-pdf 1
+.nr an*is-output-terminal 0
+.if '\*(.T'ascii' .nr an*is-output-terminal 1
+.if '\*(.T'cp1047' .nr an*is-output-terminal 1
+.if '\*(.T'latin1' .nr an*is-output-terminal 1
+.if '\*(.T'utf8' .nr an*is-output-terminal 1
+.
+.nr an*can-hyperlink 0
+.if ( \n[an*is-output-html] \
+ : \n[an*is-output-pdf] \
+ : \n[an*is-output-terminal]) \
+. nr an*can-hyperlink 1
+.
+.ds an*body-family T \" Times
+.ds an*example-family C \" Courier
+.
+.\" Map monospaced fonts to standard styles for groff's nroff devices.
+.if n \{\
+. ftr CR R
+. ftr CI I
+. ftr CB B
+. ftr CBI BI
+.\}
+.
+.\" undocumented register; unset to test an-ext.tmac extension macros
+.if !r mG \
+. nr mG 1
+.
+.\" Load man macro extensions.
+.mso an-ext.tmac
+.
+.\" Load site modifications.
+.msoquiet man.local
+.
+.\" Set each rendering parameter only if its -[dr] option or man.local
+.\" did not.
+.
+.if \n[an*is-output-pdf] \{\
+. \" FIXME: The following registers are documented only in pdf.tmac.
+. if !r PDFOUTLINE.FOLDLEVEL .nr PDFOUTLINE.FOLDLEVEL 1
+. if !r PDFHREF.VIEW.LEADING .nr PDFHREF.VIEW.LEADING 10p
+.\}
+.
+.\" continuous rendering (one long page)
+.if !r cR \{\
+. ie n .nr cR 1
+. el .nr cR 0
+.\}
+.
+.\" consecutive page numbering across multiple documents
+.\"
+.\" We must use consecutive page numbers when using PostScript to
+.\" generate HTML images; we must not reset the page number at the
+.\" beginning of each document (the 'ps4html' register is automatically
+.\" added to the command line by the pre-HTML preprocessor).
+.ie !r C \
+. nr C 0
+.el \
+. if !\n[C] \
+. if \n[an*is-output-html] \{\
+. tm \*[an]: consecutive page numbering required for HTML output
+. nr C 1
+. \}
+.if \n[an*is-output-html] \
+. nr C 1
+.if r ps4html \
+. nr C 1
+.
+.\" diagnostics desired for man page style problems
+.if !r CHECKSTYLE \
+. nr CHECKSTYLE 0
+.
+.\" full capitalization of section headings
+.if !r CS \
+. nr CS 0
+.
+.\" full capitalization of page topic
+.if !r CT \
+. nr CT 0
+.
+.\" double-sided layout
+.ie !r D \
+. nr D 0
+.el \
+. if \n[D] \
+. if \n[an*is-output-html] \{\
+. tm \*[an]: ignoring double-sided layout in HTML output
+. nr D 0
+. \}
+.
+.\" footer distance
+.\"
+.\" Unlike most of these parameters, we do not set a default for FT; the
+.\" TH macro places page location traps only if not continuously
+.\" rendering.
+.if r FT \{\
+. \" Validate it. Continuous rendering ignores FT. Measuring a footer
+. \" distance from the page top isn't done. A footer distance of over
+. \" half the page length is unlikely. A footer distance of less than
+. \" one line height is too.
+. ie \n[cR] \
+. ds an-msg footer distance when continuously rendering\"
+. el \{\
+. nr an*tmp 1v
+. ds an*help " (1v=\n[an*tmp]u)\"
+. ie (\n[FT] : (\n[FT] = 0)) \
+. ds an-msg non-negative footer distance: \n[FT]u\*[an*help]\"
+. el \{\
+. ie (-(\n[FT]) > (\n[.p] / 2)) \{\
+. ds an-msg implausibly large footer distance:\"
+. as an-msg " \n[FT]u\*[an*help]\"
+. \}
+. el \
+. if (-(\n[FT]) < 1v) \{\
+. ds an-msg implausibly small footer distance:\"
+. as an-msg " \n[FT]u\*[an*help]\"
+. \}
+. rm an*help
+. rr an*tmp
+. \}
+. \}
+. if d an-msg \{\
+. tm \*[an]: ignoring \*[an-msg]
+. rr FT
+. rm an-msg
+. \}
+.\}
+.
+.\" hyphenation enablement
+.if !r HY \
+. nr HY 1
+.
+.\" standard indentation
+.if !r IN \{\
+. \" We select an integer indentation value in nroff mode because this
+. \" value is used additively for multiple purposes; rounding of
+. \" accumulating fractions would produce inconsistent results.
+. ie t .nr IN 7.2n
+. el .nr IN 7n
+.\}
+.
+.\" line length
+.if !r LL \{\
+. \" If in troff mode, respect device default.
+. ie t .nr LL \n[.l]
+. \" Otherwise, override nroff mode default of 65n.
+. el .nr LL 78n
+.\}
+.
+.\" title (header, footer) length
+.if !r LT \
+. nr LT \n[LL]u
+.
+.\" starting page number
+.\"
+.\" Unlike most of these parameters, we do not set a default for P;
+.\" troff supplies a default starting page number (1). When rendering
+.\" for the HTML output device, page numbers are concealed and used for
+.\" internal purposes like image embedding. Page numbers are not
+.\" rendered at all in continuous rendering mode.
+.if r P \{\
+. if \n[an*is-output-html] \
+. if !(\n[P] = 1) \
+. ds an-msg in HTML output\"
+. if \n[cR] \
+. ds an-msg when continuously rendering
+.\}
+.if d an-msg \{\
+. tm \*[an]: ignoring starting page number \*[an-msg]
+. rr P
+. rm an-msg
+.\}
+.
+.\" Setting the page number turns out to be tricky when batch rendering
+.\" and switching macro packages. We must use different techniques
+.\" depending on whether the transition to the first output page has
+.\" happened yet. If it has not, `nl` will be `-1` and we use `pn`. If
+.\" it has, we set `%`. Technically this is fragile since in theory a
+.\" page could assign a negative value to `nl`. We might then be
+.\" justified in saying they've broken the macro package and they get to
+.\" keep both pieces. But if not, consider using a nonce register,
+.\" initially set but then permanently cleared adjacent to this logic,
+.\" and whose state is shared with mdoc (and andoc.tmac, if necessary).
+.\"
+.\" Also, we can't use the `P` register with grohtml at all.
+.ie r ps4html \{\
+. if r P \{\
+. tm \*[an]: ignoring starting page number in HTML output
+. rr P
+. \}
+.\}
+.el \{\
+. if r P \{\
+. ie (\n[nl] = -1) .pn 0\n[P]
+. el .nr % 0\n[P]
+. \}
+.\}
+.
+.\" type size
+.if !r S \{\
+. nr S 10
+. if '\*[.T]'X75-12' \
+. nr S 12
+. if '\*[.T]'X100-12' \
+. nr S 12
+.\}
+.
+.\" subsection indentation
+.if !r SN \
+. nr SN 3n
+.
+.\" URI enablement desired
+.if !r U \
+. nr U 1
+.
+.nr an*do-hyperlink 0
+.if (\n[U] & \n[an*can-hyperlink]) .nr an*do-hyperlink 1
+.
+.\" page number after which to apply letter suffixes
+.\"
+.\" Unlike most of these parameters, we do not set a default for X; only
+.\" the macro an-footer uses it. Page numbers are not rendered at all
+.\" in continuous rendering mode.
+.if r X \{\
+. af an-page-letter a
+. if \n[an*is-output-html] \
+. ds an-msg in HTML output\"
+. if \n[cR] \
+. ds an-msg when continuously rendering
+.\}
+.if d an-msg \{\
+. tm \*[an]: ignoring page number suffix \*[an-msg]
+. rr X
+. rm an-msg
+.\}
+.
+.\" adjustment mode
+.if !d AD \
+. ds AD b\"
+.
+.\" (sub)section heading font
+.if !d HF \
+. ds HF B\"
+.
+.\" If HF is a bold style, use bold italics for italics in headings.
+.ds an-heading-style \*[HF]\"
+.substring an-heading-style -1 -1
+.ds an-heading-family \" empty
+.length an-HF-length \*[HF]
+.if (\n[an-HF-length] > 1) \{\
+. as an-heading-family \*[HF]\"
+. substring an-heading-family 0 -2
+.\}
+.if '\*[an-heading-style]'B' \
+. if F \*[an-heading-family]BI \
+. nr an-remap-I-style-in-headings 1
+.rr an-HF-length
+.rm an-heading-style
+.
+.\" man page topic font
+.if !d MF \
+. ds MF I\"
+.
+.\" Define italic correction strings. Initially, they are empty. If MF
+.\" is an oblique style, append the corrections.
+.ds an-lic \" left italic correction
+.ds an-ic \" italic correction
+.ds an*topic-style \*[MF]\"
+.substring an*topic-style -1 -1
+.if '\*[an*topic-style]'I' \{\
+. as an-lic \,\"
+. as an-ic \/\"
+.\}
+.rm an*topic-style
+.
+.if \n[cR] \
+. an-set-up-continuous-rendering
+.
+.\" If rendering HTML, suppress headers and footers.
+.nr an-suppress-header-and-footer 0
+.if \n[an*is-output-html] .nr an-suppress-header-and-footer 1
+.if r ps4html .nr an-suppress-header-and-footer 1
+.
+.cp \n[*groff_an_tmac_C]
+.do rr *groff_an_tmac_C
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72: