1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
/*
* make_index HTML-REFS-FILE...
*
* Generate a file containing a list of links to all API entries.
* The links are sorted using strcmp.
*/
#include <string.h>
#include <stdlib.h>
#include "dawk.h"
#include "aatree.h"
static char *xstrdup(const char *s)
{
size_t n = strlen(s);
char *p = malloc(n + 1);
memcpy(p, s, n);
p[n] = '\0';
return p;
}
static void print_link(const char *value)
{
d_printf("* [%s]\n", value);
/* Work around Pandoc issue #182. */
d_printf("<!-- -->\n");
}
static void pre_order_traversal(Aatree *node, void (*doit)(const char *))
{
if (node->left != &aa_nil) {
pre_order_traversal(node->left, doit);
}
doit(node->value);
if (node->right != &aa_nil) {
pre_order_traversal(node->right, doit);
}
}
int main(int argc, char *argv[])
{
dstr line;
Aatree * root = &aa_nil;
d_init(argc, argv);
d_printf("# Index\n");
while ((d_getline(line))) {
if (d_match(line, "^\\[([^\\]]*)")) {
const char *ref = d_submatch(1);
char *s = xstrdup(ref);
root = aa_insert(root, s, s);
}
}
pre_order_traversal(root, print_link);
aa_destroy(root);
return 0;
}
/* vim: set sts=3 sw=3 et: */
|