Annotation of docbook2mdoc/reorg.c, Revision 1.1
1.1 ! schwarze 1: /* $Id$ */
! 2: /*
! 3: * Copyright (c) 2019 Ingo Schwarze <schwarze@openbsd.org>
! 4: *
! 5: * Permission to use, copy, modify, and distribute this software for any
! 6: * purpose with or without fee is hereby granted, provided that the above
! 7: * copyright notice and this permission notice appear in all copies.
! 8: *
! 9: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
! 10: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 11: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
! 12: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 13: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 14: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 15: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 16: */
! 17:
! 18: #include "node.h"
! 19: #include "reorg.h"
! 20:
! 21: /*
! 22: * The implementation of the tree reorganizer.
! 23: */
! 24:
! 25: void
! 26: ptree_reorg(struct ptree *tree)
! 27: {
! 28: struct pnode *date, *descr, *name, *root, *vol, *nc;
! 29:
! 30: if ((root = tree->root) == NULL)
! 31: return;
! 32:
! 33: /* Collect prologue information. */
! 34:
! 35: if ((date = pnode_takefirst(root, NODE_PUBDATE)) == NULL &&
! 36: (date = pnode_takefirst(root, NODE_DATE)) == NULL) {
! 37: date = pnode_alloc(NULL);
! 38: pnode_alloc_text(date, "$Mdocdate" "$");
! 39: }
! 40: date->node = NODE_DATE;
! 41: date->parent = root;
! 42:
! 43: name = vol = NULL;
! 44: if ((nc = pnode_findfirst(root, NODE_REFMETA)) != NULL) {
! 45: name = pnode_takefirst(nc, NODE_REFENTRYTITLE);
! 46: vol = pnode_takefirst(nc, NODE_MANVOLNUM);
! 47: }
! 48: if (name == NULL) {
! 49: name = pnode_alloc(NULL);
! 50: name->node = NODE_REFENTRYTITLE;
! 51: name->parent = root;
! 52: pnode_alloc_text(name,
! 53: pnode_getattr_raw(root, ATTRKEY_ID, "UNKNOWN"));
! 54: }
! 55: if (vol == NULL) {
! 56: vol = pnode_alloc(NULL);
! 57: vol->node = NODE_MANVOLNUM;
! 58: vol->parent = root;
! 59: pnode_alloc_text(vol, "1");
! 60: }
! 61:
! 62: /* Insert prologue information at the beginning. */
! 63:
! 64: if (pnode_findfirst(root, NODE_REFNAMEDIV) == NULL &&
! 65: ((nc = pnode_findfirst(root, NODE_BOOKINFO)) != NULL ||
! 66: (nc = pnode_findfirst(root, NODE_REFENTRYINFO)) != NULL) &&
! 67: (descr = pnode_takefirst(nc, NODE_TITLE)) != NULL)
! 68: TAILQ_INSERT_HEAD(&root->childq, descr, child);
! 69: TAILQ_INSERT_HEAD(&root->childq, vol, child);
! 70: TAILQ_INSERT_HEAD(&root->childq, name, child);
! 71: TAILQ_INSERT_HEAD(&root->childq, date, child);
! 72: }
CVSweb