version 1.183, 2018/12/04 02:53:45 |
version 1.184, 2018/12/14 05:17:45 |
|
|
for ( ; n; n = n->parent) |
for ( ; n; n = n->parent) |
if (n->type == ROFFT_BLOCK && |
if (n->type == ROFFT_BLOCK && |
mdoc_macro(n->tok)->flags & MDOC_EXPLICIT) |
mdoc_macro(n->tok)->flags & MDOC_EXPLICIT) |
mandoc_msg(MANDOCERR_BLK_NOEND, mdoc->parse, |
mandoc_msg(MANDOCERR_BLK_NOEND, |
n->line, n->pos, roff_name[n->tok]); |
n->line, n->pos, "%s", roff_name[n->tok]); |
|
|
/* Rewind to the first. */ |
/* Rewind to the first. */ |
|
|
|
|
if (res != TOKEN_NONE) { |
if (res != TOKEN_NONE) { |
if (mdoc_macro(res)->flags & MDOC_CALLABLE) |
if (mdoc_macro(res)->flags & MDOC_CALLABLE) |
return res; |
return res; |
mandoc_msg(MANDOCERR_MACRO_CALL, |
mandoc_msg(MANDOCERR_MACRO_CALL, line, ppos, "%s", p); |
mdoc->parse, line, ppos, p); |
|
} |
} |
} |
} |
return TOKEN_NONE; |
return TOKEN_NONE; |
|
|
if (target->type == ROFFT_HEAD) |
if (target->type == ROFFT_HEAD) |
target->flags |= NODE_ENDED; |
target->flags |= NODE_ENDED; |
else if ( ! (target->flags & NODE_ENDED)) { |
else if ( ! (target->flags & NODE_ENDED)) { |
mandoc_vmsg(MANDOCERR_BLK_NEST, |
mandoc_msg(MANDOCERR_BLK_NEST, |
mdoc->parse, line, ppos, |
line, ppos, "%s breaks %s", |
"%s breaks %s", roff_name[tok], |
roff_name[tok], roff_name[n->tok]); |
roff_name[n->tok]); |
|
mdoc_endbody_alloc(mdoc, line, ppos, |
mdoc_endbody_alloc(mdoc, line, ppos, |
tok, target); |
tok, target); |
} |
} |
|
|
* the scope - of the current block ends. |
* the scope - of the current block ends. |
*/ |
*/ |
|
|
mandoc_vmsg(MANDOCERR_BLK_NEST, mdoc->parse, |
mandoc_msg(MANDOCERR_BLK_NEST, |
line, ppos, "%s breaks %s", |
line, ppos, "%s breaks %s", |
roff_name[atok], roff_name[later->tok]); |
roff_name[atok], roff_name[later->tok]); |
|
|
|
|
} |
} |
|
|
if (body == NULL) { |
if (body == NULL) { |
mandoc_msg(MANDOCERR_BLK_NOTOPEN, mdoc->parse, |
mandoc_msg(MANDOCERR_BLK_NOTOPEN, line, ppos, |
line, ppos, roff_name[tok]); |
"%s", roff_name[tok]); |
if (maxargs && endbody == NULL) { |
if (maxargs && endbody == NULL) { |
/* |
/* |
* Stray .Ec without previous .Eo: |
* Stray .Ec without previous .Eo: |
|
|
|
|
if ((mdoc_macro(tok)->flags & MDOC_PARSED) == 0) { |
if ((mdoc_macro(tok)->flags & MDOC_PARSED) == 0) { |
if (buf[*pos] != '\0') |
if (buf[*pos] != '\0') |
mandoc_vmsg(MANDOCERR_ARG_SKIP, |
mandoc_msg(MANDOCERR_ARG_SKIP, line, ppos, |
mdoc->parse, line, ppos, |
"%s %s", roff_name[tok], buf + *pos); |
"%s %s", roff_name[tok], |
|
buf + *pos); |
|
if (endbody == NULL && n != NULL) |
if (endbody == NULL && n != NULL) |
rew_pending(mdoc, n); |
rew_pending(mdoc, n); |
return; |
return; |
|
|
} else if ( ! nc && ! cnt) { |
} else if ( ! nc && ! cnt) { |
mdoc_argv_free(arg); |
mdoc_argv_free(arg); |
mandoc_msg(MANDOCERR_MACRO_EMPTY, |
mandoc_msg(MANDOCERR_MACRO_EMPTY, |
mdoc->parse, line, ppos, |
line, ppos, "%s", roff_name[tok]); |
roff_name[tok]); |
|
} |
} |
(*mdoc_macro(ntok)->fp)(mdoc, ntok, |
(*mdoc_macro(ntok)->fp)(mdoc, ntok, |
line, la, pos, buf); |
line, la, pos, buf); |
|
|
rew_last(mdoc, mdoc->last); |
rew_last(mdoc, mdoc->last); |
} else { |
} else { |
mdoc_argv_free(arg); |
mdoc_argv_free(arg); |
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, |
mandoc_msg(MANDOCERR_MACRO_EMPTY, |
line, ppos, roff_name[tok]); |
line, ppos, "%s", roff_name[tok]); |
} |
} |
} |
} |
if (nl) |
if (nl) |
|
|
nl = MDOC_NEWLINE & mdoc->flags; |
nl = MDOC_NEWLINE & mdoc->flags; |
|
|
if (buf[*pos] == '\0' && (tok == MDOC_Sh || tok == MDOC_Ss)) { |
if (buf[*pos] == '\0' && (tok == MDOC_Sh || tok == MDOC_Ss)) { |
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, |
mandoc_msg(MANDOCERR_MACRO_EMPTY, |
line, ppos, roff_name[tok]); |
line, ppos, "%s", roff_name[tok]); |
return; |
return; |
} |
} |
|
|
|
|
|
|
if (tok == MDOC_It && n->tok == MDOC_Bl) { |
if (tok == MDOC_It && n->tok == MDOC_Bl) { |
if (blk != NULL) { |
if (blk != NULL) { |
mandoc_vmsg(MANDOCERR_BLK_BROKEN, |
mandoc_msg(MANDOCERR_BLK_BROKEN, |
mdoc->parse, line, ppos, |
line, ppos, "It breaks %s", |
"It breaks %s", |
|
roff_name[blk->tok]); |
roff_name[blk->tok]); |
rew_pending(mdoc, blk); |
rew_pending(mdoc, blk); |
} |
} |
|
|
switch (tok) { |
switch (tok) { |
case MDOC_Sh: |
case MDOC_Sh: |
case MDOC_Ss: |
case MDOC_Ss: |
mandoc_vmsg(MANDOCERR_BLK_BROKEN, |
mandoc_msg(MANDOCERR_BLK_BROKEN, |
mdoc->parse, line, ppos, |
line, ppos, |
"%s breaks %s", roff_name[tok], |
"%s breaks %s", roff_name[tok], |
roff_name[n->tok]); |
roff_name[n->tok]); |
rew_pending(mdoc, n); |
rew_pending(mdoc, n); |
|
|
/* Item breaking an explicit block. */ |
/* Item breaking an explicit block. */ |
|
|
if (blk != NULL) { |
if (blk != NULL) { |
mandoc_vmsg(MANDOCERR_BLK_BROKEN, |
mandoc_msg(MANDOCERR_BLK_BROKEN, line, ppos, |
mdoc->parse, line, ppos, |
|
"It breaks %s", roff_name[blk->tok]); |
"It breaks %s", roff_name[blk->tok]); |
rew_pending(mdoc, blk); |
rew_pending(mdoc, blk); |
blk = NULL; |
blk = NULL; |
|
|
/* Skip items outside lists. */ |
/* Skip items outside lists. */ |
|
|
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_msg(MANDOCERR_IT_STRAY, |
line, ppos, "It %s", buf + *pos); |
line, ppos, "It %s", buf + *pos); |
roff_elem_alloc(mdoc, line, ppos, ROFF_br); |
roff_elem_alloc(mdoc, line, ppos, ROFF_br); |
rew_elem(mdoc, ROFF_br); |
rew_elem(mdoc, ROFF_br); |
|
|
} |
} |
|
|
if (tok == MDOC_Bd || tok == MDOC_Bk) { |
if (tok == MDOC_Bd || tok == MDOC_Bk) { |
mandoc_vmsg(MANDOCERR_ARG_EXCESS, |
mandoc_msg(MANDOCERR_ARG_EXCESS, line, la, |
mdoc->parse, line, la, "%s ... %s", |
"%s ... %s", roff_name[tok], buf + la); |
roff_name[tok], buf + la); |
|
break; |
break; |
} |
} |
if (tok == MDOC_Rs) { |
if (tok == MDOC_Rs) { |
mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse, |
mandoc_msg(MANDOCERR_ARG_SKIP, |
line, la, "Rs %s", buf + la); |
line, la, "Rs %s", buf + la); |
break; |
break; |
} |
} |
|
|
|
|
if (ac == ARGS_PUNCT || ac == ARGS_EOLN) { |
if (ac == ARGS_PUNCT || ac == ARGS_EOLN) { |
if (abs(state) < 2 && tok == MDOC_Pf) |
if (abs(state) < 2 && tok == MDOC_Pf) |
mandoc_vmsg(MANDOCERR_PF_SKIP, |
mandoc_msg(MANDOCERR_PF_SKIP, |
mdoc->parse, line, ppos, "Pf %s", |
line, ppos, "Pf %s", |
p == NULL ? "at eol" : p); |
p == NULL ? "at eol" : p); |
break; |
break; |
} |
} |
|
|
} |
} |
|
|
if (state == -1) { |
if (state == -1) { |
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, |
mandoc_msg(MANDOCERR_MACRO_EMPTY, |
line, ppos, roff_name[tok]); |
line, ppos, "%s", roff_name[tok]); |
return; |
return; |
} |
} |
|
|
|
|
|
|
if (buf[*pos] == '\0' && |
if (buf[*pos] == '\0' && |
(tok == MDOC_Fd || *roff_name[tok] == '%')) { |
(tok == MDOC_Fd || *roff_name[tok] == '%')) { |
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, |
mandoc_msg(MANDOCERR_MACRO_EMPTY, |
line, ppos, roff_name[tok]); |
line, ppos, "%s", roff_name[tok]); |
return; |
return; |
} |
} |
|
|
|
|
} |
} |
|
|
if (n == NULL || n->norm->Bl.type != LIST_column) { |
if (n == NULL || n->norm->Bl.type != LIST_column) { |
mandoc_msg(MANDOCERR_TA_STRAY, mdoc->parse, |
mandoc_msg(MANDOCERR_TA_STRAY, line, ppos, "Ta"); |
line, ppos, "Ta"); |
|
return; |
return; |
} |
} |
|
|