Next: Blank Line Traps, Previous: Diversion Traps, Up: Traps [Contents][Index]
Set an input line trap, calling macro name after processing the
next n productive input lines (recall Manipulating Filling and Adjustment). Any existing input line trap in the
environment is replaced. Without arguments, it
and itc
clear any input line trap that has not yet sprung.
Consider a macro ‘.ST s n’ which sets the next n input lines in the font style s.
.de ST \" Use style $1 for next $2 text lines.
. it \\$2 ES
. ft \\$1
..
.de ES \" end ST
. ft R
..
.ST I 1
oblique
face
.ST I 1
oblique\c
face
⇒ oblique face obliqueface (second “face” upright)
Unlike the ce
and rj
requests, it
counts lines
interrupted with the \c
escape sequence separately (see Line Continuation); itc
does not. To see the difference, let’s
change the previous example to use itc
instead.
… . itc \\$2 ES … ⇒ oblique face obliqueface (second “face” oblique)
You can think of the ce
and rj
requests as implicitly
creating an input line trap with itc
that schedules a break when
the trap is sprung.
.de BR . br . internal: disable centering-without-filling .. . .de ce . if \\n[.br] .br . itc \\$1 BR . internal: enable centering-without-filling ..
Let us consider in more detail the sorts of input lines that are or are not “productive”.
.de Trap TRAP SPRUNG .. .de Mac .if r a \l'5n' .. .it 2 Trap . foo .Mac bar baz .it 1 Trap .sp \" moves, but does not write or draw qux .itc 1 Trap \h'5n'\c \" moves, but does not write or draw jat
When ‘Trap’ gets called depends on whether the ‘a’ register is
defined; the control line with the if
request may or may not
produce written output. We also see that the spacing request sp
,
while certainly affecting the output, does not spring the input line
trap. Similarly, the horizontal motion escape sequence \h
also
affected the output, but was not “written”. Observe that we had to
follow it with \c
and use itc
to prevent the newline at
the end of the text line from causing a word break, which, like an
ordinary space character, counts as written output.
$ groff -Tascii input-trap-example.groff ⇒ foo bar TRAP SPRUNG baz ⇒ ⇒ qux TRAP SPRUNG jat TRAP SPRUNG $ groff -Tascii -ra1 input-trap-example.groff ⇒ foo _____ TRAP SPRUNG bar baz ⇒ ⇒ qux TRAP SPRUNG jat TRAP SPRUNG
Input line traps are associated with the environment (see Environments); switching to another environment suspends the current input line trap, and going back resumes it, restoring the count of qualifying lines enumerated in that environment.
Next: Blank Line Traps, Previous: Diversion Traps, Up: Traps [Contents][Index]