=================================================================== RCS file: /cvs/mandoc/mandocdb.c,v retrieving revision 1.187 retrieving revision 1.196 diff -u -p -r1.187 -r1.196 --- mandoc/mandocdb.c 2015/03/27 17:37:25 1.187 +++ mandoc/mandocdb.c 2015/09/16 09:50:29 1.196 @@ -1,4 +1,4 @@ -/* $Id: mandocdb.c,v 1.187 2015/03/27 17:37:25 schwarze Exp $ */ +/* $Id: mandocdb.c,v 1.196 2015/09/16 09:50:29 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons * Copyright (c) 2011-2015 Ingo Schwarze @@ -46,10 +46,11 @@ #endif #include +#include "mandoc_aux.h" +#include "mandoc.h" +#include "roff.h" #include "mdoc.h" #include "man.h" -#include "mandoc.h" -#include "mandoc_aux.h" #include "manconf.h" #include "mansearch.h" @@ -129,8 +130,8 @@ enum stmt { STMT__MAX }; -typedef int (*mdoc_fp)(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); +typedef int (*mdoc_fp)(struct mpage *, const struct roff_meta *, + const struct roff_node *); struct mdoc_handler { mdoc_fp fp; /* optional handler */ @@ -155,33 +156,33 @@ static void mpages_free(void); static void mpages_merge(struct mparse *); static void names_check(void); static void parse_cat(struct mpage *, int); -static void parse_man(struct mpage *, const struct man_meta *, - const struct man_node *); -static void parse_mdoc(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); -static int parse_mdoc_body(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); -static int parse_mdoc_head(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); -static int parse_mdoc_Fd(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); -static void parse_mdoc_fname(struct mpage *, const struct mdoc_node *); -static int parse_mdoc_Fn(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); -static int parse_mdoc_Fo(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); -static int parse_mdoc_Nd(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); -static int parse_mdoc_Nm(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); -static int parse_mdoc_Sh(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); -static int parse_mdoc_Xr(struct mpage *, const struct mdoc_meta *, - const struct mdoc_node *); +static void parse_man(struct mpage *, const struct roff_meta *, + const struct roff_node *); +static void parse_mdoc(struct mpage *, const struct roff_meta *, + const struct roff_node *); +static int parse_mdoc_body(struct mpage *, const struct roff_meta *, + const struct roff_node *); +static int parse_mdoc_head(struct mpage *, const struct roff_meta *, + const struct roff_node *); +static int parse_mdoc_Fd(struct mpage *, const struct roff_meta *, + const struct roff_node *); +static void parse_mdoc_fname(struct mpage *, const struct roff_node *); +static int parse_mdoc_Fn(struct mpage *, const struct roff_meta *, + const struct roff_node *); +static int parse_mdoc_Fo(struct mpage *, const struct roff_meta *, + const struct roff_node *); +static int parse_mdoc_Nd(struct mpage *, const struct roff_meta *, + const struct roff_node *); +static int parse_mdoc_Nm(struct mpage *, const struct roff_meta *, + const struct roff_node *); +static int parse_mdoc_Sh(struct mpage *, const struct roff_meta *, + const struct roff_node *); +static int parse_mdoc_Xr(struct mpage *, const struct roff_meta *, + const struct roff_node *); static void putkey(const struct mpage *, char *, uint64_t); static void putkeys(const struct mpage *, char *, size_t, uint64_t); static void putmdockey(const struct mpage *, - const struct mdoc_node *, uint64_t); + const struct roff_node *, uint64_t); static int render_string(char **, size_t *); static void say(const char *, const char *, ...); static int set_basedir(const char *, int); @@ -1106,8 +1107,7 @@ mpages_merge(struct mparse *mp) struct ohash_info str_info; struct mpage *mpage, *mpage_dest; struct mlink *mlink, *mlink_dest; - struct mdoc *mdoc; - struct man *man; + struct roff_man *man; char *sodest; char *cp; int fd; @@ -1134,7 +1134,6 @@ mpages_merge(struct mparse *mp) ohash_init(&names, 4, &str_info); ohash_init(&strings, 6, &str_info); mparse_reset(mp); - mdoc = NULL; man = NULL; sodest = NULL; @@ -1150,7 +1149,7 @@ mpages_merge(struct mparse *mp) */ if (mlink->dform != FORM_CAT || mlink->fform != FORM_CAT) { mparse_readfd(mp, fd, mlink->file); - mparse_result(mp, &mdoc, &man, &sodest); + mparse_result(mp, &man, &sodest); } if (sodest != NULL) { @@ -1194,21 +1193,20 @@ mpages_merge(struct mparse *mp) mpage->mlinks = NULL; } goto nextpage; - } else if (mdoc != NULL) { + } else if (man != NULL && man->macroset == MACROSET_MDOC) { mpage->form = FORM_SRC; - mpage->sec = mdoc_meta(mdoc)->msec; + mpage->sec = man->meta.msec; mpage->sec = mandoc_strdup( mpage->sec == NULL ? "" : mpage->sec); - mpage->arch = mdoc_meta(mdoc)->arch; + mpage->arch = man->meta.arch; mpage->arch = mandoc_strdup( mpage->arch == NULL ? "" : mpage->arch); - mpage->title = - mandoc_strdup(mdoc_meta(mdoc)->title); - } else if (man != NULL) { + mpage->title = mandoc_strdup(man->meta.title); + } else if (man != NULL && man->macroset == MACROSET_MAN) { mpage->form = FORM_SRC; - mpage->sec = mandoc_strdup(man_meta(man)->msec); + mpage->sec = mandoc_strdup(man->meta.msec); mpage->arch = mandoc_strdup(mlink->arch); - mpage->title = mandoc_strdup(man_meta(man)->title); + mpage->title = mandoc_strdup(man->meta.title); } else { mpage->form = FORM_CAT; mpage->sec = mandoc_strdup(mlink->dsec); @@ -1230,10 +1228,10 @@ mpages_merge(struct mparse *mp) } assert(mpage->desc == NULL); - if (mdoc != NULL) - parse_mdoc(mpage, mdoc_meta(mdoc), mdoc_node(mdoc)); + if (man != NULL && man->macroset == MACROSET_MDOC) + parse_mdoc(mpage, &man->meta, man->first); else if (man != NULL) - parse_man(mpage, man_meta(man), man_node(man)); + parse_man(mpage, &man->meta, man->first); else parse_cat(mpage, fd); if (mpage->desc == NULL) @@ -1248,10 +1246,6 @@ mpages_merge(struct mparse *mp) mlink = mpage->mlinks; nextpage: - if (mparse_wait(mp) != MANDOCLEVEL_OK) { - exitcode = (int)MANDOCLEVEL_SYSERR; - say(mlink->file, "&wait gunzip"); - } ohash_delete(&strings); ohash_delete(&names); mpage = ohash_next(&mpages, &pslot); @@ -1430,22 +1424,22 @@ putkey(const struct mpage *mpage, char *value, uint64_ */ static void putmdockey(const struct mpage *mpage, - const struct mdoc_node *n, uint64_t m) + const struct roff_node *n, uint64_t m) { for ( ; NULL != n; n = n->next) { if (NULL != n->child) putmdockey(mpage, n->child, m); - if (MDOC_TEXT == n->type) + if (n->type == ROFFT_TEXT) putkey(mpage, n->string, m); } } static void -parse_man(struct mpage *mpage, const struct man_meta *meta, - const struct man_node *n) +parse_man(struct mpage *mpage, const struct roff_meta *meta, + const struct roff_node *n) { - const struct man_node *head, *body; + const struct roff_node *head, *body; char *start, *title; char byte; size_t sz; @@ -1460,13 +1454,13 @@ parse_man(struct mpage *mpage, const struct man_meta * * the correct section or not. */ - if (MAN_BODY == n->type && MAN_SH == n->tok) { + if (n->type == ROFFT_BODY && n->tok == MAN_SH) { body = n; assert(body->parent); if (NULL != (head = body->parent->head) && 1 == head->nchild && NULL != (head = (head->child)) && - MAN_TEXT == head->type && + head->type == ROFFT_TEXT && 0 == strcmp(head->string, "NAME") && NULL != body->child) { @@ -1478,7 +1472,7 @@ parse_man(struct mpage *mpage, const struct man_meta * */ title = NULL; - man_deroff(&title, body); + deroff(&title, body); if (NULL == title) return; @@ -1568,22 +1562,22 @@ parse_man(struct mpage *mpage, const struct man_meta * } static void -parse_mdoc(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) +parse_mdoc(struct mpage *mpage, const struct roff_meta *meta, + const struct roff_node *n) { assert(NULL != n); for (n = n->child; NULL != n; n = n->next) { switch (n->type) { - case MDOC_ELEM: + case ROFFT_ELEM: /* FALLTHROUGH */ - case MDOC_BLOCK: + case ROFFT_BLOCK: /* FALLTHROUGH */ - case MDOC_HEAD: + case ROFFT_HEAD: /* FALLTHROUGH */ - case MDOC_BODY: + case ROFFT_BODY: /* FALLTHROUGH */ - case MDOC_TAIL: + case ROFFT_TAIL: if (NULL != mdocs[n->tok].fp) if (0 == (*mdocs[n->tok].fp)(mpage, meta, n)) break; @@ -1592,7 +1586,7 @@ parse_mdoc(struct mpage *mpage, const struct mdoc_meta mdocs[n->tok].mask); break; default: - assert(MDOC_ROOT != n->type); + assert(n->type != ROFFT_ROOT); continue; } if (NULL != n->child) @@ -1601,15 +1595,15 @@ parse_mdoc(struct mpage *mpage, const struct mdoc_meta } static int -parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) +parse_mdoc_Fd(struct mpage *mpage, const struct roff_meta *meta, + const struct roff_node *n) { char *start, *end; size_t sz; if (SEC_SYNOPSIS != n->sec || NULL == (n = n->child) || - MDOC_TEXT != n->type) + n->type != ROFFT_TEXT) return(0); /* @@ -1620,7 +1614,7 @@ parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_m if (strcmp("#include", n->string)) return(0); - if (NULL == (n = n->next) || MDOC_TEXT != n->type) + if ((n = n->next) == NULL || n->type != ROFFT_TEXT) return(0); /* @@ -1645,12 +1639,12 @@ parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_m } static void -parse_mdoc_fname(struct mpage *mpage, const struct mdoc_node *n) +parse_mdoc_fname(struct mpage *mpage, const struct roff_node *n) { char *cp; size_t sz; - if (n->type != MDOC_TEXT) + if (n->type != ROFFT_TEXT) return; /* Skip function pointer punctuation. */ @@ -1666,8 +1660,8 @@ parse_mdoc_fname(struct mpage *mpage, const struct mdo } static int -parse_mdoc_Fn(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) +parse_mdoc_Fn(struct mpage *mpage, const struct roff_meta *meta, + const struct roff_node *n) { if (n->child == NULL) @@ -1676,18 +1670,18 @@ parse_mdoc_Fn(struct mpage *mpage, const struct mdoc_m parse_mdoc_fname(mpage, n->child); for (n = n->child->next; n != NULL; n = n->next) - if (n->type == MDOC_TEXT) + if (n->type == ROFFT_TEXT) putkey(mpage, n->string, TYPE_Fa); return(0); } static int -parse_mdoc_Fo(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) +parse_mdoc_Fo(struct mpage *mpage, const struct roff_meta *meta, + const struct roff_node *n) { - if (n->type != MDOC_HEAD) + if (n->type != ROFFT_HEAD) return(1); if (n->child != NULL) @@ -1697,8 +1691,8 @@ parse_mdoc_Fo(struct mpage *mpage, const struct mdoc_m } static int -parse_mdoc_Xr(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) +parse_mdoc_Xr(struct mpage *mpage, const struct roff_meta *meta, + const struct roff_node *n) { char *cp; @@ -1717,23 +1711,23 @@ parse_mdoc_Xr(struct mpage *mpage, const struct mdoc_m } static int -parse_mdoc_Nd(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) +parse_mdoc_Nd(struct mpage *mpage, const struct roff_meta *meta, + const struct roff_node *n) { - if (MDOC_BODY == n->type) - mdoc_deroff(&mpage->desc, n); + if (n->type == ROFFT_BODY) + deroff(&mpage->desc, n); return(0); } static int -parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) +parse_mdoc_Nm(struct mpage *mpage, const struct roff_meta *meta, + const struct roff_node *n) { if (SEC_NAME == n->sec) putmdockey(mpage, n->child, NAME_TITLE); - else if (SEC_SYNOPSIS == n->sec && MDOC_HEAD == n->type) { + else if (n->sec == SEC_SYNOPSIS && n->type == ROFFT_HEAD) { if (n->child == NULL) putkey(mpage, meta->name, NAME_SYN); else @@ -1742,34 +1736,34 @@ parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_m if ( ! (mpage->name_head_done || n->child == NULL || n->child->string == NULL || strcasecmp(n->child->string, meta->title))) { - putkey(mpage, n->child->string, NAME_HEAD); + putkey(mpage, n->child->string, ROFFT_HEAD); mpage->name_head_done = 1; } return(0); } static int -parse_mdoc_Sh(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) +parse_mdoc_Sh(struct mpage *mpage, const struct roff_meta *meta, + const struct roff_node *n) { - return(SEC_CUSTOM == n->sec && MDOC_HEAD == n->type); + return(n->sec == SEC_CUSTOM && n->type == ROFFT_HEAD); } static int -parse_mdoc_head(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) +parse_mdoc_head(struct mpage *mpage, const struct roff_meta *meta, + const struct roff_node *n) { - return(MDOC_HEAD == n->type); + return(n->type == ROFFT_HEAD); } static int -parse_mdoc_body(struct mpage *mpage, const struct mdoc_meta *meta, - const struct mdoc_node *n) +parse_mdoc_body(struct mpage *mpage, const struct roff_meta *meta, + const struct roff_node *n) { - return(MDOC_BODY == n->type); + return(n->type == ROFFT_BODY); } /* @@ -2214,7 +2208,7 @@ dbclose(int real) return; case 0: execlp("cmp", "cmp", "-s", - tempfilename, MANDOC_DB, NULL); + tempfilename, MANDOC_DB, (char *)NULL); say("", "&exec cmp"); exit(0); default: @@ -2239,7 +2233,7 @@ dbclose(int real) say("", "&fork rm"); return; case 0: - execlp("rm", "rm", "-rf", tempfilename, NULL); + execlp("rm", "rm", "-rf", tempfilename, (char *)NULL); say("", "&exec rm"); exit((int)MANDOCLEVEL_SYSERR); default: