diff options
author | wlemb <wlemb> | 2002-02-23 01:13:57 +0000 |
---|---|---|
committer | wlemb <wlemb> | 2002-02-23 01:13:57 +0000 |
commit | c8c33d03d92ef5df544ef9e3d3bb775a9b391569 (patch) | |
tree | 4c124ba0f9837b3110c6688f2b44d4bc3d46d58b /src | |
parent | 70519aa089c174b85ccbc9ca2b8efae011933798 (diff) | |
download | groff-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.cc | 43 |
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; } |