version 1.159, 2014/12/18 20:58:32 |
version 1.160, 2014/12/20 02:26:57 |
|
|
rew_sub(enum mdoc_type t, struct mdoc *mdoc, |
rew_sub(enum mdoc_type t, struct mdoc *mdoc, |
enum mdoct tok, int line, int ppos) |
enum mdoct tok, int line, int ppos) |
{ |
{ |
struct mdoc_node *n; |
struct mdoc_node *n, *to; |
|
|
|
to = NULL; |
n = mdoc->last; |
n = mdoc->last; |
while (n) { |
while (n) { |
switch (rew_dohalt(tok, t, n)) { |
switch (rew_dohalt(tok, t, n)) { |
case REWIND_NONE: |
case REWIND_NONE: |
return; |
if (to == NULL) |
|
return; |
|
n = to; |
|
break; |
case REWIND_THIS: |
case REWIND_THIS: |
n->lastline = line - |
n->lastline = line - |
(mdoc->flags & MDOC_NEWLINE && |
(mdoc->flags & MDOC_NEWLINE && |
Line 571 rew_sub(enum mdoc_type t, struct mdoc *mdoc, |
|
Line 575 rew_sub(enum mdoc_type t, struct mdoc *mdoc, |
|
case REWIND_MORE: |
case REWIND_MORE: |
n->lastline = line - |
n->lastline = line - |
(mdoc->flags & MDOC_NEWLINE ? 1 : 0); |
(mdoc->flags & MDOC_NEWLINE ? 1 : 0); |
|
to = n; |
n = n->parent; |
n = n->parent; |
continue; |
continue; |
case REWIND_LATER: |
case REWIND_LATER: |
Line 713 blk_exp_close(MACRO_PROT_ARGS) |
|
Line 718 blk_exp_close(MACRO_PROT_ARGS) |
|
struct mdoc_node *later; /* A sub-block starting later. */ |
struct mdoc_node *later; /* A sub-block starting later. */ |
struct mdoc_node *n; /* For searching backwards. */ |
struct mdoc_node *n; /* For searching backwards. */ |
|
|
int j, lastarg, maxargs, flushed, nl; |
int flushed, have_it, j, lastarg, maxargs, nl; |
enum margserr ac; |
enum margserr ac; |
enum mdoct atok, ntok; |
enum mdoct atok, ntok; |
char *p; |
char *p; |
Line 737 blk_exp_close(MACRO_PROT_ARGS) |
|
Line 742 blk_exp_close(MACRO_PROT_ARGS) |
|
* both of our own and of pending sub-blocks. |
* both of our own and of pending sub-blocks. |
*/ |
*/ |
|
|
|
have_it = 0; |
atok = rew_alt(tok); |
atok = rew_alt(tok); |
body = endbody = later = NULL; |
body = endbody = later = NULL; |
for (n = mdoc->last; n; n = n->parent) { |
for (n = mdoc->last; n; n = n->parent) { |
Line 753 blk_exp_close(MACRO_PROT_ARGS) |
|
Line 759 blk_exp_close(MACRO_PROT_ARGS) |
|
|
|
if (n->type != MDOC_BLOCK || n->tok == MDOC_Nm) |
if (n->type != MDOC_BLOCK || n->tok == MDOC_Nm) |
continue; |
continue; |
|
|
|
if (n->tok == MDOC_It) { |
|
have_it = 1; |
|
continue; |
|
} |
|
|
if (atok == n->tok) { |
if (atok == n->tok) { |
assert(body); |
assert(body); |
|
|
Line 762 blk_exp_close(MACRO_PROT_ARGS) |
|
Line 774 blk_exp_close(MACRO_PROT_ARGS) |
|
* just proceed to closing out. |
* just proceed to closing out. |
*/ |
*/ |
|
|
if (later == NULL) |
if (later == NULL || |
|
(tok == MDOC_El && !have_it)) |
break; |
break; |
|
|
/* |
/* |
Line 801 blk_exp_close(MACRO_PROT_ARGS) |
|
Line 814 blk_exp_close(MACRO_PROT_ARGS) |
|
* implicit ones, the first open implicit block. |
* implicit ones, the first open implicit block. |
*/ |
*/ |
|
|
if (later && |
if (later == NULL || |
mdoc_macros[later->tok].flags & MDOC_EXPLICIT) |
! (mdoc_macros[later->tok].flags & MDOC_EXPLICIT)) |
continue; |
|
if (n->tok != MDOC_It) |
|
later = n; |
later = n; |
} |
} |
rew_sub(MDOC_BODY, mdoc, tok, line, ppos); |
rew_sub(MDOC_BODY, mdoc, tok, line, ppos); |