summaryrefslogtreecommitdiffstats
path: root/contrib/sboxes/sboxes.tmac
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/sboxes/sboxes.tmac')
-rw-r--r--contrib/sboxes/sboxes.tmac147
1 files changed, 147 insertions, 0 deletions
diff --git a/contrib/sboxes/sboxes.tmac b/contrib/sboxes/sboxes.tmac
new file mode 100644
index 0000000..63c9263
--- /dev/null
+++ b/contrib/sboxes/sboxes.tmac
@@ -0,0 +1,147 @@
+.ig
+
+sboxes.tmac
+
+Copyright (C) 2021 Free Software Foundation, Inc.
+ Written by Deri James (deri@chuzzlewit.myzen.co.uk)
+
+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/>.
+..
+.if !\n(.g \{\
+. tm sboxes.tmac: macros require groff extensions; not loading
+. nx
+.\}
+.
+.if \n(.C \{\
+. tm sboxes.tmac: macros do not work in compatibility mode; not loading
+. nx
+.\}
+.
+.\" Define a string for use in diagnostic messages.
+.ds bx*name sboxes.tmac\"
+.
+.if !r GS \
+. ab \*[bx*name]: ms macros must be loaded first; aborting
+.
+.if (\n[.x]\n[.y] < 123) \{\
+. ds bx*msg \*[bx*name]: groff 1.23 or later is required,\"
+. as bx*msg " but found groff \n[.x].\n[.y]; not loading\"
+. tm \*[bx*msg]
+. nx
+.\}
+.
+.\" See if already loaded.
+.if r GSBOX .nx
+.
+.\" GSBOX is defined if the package is loaded, and true if it will work.
+.nr GSBOX 0
+.if '\*[.T]'pdf' \
+. nr GSBOX 1
+.
+.nr bx*stack 0
+.
+.de bx*error
+. tm \*[bx*name]:\\n[.F]:\\n[.c]: error: \\$*
+..
+.
+.\" Define dummy macro if we're not formatting for the pdf device.
+.if !\n[GSBOX] \{\
+. de pdfbackground
+. .
+.\}
+.
+.\" Link into ms macros to trap footnote growth
+.am fn@print-sep
+. nr bx*pb \\n[nl]u-2p
+. nop \!x X pdf: background footnote \\n[bx*pb]z
+. rr bx*pb
+..
+.\" Has PD been actioned?
+.am par*start
+. nr bx*PD \\n[PD]
+..
+.
+.de BOXSTART
+. fl
+. nr bx*stack \\n[bx*stack]+1u
+. nr bx*shad 0
+. nr bx*outl 0
+. nr bx*ind 1P
+. ds bx*wt 0
+. ds bx*type "\"
+. while \\n[.$] \{\
+. ie 'SHADED'\\$1' \{\
+. nop \\M[\\$2]\c
+. nr bx*shad 1
+. as bx*type "fill\"
+. shift 2
+. \}
+. el \{\
+. ie 'OUTLINED'\\$1' \{\
+. nop \\m[\\$2]\c
+. nr bx*outl 1
+. as bx*type "box\"
+. shift 2
+. \}
+. el \{\
+. ie 'WEIGHT'\\$1' \{\
+. ds bx*wt \\$2
+. shift 2
+. \}
+. el \{\
+. ie 'INDENT'\\$1' \{\
+. nr bx*ind \\$2
+. shift 2
+. \}
+. el \{\
+. bx*error ignoring unrecognized BOXSTART parameter '\\$1'
+. shift
+. \}
+. \}
+. \}
+. \}
+. \}
+.
+. if '\\*[bx*type]'' .ds bx*type "fill"
+. nr bx*l \\n[\\n[.ev]:li]s+\\n[.o]s-\\n[bx*ind]u
+. nr bx*r \\n[bx*l]u+\\n[.l]-\\n[\\n[.ev]:li]+(\\n[bx*ind]u*2u)
+. nr bx*gap \\n[.v]-\\n[.ps]+\\*[bx*wt]
+. nr bx*bot \\n[.p]u-\\n[FM]u+\\n[bx*ind]u+\\n[.ps]u
+. nr bx*top \\n[HM]-\\n[bx*ind]u+\\n[bx*gap]u
+. ne \\n[bx*ind]u+2v+\\*[bx*wt]
+. sp -(2v-(\\n[bx*PD]u*2u))u
+. pdfbackground \\*[bx*type] \\n[bx*l]z \\n[bx*top]z \
+ \\n[bx*r]z \\n[bx*bot]z \
+ \\*[bx*wt]
+. sp (\\n[bx*ind]u-1v)u
+. if (\\n[bx*shad]=1) .nop \\M[]\c
+. if (\\n[bx*outl]=1) .nop \\m[]\c
+. ds bx*ind\\n[bx*stack] \\n[bx*ind]
+. rr bx*shad bx*outl bx*ind bx*bot bx*top bx*l bx*r
+. rm wt type
+. sp -(\\n[bx*gap]u)
+. nr bx*PD 0
+..
+.de BOXSTOP
+. sp \\*[bx*ind\\n[bx*stack]]u-\\n[.psr]u
+. pdfbackground off
+. nr bx*stack \\n[bx*stack]-1u
+..
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set expandtab filetype=groff textwidth=72: