From a99c9a30e9f41eb3ce553ac0b2ac6ff963ebe49d Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Thu, 23 Aug 2018 14:29:38 +0000 Subject: 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(). --- regress/roff/de/infinite.in | 6 +++--- regress/roff/de/infinite.out_ascii | 4 ++-- regress/roff/de/infinite.out_lint | 3 ++- 3 files changed, 7 insertions(+), 6 deletions(-) (limited to 'regress/roff/de') diff --git a/regress/roff/de/infinite.in b/regress/roff/de/infinite.in index 62f66965..33f71642 100644 --- a/regress/roff/de/infinite.in +++ b/regress/roff/de/infinite.in @@ -1,4 +1,4 @@ -.\" $OpenBSD: infinite.in,v 1.3 2017/07/04 14:53:27 schwarze Exp $ +.\" $OpenBSD: infinite.in,v 1.4 2018/08/23 14:16:12 schwarze Exp $ .Dd $Mdocdate$ .Dt DE-INFINITE 1 .Os @@ -10,8 +10,8 @@ initial text .de mym .Op \\$1 \\$2 .. -.mym $1 \$1 -.mym \$1 nothing +.mym $1 \$1 end +.mym \$1 middle end middle text .de mym .mym diff --git a/regress/roff/de/infinite.out_ascii b/regress/roff/de/infinite.out_ascii index 452af775..074362da 100644 --- a/regress/roff/de/infinite.out_ascii +++ b/regress/roff/de/infinite.out_ascii @@ -4,6 +4,6 @@ NNAAMMEE ddee--iinnffiinniittee - inifinte recursion in a user-defined macro DDEESSCCRRIIPPTTIIOONN - initial text [$1 $1] middle text final text + initial text [$1 end] [middle end] middle text final text -OpenBSD July 4, 2017 OpenBSD +OpenBSD August 23, 2018 OpenBSD diff --git a/regress/roff/de/infinite.out_lint b/regress/roff/de/infinite.out_lint index e7beb090..06254be5 100644 --- a/regress/roff/de/infinite.out_lint +++ b/regress/roff/de/infinite.out_lint @@ -1,2 +1,3 @@ -mandoc: infinite.in:14:5: ERROR: input stack limit exceeded, infinite loop? +mandoc: infinite.in:13:9: ERROR: using macro argument outside macro: \$1 +mandoc: infinite.in:14:6: ERROR: using macro argument outside macro: \$1 mandoc: infinite.in:20:5: ERROR: input stack limit exceeded, infinite loop? -- cgit