summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorwlemb <wlemb>2002-02-23 01:13:57 +0000
committerwlemb <wlemb>2002-02-23 01:13:57 +0000
commitc8c33d03d92ef5df544ef9e3d3bb775a9b391569 (patch)
tree4c124ba0f9837b3110c6688f2b44d4bc3d46d58b /src
parent70519aa089c174b85ccbc9ca2b8efae011933798 (diff)
downloadgroff-c8c33d03d92ef5df544ef9e3d3bb775a9b391569.tar.gz
* src/roff/troff/input.cc (do_overstrike, do_bracket,
get_line_arg): Honour input level.
Diffstat (limited to 'src')
-rw-r--r--src/roff/troff/input.cc43
1 files changed, 25 insertions, 18 deletions
diff --git a/src/roff/troff/input.cc b/src/roff/troff/input.cc
index f573e4c6..ba60eb38 100644
--- a/src/roff/troff/input.cc
+++ b/src/roff/troff/input.cc
@@ -1231,20 +1231,23 @@ static node *do_overstrike()
{
token start;
overstrike_node *on = new overstrike_node;
+ int start_level = input_stack::get_level();
start.next();
- tok.next();
- while (tok != start) {
+ for (;;) {
+ tok.next();
if (tok.newline() || tok.eof()) {
warning(WARN_DELIM, "missing closing delimiter");
break;
}
+ if (tok == start
+ && (compatible_flag || input_stack::get_level() == start_level))
+ break;
charinfo *ci = tok.get_char(1);
if (ci) {
node *n = curenv->make_char_node(ci);
if (n)
on->overstrike(n);
}
- tok.next();
}
return on;
}
@@ -1254,8 +1257,9 @@ static node *do_bracket()
token start;
bracket_node *bn = new bracket_node;
start.next();
- tok.next();
- while (tok != start) {
+ int start_level = input_stack::get_level();
+ for (;;) {
+ tok.next();
if (tok.eof()) {
warning(WARN_DELIM, "missing closing delimiter");
break;
@@ -1265,13 +1269,15 @@ static node *do_bracket()
input_stack::push(make_temp_iterator("\n"));
break;
}
+ if (tok == start
+ && (compatible_flag || input_stack::get_level() == start_level))
+ break;
charinfo *ci = tok.get_char(1);
if (ci) {
node *n = curenv->make_char_node(ci);
if (n)
bn->bracket(n);
}
- tok.next();
}
return bn;
}
@@ -4195,19 +4201,20 @@ static int get_line_arg(units *n, int si, charinfo **cp)
{
token start;
start.next();
- if (start.delimiter(1)) {
- tok.next();
- if (get_number(n, si)) {
- if (tok.dummy() || tok.transparent_dummy())
- tok.next();
- if (start != tok) {
- *cp = tok.get_char(1);
- tok.next();
- }
- if (start != tok)
- warning(WARN_DELIM, "closing delimiter does not match");
- return 1;
+ int start_level = input_stack::get_level();
+ if (!start.delimiter(1))
+ return 0;
+ tok.next();
+ if (get_number(n, si)) {
+ if (tok.dummy() || tok.transparent_dummy())
+ tok.next();
+ if (!(start == tok && input_stack::get_level() == start_level)) {
+ *cp = tok.get_char(1);
+ tok.next();
}
+ if (!(start == tok && input_stack::get_level() == start_level))
+ warning(WARN_DELIM, "closing delimiter does not match");
+ return 1;
}
return 0;
}