version 1.12, 2011/07/01 09:11:35 |
version 1.16, 2011/07/01 13:46:39 |
|
|
#define TYPE_DESC 0x100 |
#define TYPE_DESC 0x100 |
#define TYPE_XREF 0x200 |
#define TYPE_XREF 0x200 |
#define TYPE_PATH 0x400 |
#define TYPE_PATH 0x400 |
|
#define TYPE_ENV 0x800 |
|
#define TYPE_ERR 0x1000 |
|
|
/* Buffer for storing growable data. */ |
/* Buffer for storing growable data. */ |
|
|
|
|
const struct mdoc_node *n, \ |
const struct mdoc_node *n, \ |
const struct mdoc_meta *m |
const struct mdoc_meta *m |
|
|
|
static void buf_appendmdoc(struct buf *, |
|
const struct mdoc_node *, int); |
static void buf_append(struct buf *, const char *); |
static void buf_append(struct buf *, const char *); |
static void buf_appendb(struct buf *, |
static void buf_appendb(struct buf *, |
const void *, size_t); |
const void *, size_t); |
Line 84 static int pman_node(MAN_ARGS); |
|
Line 88 static int pman_node(MAN_ARGS); |
|
static void pmdoc_node(MDOC_ARGS); |
static void pmdoc_node(MDOC_ARGS); |
static void pmdoc_An(MDOC_ARGS); |
static void pmdoc_An(MDOC_ARGS); |
static void pmdoc_Cd(MDOC_ARGS); |
static void pmdoc_Cd(MDOC_ARGS); |
|
static void pmdoc_Er(MDOC_ARGS); |
|
static void pmdoc_Ev(MDOC_ARGS); |
static void pmdoc_Fd(MDOC_ARGS); |
static void pmdoc_Fd(MDOC_ARGS); |
static void pmdoc_In(MDOC_ARGS); |
static void pmdoc_In(MDOC_ARGS); |
static void pmdoc_Fn(MDOC_ARGS); |
static void pmdoc_Fn(MDOC_ARGS); |
Line 119 static const pmdoc_nf mdocs[MDOC_MAX] = { |
|
Line 125 static const pmdoc_nf mdocs[MDOC_MAX] = { |
|
pmdoc_Cd, /* Cd */ |
pmdoc_Cd, /* Cd */ |
NULL, /* Cm */ |
NULL, /* Cm */ |
NULL, /* Dv */ |
NULL, /* Dv */ |
NULL, /* Er */ |
pmdoc_Er, /* Er */ |
NULL, /* Ev */ |
pmdoc_Ev, /* Ev */ |
NULL, /* Ex */ |
NULL, /* Ex */ |
NULL, /* Fa */ |
NULL, /* Fa */ |
pmdoc_Fd, /* Fd */ |
pmdoc_Fd, /* Fd */ |
Line 524 buf_append(struct buf *buf, const char *cp) |
|
Line 530 buf_append(struct buf *buf, const char *cp) |
|
buf_appendb(buf, cp, sz + 1); |
buf_appendb(buf, cp, sz + 1); |
} |
} |
|
|
|
/* |
|
* Recursively add all text from a given node. |
|
* 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, int f) |
|
{ |
|
|
|
for ( ; n; n = n->next) { |
|
if (n->child) |
|
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); |
|
|
|
} |
|
} |
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
static void |
static void |
pmdoc_An(MDOC_ARGS) |
pmdoc_An(MDOC_ARGS) |
Line 532 pmdoc_An(MDOC_ARGS) |
|
Line 565 pmdoc_An(MDOC_ARGS) |
|
if (SEC_AUTHORS != n->sec) |
if (SEC_AUTHORS != n->sec) |
return; |
return; |
|
|
for (n = n->child; n; n = n->next) |
buf_appendmdoc(buf, n->child, 0); |
if (MDOC_TEXT == n->type) |
|
buf_append(buf, n->string); |
|
|
|
hash_put(hash, buf, TYPE_AUTHOR); |
hash_put(hash, buf, TYPE_AUTHOR); |
} |
} |
|
|
Line 593 pmdoc_Cd(MDOC_ARGS) |
|
Line 623 pmdoc_Cd(MDOC_ARGS) |
|
if (SEC_SYNOPSIS != n->sec) |
if (SEC_SYNOPSIS != n->sec) |
return; |
return; |
|
|
for (n = n->child; n; n = n->next) |
buf_appendmdoc(buf, n->child, 0); |
if (MDOC_TEXT == n->type) |
|
buf_append(buf, n->string); |
|
|
|
hash_put(hash, buf, TYPE_CONFIG); |
hash_put(hash, buf, TYPE_CONFIG); |
} |
} |
|
|
Line 729 pmdoc_Fo(MDOC_ARGS) |
|
Line 756 pmdoc_Fo(MDOC_ARGS) |
|
static void |
static void |
pmdoc_Nd(MDOC_ARGS) |
pmdoc_Nd(MDOC_ARGS) |
{ |
{ |
int first; |
|
size_t sz; |
|
|
|
for (first = 1, n = n->child; n; n = n->next) { |
|
if (MDOC_TEXT != n->type) |
|
continue; |
|
|
|
if (first) { |
if (MDOC_BODY != n->type) |
sz = strlen(n->string) + 1; |
return; |
buf_appendb(dbuf, n->string, sz); |
|
buf_appendb(buf, n->string, sz); |
|
} else { |
|
buf_append(dbuf, n->string); |
|
buf_append(buf, n->string); |
|
} |
|
|
|
first = 0; |
buf_appendmdoc(dbuf, n->child, 1); |
} |
buf_appendmdoc(buf, n->child, 0); |
|
|
hash_put(hash, buf, TYPE_DESC); |
hash_put(hash, buf, TYPE_DESC); |
} |
} |
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
static void |
static void |
|
pmdoc_Er(MDOC_ARGS) |
|
{ |
|
|
|
if (SEC_ERRORS != n->sec) |
|
return; |
|
|
|
buf_appendmdoc(buf, n->child, 0); |
|
hash_put(hash, buf, TYPE_ERR); |
|
} |
|
|
|
/* ARGSUSED */ |
|
static void |
|
pmdoc_Ev(MDOC_ARGS) |
|
{ |
|
|
|
if (SEC_ENVIRONMENT != n->sec) |
|
return; |
|
|
|
buf_appendmdoc(buf, n->child, 0); |
|
hash_put(hash, buf, TYPE_ENV); |
|
} |
|
|
|
/* ARGSUSED */ |
|
static void |
pmdoc_Pa(MDOC_ARGS) |
pmdoc_Pa(MDOC_ARGS) |
{ |
{ |
|
|
if (SEC_FILES != n->sec) |
if (SEC_FILES != n->sec) |
return; |
return; |
|
|
for (n = n->child; n; n = n->next) |
buf_appendmdoc(buf, n->child, 0); |
if (MDOC_TEXT == n->type) |
|
buf_append(buf, n->string); |
|
|
|
hash_put(hash, buf, TYPE_PATH); |
hash_put(hash, buf, TYPE_PATH); |
} |
} |
|
|
Line 772 pmdoc_Nm(MDOC_ARGS) |
|
Line 808 pmdoc_Nm(MDOC_ARGS) |
|
{ |
{ |
|
|
if (SEC_NAME == n->sec) { |
if (SEC_NAME == n->sec) { |
for (n = n->child; n; n = n->next) |
buf_appendmdoc(buf, n->child, 0); |
if (MDOC_TEXT == n->type) |
|
buf_append(buf, n->string); |
|
hash_put(hash, buf, TYPE_NAME); |
hash_put(hash, buf, TYPE_NAME); |
return; |
return; |
} else if (SEC_SYNOPSIS != n->sec || MDOC_HEAD != n->type) |
} else if (SEC_SYNOPSIS != n->sec || MDOC_HEAD != n->type) |
Line 783 pmdoc_Nm(MDOC_ARGS) |
|
Line 817 pmdoc_Nm(MDOC_ARGS) |
|
if (NULL == n->child) |
if (NULL == n->child) |
buf_append(buf, m->name); |
buf_append(buf, m->name); |
|
|
for (n = n->child; n; n = n->next) |
buf_appendmdoc(buf, n->child, 0); |
if (MDOC_TEXT == n->type) |
|
buf_append(buf, n->string); |
|
|
|
hash_put(hash, buf, TYPE_UTILITY); |
hash_put(hash, buf, TYPE_UTILITY); |
} |
} |
|
|