summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2024-04-16 00:26:08 +0200
committerAlejandro Colomar <alx@kernel.org>2024-04-16 00:26:08 +0200
commita5c977a5bd3b7b705f4b91f3b375cc68d7122331 (patch)
treec6dfda36e352610420a5a5c4f57d5c106d13408d
parent5125d867df40ff2461782b8431b1a8a1292f11d8 (diff)
share/mk/: build-pdf-book: Use the system's man(7) macros
Signed-off-by: Alejandro Colomar <alx@kernel.org>
-rw-r--r--share/mk/build/pdf/book/_.mk4
-rw-r--r--share/mk/build/pdf/book/an.tmac1611
2 files changed, 2 insertions, 1613 deletions
diff --git a/share/mk/build/pdf/book/_.mk b/share/mk/build/pdf/book/_.mk
index 3395e67e9..166cd28a6 100644
--- a/share/mk/build/pdf/book/_.mk
+++ b/share/mk/build/pdf/book/_.mk
@@ -33,12 +33,12 @@ _PDF_BOOK := $(_PDFDIR)/$(PDF_BOOK)
$(_PDF_BOOK): $(_MANPAGES) $(_TINOS) $(MKBOOK) $(MK) | $$(@D)/
$(info $(INFO_)GROPDF $@)
$(MKBOOKDIR)/prepare.pl $(_MANDIR) \
- | $(CAT) $(MKBOOKDIR)/front.roff $(MKBOOKDIR)/an.tmac /dev/stdin \
+ | $(CAT) $(MKBOOKDIR)/front.roff /dev/stdin \
| $(PRECONV) \
| $(PIC) \
| $(TBL) \
| $(EQN) -Tpdf \
- | $(TROFF) -Tpdf -F$(_FONTSDIR) -dpaper=a4 $(TROFFFLAGS) \
+ | $(TROFF) -man -Tpdf -F$(_FONTSDIR) -dpaper=a4 $(TROFFFLAGS) \
| $(GROPDF) -F$(_FONTSDIR) -pa4 $(GROPDFFLAGS) \
| $(SPONGE) $@
diff --git a/share/mk/build/pdf/book/an.tmac b/share/mk/build/pdf/book/an.tmac
deleted file mode 100644
index 26fbef6c1..000000000
--- a/share/mk/build/pdf/book/an.tmac
+++ /dev/null
@@ -1,1611 +0,0 @@
-.\" 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\"
-..
-.
-.de an*cln
-. ds \\$1
-. als an*cln:res \\$1
-. shift
-. ds an*cln:res \\$*\"
-. ds an*cln:char \\*[an*cln:res]
-. stringdown an*cln:res
-. substring an*cln:char 0 0
-. if '\\*[an*cln:char]'\%' .substring an*cln:res 1
-. rm an*cln:char
-..
-.
-.\" Write a bookmark/anchor/link target $2 at hierarchical depth $1.
-.de an*bookmark
-. if \\n[an*is-output-pdf] \{\
-. if (\\n[.$]>2) .an*cln an*page-ref-nm \\$3\"
-. ie (\\$1=1) .pdfbookmark -T "\\*[an*page-ref-nm]" \\$1 \\$2
-. el .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'2type' .ds an-extra3 \\*[an*section2type]\"
-. el \{.ie '\\$2'3' .ds an-extra3 \\*[an*section3]\"
-. el \{.ie '\\$2'3const' .ds an-extra3 \\*[an*section3const]\"
-. el \{.ie '\\$2'3head' .ds an-extra3 \\*[an*section3head]\"
-. el \{.ie '\\$2'3type' .ds an-extra3 \\*[an*section3type]\"
-. 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 2 \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])\"
-. an*cln an*page-ref-bm-nm \\*[an*topic]_\\*[an*section]\"
-. stringdown an*page-ref-bm-nm
-. 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 3 "\\*[an-section-heading]"
-\&\\*[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 4 "\\*[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[.$] > 4)) \
-. an-style-warn .\\$0 expects 2 to 4 arguments, got \\n[.$]
-. ie \\n[an*is-output-pdf] \{\
-. nh
-. ds an*title \\\\$4
-. if '\\\\*[an*title]'' .ds an*title \\\\$1
-. ie \\n(.$=1 \
-. I \\$1
-. el \{\
-. an*cln an*page-ref-nm \\*[an*title]_\\$2
-. ie d pdf:look(\\*[an*page-ref-nm]) .pdfhref L -D \\*[an*page-ref-nm] -A "\\$3" -- \fI\\$1\fP(\\$2)
-. el .IR \\$1 (\\$2)\\$3
-. \}
-. hy \\n(mJ
-. \}
-. el \{\
-. 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 \n[.fam] \" 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: