=================================================================== RCS file: /cvs/docbook2mdoc/reorg.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -p -r1.1 -r1.2 --- docbook2mdoc/reorg.c 2019/04/28 17:11:53 1.1 +++ docbook2mdoc/reorg.c 2019/04/28 19:05:11 1.2 @@ -1,4 +1,4 @@ -/* $Id: reorg.c,v 1.1 2019/04/28 17:11:53 schwarze Exp $ */ +/* $Id: reorg.c,v 1.2 2019/04/28 19:05:11 schwarze Exp $ */ /* * Copyright (c) 2019 Ingo Schwarze * @@ -22,12 +22,12 @@ * The implementation of the tree reorganizer. */ -void -ptree_reorg(struct ptree *tree) +static void +reorg_root(struct pnode *root) { - struct pnode *date, *descr, *name, *root, *vol, *nc; + struct pnode *date, *descr, *name, *vol, *nc; - if ((root = tree->root) == NULL) + if (root == NULL) return; /* Collect prologue information. */ @@ -69,4 +69,77 @@ ptree_reorg(struct ptree *tree) TAILQ_INSERT_HEAD(&root->childq, vol, child); TAILQ_INSERT_HEAD(&root->childq, name, child); TAILQ_INSERT_HEAD(&root->childq, date, child); +} + +static void +default_title(struct pnode *n, const char *title) +{ + struct pnode *nc; + + if (n->parent == NULL) + return; + + TAILQ_FOREACH(nc, &n->childq, child) + if (nc->node == NODE_TITLE) + return; + + nc = pnode_alloc(NULL); + nc->node = NODE_TITLE; + nc->parent = n; + TAILQ_INSERT_HEAD(&n->childq, nc, child); + pnode_alloc_text(nc, title); +} + +static void +reorg_recurse(struct pnode *n) +{ + struct pnode *nc; + + if (n == NULL) + return; + + switch (n->node) { + case NODE_APPENDIX: + default_title(n, "Appendix"); + break; + case NODE_CAUTION: + default_title(n, "Caution"); + n->node = NODE_NOTE; + break; + case NODE_LEGALNOTICE: + default_title(n, "Legal Notice"); + n->node = NODE_SIMPLESECT; + break; + case NODE_NOTE: + default_title(n, "Note"); + break; + case NODE_PREFACE: + default_title(n, "Preface"); + n->node = NODE_SECTION; + break; + case NODE_SECTION: + case NODE_SIMPLESECT: + default_title(n, "Untitled"); + break; + case NODE_TIP: + default_title(n, "Tip"); + n->node = NODE_NOTE; + break; + case NODE_WARNING: + default_title(n, "Warning"); + n->node = NODE_NOTE; + break; + default: + break; + } + + TAILQ_FOREACH(nc, &n->childq, child) + reorg_recurse(nc); +} + +void +ptree_reorg(struct ptree *tree) +{ + reorg_recurse(tree->root); + reorg_root(tree->root); }