version 1.286, 2015/04/18 16:06:41 |
version 1.295, 2015/10/12 00:08:16 |
|
|
#include "roff.h" |
#include "roff.h" |
#include "mdoc.h" |
#include "mdoc.h" |
#include "libmandoc.h" |
#include "libmandoc.h" |
|
#include "roff_int.h" |
#include "libmdoc.h" |
#include "libmdoc.h" |
|
|
/* FIXME: .Bl -diag can't have non-text children in HEAD. */ |
/* FIXME: .Bl -diag can't have non-text children in HEAD. */ |
Line 106 static void post_sh_see_also(POST_ARGS); |
|
Line 107 static void post_sh_see_also(POST_ARGS); |
|
static void post_sh_authors(POST_ARGS); |
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_vt(POST_ARGS); |
|
|
|
static void pre_an(PRE_ARGS); |
static void pre_an(PRE_ARGS); |
static void pre_bd(PRE_ARGS); |
static void pre_bd(PRE_ARGS); |
Line 160 static const struct valids mdoc_valids[MDOC_MAX] = { |
|
Line 160 static const struct valids mdoc_valids[MDOC_MAX] = { |
|
{ pre_std, NULL }, /* Rv */ |
{ pre_std, NULL }, /* Rv */ |
{ NULL, post_st }, /* St */ |
{ NULL, post_st }, /* St */ |
{ NULL, NULL }, /* Va */ |
{ NULL, NULL }, /* Va */ |
{ NULL, post_vt }, /* Vt */ |
{ NULL, NULL }, /* Vt */ |
{ NULL, NULL }, /* Xr */ |
{ NULL, NULL }, /* Xr */ |
{ NULL, NULL }, /* %A */ |
{ NULL, NULL }, /* %A */ |
{ NULL, post_hyph }, /* %B */ /* FIXME: can be used outside Rs/Re. */ |
{ NULL, post_hyph }, /* %B */ /* FIXME: can be used outside Rs/Re. */ |
Line 301 mdoc_valid_pre(struct roff_man *mdoc, struct roff_node |
|
Line 301 mdoc_valid_pre(struct roff_man *mdoc, struct roff_node |
|
case ROFFT_TEXT: |
case ROFFT_TEXT: |
if (n->sec != SEC_SYNOPSIS || n->parent->tok != MDOC_Fd) |
if (n->sec != SEC_SYNOPSIS || n->parent->tok != MDOC_Fd) |
check_text(mdoc, n->line, n->pos, n->string); |
check_text(mdoc, n->line, n->pos, n->string); |
/* FALLTHROUGH */ |
return; |
case ROFFT_TBL: |
case ROFFT_TBL: |
/* FALLTHROUGH */ |
|
case ROFFT_EQN: |
case ROFFT_EQN: |
/* FALLTHROUGH */ |
|
case ROFFT_ROOT: |
case ROFFT_ROOT: |
return; |
return; |
default: |
default: |
Line 331 mdoc_valid_post(struct roff_man *mdoc) |
|
Line 329 mdoc_valid_post(struct roff_man *mdoc) |
|
|
|
switch (n->type) { |
switch (n->type) { |
case ROFFT_TEXT: |
case ROFFT_TEXT: |
/* FALLTHROUGH */ |
|
case ROFFT_EQN: |
case ROFFT_EQN: |
/* FALLTHROUGH */ |
|
case ROFFT_TBL: |
case ROFFT_TBL: |
break; |
break; |
case ROFFT_ROOT: |
case ROFFT_ROOT: |
Line 566 pre_bl(PRE_ARGS) |
|
Line 562 pre_bl(PRE_ARGS) |
|
n->line, n->pos, "Bl -tag"); |
n->line, n->pos, "Bl -tag"); |
break; |
break; |
case LIST_column: |
case LIST_column: |
/* FALLTHROUGH */ |
|
case LIST_diag: |
case LIST_diag: |
/* FALLTHROUGH */ |
|
case LIST_ohang: |
case LIST_ohang: |
/* FALLTHROUGH */ |
|
case LIST_inset: |
case LIST_inset: |
/* FALLTHROUGH */ |
|
case LIST_item: |
case LIST_item: |
if (n->norm->Bl.width) |
if (n->norm->Bl.width) |
mandoc_vmsg(MANDOCERR_BL_SKIPW, mdoc->parse, |
mandoc_vmsg(MANDOCERR_BL_SKIPW, mdoc->parse, |
Line 580 pre_bl(PRE_ARGS) |
|
Line 572 pre_bl(PRE_ARGS) |
|
mdoc_argnames[mdoclt]); |
mdoc_argnames[mdoclt]); |
break; |
break; |
case LIST_bullet: |
case LIST_bullet: |
/* FALLTHROUGH */ |
|
case LIST_dash: |
case LIST_dash: |
/* FALLTHROUGH */ |
|
case LIST_hyphen: |
case LIST_hyphen: |
if (NULL == n->norm->Bl.width) |
if (NULL == n->norm->Bl.width) |
n->norm->Bl.width = "2n"; |
n->norm->Bl.width = "2n"; |
Line 657 pre_bd(PRE_ARGS) |
|
Line 647 pre_bd(PRE_ARGS) |
|
break; |
break; |
default: |
default: |
abort(); |
abort(); |
/* NOTREACHED */ |
|
} |
} |
if (DISP__NONE == dt) |
if (DISP__NONE == dt) |
continue; |
continue; |
Line 904 post_fo(POST_ARGS) |
|
Line 893 post_fo(POST_ARGS) |
|
n->child->next->line, n->child->next->pos, |
n->child->next->line, n->child->next->pos, |
"Fo ... %s", n->child->next->string); |
"Fo ... %s", n->child->next->string); |
while (n->child != n->last) |
while (n->child != n->last) |
mdoc_node_delete(mdoc, n->last); |
roff_node_delete(mdoc, n->last); |
} |
} |
|
|
post_fname(mdoc); |
post_fname(mdoc); |
Line 932 post_fa(POST_ARGS) |
|
Line 921 post_fa(POST_ARGS) |
|
} |
} |
|
|
static void |
static void |
post_vt(POST_ARGS) |
|
{ |
|
const struct roff_node *n; |
|
|
|
/* |
|
* The Vt macro comes in both ELEM and BLOCK form, both of which |
|
* have different syntaxes (yet more context-sensitive |
|
* behaviour). ELEM types must have a child, which is already |
|
* guaranteed by the in_line parsing routine; BLOCK types, |
|
* specifically the BODY, should only have TEXT children. |
|
*/ |
|
|
|
if (mdoc->last->type != ROFFT_BODY) |
|
return; |
|
|
|
for (n = mdoc->last->child; n; n = n->next) |
|
if (n->type != ROFFT_TEXT) |
|
mandoc_msg(MANDOCERR_VT_CHILD, mdoc->parse, |
|
n->line, n->pos, mdoc_macronames[n->tok]); |
|
} |
|
|
|
static void |
|
post_nm(POST_ARGS) |
post_nm(POST_ARGS) |
{ |
{ |
struct roff_node *n; |
struct roff_node *n; |
Line 968 post_nm(POST_ARGS) |
|
Line 935 post_nm(POST_ARGS) |
|
if (NULL != mdoc->meta.name) |
if (NULL != mdoc->meta.name) |
return; |
return; |
|
|
mdoc_deroff(&mdoc->meta.name, n); |
deroff(&mdoc->meta.name, n); |
|
|
if (NULL == mdoc->meta.name) |
if (NULL == mdoc->meta.name) |
mandoc_msg(MANDOCERR_NM_NONAME, mdoc->parse, |
mandoc_msg(MANDOCERR_NM_NONAME, mdoc->parse, |
Line 1050 post_defaults(POST_ARGS) |
|
Line 1017 post_defaults(POST_ARGS) |
|
|
|
switch (nn->tok) { |
switch (nn->tok) { |
case MDOC_Ar: |
case MDOC_Ar: |
mdoc_word_alloc(mdoc, nn->line, nn->pos, "file"); |
roff_word_alloc(mdoc, nn->line, nn->pos, "file"); |
mdoc_word_alloc(mdoc, nn->line, nn->pos, "..."); |
roff_word_alloc(mdoc, nn->line, nn->pos, "..."); |
break; |
break; |
case MDOC_Pa: |
case MDOC_Pa: |
/* FALLTHROUGH */ |
|
case MDOC_Mt: |
case MDOC_Mt: |
mdoc_word_alloc(mdoc, nn->line, nn->pos, "~"); |
roff_word_alloc(mdoc, nn->line, nn->pos, "~"); |
break; |
break; |
default: |
default: |
abort(); |
abort(); |
/* NOTREACHED */ |
|
} |
} |
mdoc->last = nn; |
mdoc->last = nn; |
} |
} |
Line 1075 post_at(POST_ARGS) |
|
Line 1040 post_at(POST_ARGS) |
|
n = mdoc->last; |
n = mdoc->last; |
if (n->child == NULL) { |
if (n->child == NULL) { |
mdoc->next = ROFF_NEXT_CHILD; |
mdoc->next = ROFF_NEXT_CHILD; |
mdoc_word_alloc(mdoc, n->line, n->pos, "AT&T UNIX"); |
roff_word_alloc(mdoc, n->line, n->pos, "AT&T UNIX"); |
mdoc->last = n; |
mdoc->last = n; |
return; |
return; |
} |
} |
Line 1146 post_it(POST_ARGS) |
|
Line 1111 post_it(POST_ARGS) |
|
|
|
switch (lt) { |
switch (lt) { |
case LIST_tag: |
case LIST_tag: |
/* FALLTHROUGH */ |
|
case LIST_hang: |
case LIST_hang: |
/* FALLTHROUGH */ |
|
case LIST_ohang: |
case LIST_ohang: |
/* FALLTHROUGH */ |
|
case LIST_inset: |
case LIST_inset: |
/* FALLTHROUGH */ |
|
case LIST_diag: |
case LIST_diag: |
if (nit->head->child == NULL) |
if (nit->head->child == NULL) |
mandoc_vmsg(MANDOCERR_IT_NOHEAD, |
mandoc_vmsg(MANDOCERR_IT_NOHEAD, |
Line 1161 post_it(POST_ARGS) |
|
Line 1122 post_it(POST_ARGS) |
|
mdoc_argnames[nbl->args->argv[0].arg]); |
mdoc_argnames[nbl->args->argv[0].arg]); |
break; |
break; |
case LIST_bullet: |
case LIST_bullet: |
/* FALLTHROUGH */ |
|
case LIST_dash: |
case LIST_dash: |
/* FALLTHROUGH */ |
|
case LIST_enum: |
case LIST_enum: |
/* FALLTHROUGH */ |
|
case LIST_hyphen: |
case LIST_hyphen: |
if (nit->body == NULL || nit->body->child == NULL) |
if (nit->body == NULL || nit->body->child == NULL) |
mandoc_vmsg(MANDOCERR_IT_NOBODY, |
mandoc_vmsg(MANDOCERR_IT_NOBODY, |
Line 1226 post_bl_block(POST_ARGS) |
|
Line 1184 post_bl_block(POST_ARGS) |
|
while (NULL != nc) { |
while (NULL != nc) { |
switch (nc->tok) { |
switch (nc->tok) { |
case MDOC_Pp: |
case MDOC_Pp: |
/* FALLTHROUGH */ |
|
case MDOC_Lp: |
case MDOC_Lp: |
/* FALLTHROUGH */ |
|
case MDOC_br: |
case MDOC_br: |
break; |
break; |
default: |
default: |
Line 1246 post_bl_block(POST_ARGS) |
|
Line 1202 post_bl_block(POST_ARGS) |
|
mdoc->parse, nc->line, nc->pos, |
mdoc->parse, nc->line, nc->pos, |
"%s before It", |
"%s before It", |
mdoc_macronames[nc->tok]); |
mdoc_macronames[nc->tok]); |
mdoc_node_delete(mdoc, nc); |
roff_node_delete(mdoc, nc); |
} else |
} else |
break; |
break; |
nc = ni->body->last; |
nc = ni->body->last; |
Line 1268 rewrite_macro2len(char **arg) |
|
Line 1224 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)) == MDOC_MAX) |
else if ((tok = mdoc_hash_find(*arg)) == TOKEN_NONE) |
return; |
return; |
else |
else |
width = macro2len(tok); |
width = macro2len(tok); |
Line 1357 post_bl_head(POST_ARGS) |
|
Line 1313 post_bl_head(POST_ARGS) |
|
mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse, |
mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse, |
nch->line, nch->pos, "Bl ... %s", nch->string); |
nch->line, nch->pos, "Bl ... %s", nch->string); |
while (nch != NULL) { |
while (nch != NULL) { |
mdoc_node_delete(mdoc, nch); |
roff_node_delete(mdoc, nch); |
nch = nh->child; |
nch = nh->child; |
} |
} |
return; |
return; |
Line 1398 post_bl_head(POST_ARGS) |
|
Line 1354 post_bl_head(POST_ARGS) |
|
argv->value[i++] = nch->string; |
argv->value[i++] = nch->string; |
nch->string = NULL; |
nch->string = NULL; |
nnext = nch->next; |
nnext = nch->next; |
mdoc_node_delete(NULL, nch); |
roff_node_delete(NULL, nch); |
} |
} |
nh->nchild = 0; |
nh->nchild = 0; |
nh->child = NULL; |
nh->child = NULL; |
Line 1497 post_bk(POST_ARGS) |
|
Line 1453 post_bk(POST_ARGS) |
|
if (n->type == ROFFT_BLOCK && n->body->child == NULL) { |
if (n->type == ROFFT_BLOCK && n->body->child == NULL) { |
mandoc_msg(MANDOCERR_BLK_EMPTY, |
mandoc_msg(MANDOCERR_BLK_EMPTY, |
mdoc->parse, n->line, n->pos, "Bk"); |
mdoc->parse, n->line, n->pos, "Bk"); |
mdoc_node_delete(mdoc, n); |
roff_node_delete(mdoc, n); |
} |
} |
} |
} |
|
|
Line 1561 post_root(POST_ARGS) |
|
Line 1517 post_root(POST_ARGS) |
|
/* Check that we begin with a proper `Sh'. */ |
/* Check that we begin with a proper `Sh'. */ |
|
|
n = mdoc->first->child; |
n = mdoc->first->child; |
while (n != NULL && mdoc_macros[n->tok].flags & MDOC_PROLOGUE) |
while (n != NULL && n->tok != TOKEN_NONE && |
|
mdoc_macros[n->tok].flags & MDOC_PROLOGUE) |
n = n->next; |
n = n->next; |
|
|
if (n == NULL) |
if (n == NULL) |
Line 1585 post_st(POST_ARGS) |
|
Line 1542 post_st(POST_ARGS) |
|
if (NULL == (p = mdoc_a2st(nch->string))) { |
if (NULL == (p = mdoc_a2st(nch->string))) { |
mandoc_vmsg(MANDOCERR_ST_BAD, mdoc->parse, |
mandoc_vmsg(MANDOCERR_ST_BAD, mdoc->parse, |
nch->line, nch->pos, "St %s", nch->string); |
nch->line, nch->pos, "St %s", nch->string); |
mdoc_node_delete(mdoc, n); |
roff_node_delete(mdoc, n); |
} else { |
} else { |
free(nch->string); |
free(nch->string); |
nch->string = mandoc_strdup(p); |
nch->string = mandoc_strdup(p); |
Line 1632 post_rs(POST_ARGS) |
|
Line 1589 post_rs(POST_ARGS) |
|
|
|
/* |
/* |
* Remove this child from the chain. This somewhat |
* Remove this child from the chain. This somewhat |
* repeats mdoc_node_unlink(), but since we're |
* repeats roff_node_unlink(), but since we're |
* just re-ordering, there's no need for the |
* just re-ordering, there's no need for the |
* full unlink process. |
* full unlink process. |
*/ |
*/ |
Line 1764 post_sh_name(POST_ARGS) |
|
Line 1721 post_sh_name(POST_ARGS) |
|
mandoc_msg(MANDOCERR_NAMESEC_ND, |
mandoc_msg(MANDOCERR_NAMESEC_ND, |
mdoc->parse, n->line, n->pos, NULL); |
mdoc->parse, n->line, n->pos, NULL); |
break; |
break; |
case MDOC_MAX: |
case TOKEN_NONE: |
if (hasnm) |
if (hasnm) |
break; |
break; |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
Line 1851 child_an(const struct roff_node *n) |
|
Line 1808 child_an(const struct roff_node *n) |
|
|
|
for (n = n->child; n != NULL; n = n->next) |
for (n = n->child; n != NULL; n = n->next) |
if ((n->tok == MDOC_An && n->nchild) || child_an(n)) |
if ((n->tok == MDOC_An && n->nchild) || child_an(n)) |
return(1); |
return 1; |
return(0); |
return 0; |
} |
} |
|
|
static void |
static void |
Line 1881 post_sh_head(POST_ARGS) |
|
Line 1838 post_sh_head(POST_ARGS) |
|
|
|
secname = NULL; |
secname = NULL; |
sec = SEC_CUSTOM; |
sec = SEC_CUSTOM; |
mdoc_deroff(&secname, mdoc->last); |
deroff(&secname, mdoc->last); |
sec = NULL == secname ? SEC_CUSTOM : a2sec(secname); |
sec = NULL == secname ? SEC_CUSTOM : a2sec(secname); |
|
|
/* The NAME should be first. */ |
/* The NAME should be first. */ |
Line 1960 post_sh_head(POST_ARGS) |
|
Line 1917 post_sh_head(POST_ARGS) |
|
goodsec = "2, 3, 4, 9"; |
goodsec = "2, 3, 4, 9"; |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case SEC_RETURN_VALUES: |
case SEC_RETURN_VALUES: |
/* FALLTHROUGH */ |
|
case SEC_LIBRARY: |
case SEC_LIBRARY: |
if (*mdoc->meta.msec == '2') |
if (*mdoc->meta.msec == '2') |
break; |
break; |
Line 2005 post_ignpar(POST_ARGS) |
|
Line 1961 post_ignpar(POST_ARGS) |
|
mdoc->parse, np->line, np->pos, |
mdoc->parse, np->line, np->pos, |
"%s after %s", mdoc_macronames[np->tok], |
"%s after %s", mdoc_macronames[np->tok], |
mdoc_macronames[mdoc->last->tok]); |
mdoc_macronames[mdoc->last->tok]); |
mdoc_node_delete(mdoc, np); |
roff_node_delete(mdoc, np); |
} |
} |
|
|
if (NULL != (np = mdoc->last->last)) |
if (NULL != (np = mdoc->last->last)) |
Line 2014 post_ignpar(POST_ARGS) |
|
Line 1970 post_ignpar(POST_ARGS) |
|
np->line, np->pos, "%s at the end of %s", |
np->line, np->pos, "%s at the end of %s", |
mdoc_macronames[np->tok], |
mdoc_macronames[np->tok], |
mdoc_macronames[mdoc->last->tok]); |
mdoc_macronames[mdoc->last->tok]); |
mdoc_node_delete(mdoc, np); |
roff_node_delete(mdoc, np); |
} |
} |
} |
} |
|
|
Line 2047 pre_par(PRE_ARGS) |
|
Line 2003 pre_par(PRE_ARGS) |
|
mdoc->last->line, mdoc->last->pos, |
mdoc->last->line, mdoc->last->pos, |
"%s before %s", mdoc_macronames[mdoc->last->tok], |
"%s before %s", mdoc_macronames[mdoc->last->tok], |
mdoc_macronames[n->tok]); |
mdoc_macronames[n->tok]); |
mdoc_node_delete(mdoc, mdoc->last); |
roff_node_delete(mdoc, mdoc->last); |
} |
} |
|
|
static void |
static void |
Line 2080 post_par(POST_ARGS) |
|
Line 2036 post_par(POST_ARGS) |
|
mdoc->last->line, mdoc->last->pos, |
mdoc->last->line, mdoc->last->pos, |
"%s after %s", mdoc_macronames[mdoc->last->tok], |
"%s after %s", mdoc_macronames[mdoc->last->tok], |
mdoc_macronames[np->tok]); |
mdoc_macronames[np->tok]); |
mdoc_node_delete(mdoc, mdoc->last); |
roff_node_delete(mdoc, mdoc->last); |
} |
} |
|
|
static void |
static void |
Line 2109 pre_literal(PRE_ARGS) |
|
Line 2065 pre_literal(PRE_ARGS) |
|
break; |
break; |
default: |
default: |
abort(); |
abort(); |
/* NOTREACHED */ |
|
} |
} |
} |
} |
|
|
Line 2130 post_dd(POST_ARGS) |
|
Line 2085 post_dd(POST_ARGS) |
|
} |
} |
|
|
datestr = NULL; |
datestr = NULL; |
mdoc_deroff(&datestr, n); |
deroff(&datestr, n); |
if (mdoc->quick) |
if (mdoc->quick) |
mdoc->meta.date = datestr; |
mdoc->meta.date = datestr; |
else { |
else { |
Line 2139 post_dd(POST_ARGS) |
|
Line 2094 post_dd(POST_ARGS) |
|
free(datestr); |
free(datestr); |
} |
} |
out: |
out: |
mdoc_node_delete(mdoc, n); |
roff_node_delete(mdoc, n); |
} |
} |
|
|
static void |
static void |
Line 2224 post_dt(POST_ARGS) |
|
Line 2179 post_dt(POST_ARGS) |
|
nn->line, nn->pos, "Dt ... %s", nn->string); |
nn->line, nn->pos, "Dt ... %s", nn->string); |
|
|
out: |
out: |
mdoc_node_delete(mdoc, n); |
roff_node_delete(mdoc, n); |
} |
} |
|
|
static void |
static void |
Line 2265 post_os(POST_ARGS) |
|
Line 2220 post_os(POST_ARGS) |
|
|
|
free(mdoc->meta.os); |
free(mdoc->meta.os); |
mdoc->meta.os = NULL; |
mdoc->meta.os = NULL; |
mdoc_deroff(&mdoc->meta.os, n); |
deroff(&mdoc->meta.os, n); |
if (mdoc->meta.os) |
if (mdoc->meta.os) |
goto out; |
goto out; |
|
|
Line 2290 post_os(POST_ARGS) |
|
Line 2245 post_os(POST_ARGS) |
|
#endif /*!OSNAME*/ |
#endif /*!OSNAME*/ |
|
|
out: |
out: |
mdoc_node_delete(mdoc, n); |
roff_node_delete(mdoc, n); |
} |
} |
|
|
/* |
/* |
Line 2314 post_ex(POST_ARGS) |
|
Line 2269 post_ex(POST_ARGS) |
|
} |
} |
|
|
mdoc->next = ROFF_NEXT_CHILD; |
mdoc->next = ROFF_NEXT_CHILD; |
mdoc_word_alloc(mdoc, n->line, n->pos, mdoc->meta.name); |
roff_word_alloc(mdoc, n->line, n->pos, mdoc->meta.name); |
mdoc->last = n; |
mdoc->last = n; |
} |
} |
|
|
Line 2325 a2sec(const char *p) |
|
Line 2280 a2sec(const char *p) |
|
|
|
for (i = 0; i < (int)SEC__MAX; i++) |
for (i = 0; i < (int)SEC__MAX; i++) |
if (secnames[i] && 0 == strcmp(p, secnames[i])) |
if (secnames[i] && 0 == strcmp(p, secnames[i])) |
return((enum roff_sec)i); |
return (enum roff_sec)i; |
|
|
return(SEC_CUSTOM); |
return SEC_CUSTOM; |
} |
} |
|
|
static size_t |
static size_t |
Line 2336 macro2len(int macro) |
|
Line 2291 macro2len(int macro) |
|
|
|
switch (macro) { |
switch (macro) { |
case MDOC_Ad: |
case MDOC_Ad: |
return(12); |
return 12; |
case MDOC_Ao: |
case MDOC_Ao: |
return(12); |
return 12; |
case MDOC_An: |
case MDOC_An: |
return(12); |
return 12; |
case MDOC_Aq: |
case MDOC_Aq: |
return(12); |
return 12; |
case MDOC_Ar: |
case MDOC_Ar: |
return(12); |
return 12; |
case MDOC_Bo: |
case MDOC_Bo: |
return(12); |
return 12; |
case MDOC_Bq: |
case MDOC_Bq: |
return(12); |
return 12; |
case MDOC_Cd: |
case MDOC_Cd: |
return(12); |
return 12; |
case MDOC_Cm: |
case MDOC_Cm: |
return(10); |
return 10; |
case MDOC_Do: |
case MDOC_Do: |
return(10); |
return 10; |
case MDOC_Dq: |
case MDOC_Dq: |
return(12); |
return 12; |
case MDOC_Dv: |
case MDOC_Dv: |
return(12); |
return 12; |
case MDOC_Eo: |
case MDOC_Eo: |
return(12); |
return 12; |
case MDOC_Em: |
case MDOC_Em: |
return(10); |
return 10; |
case MDOC_Er: |
case MDOC_Er: |
return(17); |
return 17; |
case MDOC_Ev: |
case MDOC_Ev: |
return(15); |
return 15; |
case MDOC_Fa: |
case MDOC_Fa: |
return(12); |
return 12; |
case MDOC_Fl: |
case MDOC_Fl: |
return(10); |
return 10; |
case MDOC_Fo: |
case MDOC_Fo: |
return(16); |
return 16; |
case MDOC_Fn: |
case MDOC_Fn: |
return(16); |
return 16; |
case MDOC_Ic: |
case MDOC_Ic: |
return(10); |
return 10; |
case MDOC_Li: |
case MDOC_Li: |
return(16); |
return 16; |
case MDOC_Ms: |
case MDOC_Ms: |
return(6); |
return 6; |
case MDOC_Nm: |
case MDOC_Nm: |
return(10); |
return 10; |
case MDOC_No: |
case MDOC_No: |
return(12); |
return 12; |
case MDOC_Oo: |
case MDOC_Oo: |
return(10); |
return 10; |
case MDOC_Op: |
case MDOC_Op: |
return(14); |
return 14; |
case MDOC_Pa: |
case MDOC_Pa: |
return(32); |
return 32; |
case MDOC_Pf: |
case MDOC_Pf: |
return(12); |
return 12; |
case MDOC_Po: |
case MDOC_Po: |
return(12); |
return 12; |
case MDOC_Pq: |
case MDOC_Pq: |
return(12); |
return 12; |
case MDOC_Ql: |
case MDOC_Ql: |
return(16); |
return 16; |
case MDOC_Qo: |
case MDOC_Qo: |
return(12); |
return 12; |
case MDOC_So: |
case MDOC_So: |
return(12); |
return 12; |
case MDOC_Sq: |
case MDOC_Sq: |
return(12); |
return 12; |
case MDOC_Sy: |
case MDOC_Sy: |
return(6); |
return 6; |
case MDOC_Sx: |
case MDOC_Sx: |
return(16); |
return 16; |
case MDOC_Tn: |
case MDOC_Tn: |
return(10); |
return 10; |
case MDOC_Va: |
case MDOC_Va: |
return(12); |
return 12; |
case MDOC_Vt: |
case MDOC_Vt: |
return(12); |
return 12; |
case MDOC_Xr: |
case MDOC_Xr: |
return(10); |
return 10; |
default: |
default: |
break; |
break; |
}; |
}; |
return(0); |
return 0; |
} |
} |