]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandocdb.c
If messages are shown and output is printed without a pager, display
[mandoc.git] / mandocdb.c
index a2d9e494b562b58f87e4b1f7100c4f1866e3d457..64ac10115877003b52dec49ae8868f882b8231ba 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: mandocdb.c,v 1.259 2018/08/17 20:33:37 schwarze Exp $ */
+/*     $Id: mandocdb.c,v 1.263 2019/05/03 18:17:12 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011-2018 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011-2019 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2016 Ed Maste <emaste@freebsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -52,6 +52,7 @@
 #include "roff.h"
 #include "mdoc.h"
 #include "man.h"
+#include "mandoc_parse.h"
 #include "manconf.h"
 #include "mansearch.h"
 #include "dba_array.h"
@@ -346,6 +347,7 @@ mandocdb(int argc, char *argv[])
                goto usage; \
        } while (/*CONSTCOND*/0)
 
+       mparse_options = MPARSE_VALIDATE;
        path_arg = NULL;
        op = OP_DEFAULT;
 
@@ -421,8 +423,7 @@ mandocdb(int argc, char *argv[])
 
        exitcode = (int)MANDOCLEVEL_OK;
        mchars_alloc();
-       mp = mparse_alloc(mparse_options, MANDOCERR_MAX, NULL,
-           MANDOC_OS_OTHER, NULL);
+       mp = mparse_alloc(mparse_options, MANDOC_OS_OTHER, NULL);
        mandoc_ohash_init(&mpages, 6, offsetof(struct mpage, inodev));
        mandoc_ohash_init(&mlinks, 6, offsetof(struct mlink, file));
 
@@ -1115,8 +1116,7 @@ mpages_merge(struct dba *dba, struct mparse *mp)
 {
        struct mpage            *mpage, *mpage_dest;
        struct mlink            *mlink, *mlink_dest;
-       struct roff_man         *man;
-       char                    *sodest;
+       struct roff_meta        *meta;
        char                    *cp;
        int                      fd;
 
@@ -1129,8 +1129,7 @@ mpages_merge(struct dba *dba, struct mparse *mp)
                mandoc_ohash_init(&names, 4, offsetof(struct str, key));
                mandoc_ohash_init(&strings, 6, offsetof(struct str, key));
                mparse_reset(mp);
-               man = NULL;
-               sodest = NULL;
+               meta = NULL;
 
                if ((fd = mparse_open(mp, mlink->file)) == -1) {
                        say(mlink->file, "&open");
@@ -1145,14 +1144,14 @@ mpages_merge(struct dba *dba, struct mparse *mp)
                        mparse_readfd(mp, fd, mlink->file);
                        close(fd);
                        fd = -1;
-                       mparse_result(mp, &man, &sodest);
+                       meta = mparse_result(mp);
                }
 
-               if (sodest != NULL) {
+               if (meta != NULL && meta->sodest != NULL) {
                        mlink_dest = ohash_find(&mlinks,
-                           ohash_qlookup(&mlinks, sodest));
+                           ohash_qlookup(&mlinks, meta->sodest));
                        if (mlink_dest == NULL) {
-                               mandoc_asprintf(&cp, "%s.gz", sodest);
+                               mandoc_asprintf(&cp, "%s.gz", meta->sodest);
                                mlink_dest = ohash_find(&mlinks,
                                    ohash_qlookup(&mlinks, cp));
                                free(cp);
@@ -1187,41 +1186,43 @@ mpages_merge(struct dba *dba, struct mparse *mp)
                                mlink->next = mlink_dest->next;
                                mlink_dest->next = mpage->mlinks;
                                mpage->mlinks = NULL;
+                               goto nextpage;
                        }
-                       goto nextpage;
-               } else if (man != NULL && man->macroset == MACROSET_MDOC) {
-                       mdoc_validate(man);
+                       meta->macroset = MACROSET_NONE;
+               }
+               if (meta != NULL && meta->macroset == MACROSET_MDOC) {
                        mpage->form = FORM_SRC;
-                       mpage->sec = man->meta.msec;
+                       mpage->sec = meta->msec;
                        mpage->sec = mandoc_strdup(
                            mpage->sec == NULL ? "" : mpage->sec);
-                       mpage->arch = man->meta.arch;
+                       mpage->arch = meta->arch;
                        mpage->arch = mandoc_strdup(
                            mpage->arch == NULL ? "" : mpage->arch);
-                       mpage->title = mandoc_strdup(man->meta.title);
-               } else if (man != NULL && man->macroset == MACROSET_MAN) {
-                       man_validate(man);
-                       if (*man->meta.msec != '\0' ||
-                           *man->meta.title != '\0') {
+                       mpage->title = mandoc_strdup(meta->title);
+               } else if (meta != NULL && meta->macroset == MACROSET_MAN) {
+                       if (*meta->msec != '\0' || *meta->title != '\0') {
                                mpage->form = FORM_SRC;
-                               mpage->sec = mandoc_strdup(man->meta.msec);
+                               mpage->sec = mandoc_strdup(meta->msec);
                                mpage->arch = mandoc_strdup(mlink->arch);
-                               mpage->title = mandoc_strdup(man->meta.title);
+                               mpage->title = mandoc_strdup(meta->title);
                        } else
-                               man = NULL;
+                               meta = NULL;
                }
 
                assert(mpage->desc == NULL);
-               if (man == NULL) {
-                       mpage->form = FORM_CAT;
+               if (meta == NULL || meta->sodest != NULL) {
                        mpage->sec = mandoc_strdup(mlink->dsec);
                        mpage->arch = mandoc_strdup(mlink->arch);
                        mpage->title = mandoc_strdup(mlink->name);
-                       parse_cat(mpage, fd);
-               } else if (man->macroset == MACROSET_MDOC)
-                       parse_mdoc(mpage, &man->meta, man->first);
+                       if (meta == NULL) {
+                               mpage->form = FORM_CAT;
+                               parse_cat(mpage, fd);
+                       } else
+                               mpage->form = FORM_SRC;
+               } else if (meta->macroset == MACROSET_MDOC)
+                       parse_mdoc(mpage, meta, meta->first);
                else
-                       parse_man(mpage, &man->meta, man->first);
+                       parse_man(mpage, meta, meta->first);
                if (mpage->desc == NULL) {
                        mpage->desc = mandoc_strdup(mlink->name);
                        if (warnings)