=================================================================== RCS file: /cvs/mandoc/mdoc_validate.c,v retrieving revision 1.166 retrieving revision 1.167 diff -u -p -r1.166 -r1.167 --- mandoc/mdoc_validate.c 2011/04/03 09:53:50 1.166 +++ mandoc/mdoc_validate.c 2011/04/09 15:29:40 1.167 @@ -1,4 +1,4 @@ -/* $Id: mdoc_validate.c,v 1.166 2011/04/03 09:53:50 kristaps Exp $ */ +/* $Id: mdoc_validate.c,v 1.167 2011/04/09 15:29:40 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010, 2011 Ingo Schwarze @@ -545,31 +545,39 @@ check_argv(struct mdoc *m, struct mdoc_node *n, struct static void check_text(struct mdoc *m, int ln, int pos, char *p) { - int c; + char *cpp, *pp; size_t sz; - for ( ; *p; p++, pos++) { + while ('\0' != *p) { sz = strcspn(p, "\t\\"); - p += (int)sz; - if ('\0' == *p) - break; - + p += (int)sz; pos += (int)sz; if ('\t' == *p) { if ( ! (MDOC_LITERAL & m->flags)) mdoc_pmsg(m, ln, pos, MANDOCERR_BADTAB); + p++; + pos++; continue; - } + } else if ('\0' == *p) + break; - if (0 == (c = mandoc_special(p))) { + pos++; + pp = ++p; + + if (ESCAPE_ERROR == mandoc_escape + ((const char **)&pp, NULL, NULL)) { mdoc_pmsg(m, ln, pos, MANDOCERR_BADESCAPE); - continue; + break; } - p += c - 1; - pos += c - 1; + cpp = p; + while (NULL != (cpp = memchr(cpp, ASCII_HYPH, pp - cpp))) + *cpp = '-'; + + pos += pp - p; + p = pp; } }