Return to mdoc_validate.c CVS log | Up to [cvsweb.bsd.lv] / mandoc |
version 1.315, 2017/01/10 21:59:47 | version 1.316, 2017/01/10 23:36:34 | ||
---|---|---|---|
|
|
||
static void | static void | ||
post_at(POST_ARGS) | post_at(POST_ARGS) | ||
{ | { | ||
struct roff_node *n; | struct roff_node *n, *nch; | ||
const char *std_att; | const char *att; | ||
char *att; | |||
n = mdoc->last; | n = mdoc->last; | ||
if (n->child == NULL) { | nch = n->child; | ||
mdoc->next = ROFF_NEXT_CHILD; | |||
roff_word_alloc(mdoc, n->line, n->pos, "AT&T UNIX"); | |||
mdoc->last = n; | |||
return; | |||
} | |||
/* | /* | ||
* If we have a child, look it up in the standard keys. If a | * If we have a child, look it up in the standard keys. If a | ||
|
|
||
* prefix "AT&T UNIX " to the existing data. | * prefix "AT&T UNIX " to the existing data. | ||
*/ | */ | ||
n = n->child; | att = NULL; | ||
assert(n->type == ROFFT_TEXT); | if (nch != NULL && ((att = mdoc_a2att(nch->string)) == NULL)) | ||
if ((std_att = mdoc_a2att(n->string)) == NULL) { | |||
mandoc_vmsg(MANDOCERR_AT_BAD, mdoc->parse, | mandoc_vmsg(MANDOCERR_AT_BAD, mdoc->parse, | ||
n->line, n->pos, "At %s", n->string); | nch->line, nch->pos, "At %s", nch->string); | ||
mandoc_asprintf(&att, "AT&T UNIX %s", n->string); | |||
} else | |||
att = mandoc_strdup(std_att); | |||
free(n->string); | mdoc->next = ROFF_NEXT_CHILD; | ||
n->string = att; | if (att != NULL) { | ||
roff_word_alloc(mdoc, nch->line, nch->pos, att); | |||
nch->flags |= NODE_NOPRT; | |||
} else | |||
roff_word_alloc(mdoc, n->line, n->pos, "AT&T UNIX"); | |||
mdoc->last->flags |= NODE_NOSRC; | |||
mdoc->last = n; | |||
} | } | ||
static void | static void | ||
|
|
||
static void | static void | ||
post_bx(POST_ARGS) | post_bx(POST_ARGS) | ||
{ | { | ||
struct roff_node *n; | struct roff_node *n, *nch; | ||
n = mdoc->last; | |||
nch = n->child; | |||
if (nch != NULL) { | |||
mdoc->last = nch; | |||
nch = nch->next; | |||
mdoc->next = ROFF_NEXT_SIBLING; | |||
roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Ns); | |||
mdoc->last->flags |= NODE_NOSRC; | |||
mdoc->next = ROFF_NEXT_SIBLING; | |||
} else | |||
mdoc->next = ROFF_NEXT_CHILD; | |||
roff_word_alloc(mdoc, n->line, n->pos, "BSD"); | |||
mdoc->last->flags |= NODE_NOSRC; | |||
if (nch == NULL) { | |||
mdoc->last = n; | |||
return; | |||
} | |||
roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Ns); | |||
mdoc->last->flags |= NODE_NOSRC; | |||
mdoc->next = ROFF_NEXT_SIBLING; | |||
roff_word_alloc(mdoc, n->line, n->pos, "-"); | |||
mdoc->last->flags |= NODE_NOSRC; | |||
roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Ns); | |||
mdoc->last->flags |= NODE_NOSRC; | |||
mdoc->last = n; | |||
/* | /* | ||
* Make `Bx's second argument always start with an uppercase | * Make `Bx's second argument always start with an uppercase | ||
* letter. Groff checks if it's an "accepted" term, but we just | * letter. Groff checks if it's an "accepted" term, but we just | ||
* uppercase blindly. | * uppercase blindly. | ||
*/ | */ | ||
if ((n = mdoc->last->child) != NULL && (n = n->next) != NULL) | *nch->string = (char)toupper((unsigned char)*nch->string); | ||
*n->string = (char)toupper((unsigned char)*n->string); | |||
} | } | ||
static void | static void |