Lines Matching refs:mpage
63 const struct mpage *mpage; /* if set, the owning parse */ member
73 struct mpage { struct
80 struct mpage *next; /* singly linked list */ argument
93 struct mpage *mpage; /* parent */ argument
99 typedef int (*mdoc_fp)(struct mpage *, const struct roff_meta *,
111 static void dbadd(struct dba *, struct mpage *);
118 static void mlink_check(struct mpage *, struct mlink *);
120 static void mlinks_undupe(struct mpage *);
123 static void parse_cat(struct mpage *, int);
124 static void parse_man(struct mpage *, const struct roff_meta *,
126 static void parse_mdoc(struct mpage *, const struct roff_meta *,
128 static int parse_mdoc_head(struct mpage *, const struct roff_meta *,
130 static int parse_mdoc_Fa(struct mpage *, const struct roff_meta *,
132 static int parse_mdoc_Fd(struct mpage *, const struct roff_meta *,
134 static void parse_mdoc_fname(struct mpage *, const struct roff_node *);
135 static int parse_mdoc_Fn(struct mpage *, const struct roff_meta *,
137 static int parse_mdoc_Fo(struct mpage *, const struct roff_meta *,
139 static int parse_mdoc_Nd(struct mpage *, const struct roff_meta *,
141 static int parse_mdoc_Nm(struct mpage *, const struct roff_meta *,
143 static int parse_mdoc_Sh(struct mpage *, const struct roff_meta *,
145 static int parse_mdoc_Va(struct mpage *, const struct roff_meta *,
147 static int parse_mdoc_Xr(struct mpage *, const struct roff_meta *,
149 static void putkey(const struct mpage *, char *, uint64_t);
150 static void putkeys(const struct mpage *, char *, size_t, uint64_t);
151 static void putmdockey(const struct mpage *,
170 static struct mpage *mpage_head; /* list of distinct manual pages */
404 mandoc_ohash_init(&mpages, 6, offsetof(struct mpage, inodev)); in mandocdb()
477 offsetof(struct mpage, inodev)); in mandocdb()
950 struct mpage *mpage; in mlink_add() local
978 mpage = ohash_find(&mpages, slot); in mlink_add()
979 if (NULL == mpage) { in mlink_add()
980 mpage = mandoc_calloc(1, sizeof(struct mpage)); in mlink_add()
981 mpage->inodev.st_ino = inodev.st_ino; in mlink_add()
982 mpage->inodev.st_dev = inodev.st_dev; in mlink_add()
983 mpage->form = FORM_NONE; in mlink_add()
984 mpage->next = mpage_head; in mlink_add()
985 mpage_head = mpage; in mlink_add()
986 ohash_insert(&mpages, slot, mpage); in mlink_add()
988 mlink->next = mpage->mlinks; in mlink_add()
989 mpage->mlinks = mlink; in mlink_add()
990 mlink->mpage = mpage; in mlink_add()
1007 struct mpage *mpage; in mpages_free() local
1010 while ((mpage = mpage_head) != NULL) { in mpages_free()
1011 while ((mlink = mpage->mlinks) != NULL) { in mpages_free()
1012 mpage->mlinks = mlink->next; in mpages_free()
1015 mpage_head = mpage->next; in mpages_free()
1016 free(mpage->sec); in mpages_free()
1017 free(mpage->arch); in mpages_free()
1018 free(mpage->title); in mpages_free()
1019 free(mpage->desc); in mpages_free()
1020 free(mpage); in mpages_free()
1031 mlinks_undupe(struct mpage *mpage) in mlinks_undupe() argument
1038 mpage->form = FORM_CAT; in mlinks_undupe()
1039 prev = &mpage->mlinks; in mlinks_undupe()
1042 mpage->form = FORM_NONE; in mlinks_undupe()
1068 mlink_check(struct mpage *mpage, struct mlink *mlink) in mlink_check() argument
1082 if (FORM_SRC == mpage->form && in mlink_check()
1083 strcasecmp(mpage->sec, mlink->dsec)) in mlink_check()
1085 mpage->sec, mlink->dsec); in mlink_check()
1100 if (strcasecmp(mpage->arch, mlink->arch)) in mlink_check()
1102 "\"%s\" directory", mpage->arch, mlink->arch); in mlink_check()
1109 if (FORM_CAT == mpage->form) in mlink_check()
1134 struct mpage *mpage, *mpage_dest; in mpages_merge() local
1140 for (mpage = mpage_head; mpage != NULL; mpage = mpage->next) { in mpages_merge()
1141 mlinks_undupe(mpage); in mpages_merge()
1142 if ((mlink = mpage->mlinks) == NULL) in mpages_merge()
1180 mpage_dest = mlink_dest->mpage; in mpages_merge()
1182 mlink->mpage = mpage_dest; in mpages_merge()
1204 mlink_dest->next = mpage->mlinks; in mpages_merge()
1205 mpage->mlinks = NULL; in mpages_merge()
1211 mpage->form = FORM_SRC; in mpages_merge()
1212 mpage->sec = meta->msec; in mpages_merge()
1213 mpage->sec = mandoc_strdup( in mpages_merge()
1214 mpage->sec == NULL ? "" : mpage->sec); in mpages_merge()
1215 mpage->arch = meta->arch; in mpages_merge()
1216 mpage->arch = mandoc_strdup( in mpages_merge()
1217 mpage->arch == NULL ? "" : mpage->arch); in mpages_merge()
1218 mpage->title = mandoc_strdup(meta->title); in mpages_merge()
1221 mpage->form = FORM_SRC; in mpages_merge()
1222 mpage->sec = mandoc_strdup(meta->msec); in mpages_merge()
1223 mpage->arch = mandoc_strdup(mlink->arch); in mpages_merge()
1224 mpage->title = mandoc_strdup(meta->title); in mpages_merge()
1229 assert(mpage->desc == NULL); in mpages_merge()
1231 mpage->sec = mandoc_strdup(mlink->dsec); in mpages_merge()
1232 mpage->arch = mandoc_strdup(mlink->arch); in mpages_merge()
1233 mpage->title = mandoc_strdup(mlink->name); in mpages_merge()
1235 mpage->form = FORM_CAT; in mpages_merge()
1236 parse_cat(mpage, fd); in mpages_merge()
1238 mpage->form = FORM_SRC; in mpages_merge()
1240 parse_mdoc(mpage, meta, meta->first); in mpages_merge()
1242 parse_man(mpage, meta, meta->first); in mpages_merge()
1243 if (mpage->desc == NULL) { in mpages_merge()
1244 mpage->desc = mandoc_strdup(mlink->name); in mpages_merge()
1250 for (mlink = mpage->mlinks; in mpages_merge()
1253 putkey(mpage, mlink->name, NAME_FILE); in mpages_merge()
1255 mlink_check(mpage, mlink); in mpages_merge()
1258 dbadd(dba, mpage); in mpages_merge()
1267 parse_cat(struct mpage *mpage, int fd) in parse_cat() argument
1276 mlink = mpage->mlinks; in parse_cat()
1298 free(mpage->sec); in parse_cat()
1299 mpage->sec = mandoc_strndup(sec, p - sec); in parse_cat()
1301 strcasecmp(mpage->sec, mlink->dsec)) in parse_cat()
1304 mpage->sec, mlink->dsec); in parse_cat()
1400 mpage->desc = mandoc_strndup(p, 150); in parse_cat()
1409 putkey(const struct mpage *mpage, char *value, uint64_t type) in putkey() argument
1411 putkeys(mpage, value, strlen(value), type); in putkey()
1418 putmdockey(const struct mpage *mpage, in putmdockey() argument
1426 putmdockey(mpage, n->child, m, taboo); in putmdockey()
1428 putkey(mpage, n->string, m); in putmdockey()
1433 parse_man(struct mpage *mpage, const struct roff_meta *meta, in parse_man() argument
1498 putkey(mpage, start, NAME_TITLE); in parse_man()
1499 if ( ! (mpage->name_head_done || in parse_man()
1501 putkey(mpage, start, NAME_HEAD); in parse_man()
1502 mpage->name_head_done = 1; in parse_man()
1517 putkey(mpage, start, NAME_TITLE); in parse_man()
1518 if ( ! (mpage->name_head_done || in parse_man()
1520 putkey(mpage, start, NAME_HEAD); in parse_man()
1521 mpage->name_head_done = 1; in parse_man()
1549 mpage->desc = mandoc_strndup(start, 150); in parse_man()
1556 if (NULL != mpage->desc) in parse_man()
1558 parse_man(mpage, meta, n); in parse_man()
1563 parse_mdoc(struct mpage *mpage, const struct roff_meta *meta, in parse_mdoc() argument
1583 (*handler->fp)(mpage, meta, n) == 0) in parse_mdoc()
1586 putmdockey(mpage, n->child, in parse_mdoc()
1593 parse_mdoc(mpage, meta, n); in parse_mdoc()
1598 parse_mdoc_Fa(struct mpage *mpage, const struct roff_meta *meta, in parse_mdoc_Fa() argument
1607 putmdockey(mpage, n->child, mask, 0); in parse_mdoc_Fa()
1612 parse_mdoc_Fd(struct mpage *mpage, const struct roff_meta *meta, in parse_mdoc_Fd() argument
1651 putkeys(mpage, start, end - start + 1, TYPE_In); in parse_mdoc_Fd()
1656 parse_mdoc_fname(struct mpage *mpage, const struct roff_node *n) in parse_mdoc_fname() argument
1671 putkeys(mpage, cp, sz, TYPE_Fn); in parse_mdoc_fname()
1673 putkeys(mpage, cp, sz, NAME_SYN); in parse_mdoc_fname()
1677 parse_mdoc_Fn(struct mpage *mpage, const struct roff_meta *meta, in parse_mdoc_Fn() argument
1685 parse_mdoc_fname(mpage, n->child); in parse_mdoc_Fn()
1692 putmdockey(mpage, n, mask, 0); in parse_mdoc_Fn()
1699 parse_mdoc_Fo(struct mpage *mpage, const struct roff_meta *meta, in parse_mdoc_Fo() argument
1707 parse_mdoc_fname(mpage, n->child); in parse_mdoc_Fo()
1713 parse_mdoc_Va(struct mpage *mpage, const struct roff_meta *meta, in parse_mdoc_Va() argument
1729 putkey(mpage, cp, TYPE_Vt | (n->tok == MDOC_Va || in parse_mdoc_Va()
1738 parse_mdoc_Xr(struct mpage *mpage, const struct roff_meta *meta, in parse_mdoc_Xr() argument
1747 putkey(mpage, n->string, TYPE_Xr); in parse_mdoc_Xr()
1752 putkey(mpage, cp, TYPE_Xr); in parse_mdoc_Xr()
1758 parse_mdoc_Nd(struct mpage *mpage, const struct roff_meta *meta, in parse_mdoc_Nd() argument
1763 deroff(&mpage->desc, n); in parse_mdoc_Nd()
1768 parse_mdoc_Nm(struct mpage *mpage, const struct roff_meta *meta, in parse_mdoc_Nm() argument
1773 putmdockey(mpage, n->child, NAME_TITLE, 0); in parse_mdoc_Nm()
1776 putkey(mpage, meta->name, NAME_SYN); in parse_mdoc_Nm()
1778 putmdockey(mpage, n->child, NAME_SYN, 0); in parse_mdoc_Nm()
1780 if ( ! (mpage->name_head_done || in parse_mdoc_Nm()
1783 putkey(mpage, n->child->string, NAME_HEAD); in parse_mdoc_Nm()
1784 mpage->name_head_done = 1; in parse_mdoc_Nm()
1790 parse_mdoc_Sh(struct mpage *mpage, const struct roff_meta *meta, in parse_mdoc_Sh() argument
1798 parse_mdoc_head(struct mpage *mpage, const struct roff_meta *meta, in parse_mdoc_head() argument
1811 putkeys(const struct mpage *mpage, char *cp, size_t sz, uint64_t v) in putkeys() argument
1830 say(mpage->mlinks->file, in putkeys()
1838 say(mpage->mlinks->file, in putkeys()
1847 if (NULL != s && mpage == s->mpage) { in putkeys()
1855 s->mpage = mpage; in putkeys()
2038 dba_page_alias(mlink->mpage->dba, mlink->name, NAME_FILE); in dbadd_mlink()
2039 dba_page_add(mlink->mpage->dba, DBP_SECT, mlink->dsec); in dbadd_mlink()
2040 dba_page_add(mlink->mpage->dba, DBP_SECT, mlink->fsec); in dbadd_mlink()
2041 dba_page_add(mlink->mpage->dba, DBP_ARCH, mlink->arch); in dbadd_mlink()
2042 dba_page_add(mlink->mpage->dba, DBP_FILE, mlink->file); in dbadd_mlink()
2050 dbadd(struct dba *dba, struct mpage *mpage) in dbadd() argument
2060 mlink = mpage->mlinks; in dbadd()
2090 printf(" - %s\n", mpage->desc); in dbadd()
2097 cp = mpage->desc; in dbadd()
2100 mpage->dba = dba_page_new(dba->pages, in dbadd()
2101 *mpage->arch == '\0' ? mlink->arch : mpage->arch, in dbadd()
2102 cp, mlink->file, mpage->form); in dbadd()
2105 dba_page_add(mpage->dba, DBP_SECT, mpage->sec); in dbadd()
2114 assert(key->mpage == mpage); in dbadd()
2115 dba_page_alias(mpage->dba, key->key, key->mask); in dbadd()
2120 assert(key->mpage == mpage); in dbadd()
2125 key->key, mpage->dba); in dbadd()