]> git.cameronkatri.com Git - mandoc.git/blobdiff - man_validate.c
Tidy up www page: remove all sorts of DIV crap, superfluous CSS, in-line
[mandoc.git] / man_validate.c
index 03bb120f56422b8f3b053b5511071ea645e69ada..e744ed3cf37bca3477a4ce4ed9b9b7db119b6cea 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: man_validate.c,v 1.67 2011/03/22 15:30:30 kristaps Exp $ */
+/*     $Id: man_validate.c,v 1.68 2011/04/09 15:29:40 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -54,7 +54,7 @@ static        int       check_par(CHKARGS);
 static int       check_part(CHKARGS);
 static int       check_root(CHKARGS);
 static int       check_sec(CHKARGS);
-static int       check_text(CHKARGS);
+static void      check_text(CHKARGS);
 
 static int       post_AT(CHKARGS);
 static int       post_fi(CHKARGS);
@@ -151,7 +151,8 @@ man_valid_post(struct man *m)
 
        switch (m->last->type) {
        case (MAN_TEXT): 
-               return(check_text(m, m->last));
+               check_text(m, m->last);
+               return(1);
        case (MAN_ROOT):
                return(check_root(m, m->last));
        case (MAN_EQN):
@@ -204,43 +205,48 @@ check_root(CHKARGS)
        return(1);
 }
 
-
-static int
+static void
 check_text(CHKARGS) 
 {
-       char            *p;
-       int              pos, c;
+       char            *p, *pp, *cpp;
+       int              pos;
        size_t           sz;
 
-       for (p = n->string, pos = n->pos + 1; *p; p++, pos++) {
-               sz = strcspn(p, "\t\\");
-               p += (int)sz;
+       p = n->string;
+       pos = n->pos + 1;
 
-               if ('\0' == *p)
-                       break;
+       while ('\0' != *p) {
+               sz = strcspn(p, "\t\\");
 
+               p += (int)sz;
                pos += (int)sz;
 
                if ('\t' == *p) {
-                       if (MAN_LITERAL & m->flags)
-                               continue;
-                       man_pmsg(m, n->line, pos, MANDOCERR_BADTAB);
+                       if ( ! (MAN_LITERAL & m->flags))
+                               man_pmsg(m, n->line, pos, MANDOCERR_BADTAB);
+                       p++;
+                       pos++;
                        continue;
-               }
+               } else if ('\0' == *p)
+                       break;
 
-               /* Check the special character. */
+               pos++;
+               pp = ++p;
 
-               c = mandoc_special(p);
-               if (c) {
-                       p += c - 1;
-                       pos += c - 1;
-               } else
+               if (ESCAPE_ERROR == mandoc_escape
+                               ((const char **)&pp, NULL, NULL)) {
                        man_pmsg(m, n->line, pos, MANDOCERR_BADESCAPE);
-       }
+                       break;
+               }
 
-       return(1);
-}
+               cpp = p;
+               while (NULL != (cpp = memchr(cpp, ASCII_HYPH, pp - cpp)))
+                       *cpp = '-';
 
+               pos += pp - p;
+               p = pp;
+       }
+}
 
 #define        INEQ_DEFINE(x, ineq, name) \
 static int \