=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/mdoc_validate.c,v retrieving revision 1.8 retrieving revision 1.9 diff -c -r1.8 -r1.9 *** src/usr.bin/mandoc/mdoc_validate.c 2009/06/19 00:07:06 1.8 --- src/usr.bin/mandoc/mdoc_validate.c 2009/06/19 07:20:19 1.9 *************** *** 1,4 **** ! /* $Id: mdoc_validate.c,v 1.8 2009/06/19 00:07:06 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * --- 1,4 ---- ! /* $Id: mdoc_validate.c,v 1.9 2009/06/19 07:20:19 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * *************** *** 42,47 **** --- 42,48 ---- ELISTTYPE, EDISPTYPE, EMULTIDISP, + ESECNAME, EMULTILIST, EARGREP, EBOOL, *************** *** 116,122 **** static int pre_it(PRE_ARGS); static int pre_lb(PRE_ARGS); static int pre_os(PRE_ARGS); - static int pre_prologue(PRE_ARGS); static int pre_rv(PRE_ARGS); static int pre_sh(PRE_ARGS); static int pre_ss(PRE_ARGS); --- 117,122 ---- *************** *** 155,169 **** static v_pre pres_bd[] = { pre_display, pre_bd, NULL }; static v_pre pres_bl[] = { pre_bl, NULL }; static v_pre pres_cd[] = { pre_cd, NULL }; ! static v_pre pres_dd[] = { pre_prologue, pre_dd, NULL }; static v_pre pres_d1[] = { pre_display, NULL }; ! static v_pre pres_dt[] = { pre_prologue, pre_dt, NULL }; static v_pre pres_er[] = { pre_er, NULL }; static v_pre pres_ex[] = { pre_ex, NULL }; static v_pre pres_fd[] = { pre_fd, NULL }; static v_pre pres_it[] = { pre_it, NULL }; static v_pre pres_lb[] = { pre_lb, NULL }; ! static v_pre pres_os[] = { pre_prologue, pre_os, NULL }; static v_pre pres_rv[] = { pre_rv, NULL }; static v_pre pres_sh[] = { pre_sh, NULL }; static v_pre pres_ss[] = { pre_ss, NULL }; --- 155,169 ---- static v_pre pres_bd[] = { pre_display, pre_bd, NULL }; static v_pre pres_bl[] = { pre_bl, NULL }; static v_pre pres_cd[] = { pre_cd, NULL }; ! static v_pre pres_dd[] = { pre_dd, NULL }; static v_pre pres_d1[] = { pre_display, NULL }; ! static v_pre pres_dt[] = { pre_dt, NULL }; static v_pre pres_er[] = { pre_er, NULL }; static v_pre pres_ex[] = { pre_ex, NULL }; static v_pre pres_fd[] = { pre_fd, NULL }; static v_pre pres_it[] = { pre_it, NULL }; static v_pre pres_lb[] = { pre_lb, NULL }; ! static v_pre pres_os[] = { pre_os, NULL }; static v_pre pres_rv[] = { pre_rv, NULL }; static v_pre pres_sh[] = { pre_sh, NULL }; static v_pre pres_ss[] = { pre_ss, NULL }; *************** *** 408,413 **** --- 408,416 ---- case (EDISPTYPE): p = "missing display type"; break; + case (ESECNAME): + p = "the NAME section must come first"; + break; case (ELINE): p = "expected line arguments"; break; *************** *** 1014,1027 **** static int - pre_prologue(PRE_ARGS) - { - - return(check_sec(mdoc, n, SEC_PROLOGUE, SEC_CUSTOM)); - } - - - static int pre_dt(PRE_ARGS) { --- 1017,1022 ---- *************** *** 1308,1314 **** if (NULL == mdoc->first->child) return(verr(mdoc, ENODATA)); ! if (SEC_PROLOGUE == mdoc->lastnamed) return(verr(mdoc, ENOPROLOGUE)); if (MDOC_BLOCK != mdoc->first->child->type) --- 1303,1309 ---- if (NULL == mdoc->first->child) return(verr(mdoc, ENODATA)); ! if ( ! (MDOC_PBODY & mdoc->flags)) return(verr(mdoc, ENOPROLOGUE)); if (MDOC_BLOCK != mdoc->first->child->type) *************** *** 1389,1401 **** * certain manual sections. */ - assert(MDOC_Sh == mdoc->last->tok); - - /* This is just concat() inlined, which is irritating. */ - buf[0] = 0; for (n = mdoc->last->child; n; n = n->next) { assert(MDOC_TEXT == n->type); if (strlcat(buf, n->string, 64) >= 64) return(nerr(mdoc, n, ETOOLONG)); if (NULL == n->next) --- 1384,1395 ---- * certain manual sections. */ buf[0] = 0; + for (n = mdoc->last->child; n; n = n->next) { + /* XXX - copied from compact(). */ assert(MDOC_TEXT == n->type); + if (strlcat(buf, n->string, 64) >= 64) return(nerr(mdoc, n, ETOOLONG)); if (NULL == n->next) *************** *** 1406,1426 **** sec = mdoc_atosec(buf); ! /* The NAME section should always be first. */ ! if (SEC_BODY == mdoc->lastnamed && SEC_NAME != sec) ! return(vwarn(mdoc, WSECOOO)); if (SEC_CUSTOM == sec) return(1); - - /* Check for repeated or out-of-order sections. */ - if (sec == mdoc->lastnamed) return(vwarn(mdoc, WSECREP)); if (sec < mdoc->lastnamed) return(vwarn(mdoc, WSECOOO)); ! /* Check particular section/manual section conventions. */ switch (sec) { case (SEC_LIBRARY): --- 1400,1423 ---- sec = mdoc_atosec(buf); ! /* ! * Check: NAME should always be first, CUSTOM has no roles, ! * non-CUSTOM has a conventional order to be followed. ! */ ! if (SEC_NAME != sec && SEC_NONE == mdoc->lastnamed) ! return(verr(mdoc, ESECNAME)); if (SEC_CUSTOM == sec) return(1); if (sec == mdoc->lastnamed) return(vwarn(mdoc, WSECREP)); if (sec < mdoc->lastnamed) return(vwarn(mdoc, WSECOOO)); ! /* ! * Check particular section/manual conventions. LIBRARY can ! * only occur in msec 2, 3 (TODO: are there more of these?). ! */ switch (sec) { case (SEC_LIBRARY):