Lines Matching defs:mpage

71 	const struct mpage *mpage; /* if set, the owning parse */
81 struct mpage {
88 struct mpage *next; /* singly linked list */
101 struct mpage *mpage; /* parent */
107 typedef int (*mdoc_fp)(struct mpage *, const struct roff_meta *,
119 static void dbadd(struct dba *, struct mpage *);
130 static void mlink_check(struct mpage *, struct mlink *);
132 static void mlinks_undupe(struct mpage *);
135 static void parse_cat(struct mpage *, int);
136 static void parse_man(struct mpage *, const struct roff_meta *,
138 static void parse_mdoc(struct mpage *, const struct roff_meta *,
140 static int parse_mdoc_head(struct mpage *, const struct roff_meta *,
142 static int parse_mdoc_Fd(struct mpage *, const struct roff_meta *,
144 static void parse_mdoc_fname(struct mpage *, const struct roff_node *);
145 static int parse_mdoc_Fn(struct mpage *, const struct roff_meta *,
147 static int parse_mdoc_Fo(struct mpage *, const struct roff_meta *,
149 static int parse_mdoc_Nd(struct mpage *, const struct roff_meta *,
151 static int parse_mdoc_Nm(struct mpage *, const struct roff_meta *,
153 static int parse_mdoc_Sh(struct mpage *, const struct roff_meta *,
155 static int parse_mdoc_Va(struct mpage *, const struct roff_meta *,
157 static int parse_mdoc_Xr(struct mpage *, const struct roff_meta *,
159 static void putkey(const struct mpage *, char *, uint64_t);
160 static void putkeys(const struct mpage *, char *, size_t, uint64_t);
161 static void putmdockey(const struct mpage *,
179 static struct mpage *mpage_head; /* list of distinct manual pages */
425 mandoc_ohash_init(&mpages, 6, offsetof(struct mpage, inodev));
507 offsetof(struct mpage, inodev));
940 struct mpage *mpage;
968 mpage = ohash_find(&mpages, slot);
969 if (NULL == mpage) {
970 mpage = mandoc_calloc(1, sizeof(struct mpage));
971 mpage->inodev.st_ino = inodev.st_ino;
972 mpage->inodev.st_dev = inodev.st_dev;
973 mpage->form = FORM_NONE;
974 mpage->next = mpage_head;
975 mpage_head = mpage;
976 ohash_insert(&mpages, slot, mpage);
978 mlink->next = mpage->mlinks;
979 mpage->mlinks = mlink;
980 mlink->mpage = mpage;
997 struct mpage *mpage;
1000 while ((mpage = mpage_head) != NULL) {
1001 while ((mlink = mpage->mlinks) != NULL) {
1002 mpage->mlinks = mlink->next;
1005 mpage_head = mpage->next;
1006 free(mpage->sec);
1007 free(mpage->arch);
1008 free(mpage->title);
1009 free(mpage->desc);
1010 free(mpage);
1015 * For each mlink to the mpage, check whether the path looks like
1021 mlinks_undupe(struct mpage *mpage)
1028 mpage->form = FORM_CAT;
1029 prev = &mpage->mlinks;
1032 mpage->form = FORM_NONE;
1058 mlink_check(struct mpage *mpage, struct mlink *mlink)
1072 if (FORM_SRC == mpage->form &&
1073 strcasecmp(mpage->sec, mlink->dsec))
1075 mpage->sec, mlink->dsec);
1090 if (strcasecmp(mpage->arch, mlink->arch))
1092 "\"%s\" directory", mpage->arch, mlink->arch);
1099 if (FORM_CAT == mpage->form)
1124 struct mpage *mpage, *mpage_dest;
1131 for (mpage = mpage_head; mpage != NULL; mpage = mpage->next) {
1132 mlinks_undupe(mpage);
1133 if ((mlink = mpage->mlinks) == NULL)
1172 mpage_dest = mlink_dest->mpage;
1174 mlink->mpage = mpage_dest;
1196 mlink_dest->next = mpage->mlinks;
1197 mpage->mlinks = NULL;
1202 mpage->form = FORM_SRC;
1203 mpage->sec = man->meta.msec;
1204 mpage->sec = mandoc_strdup(
1205 mpage->sec == NULL ? "" : mpage->sec);
1206 mpage->arch = man->meta.arch;
1207 mpage->arch = mandoc_strdup(
1208 mpage->arch == NULL ? "" : mpage->arch);
1209 mpage->title = mandoc_strdup(man->meta.title);
1214 mpage->form = FORM_SRC;
1215 mpage->sec = mandoc_strdup(man->meta.msec);
1216 mpage->arch = mandoc_strdup(mlink->arch);
1217 mpage->title = mandoc_strdup(man->meta.title);
1222 assert(mpage->desc == NULL);
1224 mpage->form = FORM_CAT;
1225 mpage->sec = mandoc_strdup(mlink->dsec);
1226 mpage->arch = mandoc_strdup(mlink->arch);
1227 mpage->title = mandoc_strdup(mlink->name);
1228 parse_cat(mpage, fd);
1230 parse_mdoc(mpage, &man->meta, man->first);
1232 parse_man(mpage, &man->meta, man->first);
1233 if (mpage->desc == NULL) {
1234 mpage->desc = mandoc_strdup(mlink->name);
1240 for (mlink = mpage->mlinks;
1243 putkey(mpage, mlink->name, NAME_FILE);
1245 mlink_check(mpage, mlink);
1248 dbadd(dba, mpage);
1257 parse_cat(struct mpage *mpage, int fd)
1266 mlink = mpage->mlinks;
1288 free(mpage->sec);
1289 mpage->sec = mandoc_strndup(sec, p - sec);
1291 strcasecmp(mpage->sec, mlink->dsec))
1294 mpage->sec, mlink->dsec);
1385 mpage->desc = mandoc_strdup(p);
1394 putkey(const struct mpage *mpage, char *value, uint64_t type)
1396 putkeys(mpage, value, strlen(value), type);
1403 putmdockey(const struct mpage *mpage,
1411 putmdockey(mpage, n->child, m, taboo);
1413 putkey(mpage, n->string, m);
1418 parse_man(struct mpage *mpage, const struct roff_meta *meta,
1483 putkey(mpage, start, NAME_TITLE);
1484 if ( ! (mpage->name_head_done ||
1486 putkey(mpage, start, NAME_HEAD);
1487 mpage->name_head_done = 1;
1502 putkey(mpage, start, NAME_TITLE);
1503 if ( ! (mpage->name_head_done ||
1505 putkey(mpage, start, NAME_HEAD);
1506 mpage->name_head_done = 1;
1529 mpage->desc = mandoc_strdup(start);
1536 if (NULL != mpage->desc)
1538 parse_man(mpage, meta, n);
1543 parse_mdoc(struct mpage *mpage, const struct roff_meta *meta,
1560 (*mdocs[n->tok].fp)(mpage, meta, n) == 0)
1563 putmdockey(mpage, n->child,
1570 parse_mdoc(mpage, meta, n);
1575 parse_mdoc_Fd(struct mpage *mpage, const struct roff_meta *meta,
1614 putkeys(mpage, start, end - start + 1, TYPE_In);
1619 parse_mdoc_fname(struct mpage *mpage, const struct roff_node *n)
1634 putkeys(mpage, cp, sz, TYPE_Fn);
1636 putkeys(mpage, cp, sz, NAME_SYN);
1640 parse_mdoc_Fn(struct mpage *mpage, const struct roff_meta *meta,
1647 parse_mdoc_fname(mpage, n->child);
1651 putkey(mpage, n->string, TYPE_Fa);
1657 parse_mdoc_Fo(struct mpage *mpage, const struct roff_meta *meta,
1665 parse_mdoc_fname(mpage, n->child);
1671 parse_mdoc_Va(struct mpage *mpage, const struct roff_meta *meta,
1687 putkey(mpage, cp, TYPE_Vt | (n->tok == MDOC_Va ||
1696 parse_mdoc_Xr(struct mpage *mpage, const struct roff_meta *meta,
1705 putkey(mpage, n->string, TYPE_Xr);
1710 putkey(mpage, cp, TYPE_Xr);
1716 parse_mdoc_Nd(struct mpage *mpage, const struct roff_meta *meta,
1721 deroff(&mpage->desc, n);
1726 parse_mdoc_Nm(struct mpage *mpage, const struct roff_meta *meta,
1731 putmdockey(mpage, n->child, NAME_TITLE, 0);
1734 putkey(mpage, meta->name, NAME_SYN);
1736 putmdockey(mpage, n->child, NAME_SYN, 0);
1738 if ( ! (mpage->name_head_done ||
1741 putkey(mpage, n->child->string, NAME_HEAD);
1742 mpage->name_head_done = 1;
1748 parse_mdoc_Sh(struct mpage *mpage, const struct roff_meta *meta,
1756 parse_mdoc_head(struct mpage *mpage, const struct roff_meta *meta,
1769 putkeys(const struct mpage *mpage, char *cp, size_t sz, uint64_t v)
1788 say(mpage->mlinks->file,
1796 say(mpage->mlinks->file,
1805 if (NULL != s && mpage == s->mpage) {
1813 s->mpage = mpage;
2000 dba_page_alias(mlink->mpage->dba, mlink->name, NAME_FILE);
2001 dba_page_add(mlink->mpage->dba, DBP_SECT, mlink->dsec);
2002 dba_page_add(mlink->mpage->dba, DBP_SECT, mlink->fsec);
2003 dba_page_add(mlink->mpage->dba, DBP_ARCH, mlink->arch);
2004 dba_page_add(mlink->mpage->dba, DBP_FILE, mlink->file);
2012 dbadd(struct dba *dba, struct mpage *mpage)
2022 mlink = mpage->mlinks;
2052 printf(" - %s\n", mpage->desc);
2059 cp = mpage->desc;
2062 mpage->dba = dba_page_new(dba->pages,
2063 *mpage->arch == '\0' ? mlink->arch : mpage->arch,
2064 cp, mlink->file, mpage->form);
2067 dba_page_add(mpage->dba, DBP_SECT, mpage->sec);
2076 assert(key->mpage == mpage);
2077 dba_page_alias(mpage->dba, key->key, key->mask);
2082 assert(key->mpage == mpage);
2087 key->key, mpage->dba);