version 1.255, 2017/08/26 15:55:46 |
version 1.258, 2018/02/23 18:25:57 |
Line 139 static void parse_mdoc(struct mpage *, const struct r |
|
Line 139 static void parse_mdoc(struct mpage *, const struct r |
|
const struct roff_node *); |
const struct roff_node *); |
static int parse_mdoc_head(struct mpage *, const struct roff_meta *, |
static int parse_mdoc_head(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
|
static int parse_mdoc_Fa(struct mpage *, const struct roff_meta *, |
|
const struct roff_node *); |
static int parse_mdoc_Fd(struct mpage *, const struct roff_meta *, |
static int parse_mdoc_Fd(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
static void parse_mdoc_fname(struct mpage *, const struct roff_node *); |
static void parse_mdoc_fname(struct mpage *, const struct roff_node *); |
Line 207 static const struct mdoc_handler __mdocs[MDOC_MAX - MD |
|
Line 209 static const struct mdoc_handler __mdocs[MDOC_MAX - MD |
|
{ NULL, TYPE_Er, 0 }, /* Er */ |
{ NULL, TYPE_Er, 0 }, /* Er */ |
{ NULL, TYPE_Ev, 0 }, /* Ev */ |
{ NULL, TYPE_Ev, 0 }, /* Ev */ |
{ NULL, 0, 0 }, /* Ex */ |
{ NULL, 0, 0 }, /* Ex */ |
{ NULL, TYPE_Fa, 0 }, /* Fa */ |
{ parse_mdoc_Fa, 0, 0 }, /* Fa */ |
{ parse_mdoc_Fd, 0, 0 }, /* Fd */ |
{ parse_mdoc_Fd, 0, 0 }, /* Fd */ |
{ NULL, TYPE_Fl, 0 }, /* Fl */ |
{ NULL, TYPE_Fl, 0 }, /* Fl */ |
{ parse_mdoc_Fn, 0, 0 }, /* Fn */ |
{ parse_mdoc_Fn, 0, 0 }, /* Fn */ |
{ NULL, TYPE_Ft, 0 }, /* Ft */ |
{ NULL, TYPE_Ft | TYPE_Vt, 0 }, /* Ft */ |
{ NULL, TYPE_Ic, 0 }, /* Ic */ |
{ NULL, TYPE_Ic, 0 }, /* Ic */ |
{ NULL, TYPE_In, 0 }, /* In */ |
{ NULL, TYPE_In, 0 }, /* In */ |
{ NULL, TYPE_Li, 0 }, /* Li */ |
{ NULL, TYPE_Li, 0 }, /* Li */ |
Line 1373 parse_cat(struct mpage *mpage, int fd) |
|
Line 1375 parse_cat(struct mpage *mpage, int fd) |
|
plen -= 2; |
plen -= 2; |
} |
} |
|
|
mpage->desc = mandoc_strdup(p); |
/* |
|
* Cut off excessive one-line descriptions. |
|
* Bad pages are not worth better heuristics. |
|
*/ |
|
|
|
mpage->desc = mandoc_strndup(p, 150); |
fclose(stream); |
fclose(stream); |
free(title); |
free(title); |
} |
} |
Line 1517 parse_man(struct mpage *mpage, const struct roff_meta |
|
Line 1524 parse_man(struct mpage *mpage, const struct roff_meta |
|
while (' ' == *start) |
while (' ' == *start) |
start++; |
start++; |
|
|
mpage->desc = mandoc_strdup(start); |
/* |
|
* Cut off excessive one-line descriptions. |
|
* Bad pages are not worth better heuristics. |
|
*/ |
|
|
|
mpage->desc = mandoc_strndup(start, 150); |
free(title); |
free(title); |
return; |
return; |
} |
} |
Line 1563 parse_mdoc(struct mpage *mpage, const struct roff_meta |
|
Line 1575 parse_mdoc(struct mpage *mpage, const struct roff_meta |
|
} |
} |
|
|
static int |
static int |
|
parse_mdoc_Fa(struct mpage *mpage, const struct roff_meta *meta, |
|
const struct roff_node *n) |
|
{ |
|
uint64_t mask; |
|
|
|
mask = TYPE_Fa; |
|
if (n->sec == SEC_SYNOPSIS) |
|
mask |= TYPE_Vt; |
|
|
|
putmdockey(mpage, n->child, mask, 0); |
|
return 0; |
|
} |
|
|
|
static int |
parse_mdoc_Fd(struct mpage *mpage, const struct roff_meta *meta, |
parse_mdoc_Fd(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
|
|
parse_mdoc_Fn(struct mpage *mpage, const struct roff_meta *meta, |
parse_mdoc_Fn(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
|
uint64_t mask; |
|
|
if (n->child == NULL) |
if (n->child == NULL) |
return 0; |
return 0; |
|
|
parse_mdoc_fname(mpage, n->child); |
parse_mdoc_fname(mpage, n->child); |
|
|
for (n = n->child->next; n != NULL; n = n->next) |
n = n->child->next; |
if (n->type == ROFFT_TEXT) |
if (n != NULL && n->type == ROFFT_TEXT) { |
putkey(mpage, n->string, TYPE_Fa); |
mask = TYPE_Fa; |
|
if (n->sec == SEC_SYNOPSIS) |
|
mask |= TYPE_Vt; |
|
putmdockey(mpage, n, mask, 0); |
|
} |
|
|
return 0; |
return 0; |
} |
} |
Line 2152 dbwrite(struct dba *dba) |
|
Line 2183 dbwrite(struct dba *dba) |
|
say("", "&%s", tfn); |
say("", "&%s", tfn); |
return; |
return; |
} |
} |
cp1 = cp2 = NULL; |
cp1 = cp2 = MAP_FAILED; |
fd1 = fd2 = -1; |
fd1 = fd2 = -1; |
(void)strlcat(tfn, "/" MANDOC_DB, sizeof(tfn)); |
(void)strlcat(tfn, "/" MANDOC_DB, sizeof(tfn)); |
if (dba_write(tfn, dba) == -1) { |
if (dba_write(tfn, dba) == -1) { |
Line 2178 dbwrite(struct dba *dba) |
|
Line 2209 dbwrite(struct dba *dba) |
|
if (sb1.st_size != sb2.st_size) |
if (sb1.st_size != sb2.st_size) |
goto err; |
goto err; |
if ((cp1 = mmap(NULL, sb1.st_size, PROT_READ, MAP_PRIVATE, |
if ((cp1 = mmap(NULL, sb1.st_size, PROT_READ, MAP_PRIVATE, |
fd1, 0)) == NULL) { |
fd1, 0)) == MAP_FAILED) { |
say(MANDOC_DB, "&mmap"); |
say(MANDOC_DB, "&mmap"); |
goto err; |
goto err; |
} |
} |
if ((cp2 = mmap(NULL, sb2.st_size, PROT_READ, MAP_PRIVATE, |
if ((cp2 = mmap(NULL, sb2.st_size, PROT_READ, MAP_PRIVATE, |
fd2, 0)) == NULL) { |
fd2, 0)) == MAP_FAILED) { |
say(tfn, "&mmap"); |
say(tfn, "&mmap"); |
goto err; |
goto err; |
} |
} |
|
|
say(MANDOC_DB, "Data changed, but cannot replace database"); |
say(MANDOC_DB, "Data changed, but cannot replace database"); |
|
|
out: |
out: |
if (cp1 != NULL) |
if (cp1 != MAP_FAILED) |
munmap(cp1, sb1.st_size); |
munmap(cp1, sb1.st_size); |
if (cp2 != NULL) |
if (cp2 != MAP_FAILED) |
munmap(cp2, sb2.st_size); |
munmap(cp2, sb2.st_size); |
if (fd1 != -1) |
if (fd1 != -1) |
close(fd1); |
close(fd1); |