version 1.115, 2019/04/12 21:37:07 |
version 1.116, 2019/04/13 13:06:35 |
Line 318 pnode_printciterefentry(struct format *f, struct pnode |
|
Line 318 pnode_printciterefentry(struct format *f, struct pnode |
|
} |
} |
|
|
static void |
static void |
pnode_printrefmeta(struct format *f, struct pnode *n) |
|
{ |
|
struct pnode *nc, *title, *manvol; |
|
|
|
title = manvol = NULL; |
|
TAILQ_FOREACH(nc, &n->childq, child) { |
|
if (nc->node == NODE_MANVOLNUM) |
|
manvol = nc; |
|
else if (nc->node == NODE_REFENTRYTITLE) |
|
title = nc; |
|
} |
|
macro_close(f); |
|
macro_open(f, "Dt"); |
|
if (title == NULL) |
|
macro_addarg(f, "UNKNOWN", ARG_SPACE); |
|
else |
|
macro_addnode(f, title, ARG_SPACE | ARG_SINGLE | ARG_UPPER); |
|
if (manvol == NULL) |
|
macro_addarg(f, "1", ARG_SPACE); |
|
else |
|
macro_addnode(f, manvol, ARG_SPACE | ARG_SINGLE); |
|
macro_close(f); |
|
pnode_unlink(n); |
|
} |
|
|
|
static void |
|
pnode_printfuncdef(struct format *f, struct pnode *n) |
pnode_printfuncdef(struct format *f, struct pnode *n) |
{ |
{ |
struct pnode *nc; |
struct pnode *nc; |
Line 658 pnode_printlink(struct format *f, struct pnode *n) |
|
Line 632 pnode_printlink(struct format *f, struct pnode *n) |
|
} |
} |
|
|
static void |
static void |
pnode_printprologue(struct format *f, struct ptree *tree) |
pnode_printprologue(struct format *f, struct pnode *root) |
{ |
{ |
struct pnode *refmeta; |
struct pnode *date, *refmeta, *name, *vol, *descr, *nc; |
|
const char *sname; |
|
|
refmeta = tree->root == NULL ? NULL : |
/* Collect information. */ |
pnode_findfirst(tree->root, NODE_REFMETA); |
|
|
|
macro_line(f, "Dd $Mdocdate" "$"); |
if ((date = pnode_takefirst(root, NODE_PUBDATE)) == NULL) |
if (refmeta == NULL) { |
date = pnode_takefirst(root, NODE_DATE); |
macro_open(f, "Dt"); |
|
macro_addarg(f, |
name = vol = NULL; |
pnode_getattr_raw(tree->root, ATTRKEY_ID, "UNKNOWN"), |
if ((refmeta = pnode_takefirst(root, NODE_REFMETA)) != NULL) { |
ARG_SPACE | ARG_SINGLE | ARG_UPPER); |
TAILQ_FOREACH(nc, &refmeta->childq, child) { |
macro_addarg(f, "1", ARG_SPACE); |
switch (nc->node) { |
macro_close(f); |
case NODE_REFENTRYTITLE: |
|
name = nc; |
|
break; |
|
case NODE_MANVOLNUM: |
|
vol = nc; |
|
break; |
|
default: |
|
break; |
|
} |
|
} |
|
} |
|
|
|
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); |
|
else |
|
descr = NULL; |
|
|
|
/* Print prologue. */ |
|
|
|
if (date == NULL) |
|
macro_line(f, "Dd $Mdocdate" "$"); |
|
else |
|
macro_nodeline(f, "Dd", date, 0); |
|
|
|
macro_open(f, "Dt"); |
|
if (name == NULL) { |
|
sname = pnode_getattr_raw(root, ATTRKEY_ID, "UNKNOWN"); |
|
macro_addarg(f, sname, ARG_SPACE | ARG_SINGLE | ARG_UPPER); |
} else |
} else |
pnode_printrefmeta(f, refmeta); |
macro_addnode(f, name, ARG_SPACE | ARG_SINGLE | ARG_UPPER); |
|
if (vol == NULL) |
|
macro_addarg(f, "1", ARG_SPACE); |
|
else |
|
macro_addnode(f, vol, ARG_SPACE | ARG_SINGLE); |
|
|
macro_line(f, "Os"); |
macro_line(f, "Os"); |
|
|
|
if (descr != NULL) { |
|
macro_line(f, "Sh NAME"); |
|
if (name == NULL) |
|
macro_argline(f, "Nm", sname); |
|
else |
|
macro_nodeline(f, "Nm", name, ARG_SINGLE); |
|
macro_nodeline(f, "Nd", descr, 0); |
|
} |
|
|
|
/* Clean up. */ |
|
|
|
pnode_unlink(date); |
|
pnode_unlink(refmeta); |
|
pnode_unlink(descr); |
} |
} |
|
|
/* |
/* |
Line 876 pnode_print(struct format *f, struct pnode *n) |
|
Line 899 pnode_print(struct format *f, struct pnode *n) |
|
case NODE_BLOCKQUOTE: |
case NODE_BLOCKQUOTE: |
macro_line(f, "Bd -ragged -offset indent"); |
macro_line(f, "Bd -ragged -offset indent"); |
break; |
break; |
case NODE_BOOKINFO: |
|
macro_line(f, "Sh NAME"); |
|
break; |
|
case NODE_CITEREFENTRY: |
case NODE_CITEREFENTRY: |
pnode_printciterefentry(f, n); |
pnode_printciterefentry(f, n); |
break; |
break; |
Line 1046 pnode_print(struct format *f, struct pnode *n) |
|
Line 1066 pnode_print(struct format *f, struct pnode *n) |
|
pnode_printtgroup(f, n); |
pnode_printtgroup(f, n); |
break; |
break; |
case NODE_TITLE: |
case NODE_TITLE: |
if (n->parent != NULL && |
|
n->parent->node == NODE_BOOKINFO) { |
|
macro_open(f, "Nd"); |
|
break; |
|
} |
|
pnode_printpara(f, n); |
pnode_printpara(f, n); |
macro_nodeline(f, "Sy", n, 0); |
macro_nodeline(f, "Sy", n, 0); |
pnode_unlinksub(n); |
pnode_unlinksub(n); |
Line 1148 pnode_print(struct format *f, struct pnode *n) |
|
Line 1163 pnode_print(struct format *f, struct pnode *n) |
|
case NODE_SYNOPSIS: |
case NODE_SYNOPSIS: |
macro_line(f, "Ed"); |
macro_line(f, "Ed"); |
break; |
break; |
case NODE_TITLE: |
|
if (n->parent != NULL && |
|
n->parent->node == NODE_BOOKINFO) |
|
macro_line(f, "Sh AUTHORS"); |
|
break; |
|
default: |
default: |
break; |
break; |
} |
} |
Line 1166 ptree_print_mdoc(struct ptree *tree) |
|
Line 1176 ptree_print_mdoc(struct ptree *tree) |
|
|
|
formatter.level = 0; |
formatter.level = 0; |
formatter.linestate = LINE_NEW; |
formatter.linestate = LINE_NEW; |
pnode_printprologue(&formatter, tree); |
pnode_printprologue(&formatter, tree->root); |
pnode_print(&formatter, tree->root); |
pnode_print(&formatter, tree->root); |
if (formatter.linestate != LINE_NEW) |
if (formatter.linestate != LINE_NEW) |
putchar('\n'); |
putchar('\n'); |