version 1.192, 2015/04/19 14:25:41 |
version 1.201, 2015/09/26 00:54:04 |
Line 210 const struct mdoc_macro * const mdoc_macros = __mdoc_m |
|
Line 210 const struct mdoc_macro * const mdoc_macros = __mdoc_m |
|
* are errors. |
* are errors. |
*/ |
*/ |
void |
void |
mdoc_macroend(struct roff_man *mdoc) |
mdoc_endparse(struct roff_man *mdoc) |
{ |
{ |
struct roff_node *n; |
struct roff_node *n; |
|
|
Line 258 lookup(struct roff_man *mdoc, int from, int line, int |
|
Line 258 lookup(struct roff_man *mdoc, int from, int line, int |
|
static void |
static void |
rew_last(struct roff_man *mdoc, const struct roff_node *to) |
rew_last(struct roff_man *mdoc, const struct roff_node *to) |
{ |
{ |
struct roff_node *n, *np; |
struct roff_node *np; |
|
|
if (to->flags & MDOC_VALID) |
if (to->flags & MDOC_VALID) |
return; |
return; |
|
|
mdoc->next = ROFF_NEXT_SIBLING; |
|
while (mdoc->last != to) { |
while (mdoc->last != to) { |
/* |
/* |
* Save the parent here, because we may delete the |
* Save the parent here, because we may delete the |
Line 273 rew_last(struct roff_man *mdoc, const struct roff_node |
|
Line 272 rew_last(struct roff_man *mdoc, const struct roff_node |
|
*/ |
*/ |
np = mdoc->last->parent; |
np = mdoc->last->parent; |
mdoc_valid_post(mdoc); |
mdoc_valid_post(mdoc); |
n = mdoc->last; |
|
mdoc->last = np; |
mdoc->last = np; |
assert(mdoc->last); |
assert(mdoc->last); |
mdoc->last->last = n; |
|
} |
} |
|
mdoc->next = ROFF_NEXT_SIBLING; |
mdoc_valid_post(mdoc); |
mdoc_valid_post(mdoc); |
} |
} |
|
|
Line 291 rew_pending(struct roff_man *mdoc, const struct roff_n |
|
Line 289 rew_pending(struct roff_man *mdoc, const struct roff_n |
|
for (;;) { |
for (;;) { |
rew_last(mdoc, n); |
rew_last(mdoc, n); |
|
|
switch (n->type) { |
if (mdoc->last == n) { |
case ROFFT_HEAD: |
switch (n->type) { |
roff_body_alloc(mdoc, n->line, n->pos, n->tok); |
case ROFFT_HEAD: |
return; |
roff_body_alloc(mdoc, n->line, n->pos, |
case ROFFT_BLOCK: |
n->tok); |
break; |
return; |
default: |
case ROFFT_BLOCK: |
return; |
break; |
} |
default: |
|
return; |
|
} |
|
if ( ! (n->flags & MDOC_BROKEN)) |
|
return; |
|
} else |
|
n = mdoc->last; |
|
|
if ( ! (n->flags & MDOC_BROKEN)) |
|
return; |
|
|
|
for (;;) { |
for (;;) { |
if ((n = n->parent) == NULL) |
if ((n = n->parent) == NULL) |
return; |
return; |
Line 362 rew_alt(int tok) |
|
Line 363 rew_alt(int tok) |
|
default: |
default: |
return(tok); |
return(tok); |
} |
} |
/* NOTREACHED */ |
|
} |
} |
|
|
static void |
static void |
Line 641 blk_exp_close(MACRO_PROT_ARGS) |
|
Line 641 blk_exp_close(MACRO_PROT_ARGS) |
|
if (body == NULL) { |
if (body == NULL) { |
mandoc_msg(MANDOCERR_BLK_NOTOPEN, mdoc->parse, |
mandoc_msg(MANDOCERR_BLK_NOTOPEN, mdoc->parse, |
line, ppos, mdoc_macronames[tok]); |
line, ppos, mdoc_macronames[tok]); |
|
if (later != NULL) |
|
later->flags &= ~MDOC_BROKEN; |
if (maxargs && endbody == NULL) { |
if (maxargs && endbody == NULL) { |
/* |
/* |
* Stray .Ec without previous .Eo: |
* Stray .Ec without previous .Eo: |
* Break the output line, keep the arguments. |
* Break the output line, keep the arguments. |
*/ |
*/ |
mdoc_elem_alloc(mdoc, line, ppos, MDOC_br, NULL); |
roff_elem_alloc(mdoc, line, ppos, MDOC_br); |
rew_elem(mdoc, MDOC_br); |
rew_elem(mdoc, MDOC_br); |
} |
} |
} else if (endbody == NULL) { |
} else if (endbody == NULL) { |
Line 668 blk_exp_close(MACRO_PROT_ARGS) |
|
Line 670 blk_exp_close(MACRO_PROT_ARGS) |
|
|
|
if (endbody != NULL) |
if (endbody != NULL) |
n = endbody; |
n = endbody; |
|
|
|
ntok = TOKEN_NONE; |
for (j = 0; ; j++) { |
for (j = 0; ; j++) { |
lastarg = *pos; |
lastarg = *pos; |
|
|
Line 695 blk_exp_close(MACRO_PROT_ARGS) |
|
Line 699 blk_exp_close(MACRO_PROT_ARGS) |
|
} |
} |
|
|
if (n != NULL) { |
if (n != NULL) { |
if (n != mdoc->last && n->flags & MDOC_BROKEN) { |
if (ntok != TOKEN_NONE && n->flags & MDOC_BROKEN) { |
target = n; |
target = n; |
do |
do |
target = target->parent; |
target = target->parent; |
Line 990 blk_full(MACRO_PROT_ARGS) |
|
Line 994 blk_full(MACRO_PROT_ARGS) |
|
if (tok == MDOC_It && (n == NULL || n->tok != MDOC_Bl)) { |
if (tok == MDOC_It && (n == NULL || n->tok != MDOC_Bl)) { |
mandoc_vmsg(MANDOCERR_IT_STRAY, mdoc->parse, |
mandoc_vmsg(MANDOCERR_IT_STRAY, mdoc->parse, |
line, ppos, "It %s", buf + *pos); |
line, ppos, "It %s", buf + *pos); |
mdoc_elem_alloc(mdoc, line, ppos, MDOC_br, NULL); |
roff_elem_alloc(mdoc, line, ppos, MDOC_br); |
rew_elem(mdoc, MDOC_br); |
rew_elem(mdoc, MDOC_br); |
return; |
return; |
} |
} |
Line 1223 blk_part_exp(MACRO_PROT_ARGS) |
|
Line 1227 blk_part_exp(MACRO_PROT_ARGS) |
|
* case of `Eo'); and a body that may be empty. |
* case of `Eo'); and a body that may be empty. |
*/ |
*/ |
|
|
mdoc_block_alloc(mdoc, line, ppos, tok, NULL); |
roff_block_alloc(mdoc, line, ppos, tok); |
head = NULL; |
head = NULL; |
for (;;) { |
for (;;) { |
la = *pos; |
la = *pos; |
Line 1392 in_line_eoln(MACRO_PROT_ARGS) |
|
Line 1396 in_line_eoln(MACRO_PROT_ARGS) |
|
if (mdoc->next == ROFF_NEXT_SIBLING) |
if (mdoc->next == ROFF_NEXT_SIBLING) |
n = n->parent; |
n = n->parent; |
if (n->tok == MDOC_Nm) |
if (n->tok == MDOC_Nm) |
rew_last(mdoc, mdoc->last->parent); |
rew_last(mdoc, n->parent); |
} |
} |
|
|
if (buf[*pos] == '\0' && |
if (buf[*pos] == '\0' && |