diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-07-01 10:46:32 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-07-01 10:46:32 +0000 |
commit | b4a71de7462579035b2712698ffec5cb8c09fe16 (patch) | |
tree | a294cf041a34c704d01dbb660c673b43d6bfa3bf /makewhatis.c | |
parent | a16892fda74dc5febc963e1ff25874f107a4c84d (diff) | |
download | mandoc-b4a71de7462579035b2712698ffec5cb8c09fe16.tar.gz |
Allow `Nd' scarfed data to allow for non-text nodes as the first node, as well.
Diffstat (limited to 'makewhatis.c')
-rw-r--r-- | makewhatis.c | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/makewhatis.c b/makewhatis.c index 77bb5adb..ee962638 100644 --- a/makewhatis.c +++ b/makewhatis.c @@ -76,7 +76,7 @@ struct buf { const struct mdoc_meta *m static void buf_appendmdoc(struct buf *, - const struct mdoc_node *); + const struct mdoc_node *, int); static void buf_append(struct buf *, const char *); static void buf_appendb(struct buf *, const void *, size_t); @@ -531,16 +531,25 @@ buf_append(struct buf *buf, const char *cp) * This is optimised for general mdoc nodes in this context, which do * not consist of subexpressions and having a recursive call for n->next * would be wasteful. + * The "f" variable should be 0 unless called from pmdoc_Nd for the + * description buffer, which does not start at the beginning of the + * buffer. */ static void -buf_appendmdoc(struct buf *buf, const struct mdoc_node *n) +buf_appendmdoc(struct buf *buf, const struct mdoc_node *n, int f) { for ( ; n; n = n->next) { if (n->child) - buf_appendmdoc(buf, n->child); - if (MDOC_TEXT == n->type) + buf_appendmdoc(buf, n->child, f); + + if (MDOC_TEXT == n->type && f) { + f = 0; + buf_appendb(buf, n->string, + strlen(n->string) + 1); + } else if (MDOC_TEXT == n->type) buf_append(buf, n->string); + } } @@ -552,7 +561,7 @@ pmdoc_An(MDOC_ARGS) if (SEC_AUTHORS != n->sec) return; - buf_appendmdoc(buf, n->child); + buf_appendmdoc(buf, n->child, 0); hash_put(hash, buf, TYPE_AUTHOR); } @@ -610,7 +619,7 @@ pmdoc_Cd(MDOC_ARGS) if (SEC_SYNOPSIS != n->sec) return; - buf_appendmdoc(buf, n->child); + buf_appendmdoc(buf, n->child, 0); hash_put(hash, buf, TYPE_CONFIG); } @@ -743,22 +752,12 @@ pmdoc_Fo(MDOC_ARGS) static void pmdoc_Nd(MDOC_ARGS) { - size_t sz; if (MDOC_BODY != n->type) return; - else if (NULL == (n = n->child)) - return; - - /* FIXME: don't assume this. */ - assert(MDOC_TEXT == n->type); - sz = strlen(n->string) + 1; - buf_appendb(dbuf, n->string, sz); - buf_appendb(buf, n->string, sz); - - buf_appendmdoc(dbuf, n->next); - buf_appendmdoc(buf, n->next); + buf_appendmdoc(dbuf, n->child, 1); + buf_appendmdoc(buf, n->child, 0); hash_put(hash, buf, TYPE_DESC); } @@ -771,7 +770,7 @@ pmdoc_Pa(MDOC_ARGS) if (SEC_FILES != n->sec) return; - buf_appendmdoc(buf, n->child); + buf_appendmdoc(buf, n->child, 0); hash_put(hash, buf, TYPE_PATH); } @@ -781,7 +780,7 @@ pmdoc_Nm(MDOC_ARGS) { if (SEC_NAME == n->sec) { - buf_appendmdoc(buf, n->child); + buf_appendmdoc(buf, n->child, 0); hash_put(hash, buf, TYPE_NAME); return; } else if (SEC_SYNOPSIS != n->sec || MDOC_HEAD != n->type) @@ -790,7 +789,7 @@ pmdoc_Nm(MDOC_ARGS) if (NULL == n->child) buf_append(buf, m->name); - buf_appendmdoc(buf, n->child); + buf_appendmdoc(buf, n->child, 0); hash_put(hash, buf, TYPE_UTILITY); } |