version 1.1, 2019/04/28 17:11:53 |
version 1.2, 2019/04/28 19:05:11 |
|
|
* The implementation of the tree reorganizer. |
* The implementation of the tree reorganizer. |
*/ |
*/ |
|
|
void |
static void |
ptree_reorg(struct ptree *tree) |
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; |
return; |
|
|
/* Collect prologue information. */ |
/* Collect prologue information. */ |
Line 69 ptree_reorg(struct ptree *tree) |
|
Line 69 ptree_reorg(struct ptree *tree) |
|
TAILQ_INSERT_HEAD(&root->childq, vol, child); |
TAILQ_INSERT_HEAD(&root->childq, vol, child); |
TAILQ_INSERT_HEAD(&root->childq, name, child); |
TAILQ_INSERT_HEAD(&root->childq, name, child); |
TAILQ_INSERT_HEAD(&root->childq, date, 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); |
} |
} |