=================================================================== RCS file: /cvs/mandoc/mandocdb.c,v retrieving revision 1.30 retrieving revision 1.32 diff -u -p -r1.30 -r1.32 --- mandoc/mandocdb.c 2011/12/09 01:21:10 1.30 +++ mandoc/mandocdb.c 2011/12/10 16:53:39 1.32 @@ -1,4 +1,4 @@ -/* $Id: mandocdb.c,v 1.30 2011/12/09 01:21:10 kristaps Exp $ */ +/* $Id: mandocdb.c,v 1.32 2011/12/10 16:53:39 schwarze Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons * Copyright (c) 2011 Ingo Schwarze @@ -579,14 +579,14 @@ index_merge(const struct of *of, struct mparse *mp, if (0 == use_all) { assert(of->sec); assert(msec); - if (strcmp(msec, of->sec)) + if (strcasecmp(msec, of->sec)) continue; if (NULL == arch) { if (NULL != of->arch) continue; } else if (NULL == of->arch || - strcmp(arch, of->arch)) + strcasecmp(arch, of->arch)) continue; } @@ -1288,29 +1288,30 @@ pformatted(DB *hash, struct buf *buf, struct buf *dbuf buf_append(buf, of->title); hash_put(hash, buf, TYPE_Nm); - /* Skip to first blank line. */ + /* Skip to first blank line. */ while (NULL != (line = fgetln(stream, &len))) - if (len && '\n' == *line) + if ('\n' == *line) break; - /* - * Skip to first section header. - * This happens when text is flush-left. + /* + * Assume the first line that is not indented + * is the first section header. Skip to it. */ while (NULL != (line = fgetln(stream, &len))) - if (len && '\n' != *line && ' ' != *line) + if ('\n' != *line && ' ' != *line) break; /* - * If no page content can be found or the input line is - * malformed (zer-length or has no trailing newline), reuse the - * page title as the page description. + * If no page content can be found, or the input line + * is already the next section header, or there is no + * trailing newline, reuse the page title as the page + * description. */ line = fgetln(stream, &len); - if (NULL == line || len == 0 || '\n' != line[(int)len - 1]) { + if (NULL == line || ' ' != *line || '\n' != line[(int)len - 1]) { buf_appendb(dbuf, buf->cp, buf->size); hash_put(hash, buf, TYPE_Nd); fclose(stream); @@ -1319,8 +1320,8 @@ pformatted(DB *hash, struct buf *buf, struct buf *dbuf line[(int)--len] = '\0'; - /* - * Skip to the last dash. + /* + * Skip to the first dash. * Use the remaining line as the description (no more than 70 * bytes). */ @@ -1558,6 +1559,10 @@ ofile_dirbuild(const char *dir, const char* psec, cons buf[0] = '\0'; strlcat(buf, dir, MAXPATHLEN); p = strrchr(buf, '/'); + if (NULL != parch && NULL != p) + for (p--; p > buf; p--) + if ('/' == *p) + break; if (NULL == p) p = buf; else