version 1.186, 2012/07/11 16:57:43 |
version 1.190, 2012/11/16 22:21:05 |
Line 107 static int post_lb(POST_ARGS); |
|
Line 107 static int post_lb(POST_ARGS); |
|
static int post_nm(POST_ARGS); |
static int post_nm(POST_ARGS); |
static int post_ns(POST_ARGS); |
static int post_ns(POST_ARGS); |
static int post_os(POST_ARGS); |
static int post_os(POST_ARGS); |
|
static int post_par(POST_ARGS); |
static int post_ignpar(POST_ARGS); |
static int post_ignpar(POST_ARGS); |
static int post_prol(POST_ARGS); |
static int post_prol(POST_ARGS); |
static int post_root(POST_ARGS); |
static int post_root(POST_ARGS); |
Line 152 static v_post posts_nm[] = { post_nm, NULL }; |
|
Line 153 static v_post posts_nm[] = { post_nm, NULL }; |
|
static v_post posts_notext[] = { ewarn_eq0, NULL }; |
static v_post posts_notext[] = { ewarn_eq0, NULL }; |
static v_post posts_ns[] = { post_ns, NULL }; |
static v_post posts_ns[] = { post_ns, NULL }; |
static v_post posts_os[] = { post_os, post_prol, NULL }; |
static v_post posts_os[] = { post_os, post_prol, NULL }; |
|
static v_post posts_pp[] = { post_par, ewarn_eq0, NULL }; |
static v_post posts_rs[] = { post_rs, NULL }; |
static v_post posts_rs[] = { post_rs, NULL }; |
static v_post posts_sh[] = { post_ignpar, hwarn_ge1, post_sh, NULL }; |
static v_post posts_sh[] = { post_ignpar, hwarn_ge1, post_sh, NULL }; |
static v_post posts_sp[] = { ewarn_le1, NULL }; |
static v_post posts_sp[] = { post_par, ewarn_le1, NULL }; |
static v_post posts_ss[] = { post_ignpar, hwarn_ge1, NULL }; |
static v_post posts_ss[] = { post_ignpar, hwarn_ge1, NULL }; |
static v_post posts_st[] = { post_st, NULL }; |
static v_post posts_st[] = { post_st, NULL }; |
static v_post posts_std[] = { post_std, NULL }; |
static v_post posts_std[] = { post_std, NULL }; |
Line 185 static const struct valids mdoc_valids[MDOC_MAX] = { |
|
Line 187 static const struct valids mdoc_valids[MDOC_MAX] = { |
|
{ pres_os, posts_os }, /* Os */ |
{ pres_os, posts_os }, /* Os */ |
{ pres_sh, posts_sh }, /* Sh */ |
{ pres_sh, posts_sh }, /* Sh */ |
{ pres_ss, posts_ss }, /* Ss */ |
{ pres_ss, posts_ss }, /* Ss */ |
{ pres_pp, posts_notext }, /* Pp */ |
{ pres_pp, posts_pp }, /* Pp */ |
{ pres_d1, posts_wline }, /* D1 */ |
{ pres_d1, posts_wline }, /* D1 */ |
{ pres_dl, posts_dl }, /* Dl */ |
{ pres_dl, posts_dl }, /* Dl */ |
{ pres_bd, posts_bd }, /* Bd */ |
{ pres_bd, posts_bd }, /* Bd */ |
Line 286 static const struct valids mdoc_valids[MDOC_MAX] = { |
|
Line 288 static const struct valids mdoc_valids[MDOC_MAX] = { |
|
{ NULL, NULL }, /* Fr */ |
{ NULL, NULL }, /* Fr */ |
{ NULL, posts_eoln }, /* Ud */ |
{ NULL, posts_eoln }, /* Ud */ |
{ NULL, posts_lb }, /* Lb */ |
{ NULL, posts_lb }, /* Lb */ |
{ NULL, posts_notext }, /* Lp */ |
{ pres_pp, posts_pp }, /* Lp */ |
{ NULL, NULL }, /* Lk */ |
{ NULL, NULL }, /* Lk */ |
{ NULL, posts_defaults }, /* Mt */ |
{ NULL, posts_defaults }, /* Mt */ |
{ NULL, NULL }, /* Brq */ |
{ NULL, NULL }, /* Brq */ |
Line 297 static const struct valids mdoc_valids[MDOC_MAX] = { |
|
Line 299 static const struct valids mdoc_valids[MDOC_MAX] = { |
|
{ NULL, NULL }, /* En */ |
{ NULL, NULL }, /* En */ |
{ NULL, NULL }, /* Dx */ |
{ NULL, NULL }, /* Dx */ |
{ NULL, posts_text }, /* %Q */ |
{ NULL, posts_text }, /* %Q */ |
{ NULL, posts_notext }, /* br */ |
{ NULL, posts_pp }, /* br */ |
{ pres_pp, posts_sp }, /* sp */ |
{ NULL, posts_sp }, /* sp */ |
{ NULL, posts_text1 }, /* %U */ |
{ NULL, posts_text1 }, /* %U */ |
{ NULL, NULL }, /* Ta */ |
{ NULL, NULL }, /* Ta */ |
}; |
}; |
Line 1123 post_nm(POST_ARGS) |
|
Line 1125 post_nm(POST_ARGS) |
|
char buf[BUFSIZ]; |
char buf[BUFSIZ]; |
int c; |
int c; |
|
|
/* If no child specified, make sure we have the meta name. */ |
if (NULL != mdoc->meta.name) |
|
|
if (NULL == mdoc->last->child && NULL == mdoc->meta.name) { |
|
mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_NONAME); |
|
return(1); |
return(1); |
} else if (mdoc->meta.name) |
|
return(1); |
|
|
|
/* If no meta name, set it from the child. */ |
/* Try to use our children for setting the meta name. */ |
|
|
buf[0] = '\0'; |
if (NULL != mdoc->last->child) { |
if (-1 == (c = concat(buf, mdoc->last->child, BUFSIZ))) { |
buf[0] = '\0'; |
|
c = concat(buf, mdoc->last->child, BUFSIZ); |
|
} else |
|
c = 0; |
|
|
|
switch (c) { |
|
case (-1): |
mdoc_nmsg(mdoc, mdoc->last->child, MANDOCERR_MEM); |
mdoc_nmsg(mdoc, mdoc->last->child, MANDOCERR_MEM); |
return(0); |
return(0); |
|
case (0): |
|
mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_NONAME); |
|
mdoc->meta.name = mandoc_strdup("UNKNOWN"); |
|
break; |
|
default: |
|
mdoc->meta.name = mandoc_strdup(buf); |
|
break; |
} |
} |
|
|
assert(c); |
|
mdoc->meta.name = mandoc_strdup(buf); |
|
return(1); |
return(1); |
} |
} |
|
|
Line 1346 post_it(POST_ARGS) |
|
Line 1353 post_it(POST_ARGS) |
|
static int |
static int |
post_bl_block(POST_ARGS) |
post_bl_block(POST_ARGS) |
{ |
{ |
struct mdoc_node *n; |
struct mdoc_node *n, *ni, *nc; |
|
|
/* |
/* |
* These are fairly complicated, so we've broken them into two |
* These are fairly complicated, so we've broken them into two |
Line 1362 post_bl_block(POST_ARGS) |
|
Line 1369 post_bl_block(POST_ARGS) |
|
NULL == n->norm->Bl.width) { |
NULL == n->norm->Bl.width) { |
if ( ! post_bl_block_tag(mdoc)) |
if ( ! post_bl_block_tag(mdoc)) |
return(0); |
return(0); |
|
assert(n->norm->Bl.width); |
} else if (NULL != n->norm->Bl.width) { |
} else if (NULL != n->norm->Bl.width) { |
if ( ! post_bl_block_width(mdoc)) |
if ( ! post_bl_block_width(mdoc)) |
return(0); |
return(0); |
} else |
assert(n->norm->Bl.width); |
return(1); |
} |
|
|
assert(n->norm->Bl.width); |
for (ni = n->body->child; ni; ni = ni->next) { |
|
if (NULL == ni->body) |
|
continue; |
|
nc = ni->body->last; |
|
while (NULL != nc) { |
|
switch (nc->tok) { |
|
case (MDOC_Pp): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Lp): |
|
/* FALLTHROUGH */ |
|
case (MDOC_br): |
|
break; |
|
default: |
|
nc = NULL; |
|
continue; |
|
} |
|
if (NULL == ni->next) { |
|
mdoc_nmsg(mdoc, nc, MANDOCERR_MOVEPAR); |
|
if ( ! mdoc_node_relink(mdoc, nc)) |
|
return(0); |
|
} else if (0 == n->norm->Bl.comp && |
|
LIST_column != n->norm->Bl.type) { |
|
mdoc_nmsg(mdoc, nc, MANDOCERR_IGNPAR); |
|
mdoc_node_delete(mdoc, nc); |
|
} else |
|
break; |
|
nc = ni->body->last; |
|
} |
|
} |
return(1); |
return(1); |
} |
} |
|
|
Line 1974 pre_par(PRE_ARGS) |
|
Line 2010 pre_par(PRE_ARGS) |
|
* block: `Lp', `Pp', or non-compact `Bd' or `Bl'. |
* block: `Lp', `Pp', or non-compact `Bd' or `Bl'. |
*/ |
*/ |
|
|
if (MDOC_Pp != mdoc->last->tok && MDOC_Lp != mdoc->last->tok) |
if (MDOC_Pp != mdoc->last->tok && |
|
MDOC_Lp != mdoc->last->tok && |
|
MDOC_br != mdoc->last->tok) |
return(1); |
return(1); |
if (MDOC_Bl == n->tok && n->norm->Bl.comp) |
if (MDOC_Bl == n->tok && n->norm->Bl.comp) |
return(1); |
return(1); |
Line 1989 pre_par(PRE_ARGS) |
|
Line 2027 pre_par(PRE_ARGS) |
|
} |
} |
|
|
static int |
static int |
|
post_par(POST_ARGS) |
|
{ |
|
|
|
if (MDOC_ELEM != mdoc->last->type && |
|
MDOC_BLOCK != mdoc->last->type) |
|
return(1); |
|
|
|
if (NULL == mdoc->last->prev) { |
|
if (MDOC_Sh != mdoc->last->parent->tok && |
|
MDOC_Ss != mdoc->last->parent->tok) |
|
return(1); |
|
} else { |
|
if (MDOC_Pp != mdoc->last->prev->tok && |
|
MDOC_Lp != mdoc->last->prev->tok && |
|
(MDOC_br != mdoc->last->tok || |
|
(MDOC_sp != mdoc->last->prev->tok && |
|
MDOC_br != mdoc->last->prev->tok))) |
|
return(1); |
|
} |
|
|
|
mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_IGNPAR); |
|
mdoc_node_delete(mdoc, mdoc->last); |
|
return(1); |
|
} |
|
|
|
static int |
pre_literal(PRE_ARGS) |
pre_literal(PRE_ARGS) |
{ |
{ |
|
|
Line 2141 post_dt(POST_ARGS) |
|
Line 2205 post_dt(POST_ARGS) |
|
free(mdoc->meta.vol); |
free(mdoc->meta.vol); |
mdoc->meta.vol = mandoc_strdup(cp); |
mdoc->meta.vol = mandoc_strdup(cp); |
} else { |
} else { |
/* FIXME: warn about bad arch. */ |
|
cp = mdoc_a2arch(nn->string); |
cp = mdoc_a2arch(nn->string); |
if (NULL == cp) { |
if (NULL == cp) { |
|
mdoc_nmsg(mdoc, nn, MANDOCERR_BADVOLARCH); |
free(mdoc->meta.vol); |
free(mdoc->meta.vol); |
mdoc->meta.vol = mandoc_strdup(nn->string); |
mdoc->meta.vol = mandoc_strdup(nn->string); |
} else |
} else |