diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-01-20 12:51:28 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-01-20 12:51:28 +0000 |
commit | ff707aa645312b3a39818f27c27f11dc06eca2d6 (patch) | |
tree | c6f5e809ed79a338048fc6ce2c1e6549493c33f3 /mdoc.c | |
parent | 850e4d98238e14f001698386740f660b1d4ea2df (diff) | |
download | mandoc-ff707aa645312b3a39818f27c27f11dc06eca2d6.tar.gz |
Moved prologue-pruning into action.c.
Added line-arg softmax.
Diffstat (limited to 'mdoc.c')
-rw-r--r-- | mdoc.c | 45 |
1 files changed, 33 insertions, 12 deletions
@@ -85,9 +85,9 @@ const char *const __mdoc_argnames[MDOC_ARG_MAX] = { const struct mdoc_macro __mdoc_macros[MDOC_MAX] = { { NULL, 0 }, /* \" */ - { macro_constant, MDOC_PROLOGUE | MDOC_NOKEEP }, /* Dd */ - { macro_constant, MDOC_PROLOGUE | MDOC_NOKEEP }, /* Dt */ - { macro_constant, MDOC_PROLOGUE | MDOC_NOKEEP }, /* Os */ + { macro_constant, MDOC_PROLOGUE }, /* Dd */ + { macro_constant, MDOC_PROLOGUE }, /* Dt */ + { macro_constant, MDOC_PROLOGUE }, /* Os */ { macro_scoped, 0 }, /* Sh */ { macro_scoped, 0 }, /* Ss */ { macro_text, 0 }, /* Pp */ @@ -295,14 +295,15 @@ mdoc_parseln(struct mdoc *mdoc, int line, char *buf) if (MDOC_HALT & mdoc->flags) return(0); + mdoc->linetok = 0; + if ('.' != *buf) { - if (SEC_PROLOGUE != mdoc->sec_lastn) { - if ( ! mdoc_word_alloc(mdoc, line, 0, buf)) - return(0); - mdoc->next = MDOC_NEXT_SIBLING; - return(1); - } - return(mdoc_perr(mdoc, line, 0, "text disallowed")); + if ( ! (MDOC_BODYPARSE & mdoc->flags)) + return(mdoc_perr(mdoc, line, 0, "text disallowed")); + if ( ! mdoc_word_alloc(mdoc, line, 0, buf)) + return(0); + mdoc->next = MDOC_NEXT_SIBLING; + return(1); } if (buf[1] && '\\' == buf[1]) @@ -400,8 +401,8 @@ mdoc_macro(struct mdoc *mdoc, int tok, assert(mdoc_macros[tok].fp); if ( ! (MDOC_PROLOGUE & mdoc_macros[tok].flags) && - SEC_PROLOGUE == mdoc->sec_lastn) - return(mdoc_perr(mdoc, ln, ppos, "macro disallowed in document prologue")); + ! (MDOC_BODYPARSE & mdoc->flags)) + return(mdoc_perr(mdoc, ln, ppos, "macro disallowed: not in document body")); 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)); @@ -417,6 +418,26 @@ mdoc_node_append(struct mdoc *mdoc, struct mdoc_node *p) assert(mdoc->first); assert(MDOC_ROOT != p->type); + /* See if we exceed the suggest line-max. */ + + switch (p->type) { + case (MDOC_TEXT): + /* FALLTHROUGH */ + case (MDOC_ELEM): + /* FALLTHROUGH */ + case (MDOC_BLOCK): + mdoc->linetok++; + break; + default: + break; + } + + if (mdoc->linetok > MDOC_LINEARG_SOFTMAX) + if ( ! mdoc_nwarn(mdoc, p, WARN_COMPAT, + "suggested %d tokens per line exceeded (has %d)", + MDOC_LINEARG_SOFTMAX, mdoc->linetok)) + return(0); + if (MDOC_TEXT == mdoc->last->type) on = "<text>"; else if (MDOC_ROOT == mdoc->last->type) |