From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (kristaps@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.5/8.14.5) with ESMTP id pBVIlqsq019981 for ; Sat, 31 Dec 2011 13:47:52 -0500 (EST) Received: (from kristaps@localhost) by krisdoz.my.domain (8.14.5/8.14.3/Submit) id pBVIlqPv004742; Sat, 31 Dec 2011 13:47:52 -0500 (EST) Date: Sat, 31 Dec 2011 13:47:52 -0500 (EST) Message-Id: <201112311847.pBVIlqPv004742@krisdoz.my.domain> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: kristaps@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: When parsing catpages, read from the first section (NAME, we X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- When parsing catpages, read from the first section (NAME, we hope) until the next section. Also, remove the limit of 72 characters and enforce this, instead in the apropos frontend. Modified Files: -------------- mdocml: apropos.c mandocdb.c Revision Data ------------- Index: mandocdb.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandocdb.c,v retrieving revision 1.42 retrieving revision 1.43 diff -Lmandocdb.c -Lmandocdb.c -u -p -r1.42 -r1.43 --- mandocdb.c +++ mandocdb.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -129,8 +130,8 @@ static void ofile_argbuild(int, char static void ofile_dirbuild(const char *, const char *, const char *, int, struct of **); static void ofile_free(struct of *); -static void pformatted(DB *, struct buf *, struct buf *, - const struct of *); +static void pformatted(DB *, struct buf *, + struct buf *, const struct of *); static int pman_node(MAN_ARGS); static void pmdoc_node(MDOC_ARGS); static int pmdoc_head(MDOC_ARGS); @@ -1334,6 +1335,8 @@ pman_node(MAN_ARGS) if (0 == strncmp(start, "-", 1)) start += 1; + else if (0 == strncmp(start, "\\-\\-", 4)) + start += 4; else if (0 == strncmp(start, "\\-", 2)) start += 2; else if (0 == strncmp(start, "\\(en", 4)) @@ -1364,12 +1367,12 @@ pman_node(MAN_ARGS) * By necessity, this involves rather crude guesswork. */ static void -pformatted(DB *hash, struct buf *buf, struct buf *dbuf, - const struct of *of) +pformatted(DB *hash, struct buf *buf, + struct buf *dbuf, const struct of *of) { FILE *stream; - char *line, *p; - size_t len, plen; + char *line, *p, *title; + size_t len, plen, titlesz; if (NULL == (stream = fopen(of->fname, "r"))) { if (warnings) @@ -1402,6 +1405,32 @@ pformatted(DB *hash, struct buf *buf, st while (NULL != (line = fgetln(stream, &len))) if ('\n' != *line && ' ' != *line) break; + + /* + * Read up until the next section into a buffer. + * Strip the leading and trailing newline from each read line, + * appending a trailing space. + * Ignore empty (whitespace-only) lines. + */ + + titlesz = 0; + title = NULL; + + while (NULL != (line = fgetln(stream, &len))) { + if (' ' != *line || '\n' != line[(int)len - 1]) + break; + while (len > 0 && isspace((unsigned char)*line)) { + line++; + len--; + } + if (1 == len) + continue; + title = mandoc_realloc(title, titlesz + len); + memcpy(title + titlesz, line, len); + titlesz += len; + title[(int)titlesz - 1] = ' '; + } + /* * If no page content can be found, or the input line @@ -1410,18 +1439,19 @@ pformatted(DB *hash, struct buf *buf, st * description. */ - line = fgetln(stream, &len); - if (NULL == line || ' ' != *line || '\n' != line[(int)len - 1]) { + if (NULL == title || '\0' == *title) { if (warnings) fprintf(stderr, "%s: cannot find NAME section\n", of->fname); buf_appendb(dbuf, buf->cp, buf->size); hash_put(hash, buf, TYPE_Nd); fclose(stream); + free(title); return; } - line[(int)--len] = '\0'; + title = mandoc_realloc(title, titlesz + 1); + title[(int)titlesz] = '\0'; /* * Skip to the first dash. @@ -1429,20 +1459,17 @@ pformatted(DB *hash, struct buf *buf, st * bytes). */ - if (NULL != (p = strstr(line, "- "))) { + if (NULL != (p = strstr(title, "- "))) { for (p += 2; ' ' == *p || '\b' == *p; p++) /* Skip to next word. */ ; } else { if (warnings) fprintf(stderr, "%s: no dash in title line\n", of->fname); - p = line; + p = title; } - if ((plen = strlen(p)) > 70) { - plen = 70; - p[plen] = '\0'; - } + plen = strlen(p); /* Strip backspace-encoding from line. */ @@ -1461,6 +1488,7 @@ pformatted(DB *hash, struct buf *buf, st buf_appendb(buf, p, plen + 1); hash_put(hash, buf, TYPE_Nd); fclose(stream); + free(title); } static void Index: apropos.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/apropos.c,v retrieving revision 1.24 retrieving revision 1.25 diff -Lapropos.c -Lapropos.c -u -p -r1.24 -r1.25 --- apropos.c +++ apropos.c @@ -127,7 +127,7 @@ list(struct res *res, size_t sz, void *a qsort(res, sz, sizeof(struct res), cmp); for (i = 0; i < (int)sz; i++) - printf("%s(%s%s%s) - %s\n", res[i].title, + printf("%s(%s%s%s) - %.70s\n", res[i].title, res[i].cat, *res[i].arch ? "/" : "", *res[i].arch ? res[i].arch : "", -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv