=================================================================== RCS file: /cvs/docbook2mdoc/reorg.c,v retrieving revision 1.4 retrieving revision 1.6 diff -u -p -r1.4 -r1.6 --- docbook2mdoc/reorg.c 2019/04/28 20:26:49 1.4 +++ docbook2mdoc/reorg.c 2019/05/01 11:03:31 1.6 @@ -1,4 +1,4 @@ -/* $Id: reorg.c,v 1.4 2019/04/28 20:26:49 schwarze Exp $ */ +/* $Id: reorg.c,v 1.6 2019/05/01 11:03:31 schwarze Exp $ */ /* * Copyright (c) 2019 Ingo Schwarze * @@ -24,7 +24,7 @@ */ static void -reorg_root(struct pnode *root) +reorg_root(struct pnode *root, const char *sec) { struct pnode *date, *info, *name, *vol, *nc; @@ -53,11 +53,12 @@ reorg_root(struct pnode *root) pnode_alloc_text(name, pnode_getattr_raw(root, ATTRKEY_ID, "UNKNOWN")); } - if (vol == NULL) { + if (vol == NULL || sec != NULL) { + pnode_unlink(vol); vol = pnode_alloc(NULL); vol->node = NODE_MANVOLNUM; vol->parent = root; - pnode_alloc_text(vol, "1"); + pnode_alloc_text(vol, sec == NULL ? "1" : sec); } /* Insert prologue information at the beginning. */ @@ -210,6 +211,20 @@ default_title(struct pnode *n, const char *title) } static void +reorg_function(struct pnode *n) +{ + struct pnode *nc; + size_t sz; + + if ((nc = TAILQ_FIRST(&n->childq)) != NULL && + nc->node == NODE_TEXT && + TAILQ_NEXT(nc, child) == NULL && + (sz = strlen(nc->b)) > 2 && + nc->b[sz - 2] == '(' && nc->b[sz - 1] == ')') + nc->b[sz - 2] = '\0'; +} + +static void reorg_recurse(struct pnode *n) { struct pnode *nc; @@ -231,6 +246,9 @@ reorg_recurse(struct pnode *n) default_title(n, "Caution"); n->node = NODE_NOTE; break; + case NODE_FUNCTION: + reorg_function(n); + break; case NODE_LEGALNOTICE: default_title(n, "Legal Notice"); n->node = NODE_SIMPLESECT; @@ -271,8 +289,8 @@ reorg_recurse(struct pnode *n) } void -ptree_reorg(struct ptree *tree) +ptree_reorg(struct ptree *tree, const char *sec) { - reorg_root(tree->root); + reorg_root(tree->root, sec); reorg_recurse(tree->root); }