diff options
Diffstat (limited to 'tmac/an.tmac')
-rw-r--r-- | tmac/an.tmac | 1574 |
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: |