=================================================================== RCS file: /cvs/mandoc/mdoc_argv.c,v retrieving revision 1.47 retrieving revision 1.50 diff -u -p -r1.47 -r1.50 --- mandoc/mdoc_argv.c 2010/05/15 04:47:38 1.47 +++ mandoc/mdoc_argv.c 2010/05/30 23:59:59 1.50 @@ -1,4 +1,4 @@ -/* $Id: mdoc_argv.c,v 1.47 2010/05/15 04:47:38 kristaps Exp $ */ +/* $Id: mdoc_argv.c,v 1.50 2010/05/30 23:59:59 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -26,6 +26,7 @@ #include #include +#include "mandoc.h" #include "libmdoc.h" #include "libmandoc.h" @@ -338,7 +339,7 @@ enum margserr mdoc_args(struct mdoc *m, int line, int *pos, char *buf, enum mdoct tok, char **v) { - int fl, c, i; + int fl; struct mdoc_node *n; fl = mdoc_argflags[tok]; @@ -346,26 +347,13 @@ mdoc_args(struct mdoc *m, int line, int *pos, if (MDOC_It != tok) return(args(m, line, pos, buf, fl, v)); - /* - * The `It' macro is a special case, as it acquires parameters from its - * parent `Bl' context, specifically, we're concerned with -column. - */ - for (n = m->last; n; n = n->parent) - if (MDOC_BLOCK == n->type && MDOC_Bl == n->tok) + if (MDOC_Bl == n->tok) break; - assert(n); - c = (int)(n->args ? n->args->argc : 0); - assert(c > 0); - - /* LINTED */ - for (i = 0; i < c; i++) { - if (MDOC_Column != n->args->argv[i].arg) - continue; + if (n && LIST_column == n->data.list) { fl |= ARGS_TABSEP; fl &= ~ARGS_DELIM; - break; } return(args(m, line, pos, buf, fl, v)); @@ -407,7 +395,7 @@ args(struct mdoc *m, int line, int *pos, * is unterminated. */ if (MDOC_PHRASELIT & m->flags) - if ( ! mdoc_pwarn(m, line, *pos, EQUOTTERM)) + if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_BADQUOTE)) return(ARGS_ERROR); m->flags &= ~MDOC_PHRASELIT; @@ -421,9 +409,10 @@ args(struct mdoc *m, int line, int *pos, * we ONLY care about closing delimiters. */ - if ((fl & ARGS_DELIM) && mdoc_iscdelim(buf[*pos]) > 1) { + if ((fl & ARGS_DELIM) && DELIM_CLOSE == mdoc_iscdelim(buf[*pos])) { for (i = *pos; buf[i]; ) { - if (mdoc_iscdelim(buf[i]) < 2) + enum mdelim d = mdoc_iscdelim(buf[i]); + if (DELIM_NONE == d || DELIM_OPEN == d) break; i++; if ('\0' == buf[i] || ' ' != buf[i]) @@ -439,7 +428,7 @@ args(struct mdoc *m, int line, int *pos, return(ARGS_PUNCT); if (ARGS_NOWARN & fl) return(ARGS_PUNCT); - if ( ! mdoc_pwarn(m, line, *pos, ETAILWS)) + if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE)) return(ARGS_ERROR); return(ARGS_PUNCT); } @@ -494,7 +483,7 @@ args(struct mdoc *m, int line, int *pos, /* Whitespace check for eoln case... */ if (0 == *p && ' ' == *(p - 1) && ! (ARGS_NOWARN & fl)) - if ( ! mdoc_pwarn(m, line, *pos, ETAILWS)) + if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE)) return(ARGS_ERROR); *pos += (int)(p - *v); @@ -539,7 +528,7 @@ args(struct mdoc *m, int line, int *pos, if ('\0' == buf[*pos]) { if (ARGS_NOWARN & fl || MDOC_PPHRASE & m->flags) return(ARGS_QWORD); - if ( ! mdoc_pwarn(m, line, *pos, EQUOTTERM)) + if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_BADQUOTE)) return(ARGS_ERROR); return(ARGS_QWORD); } @@ -554,7 +543,7 @@ args(struct mdoc *m, int line, int *pos, (*pos)++; if (0 == buf[*pos] && ! (ARGS_NOWARN & fl)) - if ( ! mdoc_pwarn(m, line, *pos, ETAILWS)) + if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE)) return(ARGS_ERROR); return(ARGS_QWORD); @@ -578,7 +567,7 @@ args(struct mdoc *m, int line, int *pos, (*pos)++; if ('\0' == buf[*pos] && ! (ARGS_NOWARN & fl)) - if ( ! mdoc_pwarn(m, line, *pos, ETAILWS)) + if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE)) return(ARGS_ERROR); return(ARGS_WORD); @@ -750,10 +739,11 @@ argv_single(struct mdoc *m, int line, ppos = *pos; ac = args(m, line, pos, buf, 0, &p); - if (ARGS_ERROR == ac) + if (ARGS_EOLN == ac) { + mdoc_pmsg(m, line, ppos, MANDOCERR_SYNTARGVCOUNT); return(0); - if (ARGS_EOLN == ac) - return(mdoc_perr(m, line, ppos, EARGVAL)); + } else if (ARGS_ERROR == ac) + return(0); v->sz = 1; v->value = mandoc_malloc(sizeof(char *));