version 1.245, 2017/03/03 13:41:42 |
version 1.249, 2017/05/05 15:17:32 |
Line 183 static struct ohash names; /* table of all names */ |
|
Line 183 static struct ohash names; /* table of all names */ |
|
static struct ohash strings; /* table of all strings */ |
static struct ohash strings; /* table of all strings */ |
static uint64_t name_mask; |
static uint64_t name_mask; |
|
|
static const struct mdoc_handler mdocs[MDOC_MAX] = { |
static const struct mdoc_handler __mdocs[MDOC_MAX - MDOC_Dd] = { |
{ NULL, 0, 0 }, /* Ap */ |
|
{ NULL, 0, NODE_NOPRT }, /* Dd */ |
{ NULL, 0, NODE_NOPRT }, /* Dd */ |
{ NULL, 0, NODE_NOPRT }, /* Dt */ |
{ NULL, 0, NODE_NOPRT }, /* Dt */ |
{ NULL, 0, NODE_NOPRT }, /* Os */ |
{ NULL, 0, NODE_NOPRT }, /* Os */ |
Line 200 static const struct mdoc_handler mdocs[MDOC_MAX] = { |
|
Line 199 static const struct mdoc_handler mdocs[MDOC_MAX] = { |
|
{ NULL, 0, 0 }, /* It */ |
{ NULL, 0, 0 }, /* It */ |
{ NULL, 0, 0 }, /* Ad */ |
{ NULL, 0, 0 }, /* Ad */ |
{ NULL, TYPE_An, 0 }, /* An */ |
{ NULL, TYPE_An, 0 }, /* An */ |
|
{ NULL, 0, 0 }, /* Ap */ |
{ NULL, TYPE_Ar, 0 }, /* Ar */ |
{ NULL, TYPE_Ar, 0 }, /* Ar */ |
{ NULL, TYPE_Cd, 0 }, /* Cd */ |
{ NULL, TYPE_Cd, 0 }, /* Cd */ |
{ NULL, TYPE_Cm, 0 }, /* Cm */ |
{ NULL, TYPE_Cm, 0 }, /* Cm */ |
Line 302 static const struct mdoc_handler mdocs[MDOC_MAX] = { |
|
Line 302 static const struct mdoc_handler mdocs[MDOC_MAX] = { |
|
{ NULL, 0, 0 }, /* En */ |
{ NULL, 0, 0 }, /* En */ |
{ NULL, TYPE_Dx, NODE_NOSRC }, /* Dx */ |
{ NULL, TYPE_Dx, NODE_NOSRC }, /* Dx */ |
{ NULL, 0, 0 }, /* %Q */ |
{ NULL, 0, 0 }, /* %Q */ |
{ NULL, 0, 0 }, /* br */ |
|
{ NULL, 0, 0 }, /* sp */ |
|
{ NULL, 0, 0 }, /* %U */ |
{ NULL, 0, 0 }, /* %U */ |
{ NULL, 0, 0 }, /* Ta */ |
{ NULL, 0, 0 }, /* Ta */ |
{ NULL, 0, 0 }, /* ll */ |
|
}; |
}; |
|
static const struct mdoc_handler *const mdocs = __mdocs - MDOC_Dd; |
|
|
|
|
int |
int |
Line 1545 parse_mdoc(struct mpage *mpage, const struct roff_meta |
|
Line 1543 parse_mdoc(struct mpage *mpage, const struct roff_meta |
|
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
|
|
assert(NULL != n); |
for (n = n->child; n != NULL; n = n->next) { |
for (n = n->child; NULL != n; n = n->next) { |
if (n->tok == TOKEN_NONE || |
if (n->flags & mdocs[n->tok].taboo) |
n->tok < ROFF_MAX || |
|
n->flags & mdocs[n->tok].taboo) |
continue; |
continue; |
|
assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX); |
switch (n->type) { |
switch (n->type) { |
case ROFFT_ELEM: |
case ROFFT_ELEM: |
case ROFFT_BLOCK: |
case ROFFT_BLOCK: |
case ROFFT_HEAD: |
case ROFFT_HEAD: |
case ROFFT_BODY: |
case ROFFT_BODY: |
case ROFFT_TAIL: |
case ROFFT_TAIL: |
if (NULL != mdocs[n->tok].fp) |
if (mdocs[n->tok].fp != NULL && |
if (0 == (*mdocs[n->tok].fp)(mpage, meta, n)) |
(*mdocs[n->tok].fp)(mpage, meta, n) == 0) |
break; |
break; |
if (mdocs[n->tok].mask) |
if (mdocs[n->tok].mask) |
putmdockey(mpage, n->child, |
putmdockey(mpage, n->child, |
mdocs[n->tok].mask, mdocs[n->tok].taboo); |
mdocs[n->tok].mask, mdocs[n->tok].taboo); |
break; |
break; |
default: |
default: |
assert(n->type != ROFFT_ROOT); |
|
continue; |
continue; |
} |
} |
if (NULL != n->child) |
if (NULL != n->child) |