version 1.320, 2017/04/24 23:06:18 |
version 1.328, 2017/05/30 19:30:38 |
Line 58 static void check_argv(struct roff_man *, |
|
Line 58 static void check_argv(struct roff_man *, |
|
static void check_args(struct roff_man *, struct roff_node *); |
static void check_args(struct roff_man *, struct roff_node *); |
static int child_an(const struct roff_node *); |
static int child_an(const struct roff_node *); |
static size_t macro2len(enum roff_tok); |
static size_t macro2len(enum roff_tok); |
static void rewrite_macro2len(char **); |
static void rewrite_macro2len(struct roff_man *, char **); |
|
|
static void post_an(POST_ARGS); |
static void post_an(POST_ARGS); |
static void post_an_norm(POST_ARGS); |
static void post_an_norm(POST_ARGS); |
Line 105 static void post_sh_authors(POST_ARGS); |
|
Line 105 static void post_sh_authors(POST_ARGS); |
|
static void post_sm(POST_ARGS); |
static void post_sm(POST_ARGS); |
static void post_st(POST_ARGS); |
static void post_st(POST_ARGS); |
static void post_std(POST_ARGS); |
static void post_std(POST_ARGS); |
|
static void post_useless(POST_ARGS); |
static void post_xr(POST_ARGS); |
static void post_xr(POST_ARGS); |
static void post_xx(POST_ARGS); |
static void post_xx(POST_ARGS); |
|
|
Line 201 static const v_post __mdoc_valids[MDOC_MAX - MDOC_Dd] |
|
Line 202 static const v_post __mdoc_valids[MDOC_MAX - MDOC_Dd] |
|
post_sm, /* Sm */ |
post_sm, /* Sm */ |
post_hyph, /* Sx */ |
post_hyph, /* Sx */ |
NULL, /* Sy */ |
NULL, /* Sy */ |
NULL, /* Tn */ |
post_useless, /* Tn */ |
post_xx, /* Ux */ |
post_xx, /* Ux */ |
NULL, /* Xc */ |
NULL, /* Xc */ |
NULL, /* Xo */ |
NULL, /* Xo */ |
Line 227 static const v_post __mdoc_valids[MDOC_MAX - MDOC_Dd] |
|
Line 228 static const v_post __mdoc_valids[MDOC_MAX - MDOC_Dd] |
|
post_en, /* En */ |
post_en, /* En */ |
post_xx, /* Dx */ |
post_xx, /* Dx */ |
NULL, /* %Q */ |
NULL, /* %Q */ |
post_par, /* br */ |
|
post_par, /* sp */ |
|
NULL, /* %U */ |
NULL, /* %U */ |
NULL, /* Ta */ |
NULL, /* Ta */ |
NULL, /* ll */ |
|
}; |
}; |
static const v_post *const mdoc_valids = __mdoc_valids - MDOC_Dd; |
static const v_post *const mdoc_valids = __mdoc_valids - MDOC_Dd; |
|
|
Line 327 mdoc_node_validate(struct roff_man *mdoc) |
|
Line 325 mdoc_node_validate(struct roff_man *mdoc) |
|
|
|
/* Call the macro's postprocessor. */ |
/* Call the macro's postprocessor. */ |
|
|
|
if (n->tok < ROFF_MAX) { |
|
switch(n->tok) { |
|
case ROFF_br: |
|
case ROFF_sp: |
|
post_par(mdoc); |
|
break; |
|
default: |
|
roff_validate(mdoc); |
|
break; |
|
} |
|
break; |
|
} |
|
|
|
assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX); |
p = mdoc_valids + n->tok; |
p = mdoc_valids + n->tok; |
if (*p) |
if (*p) |
(*p)(mdoc); |
(*p)(mdoc); |
Line 451 post_bl_norm(POST_ARGS) |
|
Line 463 post_bl_norm(POST_ARGS) |
|
mdoc->parse, argv->line, |
mdoc->parse, argv->line, |
argv->pos, "Bl -width %s", |
argv->pos, "Bl -width %s", |
argv->value[0]); |
argv->value[0]); |
rewrite_macro2len(argv->value); |
rewrite_macro2len(mdoc, argv->value); |
n->norm->Bl.width = argv->value[0]; |
n->norm->Bl.width = argv->value[0]; |
break; |
break; |
case MDOC_Offset: |
case MDOC_Offset: |
Line 466 post_bl_norm(POST_ARGS) |
|
Line 478 post_bl_norm(POST_ARGS) |
|
mdoc->parse, argv->line, |
mdoc->parse, argv->line, |
argv->pos, "Bl -offset %s", |
argv->pos, "Bl -offset %s", |
argv->value[0]); |
argv->value[0]); |
rewrite_macro2len(argv->value); |
rewrite_macro2len(mdoc, argv->value); |
n->norm->Bl.offs = argv->value[0]; |
n->norm->Bl.offs = argv->value[0]; |
break; |
break; |
default: |
default: |
Line 593 post_bd(POST_ARGS) |
|
Line 605 post_bd(POST_ARGS) |
|
mdoc->parse, argv->line, |
mdoc->parse, argv->line, |
argv->pos, "Bd -offset %s", |
argv->pos, "Bd -offset %s", |
argv->value[0]); |
argv->value[0]); |
rewrite_macro2len(argv->value); |
rewrite_macro2len(mdoc, argv->value); |
n->norm->Bd.offs = argv->value[0]; |
n->norm->Bd.offs = argv->value[0]; |
break; |
break; |
case MDOC_Compact: |
case MDOC_Compact: |
Line 660 post_eoln(POST_ARGS) |
|
Line 672 post_eoln(POST_ARGS) |
|
{ |
{ |
struct roff_node *n; |
struct roff_node *n; |
|
|
|
post_useless(mdoc); |
n = mdoc->last; |
n = mdoc->last; |
if (n->child != NULL) |
if (n->child != NULL) |
mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse, n->line, |
mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse, n->line, |
Line 855 post_obsolete(POST_ARGS) |
|
Line 868 post_obsolete(POST_ARGS) |
|
n->line, n->pos, roff_name[n->tok]); |
n->line, n->pos, roff_name[n->tok]); |
} |
} |
|
|
|
static void |
|
post_useless(POST_ARGS) |
|
{ |
|
struct roff_node *n; |
|
|
|
n = mdoc->last; |
|
mandoc_msg(MANDOCERR_MACRO_USELESS, mdoc->parse, |
|
n->line, n->pos, roff_name[n->tok]); |
|
} |
|
|
/* |
/* |
* Block macros. |
* Block macros. |
*/ |
*/ |
Line 1310 post_bl_block(POST_ARGS) |
|
Line 1333 post_bl_block(POST_ARGS) |
|
switch (nc->tok) { |
switch (nc->tok) { |
case MDOC_Pp: |
case MDOC_Pp: |
case MDOC_Lp: |
case MDOC_Lp: |
case MDOC_br: |
case ROFF_br: |
break; |
break; |
default: |
default: |
nc = NULL; |
nc = NULL; |
Line 1338 post_bl_block(POST_ARGS) |
|
Line 1361 post_bl_block(POST_ARGS) |
|
* If the argument of -offset or -width is a macro, |
* If the argument of -offset or -width is a macro, |
* replace it with the associated default width. |
* replace it with the associated default width. |
*/ |
*/ |
void |
static void |
rewrite_macro2len(char **arg) |
rewrite_macro2len(struct roff_man *mdoc, char **arg) |
{ |
{ |
size_t width; |
size_t width; |
enum roff_tok tok; |
enum roff_tok tok; |
Line 1348 rewrite_macro2len(char **arg) |
|
Line 1371 rewrite_macro2len(char **arg) |
|
return; |
return; |
else if ( ! strcmp(*arg, "Ds")) |
else if ( ! strcmp(*arg, "Ds")) |
width = 6; |
width = 6; |
else if ((tok = mdoc_hash_find(*arg)) == TOKEN_NONE) |
else if ((tok = roffhash_find(mdoc->mdocmac, *arg, 0)) == TOKEN_NONE) |
return; |
return; |
else |
else |
width = macro2len(tok); |
width = macro2len(tok); |
Line 1868 post_sh_see_also(POST_ARGS) |
|
Line 1891 post_sh_see_also(POST_ARGS) |
|
if (isalpha((const unsigned char)*name)) |
if (isalpha((const unsigned char)*name)) |
return; |
return; |
lastpunct = n->string; |
lastpunct = n->string; |
if (n->next == NULL) |
if (n->next == NULL || n->next->tok == MDOC_Rs) |
mandoc_vmsg(MANDOCERR_XR_PUNCT, mdoc->parse, |
mandoc_vmsg(MANDOCERR_XR_PUNCT, mdoc->parse, |
n->line, n->pos, "%s after %s(%s)", |
n->line, n->pos, "%s after %s(%s)", |
lastpunct, lastname, lastsec); |
lastpunct, lastname, lastsec); |
Line 2015 post_ignpar(POST_ARGS) |
|
Line 2038 post_ignpar(POST_ARGS) |
|
struct roff_node *np; |
struct roff_node *np; |
|
|
switch (mdoc->last->type) { |
switch (mdoc->last->type) { |
|
case ROFFT_BLOCK: |
|
post_prevpar(mdoc); |
|
return; |
case ROFFT_HEAD: |
case ROFFT_HEAD: |
post_hyph(mdoc); |
post_hyph(mdoc); |
return; |
return; |
Line 2061 post_prevpar(POST_ARGS) |
|
Line 2087 post_prevpar(POST_ARGS) |
|
|
|
if (n->prev->tok != MDOC_Pp && |
if (n->prev->tok != MDOC_Pp && |
n->prev->tok != MDOC_Lp && |
n->prev->tok != MDOC_Lp && |
n->prev->tok != MDOC_br) |
n->prev->tok != ROFF_br) |
return; |
return; |
if (n->tok == MDOC_Bl && n->norm->Bl.comp) |
if (n->tok == MDOC_Bl && n->norm->Bl.comp) |
return; |
return; |
Line 2082 post_par(POST_ARGS) |
|
Line 2108 post_par(POST_ARGS) |
|
struct roff_node *np; |
struct roff_node *np; |
|
|
np = mdoc->last; |
np = mdoc->last; |
if (np->tok != MDOC_br && np->tok != MDOC_sp) |
if (np->tok != ROFF_br && np->tok != ROFF_sp) |
post_prevpar(mdoc); |
post_prevpar(mdoc); |
|
|
if (np->tok == MDOC_sp) { |
if (np->tok == ROFF_sp) { |
if (np->child != NULL && np->child->next != NULL) |
if (np->child != NULL && np->child->next != NULL) |
mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse, |
mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse, |
np->child->next->line, np->child->next->pos, |
np->child->next->line, np->child->next->pos, |
Line 2100 post_par(POST_ARGS) |
|
Line 2126 post_par(POST_ARGS) |
|
if (np->tok != MDOC_Sh && np->tok != MDOC_Ss) |
if (np->tok != MDOC_Sh && np->tok != MDOC_Ss) |
return; |
return; |
} else if (np->tok != MDOC_Pp && np->tok != MDOC_Lp && |
} else if (np->tok != MDOC_Pp && np->tok != MDOC_Lp && |
(mdoc->last->tok != MDOC_br || |
(mdoc->last->tok != ROFF_br || |
(np->tok != MDOC_sp && np->tok != MDOC_br))) |
(np->tok != ROFF_sp && np->tok != ROFF_br))) |
return; |
return; |
|
|
mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse, |
mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse, |