]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_validate.c
better error message if mandocd is not found
[mandoc.git] / mdoc_validate.c
index 82c5e43c6bc4ccda6c52d4f4bf9465e34d8ff975..a92d407773dd2166c73a2aeb01303c32c0aae6f2 100644 (file)
@@ -1,6 +1,6 @@
-/* $Id: mdoc_validate.c,v 1.384 2020/04/08 11:56:03 schwarze Exp $ */
+/* $Id: mdoc_validate.c,v 1.390 2021/10/04 14:19:14 schwarze Exp $ */
 /*
- * Copyright (c) 2010-2020 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2010-2021 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org>
  *
 #include "mandoc.h"
 #include "mandoc_xr.h"
 #include "roff.h"
-#include "tag.h"
 #include "mdoc.h"
 #include "libmandoc.h"
 #include "roff_int.h"
 #include "libmdoc.h"
+#include "tag.h"
 
 /* FIXME: .Bl -diag can't have non-text children in HEAD. */
 
@@ -92,6 +92,7 @@ static        void     post_es(POST_ARGS);
 static void     post_eoln(POST_ARGS);
 static void     post_ex(POST_ARGS);
 static void     post_fa(POST_ARGS);
+static void     post_fl(POST_ARGS);
 static void     post_fn(POST_ARGS);
 static void     post_fname(POST_ARGS);
 static void     post_fo(POST_ARGS);
@@ -150,7 +151,7 @@ static      const v_post mdoc_valids[MDOC_MAX - MDOC_Dd] = {
        post_ex,        /* Ex */
        post_fa,        /* Fa */
        NULL,           /* Fd */
-       post_tag,       /* Fl */
+       post_fl,        /* Fl */
        post_fn,        /* Fn */
        post_delim_nb,  /* Ft */
        post_tag,       /* Ic */
@@ -163,7 +164,7 @@ static      const v_post mdoc_valids[MDOC_MAX - MDOC_Dd] = {
        post_defaults,  /* Pa */
        post_rv,        /* Rv */
        post_st,        /* St */
-       post_delim_nb,  /* Va */
+       post_tag,       /* Va */
        post_delim_nb,  /* Vt */
        post_xr,        /* Xr */
        NULL,           /* %A */
@@ -1627,6 +1628,29 @@ post_es(POST_ARGS)
        mdoc->last_es = mdoc->last;
 }
 
+static void
+post_fl(POST_ARGS)
+{
+       struct roff_node        *n;
+       char                    *cp;
+
+       /*
+        * Transform ".Fl Fl long" to ".Fl \-long",
+        * resulting for example in better HTML output.
+        */
+
+       n = mdoc->last;
+       if (n->prev != NULL && n->prev->tok == MDOC_Fl &&
+           n->prev->child == NULL && n->child != NULL &&
+           (n->flags & NODE_LINE) == 0) {
+               mandoc_asprintf(&cp, "\\-%s", n->child->string);
+               free(n->child->string);
+               n->child->string = cp;
+               roff_node_delete(mdoc, n->prev);
+       }
+       post_tag(mdoc);
+}
+
 static void
 post_xx(POST_ARGS)
 {
@@ -2593,7 +2617,7 @@ post_section(POST_ARGS)
                        if ((nch = n->child) != NULL &&
                            nch->type == ROFFT_TEXT &&
                            strcmp(nch->string, tag) == 0)
-                               tag_put(NULL, TAG_WEAK, n);
+                               tag_put(NULL, TAG_STRONG, n);
                        else
                                tag_put(tag, TAG_FALLBACK, n);
                        free(tag);
@@ -2765,8 +2789,14 @@ post_dt(POST_ARGS)
                mandoc_msg(MANDOCERR_MSEC_BAD,
                    nn->line, nn->pos, "Dt ... %s", nn->string);
                mdoc->meta.vol = mandoc_strdup(nn->string);
-       } else
+       } else {
                mdoc->meta.vol = mandoc_strdup(cp);
+               if (mdoc->filesec != '\0' &&
+                   mdoc->filesec != *nn->string &&
+                   *nn->string >= '1' && *nn->string <= '9')
+                       mandoc_msg(MANDOCERR_MSEC_FILE, nn->line, nn->pos,
+                           "*.%c vs Dt ... %c", mdoc->filesec, *nn->string);
+       }
 
        /* Optional third argument: architecture. */
 
@@ -2842,7 +2872,6 @@ post_os(POST_ARGS)
 {
 #ifndef OSNAME
        struct utsname    utsname;
-       static char      *defbuf;
 #endif
        struct roff_node *n;
 
@@ -2879,15 +2908,15 @@ post_os(POST_ARGS)
 #ifdef OSNAME
        mdoc->meta.os = mandoc_strdup(OSNAME);
 #else /*!OSNAME */
-       if (defbuf == NULL) {
+       if (mdoc->os_r == NULL) {
                if (uname(&utsname) == -1) {
                        mandoc_msg(MANDOCERR_OS_UNAME, n->line, n->pos, "Os");
-                       defbuf = mandoc_strdup("UNKNOWN");
+                       mdoc->os_r = mandoc_strdup("UNKNOWN");
                } else
-                       mandoc_asprintf(&defbuf, "%s %s",
+                       mandoc_asprintf(&mdoc->os_r, "%s %s",
                            utsname.sysname, utsname.release);
        }
-       mdoc->meta.os = mandoc_strdup(defbuf);
+       mdoc->meta.os = mandoc_strdup(mdoc->os_r);
 #endif /*!OSNAME*/
 
 out: