=================================================================== RCS file: /cvs/mandoc/mdoc.c,v retrieving revision 1.41 retrieving revision 1.44 diff -u -p -r1.41 -r1.44 --- mandoc/mdoc.c 2009/01/20 13:44:05 1.41 +++ mandoc/mdoc.c 2009/01/21 11:35:26 1.44 @@ -1,4 +1,4 @@ -/* $Id: mdoc.c,v 1.41 2009/01/20 13:44:05 kristaps Exp $ */ +/* $Id: mdoc.c,v 1.44 2009/01/21 11:35:26 kristaps Exp $ */ /* * Copyright (c) 2008 Kristaps Dzonsons * @@ -105,21 +105,21 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { { macro_scoped_close, MDOC_EXPLICIT }, /* Ed */ { macro_scoped, MDOC_EXPLICIT }, /* Bl */ { macro_scoped_close, MDOC_EXPLICIT }, /* El */ - { macro_scoped, MDOC_PARSED | MDOC_TABSEP}, /* It */ + { macro_scoped, MDOC_PARSED }, /* It */ { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Ad */ { macro_text, MDOC_PARSED }, /* An */ { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Ar */ - { macro_constant, MDOC_QUOTABLE }, /* Cd */ + { macro_constant, 0 }, /* Cd */ { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Cm */ { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Dv */ { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Er */ { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Ev */ { macro_constant, 0 }, /* Ex */ - { macro_text, MDOC_CALLABLE | MDOC_QUOTABLE | MDOC_PARSED }, /* Fa */ + { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Fa */ { macro_constant, 0 }, /* Fd */ { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Fl */ - { macro_text, MDOC_CALLABLE | MDOC_QUOTABLE | MDOC_PARSED }, /* Fn */ - { macro_text, MDOC_PARSED | MDOC_QUOTABLE }, /* Ft */ + { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Fn */ + { macro_text, MDOC_PARSED }, /* Ft */ { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Ic */ { macro_constant, 0 }, /* In */ { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Li */ @@ -134,17 +134,17 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Va */ { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Vt */ { macro_text, MDOC_CALLABLE | MDOC_PARSED }, /* Xr */ - { macro_constant, MDOC_QUOTABLE }, /* %A */ - { macro_constant, MDOC_QUOTABLE }, /* %B */ - { macro_constant, MDOC_QUOTABLE }, /* %D */ - { macro_constant, MDOC_QUOTABLE }, /* %I */ - { macro_constant, MDOC_QUOTABLE }, /* %J */ - { macro_constant, MDOC_QUOTABLE }, /* %N */ - { macro_constant, MDOC_QUOTABLE }, /* %O */ - { macro_constant, MDOC_QUOTABLE }, /* %P */ - { macro_constant, MDOC_QUOTABLE }, /* %R */ - { macro_constant, MDOC_QUOTABLE }, /* %T */ - { macro_constant, MDOC_QUOTABLE }, /* %V */ + { macro_constant, 0 }, /* %A */ + { macro_constant, 0 }, /* %B */ + { macro_constant, 0 }, /* %D */ + { macro_constant, 0 }, /* %I */ + { macro_constant, 0 }, /* %J */ + { macro_constant, 0 }, /* %N */ + { macro_constant, 0 }, /* %O */ + { macro_constant, 0 }, /* %P */ + { macro_constant, 0 }, /* %R */ + { macro_constant, 0 }, /* %T */ + { macro_constant, 0 }, /* %V */ { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Ac */ { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Ao */ { macro_scoped_line, MDOC_CALLABLE | MDOC_PARSED }, /* Aq */ @@ -190,9 +190,9 @@ const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Xc */ { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Xo */ /* XXX - .Fo supposed to be (but isn't) callable. */ - { macro_scoped, MDOC_EXPLICIT | MDOC_PARSED }, /* Fo */ + { macro_scoped, MDOC_EXPLICIT }, /* Fo */ /* XXX - .Fc supposed to be (but isn't) callable. */ - { macro_scoped_close, MDOC_EXPLICIT | MDOC_PARSED }, /* Fc */ + { macro_scoped_close, MDOC_EXPLICIT }, /* Fc */ { macro_constant_scoped, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Oo */ { macro_scoped_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Oc */ { macro_scoped, MDOC_EXPLICIT }, /* Bk */ @@ -305,8 +305,8 @@ mdoc_parseln(struct mdoc *mdoc, int line, char *buf) mdoc->linetok = 0; if ('.' != *buf) { - if ( ! (MDOC_BODYPARSE & mdoc->flags)) - return(mdoc_perr(mdoc, line, 0, "text disallowed")); + if (SEC_PROLOGUE == mdoc->lastnamed) + return(mdoc_perr(mdoc, line, 0, "text disallowed in document prologue")); if ( ! mdoc_word_alloc(mdoc, line, 0, buf)) return(0); mdoc->next = MDOC_NEXT_SIBLING; @@ -318,7 +318,7 @@ mdoc_parseln(struct mdoc *mdoc, int line, char *buf) return(1); i = 1; - while (buf[i] && ! isspace(buf[i]) && i < (int)sizeof(tmp)) + while (buf[i] && ! isspace((int)buf[i]) && i < (int)sizeof(tmp)) i++; if (i == (int)sizeof(tmp)) { @@ -339,7 +339,7 @@ mdoc_parseln(struct mdoc *mdoc, int line, char *buf) return(mdoc_perr(mdoc, line, 1, "unknown macro")); } - while (buf[i] && isspace(buf[i])) + while (buf[i] && isspace((int)buf[i])) i++; if ( ! mdoc_macro(mdoc, c, line, 1, &i, buf)) { @@ -407,9 +407,12 @@ mdoc_macro(struct mdoc *mdoc, int tok, assert(mdoc_macros[tok].fp); - if ( ! (MDOC_PROLOGUE & mdoc_macros[tok].flags) && - ! (MDOC_BODYPARSE & mdoc->flags)) - return(mdoc_perr(mdoc, ln, ppos, "macro disallowed: not in document body")); + if (MDOC_PROLOGUE & mdoc_macros[tok].flags && + SEC_PROLOGUE != mdoc->lastnamed) + return(mdoc_perr(mdoc, ln, ppos, "macro disallowed in document body")); + if ( ! (MDOC_PROLOGUE & mdoc_macros[tok].flags) && + SEC_PROLOGUE == mdoc->lastnamed) + return(mdoc_perr(mdoc, ln, ppos, "macro disallowed in document prologue")); if (1 != ppos && ! (MDOC_CALLABLE & mdoc_macros[tok].flags)) return(mdoc_perr(mdoc, ln, ppos, "macro not callable")); return((*mdoc_macros[tok].fp)(mdoc, tok, ln, ppos, pos, buf));