]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_validate.c
Fixed email address in manual AUTHOR reference.
[mandoc.git] / mdoc_validate.c
index c9070dccb48e40442456c97270f5dd4feb4d81f2..9d8226321ead6166e3da15631c1aaf433a259f6e 100644 (file)
@@ -1,20 +1,18 @@
-/* $Id: mdoc_validate.c,v 1.3 2009/04/02 16:37:40 kristaps Exp $ */
+/*     $Id: mdoc_validate.c,v 1.7 2009/06/10 20:18:43 kristaps Exp $ */
 /*
- * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@openbsd.org>
+ * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
  * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the
- * above copyright notice and this permission notice appear in all
- * copies.
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
  *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
- * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
- * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 #include <sys/types.h>
 
@@ -51,6 +49,7 @@ enum  merr {
 };
 
 enum   mwarn {
+       WPRINT,
        WESCAPE,
        WWRONGMSEC,
        WSECOOO,
@@ -95,6 +94,7 @@ static        int     warn_child_gt(struct mdoc *, const char *, int);
 static int     err_child_eq(struct mdoc *, const char *, int);
 static int     warn_child_eq(struct mdoc *, const char *, int);
 static int     count_child(struct mdoc *);
+static int     warn_print(struct mdoc *, int, int);
 static int     warn_count(struct mdoc *, const char *, 
                        int, const char *, int);
 static int     err_count(struct mdoc *, const char *, 
@@ -460,6 +460,9 @@ pwarn(struct mdoc *m, int line, int pos, enum mwarn type)
                p = "prologue macros out-of-order";
                c = WARN_COMPAT;
                break;
+       case (WPRINT):
+               p = "invalid character";
+               break;
        case (WESCAPE):
                p = "invalid escape sequence";
                break;
@@ -497,6 +500,14 @@ pwarn(struct mdoc *m, int line, int pos, enum mwarn type)
 }
 
 
+static int
+warn_print(struct mdoc *m, int ln, int pos)
+{
+       if (MDOC_IGN_CHARS & m->pflags)
+               return(pwarn(m, ln, pos, WPRINT));
+       return(perr(m, ln, pos, EPRINT));
+}
+
 
 static inline int
 warn_count(struct mdoc *m, const char *k, 
@@ -699,9 +710,11 @@ check_text(struct mdoc *mdoc, int line, int pos, const char *p)
        for ( ; *p; p++) {
                if ('\t' == *p) {
                        if ( ! (MDOC_LITERAL & mdoc->flags))
-                               return(perr(mdoc, line, pos, EPRINT));
+                               if ( ! warn_print(mdoc, line, pos))
+                                       return(0);
                } else if ( ! isprint((u_char)*p))
-                       return(perr(mdoc, line, pos, EPRINT));
+                       if ( ! warn_print(mdoc, line, pos))
+                               return(0);
 
                if ('\\' != *p)
                        continue;
@@ -959,7 +972,7 @@ static int
 pre_er(PRE_ARGS)
 {
 
-       return(check_msec(mdoc, n, 2, 0));
+       return(check_msec(mdoc, n, 2, 3, 9, 0));
 }