summaryrefslogtreecommitdiffstats
path: root/regress/roff/shift/bad.in
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2018-08-23 14:29:38 +0000
committerIngo Schwarze <schwarze@openbsd.org>2018-08-23 14:29:38 +0000
commita99c9a30e9f41eb3ce553ac0b2ac6ff963ebe49d (patch)
tree9de2c70188a81c04c2b08671dcf1d3eb421403da /regress/roff/shift/bad.in
parent50f5bf83cff66e2f7baa88e327d78c37143bed97 (diff)
downloadmandoc-a99c9a30e9f41eb3ce553ac0b2ac6ff963ebe49d.tar.gz
Implement the roff(7) .shift and .return requests,
for example used by groff_hdtbl(7) and groff_mom(7). Also correctly interpolate arguments during nested macro execution even after .shift and .return, implemented using a stack of argument arrays. Note that only read.c, but not roff.c can detect the end of a macro execution, and the existence of .shift implies that arguments cannot be interpolated up front, so unfortunately, this includes a partial revert of roff.c rev. 1.337, moving argument interpolation back into the function roff_res().
Diffstat (limited to 'regress/roff/shift/bad.in')
-rw-r--r--regress/roff/shift/bad.in30
1 files changed, 30 insertions, 0 deletions
diff --git a/regress/roff/shift/bad.in b/regress/roff/shift/bad.in
new file mode 100644
index 00000000..809832de
--- /dev/null
+++ b/regress/roff/shift/bad.in
@@ -0,0 +1,30 @@
+.\" $OpenBSD: bad.in,v 1.1 2018/08/23 14:16:12 schwarze Exp $
+.TH SHIFT_BAD 1 "August 23, 2018"
+.SH NAME
+.B shift-bad
+\(en wrong usage of macro arguments
+.SH DESCRIPTION
+initial text
+.de mym
+in macro: "\\$1"
+.PP
+invalid argument number 'x': "\\$x"
+..
+.PP
+argument used before call: "\$1"
+.shift
+.PP
+.mym argument
+.PP
+argument used after call: "\$1"
+.shift 2
+.PP
+.de mym
+.shift badarg
+after shift badarg: "\\$1"
+.shift 2
+after excessive shift: \\n(.$ "\\$1"
+..
+.mym arg1 arg2
+.PP
+final text