version 1.194, 2015/04/21 16:14:25 |
version 1.204, 2015/10/15 22:27:24 |
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 243 lookup(struct roff_man *mdoc, int from, int line, int |
|
Line 243 lookup(struct roff_man *mdoc, int from, int line, int |
|
res = mdoc_hash_find(p); |
res = mdoc_hash_find(p); |
if (res != TOKEN_NONE) { |
if (res != TOKEN_NONE) { |
if (mdoc_macros[res].flags & MDOC_CALLABLE) |
if (mdoc_macros[res].flags & MDOC_CALLABLE) |
return(res); |
return res; |
if (res != MDOC_br && res != MDOC_sp && res != MDOC_ll) |
if (res != MDOC_br && res != MDOC_sp && res != MDOC_ll) |
mandoc_msg(MANDOCERR_MACRO_CALL, |
mandoc_msg(MANDOCERR_MACRO_CALL, |
mdoc->parse, line, ppos, p); |
mdoc->parse, line, ppos, p); |
} |
} |
} |
} |
return(TOKEN_NONE); |
return TOKEN_NONE; |
} |
} |
|
|
/* |
/* |
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 331 rew_alt(int tok) |
|
Line 329 rew_alt(int tok) |
|
{ |
{ |
switch (tok) { |
switch (tok) { |
case MDOC_Ac: |
case MDOC_Ac: |
return(MDOC_Ao); |
return MDOC_Ao; |
case MDOC_Bc: |
case MDOC_Bc: |
return(MDOC_Bo); |
return MDOC_Bo; |
case MDOC_Brc: |
case MDOC_Brc: |
return(MDOC_Bro); |
return MDOC_Bro; |
case MDOC_Dc: |
case MDOC_Dc: |
return(MDOC_Do); |
return MDOC_Do; |
case MDOC_Ec: |
case MDOC_Ec: |
return(MDOC_Eo); |
return MDOC_Eo; |
case MDOC_Ed: |
case MDOC_Ed: |
return(MDOC_Bd); |
return MDOC_Bd; |
case MDOC_Ef: |
case MDOC_Ef: |
return(MDOC_Bf); |
return MDOC_Bf; |
case MDOC_Ek: |
case MDOC_Ek: |
return(MDOC_Bk); |
return MDOC_Bk; |
case MDOC_El: |
case MDOC_El: |
return(MDOC_Bl); |
return MDOC_Bl; |
case MDOC_Fc: |
case MDOC_Fc: |
return(MDOC_Fo); |
return MDOC_Fo; |
case MDOC_Oc: |
case MDOC_Oc: |
return(MDOC_Oo); |
return MDOC_Oo; |
case MDOC_Pc: |
case MDOC_Pc: |
return(MDOC_Po); |
return MDOC_Po; |
case MDOC_Qc: |
case MDOC_Qc: |
return(MDOC_Qo); |
return MDOC_Qo; |
case MDOC_Re: |
case MDOC_Re: |
return(MDOC_Rs); |
return MDOC_Rs; |
case MDOC_Sc: |
case MDOC_Sc: |
return(MDOC_So); |
return MDOC_So; |
case MDOC_Xc: |
case MDOC_Xc: |
return(MDOC_Xo); |
return MDOC_Xo; |
default: |
default: |
return(tok); |
return tok; |
} |
} |
/* NOTREACHED */ |
|
} |
} |
|
|
static void |
static void |
Line 416 find_pending(struct roff_man *mdoc, int tok, int line, |
|
Line 413 find_pending(struct roff_man *mdoc, int tok, int line, |
|
} |
} |
} |
} |
} |
} |
return(irc); |
return irc; |
} |
} |
|
|
/* |
/* |
Line 511 macro_or_word(MACRO_PROT_ARGS, int parsed) |
|
Line 508 macro_or_word(MACRO_PROT_ARGS, int parsed) |
|
if (ntok == TOKEN_NONE) { |
if (ntok == TOKEN_NONE) { |
dword(mdoc, line, ppos, p, DELIM_MAX, tok == TOKEN_NONE || |
dword(mdoc, line, ppos, p, DELIM_MAX, tok == TOKEN_NONE || |
mdoc_macros[tok].flags & MDOC_JOIN); |
mdoc_macros[tok].flags & MDOC_JOIN); |
return(0); |
return 0; |
} else { |
} else { |
if (mdoc_macros[tok].fp == in_line_eoln) |
if (mdoc_macros[tok].fp == in_line_eoln) |
rew_elem(mdoc, tok); |
rew_elem(mdoc, tok); |
mdoc_macro(mdoc, ntok, line, ppos, pos, buf); |
mdoc_macro(mdoc, ntok, line, ppos, pos, buf); |
if (tok == TOKEN_NONE) |
if (tok == TOKEN_NONE) |
append_delims(mdoc, line, pos, buf); |
append_delims(mdoc, line, pos, buf); |
return(1); |
return 1; |
} |
} |
} |
} |
|
|
Line 644 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: |
Line 671 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 698 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 733 in_line(MACRO_PROT_ARGS) |
|
Line 734 in_line(MACRO_PROT_ARGS) |
|
|
|
switch (tok) { |
switch (tok) { |
case MDOC_An: |
case MDOC_An: |
/* FALLTHROUGH */ |
|
case MDOC_Ar: |
case MDOC_Ar: |
/* FALLTHROUGH */ |
|
case MDOC_Fl: |
case MDOC_Fl: |
/* FALLTHROUGH */ |
|
case MDOC_Mt: |
case MDOC_Mt: |
/* FALLTHROUGH */ |
|
case MDOC_Nm: |
case MDOC_Nm: |
/* FALLTHROUGH */ |
|
case MDOC_Pa: |
case MDOC_Pa: |
nc = 1; |
nc = 1; |
break; |
break; |
Line 945 blk_full(MACRO_PROT_ARGS) |
|
Line 941 blk_full(MACRO_PROT_ARGS) |
|
if (mdoc_macros[n->tok].flags & MDOC_EXPLICIT) { |
if (mdoc_macros[n->tok].flags & MDOC_EXPLICIT) { |
switch (tok) { |
switch (tok) { |
case MDOC_Sh: |
case MDOC_Sh: |
/* FALLTHROUGH */ |
|
case MDOC_Ss: |
case MDOC_Ss: |
mandoc_vmsg(MANDOCERR_BLK_BROKEN, |
mandoc_vmsg(MANDOCERR_BLK_BROKEN, |
mdoc->parse, line, ppos, |
mdoc->parse, line, ppos, |
Line 1113 blk_full(MACRO_PROT_ARGS) |
|
Line 1108 blk_full(MACRO_PROT_ARGS) |
|
mdoc->flags |= MDOC_PPHRASE; |
mdoc->flags |= MDOC_PPHRASE; |
parse_rest(mdoc, TOKEN_NONE, line, &la, buf); |
parse_rest(mdoc, TOKEN_NONE, line, &la, buf); |
mdoc->flags &= ~MDOC_PPHRASE; |
mdoc->flags &= ~MDOC_PPHRASE; |
|
|
|
/* There may have been `Ta' macros. */ |
|
|
|
while (body->next != NULL) |
|
body = body->next; |
continue; |
continue; |
} |
} |
|
|
Line 1288 in_line_argn(MACRO_PROT_ARGS) |
|
Line 1288 in_line_argn(MACRO_PROT_ARGS) |
|
|
|
switch (tok) { |
switch (tok) { |
case MDOC_Ap: |
case MDOC_Ap: |
/* FALLTHROUGH */ |
|
case MDOC_Ns: |
case MDOC_Ns: |
/* FALLTHROUGH */ |
|
case MDOC_Ux: |
case MDOC_Ux: |
maxargs = 0; |
maxargs = 0; |
break; |
break; |
case MDOC_Bx: |
case MDOC_Bx: |
/* FALLTHROUGH */ |
|
case MDOC_Es: |
case MDOC_Es: |
/* FALLTHROUGH */ |
|
case MDOC_Xr: |
case MDOC_Xr: |
maxargs = 2; |
maxargs = 2; |
break; |
break; |
Line 1395 in_line_eoln(MACRO_PROT_ARGS) |
|
Line 1391 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' && |
Line 1425 parse_rest(struct roff_man *mdoc, int tok, int line, i |
|
Line 1421 parse_rest(struct roff_man *mdoc, int tok, int line, i |
|
for (;;) { |
for (;;) { |
la = *pos; |
la = *pos; |
if (mdoc_args(mdoc, line, pos, buf, tok, NULL) == ARGS_EOLN) |
if (mdoc_args(mdoc, line, pos, buf, tok, NULL) == ARGS_EOLN) |
return(0); |
return 0; |
if (macro_or_word(mdoc, tok, line, la, pos, buf, 1)) |
if (macro_or_word(mdoc, tok, line, la, pos, buf, 1)) |
return(1); |
return 1; |
} |
} |
} |
} |
|
|