=================================================================== RCS file: /cvs/docbook2mdoc/reorg.c,v retrieving revision 1.3 retrieving revision 1.6 diff -u -p -r1.3 -r1.6 --- docbook2mdoc/reorg.c 2019/04/28 19:59:01 1.3 +++ docbook2mdoc/reorg.c 2019/05/01 11:03:31 1.6 @@ -1,4 +1,4 @@ -/* $Id: reorg.c,v 1.3 2019/04/28 19:59:01 schwarze Exp $ */ +/* $Id: reorg.c,v 1.6 2019/05/01 11:03:31 schwarze Exp $ */ /* * Copyright (c) 2019 Ingo Schwarze * @@ -24,9 +24,9 @@ */ static void -reorg_root(struct pnode *root) +reorg_root(struct pnode *root, const char *sec) { - struct pnode *date, *descr, *name, *vol, *nc; + struct pnode *date, *info, *name, *vol, *nc; if (root == NULL) return; @@ -53,20 +53,24 @@ 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. */ if (pnode_findfirst(root, NODE_REFNAMEDIV) == NULL && - ((nc = pnode_findfirst(root, NODE_BOOKINFO)) != NULL || - (nc = pnode_findfirst(root, NODE_REFENTRYINFO)) != NULL) && - (descr = pnode_takefirst(nc, NODE_TITLE)) != NULL) - TAILQ_INSERT_HEAD(&root->childq, descr, child); + ((info = pnode_findfirst(root, NODE_BOOKINFO)) != NULL || + (info = pnode_findfirst(root, NODE_REFENTRYINFO)) != NULL)) { + if ((nc = pnode_takefirst(info, NODE_ABSTRACT)) != NULL) + TAILQ_INSERT_HEAD(&root->childq, nc, child); + if ((nc = pnode_takefirst(info, NODE_TITLE)) != NULL) + TAILQ_INSERT_HEAD(&root->childq, nc, child); + } TAILQ_INSERT_HEAD(&root->childq, vol, child); TAILQ_INSERT_HEAD(&root->childq, name, child); TAILQ_INSERT_HEAD(&root->childq, date, child); @@ -207,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; @@ -215,6 +233,10 @@ reorg_recurse(struct pnode *n) return; switch (n->node) { + case NODE_ABSTRACT: + default_title(n, "Abstract"); + n->node = NODE_SECTION; + break; case NODE_APPENDIX: if (n->parent == NULL) reorg_refentry(n); @@ -224,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; @@ -264,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); }