=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/mdoc_argv.c,v retrieving revision 1.29 retrieving revision 1.30 diff -c -r1.29 -r1.30 *** src/usr.bin/mandoc/mdoc_argv.c 2010/05/23 22:45:00 1.29 --- src/usr.bin/mandoc/mdoc_argv.c 2010/06/06 20:30:08 1.30 *************** *** 1,4 **** ! /* $Id: mdoc_argv.c,v 1.29 2010/05/23 22:45:00 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * --- 1,4 ---- ! /* $Id: mdoc_argv.c,v 1.30 2010/06/06 20:30:08 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * *************** *** 206,211 **** --- 206,212 ---- 0, /* br */ 0, /* sp */ 0, /* %U */ + 0, /* Ta */ }; *************** *** 222,228 **** struct mdoc_argv tmp; struct mdoc_arg *arg; ! if (0 == buf[*pos]) return(ARGV_EOLN); assert(' ' != buf[*pos]); --- 223,229 ---- struct mdoc_argv tmp; struct mdoc_arg *arg; ! if ('\0' == buf[*pos]) return(ARGV_EOLN); assert(' ' != buf[*pos]); *************** *** 243,252 **** /* XXX - save zeroed byte, if not an argument. */ ! sv = 0; if (buf[*pos]) { sv = buf[*pos]; ! buf[(*pos)++] = 0; } (void)memset(&tmp, 0, sizeof(struct mdoc_argv)); --- 244,253 ---- /* XXX - save zeroed byte, if not an argument. */ ! sv = '\0'; if (buf[*pos]) { sv = buf[*pos]; ! buf[(*pos)++] = '\0'; } (void)memset(&tmp, 0, sizeof(struct mdoc_argv)); *************** *** 335,341 **** mdoc_args(struct mdoc *m, int line, int *pos, char *buf, enum mdoct tok, char **v) { ! int fl, c, i; struct mdoc_node *n; fl = mdoc_argflags[tok]; --- 336,342 ---- mdoc_args(struct mdoc *m, int line, int *pos, char *buf, enum mdoct tok, char **v) { ! int fl; struct mdoc_node *n; fl = mdoc_argflags[tok]; *************** *** 343,368 **** 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) 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; fl |= ARGS_TABSEP; fl &= ~ARGS_DELIM; - break; } return(args(m, line, pos, buf, fl, v)); --- 344,363 ---- if (MDOC_It != tok) return(args(m, line, pos, buf, fl, v)); ! /* ! * We know that we're in an `It', so it's reasonable to expect ! * us to be sitting in a `Bl'. Someday this may not be the case ! * (if we allow random `It's sitting out there), so provide a ! * safe fall-back into the default behaviour. */ for (n = m->last; n; n = n->parent) ! if (MDOC_Bl == n->tok) break; ! if (n && LIST_column == n->data.list) { fl |= ARGS_TABSEP; fl &= ~ARGS_DELIM; } return(args(m, line, pos, buf, fl, v)); *************** *** 373,381 **** args(struct mdoc *m, int line, int *pos, char *buf, int fl, char **v) { ! int i; ! char *p, *pp; ! enum margserr rc; /* * Parse out the terms (like `val' in `.Xx -arg val' or simply --- 368,377 ---- args(struct mdoc *m, int line, int *pos, char *buf, int fl, char **v) { ! int i; ! char *p, *pp; ! enum margserr rc; ! enum mdelim d; /* * Parse out the terms (like `val' in `.Xx -arg val' or simply *************** *** 392,398 **** * phrases like in `Bl -column'. */ - assert(*pos); assert(' ' != buf[*pos]); if ('\0' == buf[*pos]) { --- 388,393 ---- *************** *** 420,426 **** if ((fl & ARGS_DELIM) && DELIM_CLOSE == mdoc_iscdelim(buf[*pos])) { for (i = *pos; buf[i]; ) { ! enum mdelim d = mdoc_iscdelim(buf[i]); if (DELIM_NONE == d || DELIM_OPEN == d) break; i++; --- 415,421 ---- if ((fl & ARGS_DELIM) && DELIM_CLOSE == mdoc_iscdelim(buf[*pos])) { for (i = *pos; buf[i]; ) { ! d = mdoc_iscdelim(buf[i]); if (DELIM_NONE == d || DELIM_OPEN == d) break; i++; *************** *** 433,439 **** if ('\0' == buf[i]) { *v = &buf[*pos]; ! if (' ' != buf[i - 1]) return(ARGS_PUNCT); if (ARGS_NOWARN & fl) return(ARGS_PUNCT); --- 428,434 ---- if ('\0' == buf[i]) { *v = &buf[*pos]; ! if (i && ' ' != buf[i - 1]) return(ARGS_PUNCT); if (ARGS_NOWARN & fl) return(ARGS_PUNCT); *************** *** 464,470 **** break; if (pp > *v && ' ' != *(pp - 1)) continue; ! if (' ' == *(pp + 2) || 0 == *(pp + 2)) break; } --- 459,465 ---- break; if (pp > *v && ' ' != *(pp - 1)) continue; ! if (' ' == *(pp + 2) || '\0' == *(pp + 2)) break; } *************** *** 491,497 **** } /* Whitespace check for eoln case... */ ! if (0 == *p && ' ' == *(p - 1) && ! (ARGS_NOWARN & fl)) if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE)) return(ARGS_ERROR); --- 486,492 ---- } /* Whitespace check for eoln case... */ ! if ('\0' == *p && ' ' == *(p - 1) && ! (ARGS_NOWARN & fl)) if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE)) return(ARGS_ERROR); *************** *** 564,570 **** */ for ( ; buf[*pos]; (*pos)++) ! if (' ' == buf[*pos] && '\\' != buf[*pos - 1]) break; if ('\0' == buf[*pos]) --- 559,565 ---- */ for ( ; buf[*pos]; (*pos)++) ! if (*pos && ' ' == buf[*pos] && '\\' != buf[*pos - 1]) break; if ('\0' == buf[*pos])