version 1.58, 2019/03/22 16:50:54 |
version 1.59, 2019/03/22 16:55:44 |
Line 491 pnode_unlinksub(struct pnode *pn) |
|
Line 491 pnode_unlinksub(struct pnode *pn) |
|
} |
} |
|
|
/* |
/* |
|
* Retrieve an attribute string from a node. |
|
* Return defval if the node has no such attribute. |
|
*/ |
|
const char * |
|
pnode_getattr_raw(struct pnode *pn, enum attrkey key, const char *defval) |
|
{ |
|
struct pattr *ap; |
|
|
|
TAILQ_FOREACH(ap, &pn->attrq, child) |
|
if (ap->key == key) |
|
return ATTRVAL__MAX == ap->val ? ap->rawval : |
|
attrvals[ap->val]; |
|
return(defval); |
|
} |
|
|
|
/* |
* Reset the lookaside buffer. |
* Reset the lookaside buffer. |
*/ |
*/ |
static void |
static void |
|
|
pnode_printmathfenced(struct parse *p, struct pnode *pn) |
pnode_printmathfenced(struct parse *p, struct pnode *pn) |
{ |
{ |
struct pnode *pp; |
struct pnode *pp; |
struct pattr *ap; |
|
|
|
TAILQ_FOREACH(ap, &pn->attrq, child) |
printf("left %s ", pnode_getattr_raw(pn, ATTRKEY_OPEN, "(")); |
if (ATTRKEY_OPEN == ap->key) { |
|
printf("left %s ", ap->rawval); |
|
break; |
|
} |
|
if (NULL == ap) |
|
printf("left ( "); |
|
|
|
pp = TAILQ_FIRST(&pn->childq); |
pp = TAILQ_FIRST(&pn->childq); |
pnode_print(p, pp); |
pnode_print(p, pp); |
Line 929 pnode_printmathfenced(struct parse *p, struct pnode *p |
|
Line 938 pnode_printmathfenced(struct parse *p, struct pnode *p |
|
pnode_print(p, pp); |
pnode_print(p, pp); |
} |
} |
|
|
TAILQ_FOREACH(ap, &pn->attrq, child) |
printf("right %s ", pnode_getattr_raw(pn, ATTRKEY_CLOSE, ")")); |
if (ATTRKEY_CLOSE == ap->key) { |
|
printf("right %s ", ap->rawval); |
|
break; |
|
} |
|
if (NULL == ap) |
|
printf("right ) "); |
|
} |
} |
|
|
/* |
/* |
|
|
pnode_printprologue(struct parse *p, struct pnode *pn) |
pnode_printprologue(struct parse *p, struct pnode *pn) |
{ |
{ |
struct pnode *pp; |
struct pnode *pp; |
struct pattr *ap; |
|
const char *name; |
|
|
|
pp = NULL == p->root ? NULL : |
pp = NULL == p->root ? NULL : |
pnode_findfirst(p->root, NODE_REFMETA); |
pnode_findfirst(p->root, NODE_REFMETA); |
Line 1100 pnode_printprologue(struct parse *p, struct pnode *pn) |
|
Line 1101 pnode_printprologue(struct parse *p, struct pnode *pn) |
|
if (NULL != pp) { |
if (NULL != pp) { |
pnode_printrefmeta(p, pp); |
pnode_printrefmeta(p, pp); |
pnode_unlink(pp); |
pnode_unlink(pp); |
} else { |
} else |
name = "UNKNOWN"; |
printf(".Dt %s 1\n", |
TAILQ_FOREACH(ap, &p->root->attrq, child) { |
pnode_getattr_raw(p->root, ATTRKEY_ID, "UNKNOWN")); |
if (ATTRKEY_ID == ap->key) { |
|
name = ap->rawval; |
|
break; |
|
} |
|
} |
|
printf(".Dt %s 1\n", name); |
|
} |
|
puts(".Os"); |
puts(".Os"); |
|
|
if (PARSE_EQN & p->flags) { |
if (PARSE_EQN & p->flags) { |
|
|
pnode_print(struct parse *p, struct pnode *pn) |
pnode_print(struct parse *p, struct pnode *pn) |
{ |
{ |
struct pnode *pp; |
struct pnode *pp; |
struct pattr *ap; |
const char *ccp; |
char *cp; |
char *cp; |
int last, sv; |
int last, sv; |
|
|
Line 1364 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1358 pnode_print(struct parse *p, struct pnode *pn) |
|
puts(".Sh LEGAL NOTICE"); |
puts(".Sh LEGAL NOTICE"); |
break; |
break; |
case (NODE_LINK): |
case (NODE_LINK): |
TAILQ_FOREACH(ap, &pn->attrq, child) |
ccp = pnode_getattr_raw(pn, ATTRKEY_LINKEND, NULL); |
if (ATTRKEY_LINKEND == ap->key) |
if (NULL == ccp) |
break; |
|
if (ap == NULL) |
|
break; |
break; |
pnode_printmopen(p); |
pnode_printmopen(p); |
printf("Sx %s\n", ap->rawval); |
printf("Sx %s\n", ccp); |
p->newln = 1; |
p->newln = 1; |
return; |
return; |
case (NODE_LITERAL): |
case (NODE_LITERAL): |