nclose-open \$@
..
.de Brc
.if !\n[arg-limit] \
.ds macro-name Bc
.ds quote-right }
.enclose-close \$@
..
.de Do
.if !\n[arg-limit] \
.ds macro-name Do
.ds quote-left "\*[Lq]
.enclose-open \$@
..
.de Dc
.if !\n[arg-limit] \
.ds macro-name Dc
.ds quote-right "\*[Rq]
.enclose-close \$@
..
.de Eo
.if !\n[arg-limit] \
.ds macro-name Eo
.ds quote-left "\$1
.shift
.enclose-open \$@
..
.de Ec
.if !\n[arg-limit] \
.ds macro-name Ec
.ds quote-right "\$1
.shift
.enclose-close \$@
..
.de Oo
.if !\n[arg-limit] \
.ds macro-name Oo
.ds quote-left [
.enclose-open \$@
..
.de Oc
.if !\n[arg-limit] \
.ds macro-name Oc
.ds quote-right ]
.enclose-close \$@
..
.de Po
.if !\n[arg-limit] \
.ds macro-name Po
.ds quote-left "\*[left-parenthesis]
.enclose-open \$@
..
.de Pc
.if !\n[arg-limit] \
.ds macro-name Pc
.ds quote-right "\*[right-parenthesis]
.enclose-close \$@
..
.de Qo
.if !\n[arg-limit] \
.ds macro-name Qo
.ds quote-left "\*[q]
.enclose-open \$@
..
.de Qc
.if !\n[arg-limit] \
.ds macro-name Qc
.ds quote-right "\*[q]
.enclose-close \$@
..
.de So
.if !\n[arg-limit] \
.ds macro-name So
.ds quote-left "\*[left-singlequote]
.enclose-open \$@
..
.de Sc
.if !\n[arg-limit] \
.ds macro-name Sc
.ds quote-right "\*[right-singlequote]
.enclose-close \$@
..
.de Xo
.if !\n[arg-limit] \
.ds macro-name Xo
.ds quote-left
.enclose-open \$@
..
.de Xc
.if !\n[arg-limit] \
.ds macro-name Xc
.ds quote-right
.enclose-close \$@
..
.nr nesting-level 0
.nr in-list 0
.de enclose-open
.if !\n[arg-limit] \
.parse-args \$@
.nr arg-ptr +1
.print-prefixes
.nr arg-ptr -1
.nop \)\*[quote-left]\)\c
.box enclosure-box\n[nesting-level]
.ev enclosure-env\n[nesting-level]
.evc 0
.in 0
.nf
.nop \&\c
.nr nesting-level +1
.if \n[arg-limit] \{\
.nr arg-ptr +1
.ie (\n[arg-limit] >= \n[arg-ptr]) \
.print-recursive
.el \
.reset-args
.\}
..
.de enclose-close
.nr nesting-level -1
.br
.ev
.box
.chop enclosure-box\n[nesting-level]
.unformat enclosure-box\n[nesting-level]
.nh
.nop \*[enclosure-box\n[nesting-level]]\c
.nop \)\*[quote-right]\)\c
.if !\n[arg-limit] \{\
.parse-args \$@
.if !\n[.$] \
.print-and-reset
.\}
.if \n[arg-limit] \{\
.ie (\n[arg-limit] > \n[arg-ptr]) \{\
.nop \)\*[space\n[arg-ptr]]\c
.nr arg-ptr +1
.print-recursive
.\}
.el \
.print-and-reset
.\}
.if !"\*[macro-name]"It" \
.if \n[in-list] \
.if !\n[nesting-level] \
.\*[list-type-stack\n[list-depth]]
..
.de Pf
.if !\n[arg-limit] \
.ds macro-name Pf
.ie \n[arg-limit] \{\
.ie ((\n[arg-limit] - \n[arg-ptr]) > 1) \{\
.nr arg-ptr +1
.nop \)\*[arg\n[arg-ptr]]\c
.\}
.el \
.tm mdoc warning: .Pf: trailing prefix (#\n[.c])
.\}
.el \{\
.nop \)\$1\)\c
.shift
.ie \n[.$] \
.parse-args \$@
.el \{\
.tm mdoc warning: .Pf: missing arguments (#\n[.c])
.nop \)
.\}\}
.if \n[arg-limit] \{\
.nr arg-ptr +1
.ie (\n[arg-limit] < \n[arg-ptr]) \
.print-and-reset
.el \
.do-\n[type\n[arg-ptr]]
.\}
..
.de Ns
.if !\n[arg-limit] \{\
.ie \n[.$] \{\
.ds macro-name Ns
.parse-args \$@
.\}
.el \
.tm Usage: .Ns must be called with arguments (#\n[.c])
.\}
.if \n[arg-limit] \{\
.nr arg-ptr +1
.ie (\n[arg-limit] >= \n[arg-ptr]) \
.print-recursive
.el \
.reset-args
.\}
..
.de Ap
.ie !\n[arg-limit] \
.tm Usage: `Ap' cannot be first macro on a line (no `.Ap') (#\n[.c])
.el \{\
.nop \)'\)\c
.nr arg-ptr +1
.ie (\n[arg-limit] >= \n[arg-ptr]) \
.print-recursive
.el \
.reset-args
.\}
..
.ds space "\*[soft-space]
.de set-hard-space
.ie "\*[space]"" \
.ds saved-space "\*[hard-space]
.el \
.ds space "\*[hard-space]
..
.de set-soft-space
.ie "\*[space]"" \
.ds saved-space "\*[soft-space]
.el \
.ds space "\*[soft-space]
..
.nr space-mode 1
.ds saved-space "\*[space]
.nr have-space 0
.de Sm
.ie \n[have-space] \
.nr reg-Sm 0
.el \
.nr reg-Sm 1
.if !\n[arg-limit] \{\
.ie \n[.$] \{\
.ds macro-name Sm
.parse-args \$@
.\}
.el \{\
.ie \n[space-mode] \{\
.ds saved-space "\*[space]
.ds space
.nr space-mode 0
.\}
.el \{\
.ds space "\*[saved-space]
.nr space-mode 1
.if \n[reg-Sm] \
.if \n[.int] \
.nop \)
.\}
.\}\}
.if !\n[arg-limit] \
.return
.nr arg-ptr +1
.if !d arg\n[arg-ptr] \
.ds arg\n[arg-ptr]
.ie "\*[arg\n[arg-ptr]]"on" \{\
.ds space "\*[saved-space]
.nr space-mode 1
.\}
.el \{\
.ie "\*[arg\n[arg-ptr]]"off" \{\
.ds saved-space "\*[space]
.ds space
.nr space-mode 0
.\}
.el \{\
.nr arg-ptr -1
.ie \n[space-mode] \{\
.ds saved-space "\*[space]
.ds space
.nr space-mode 0
.\}
.el \{\
.ds space "\*[saved-space]
.nr space-mode 1
.\}
.\}\}
.ie \n[space-mode] \{\
.nr num-args (\n[arg-limit] - \n[arg-ptr])
.nr arg-limit \n[arg-ptr]
.if \n[num-args] \
.parse-space-vector
.if \n[reg-Sm] \
.if \n[.int] \
.nop \)
.\}
.el \{\
.nr reg-Sm (\n[arg-ptr] + 1)
.while (\n[reg-Sm] <= \n[arg-limit]) \{\
.ds space\n[reg-Sm]
.nr reg-Sm +1
.\}
.\}
.ie (\n[arg-limit] > \n[arg-ptr]) \{\
.nr arg-ptr +1
.print-recursive
.\}
.el \
.reset-args
..
.nr arg-type 0
.de get-arg-type
.nr arg-type 2
.if ((\n[width] < 4) & \A