version 1.20, 2009/07/06 09:21:24 |
version 1.21, 2009/07/06 11:00:05 |
|
|
EARGREP, |
EARGREP, |
EBOOL, |
EBOOL, |
ECOLMIS, |
ECOLMIS, |
ENESTDISP |
ENESTDISP, |
|
ENOWIDTH, |
|
EMISSWIDTH, |
|
EWRONGMSEC, |
|
ESECOOO, |
|
ESECREP, |
|
EBADSTAND, |
|
ENAMESECINC, |
|
ENOMULTILINE, |
|
EMULTILINE, |
|
ENOLINE, |
|
EPROLOOO, |
|
EPROLREP, |
|
EARGVAL, |
|
EBADSEC, |
|
EBADMSEC |
}; |
}; |
|
|
enum mwarn { |
|
WPRINT, |
|
WNOWIDTH, |
|
WMISSWIDTH, |
|
WESCAPE, |
|
WWRONGMSEC, |
|
WSECOOO, |
|
WSECREP, |
|
WBADSTAND, |
|
WNAMESECINC, |
|
WNOMULTILINE, |
|
WMULTILINE, |
|
WLINE, |
|
WNOLINE, |
|
WPROLOOO, |
|
WPROLREP, |
|
WARGVAL, |
|
WBADSEC, |
|
WBADMSEC |
|
}; |
|
|
|
typedef int (*v_pre)(PRE_ARGS); |
typedef int (*v_pre)(PRE_ARGS); |
typedef int (*v_post)(POST_ARGS); |
typedef int (*v_post)(POST_ARGS); |
|
|
|
|
v_post *post; |
v_post *post; |
}; |
}; |
|
|
static int pwarn(struct mdoc *, int, int, enum mwarn); |
static int perr(struct mdoc *, int, int, enum merr, int); |
static int perr(struct mdoc *, int, int, enum merr); |
|
static int check_parent(PRE_ARGS, int, enum mdoc_type); |
static int check_parent(PRE_ARGS, int, enum mdoc_type); |
static int check_msec(PRE_ARGS, ...); |
static int check_msec(PRE_ARGS, ...); |
static int check_sec(PRE_ARGS, ...); |
static int check_sec(PRE_ARGS, ...); |
Line 148 static int post_st(POST_ARGS); |
|
Line 141 static int post_st(POST_ARGS); |
|
|
|
#define vwarn(m, t) nwarn((m), (m)->last, (t)) |
#define vwarn(m, t) nwarn((m), (m)->last, (t)) |
#define verr(m, t) nerr((m), (m)->last, (t)) |
#define verr(m, t) nerr((m), (m)->last, (t)) |
#define nwarn(m, n, t) pwarn((m), (n)->line, (n)->pos, (t)) |
#define nwarn(m, n, t) perr((m), (n)->line, (n)->pos, (t), 0) |
#define nerr(m, n, t) perr((m), (n)->line, (n)->pos, (t)) |
#define nerr(m, n, t) perr((m), (n)->line, (n)->pos, (t), 1) |
|
|
static v_pre pres_an[] = { pre_an, NULL }; |
static v_pre pres_an[] = { pre_an, NULL }; |
static v_pre pres_bd[] = { pre_display, pre_bd, NULL }; |
static v_pre pres_bd[] = { pre_display, pre_bd, NULL }; |
Line 377 mdoc_valid_post(struct mdoc *mdoc) |
|
Line 370 mdoc_valid_post(struct mdoc *mdoc) |
|
|
|
|
|
static int |
static int |
perr(struct mdoc *m, int line, int pos, enum merr type) |
perr(struct mdoc *m, int line, int pos, enum merr type, int iserr) |
{ |
{ |
char *p; |
char *p; |
|
|
p = NULL; |
p = NULL; |
|
|
switch (type) { |
switch (type) { |
case (ETOOLONG): |
case (ETOOLONG): |
p = "text argument too long"; |
p = "text argument too long"; |
Line 434 perr(struct mdoc *m, int line, int pos, enum merr type |
|
Line 428 perr(struct mdoc *m, int line, int pos, enum merr type |
|
case (ENAME): |
case (ENAME): |
p = "default name not yet set"; |
p = "default name not yet set"; |
break; |
break; |
} |
case (ENOWIDTH): |
assert(p); |
|
return(mdoc_perr(m, line, pos, p)); |
|
} |
|
|
|
|
|
static int |
|
pwarn(struct mdoc *m, int line, int pos, enum mwarn type) |
|
{ |
|
char *p; |
|
|
|
p = NULL; |
|
|
|
switch (type) { |
|
case (WBADMSEC): |
|
p = "inappropriate manual section"; |
|
break; |
|
case (WBADSEC): |
|
p = "inappropriate document section"; |
|
break; |
|
case (WARGVAL): |
|
p = "argument value suggested"; |
|
break; |
|
case (WPROLREP): |
|
p = "prologue macros repeated"; |
|
break; |
|
case (WPROLOOO): |
|
p = "prologue macros out-of-order"; |
|
break; |
|
case (WNOWIDTH): |
|
p = "superfluous width argument"; |
p = "superfluous width argument"; |
break; |
break; |
case (WMISSWIDTH): |
case (EMISSWIDTH): |
p = "missing width argument"; |
p = "missing width argument"; |
break; |
break; |
case (WPRINT): |
case (EWRONGMSEC): |
p = "invalid character"; |
p = "document section in wrong manual section"; |
break; |
break; |
case (WESCAPE): |
case (ESECOOO): |
p = "invalid escape sequence"; |
p = "document section out of conventional order"; |
break; |
break; |
case (WNOLINE): |
case (ESECREP): |
p = "suggested no line arguments"; |
p = "document section repeated"; |
break; |
break; |
case (WLINE): |
case (EBADSTAND): |
p = "suggested line arguments"; |
p = "unknown standard"; |
break; |
break; |
case (WMULTILINE): |
case (ENAMESECINC): |
p = "suggested multi-line arguments"; |
p = "NAME section contents incomplete/badly-ordered"; |
break; |
break; |
case (WNOMULTILINE): |
case (ENOMULTILINE): |
p = "suggested no multi-line arguments"; |
p = "suggested no multi-line arguments"; |
break; |
break; |
case (WWRONGMSEC): |
case (EMULTILINE): |
p = "document section in wrong manual section"; |
p = "suggested multi-line arguments"; |
break; |
break; |
case (WSECOOO): |
case (ENOLINE): |
p = "document section out of conventional order"; |
p = "suggested no line arguments"; |
break; |
break; |
case (WSECREP): |
case (EPROLOOO): |
p = "document section repeated"; |
p = "prologue macros out-of-order"; |
break; |
break; |
case (WBADSTAND): |
case (EPROLREP): |
p = "unknown standard"; |
p = "prologue macros repeated"; |
break; |
break; |
case (WNAMESECINC): |
case (EARGVAL): |
p = "NAME section contents incomplete/badly-ordered"; |
p = "argument value suggested"; |
break; |
break; |
|
case (EBADMSEC): |
|
p = "inappropriate manual section"; |
|
break; |
|
case (EBADSEC): |
|
p = "inappropriate document section"; |
|
break; |
} |
} |
|
|
assert(p); |
assert(p); |
|
|
|
if (iserr) |
|
return(mdoc_perr(m, line, pos, p)); |
|
|
return(mdoc_pwarn(m, line, pos, p)); |
return(mdoc_pwarn(m, line, pos, p)); |
} |
} |
|
|
Line 512 pwarn(struct mdoc *m, int line, int pos, enum mwarn ty |
|
Line 487 pwarn(struct mdoc *m, int line, int pos, enum mwarn ty |
|
static int |
static int |
warn_print(struct mdoc *m, int ln, int pos) |
warn_print(struct mdoc *m, int ln, int pos) |
{ |
{ |
if (MDOC_IGN_CHARS & m->pflags) |
|
return(pwarn(m, ln, pos, WPRINT)); |
return(perr(m, ln, pos, EPRINT, ! (MDOC_IGN_CHARS & m->flags))); |
return(perr(m, ln, pos, EPRINT)); |
|
} |
} |
|
|
|
|
Line 607 check_stdarg(PRE_ARGS) |
|
Line 581 check_stdarg(PRE_ARGS) |
|
if (n->args && 1 == n->args->argc) |
if (n->args && 1 == n->args->argc) |
if (MDOC_Std == n->args->argv[0].arg) |
if (MDOC_Std == n->args->argv[0].arg) |
return(1); |
return(1); |
return(nwarn(mdoc, n, WARGVAL)); |
return(nwarn(mdoc, n, EARGVAL)); |
} |
} |
|
|
|
|
Line 631 check_sec(PRE_ARGS, ...) |
|
Line 605 check_sec(PRE_ARGS, ...) |
|
} |
} |
|
|
va_end(ap); |
va_end(ap); |
return(nwarn(mdoc, n, WBADSEC)); |
return(nwarn(mdoc, n, EBADSEC)); |
} |
} |
|
|
|
|
Line 653 check_msec(PRE_ARGS, ...) |
|
Line 627 check_msec(PRE_ARGS, ...) |
|
} |
} |
|
|
va_end(ap); |
va_end(ap); |
return(nwarn(mdoc, n, WBADMSEC)); |
return(nwarn(mdoc, n, EBADMSEC)); |
} |
} |
|
|
|
|
Line 719 check_text(struct mdoc *mdoc, int line, int pos, const |
|
Line 693 check_text(struct mdoc *mdoc, int line, int pos, const |
|
continue; |
continue; |
} |
} |
if ( ! (MDOC_IGN_ESCAPE & mdoc->pflags)) |
if ( ! (MDOC_IGN_ESCAPE & mdoc->pflags)) |
return(perr(mdoc, line, pos, EESCAPE)); |
return(perr(mdoc, line, pos, EESCAPE, 1)); |
if ( ! pwarn(mdoc, line, pos, WESCAPE)) |
if ( ! perr(mdoc, line, pos, EESCAPE, 0)) |
return(0); |
return(0); |
} |
} |
|
|
Line 834 pre_bl(PRE_ARGS) |
|
Line 808 pre_bl(PRE_ARGS) |
|
|
|
switch (type) { |
switch (type) { |
case (MDOC_Tag): |
case (MDOC_Tag): |
if (-1 == width && ! nwarn(mdoc, n, WMISSWIDTH)) |
if (-1 == width && ! nwarn(mdoc, n, EMISSWIDTH)) |
return(0); |
return(0); |
break; |
break; |
case (MDOC_Column): |
case (MDOC_Column): |
Line 844 pre_bl(PRE_ARGS) |
|
Line 818 pre_bl(PRE_ARGS) |
|
case (MDOC_Inset): |
case (MDOC_Inset): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Item): |
case (MDOC_Item): |
if (-1 != width && ! nwarn(mdoc, n, WNOWIDTH)) |
if (-1 != width && ! nwarn(mdoc, n, ENOWIDTH)) |
return(0); |
return(0); |
break; |
break; |
default: |
default: |
Line 982 pre_dt(PRE_ARGS) |
|
Line 956 pre_dt(PRE_ARGS) |
|
{ |
{ |
|
|
if (0 == mdoc->meta.date || mdoc->meta.os) |
if (0 == mdoc->meta.date || mdoc->meta.os) |
if ( ! nwarn(mdoc, n, WPROLOOO)) |
if ( ! nwarn(mdoc, n, EPROLOOO)) |
return(0); |
return(0); |
if (mdoc->meta.title) |
if (mdoc->meta.title) |
if ( ! nwarn(mdoc, n, WPROLREP)) |
if ( ! nwarn(mdoc, n, EPROLREP)) |
return(0); |
return(0); |
return(1); |
return(1); |
} |
} |
Line 996 pre_os(PRE_ARGS) |
|
Line 970 pre_os(PRE_ARGS) |
|
{ |
{ |
|
|
if (NULL == mdoc->meta.title || 0 == mdoc->meta.date) |
if (NULL == mdoc->meta.title || 0 == mdoc->meta.date) |
if ( ! nwarn(mdoc, n, WPROLOOO)) |
if ( ! nwarn(mdoc, n, EPROLOOO)) |
return(0); |
return(0); |
if (mdoc->meta.os) |
if (mdoc->meta.os) |
if ( ! nwarn(mdoc, n, WPROLREP)) |
if ( ! nwarn(mdoc, n, EPROLREP)) |
return(0); |
return(0); |
return(1); |
return(1); |
} |
} |
Line 1010 pre_dd(PRE_ARGS) |
|
Line 984 pre_dd(PRE_ARGS) |
|
{ |
{ |
|
|
if (mdoc->meta.title || mdoc->meta.os) |
if (mdoc->meta.title || mdoc->meta.os) |
if ( ! nwarn(mdoc, n, WPROLOOO)) |
if ( ! nwarn(mdoc, n, EPROLOOO)) |
return(0); |
return(0); |
if (mdoc->meta.date) |
if (mdoc->meta.date) |
if ( ! nwarn(mdoc, n, WPROLREP)) |
if ( ! nwarn(mdoc, n, EPROLREP)) |
return(0); |
return(0); |
return(1); |
return(1); |
} |
} |
Line 1157 post_it(POST_ARGS) |
|
Line 1131 post_it(POST_ARGS) |
|
switch (type) { |
switch (type) { |
case (MDOC_Tag): |
case (MDOC_Tag): |
if (NULL == mdoc->last->head->child) |
if (NULL == mdoc->last->head->child) |
if ( ! vwarn(mdoc, WLINE)) |
if ( ! vwarn(mdoc, ELINE)) |
return(0); |
return(0); |
break; |
break; |
case (MDOC_Hang): |
case (MDOC_Hang): |
Line 1168 post_it(POST_ARGS) |
|
Line 1142 post_it(POST_ARGS) |
|
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Diag): |
case (MDOC_Diag): |
if (NULL == mdoc->last->head->child) |
if (NULL == mdoc->last->head->child) |
if ( ! vwarn(mdoc, WLINE)) |
if ( ! vwarn(mdoc, ELINE)) |
return(0); |
return(0); |
if (NULL == mdoc->last->body->child) |
if (NULL == mdoc->last->body->child) |
if ( ! vwarn(mdoc, WMULTILINE)) |
if ( ! vwarn(mdoc, EMULTILINE)) |
return(0); |
return(0); |
break; |
break; |
case (MDOC_Bullet): |
case (MDOC_Bullet): |
Line 1184 post_it(POST_ARGS) |
|
Line 1158 post_it(POST_ARGS) |
|
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Item): |
case (MDOC_Item): |
if (mdoc->last->head->child) |
if (mdoc->last->head->child) |
if ( ! vwarn(mdoc, WNOLINE)) |
if ( ! vwarn(mdoc, ENOLINE)) |
return(0); |
return(0); |
if (NULL == mdoc->last->body->child) |
if (NULL == mdoc->last->body->child) |
if ( ! vwarn(mdoc, WMULTILINE)) |
if ( ! vwarn(mdoc, EMULTILINE)) |
return(0); |
return(0); |
break; |
break; |
case (MDOC_Column): |
case (MDOC_Column): |
if (NULL == mdoc->last->head->child) |
if (NULL == mdoc->last->head->child) |
if ( ! vwarn(mdoc, WLINE)) |
if ( ! vwarn(mdoc, ELINE)) |
return(0); |
return(0); |
if (mdoc->last->body->child) |
if (mdoc->last->body->child) |
if ( ! vwarn(mdoc, WNOMULTILINE)) |
if ( ! vwarn(mdoc, ENOMULTILINE)) |
return(0); |
return(0); |
c = mdoc->last->child; |
c = mdoc->last->child; |
for (i = 0; c && MDOC_HEAD == c->type; c = c->next) |
for (i = 0; c && MDOC_HEAD == c->type; c = c->next) |
Line 1306 post_st(POST_ARGS) |
|
Line 1280 post_st(POST_ARGS) |
|
|
|
if (mdoc_a2st(mdoc->last->child->string)) |
if (mdoc_a2st(mdoc->last->child->string)) |
return(1); |
return(1); |
return(vwarn(mdoc, WBADSTAND)); |
return(vwarn(mdoc, EBADSTAND)); |
} |
} |
|
|
|
|
Line 1338 post_sh_body(POST_ARGS) |
|
Line 1312 post_sh_body(POST_ARGS) |
|
*/ |
*/ |
|
|
if (NULL == (n = mdoc->last->child)) |
if (NULL == (n = mdoc->last->child)) |
return(vwarn(mdoc, WNAMESECINC)); |
return(vwarn(mdoc, ENAMESECINC)); |
|
|
for ( ; n && n->next; n = n->next) { |
for ( ; n && n->next; n = n->next) { |
if (MDOC_ELEM == n->type && MDOC_Nm == n->tok) |
if (MDOC_ELEM == n->type && MDOC_Nm == n->tok) |
continue; |
continue; |
if (MDOC_TEXT == n->type) |
if (MDOC_TEXT == n->type) |
continue; |
continue; |
if ( ! vwarn(mdoc, WNAMESECINC)) |
if ( ! vwarn(mdoc, ENAMESECINC)) |
return(0); |
return(0); |
} |
} |
|
|
if (MDOC_ELEM == n->type && MDOC_Nd == n->tok) |
if (MDOC_ELEM == n->type && MDOC_Nd == n->tok) |
return(1); |
return(1); |
return(vwarn(mdoc, WNAMESECINC)); |
return(vwarn(mdoc, ENAMESECINC)); |
} |
} |
|
|
|
|
Line 1395 post_sh_head(POST_ARGS) |
|
Line 1369 post_sh_head(POST_ARGS) |
|
if (SEC_CUSTOM == sec) |
if (SEC_CUSTOM == sec) |
return(1); |
return(1); |
if (sec == mdoc->lastnamed) |
if (sec == mdoc->lastnamed) |
return(vwarn(mdoc, WSECREP)); |
return(vwarn(mdoc, ESECREP)); |
if (sec < mdoc->lastnamed) |
if (sec < mdoc->lastnamed) |
return(vwarn(mdoc, WSECOOO)); |
return(vwarn(mdoc, ESECOOO)); |
|
|
/* |
/* |
* Check particular section/manual conventions. LIBRARY can |
* Check particular section/manual conventions. LIBRARY can |
Line 1412 post_sh_head(POST_ARGS) |
|
Line 1386 post_sh_head(POST_ARGS) |
|
case (3): |
case (3): |
break; |
break; |
default: |
default: |
return(vwarn(mdoc, WWRONGMSEC)); |
return(vwarn(mdoc, EWRONGMSEC)); |
} |
} |
break; |
break; |
default: |
default: |