version 1.20, 2014/03/30 16:57:06 |
version 1.36, 2014/04/30 10:11:24 |
Line 87 static const char *attrvals[ATTRVAL__MAX] = { |
|
Line 87 static const char *attrvals[ATTRVAL__MAX] = { |
|
|
|
static const struct node nodes[NODE__MAX] = { |
static const struct node nodes[NODE__MAX] = { |
{ NULL, 0 }, |
{ NULL, 0 }, |
|
{ "acronym", 0 }, |
|
{ "anchor", NODE_IGNTEXT }, |
|
{ "application", 0 }, |
{ "arg", 0 }, |
{ "arg", 0 }, |
|
{ "caution", NODE_IGNTEXT }, |
{ "citerefentry", NODE_IGNTEXT }, |
{ "citerefentry", NODE_IGNTEXT }, |
{ "cmdsynopsis", NODE_IGNTEXT }, |
{ "cmdsynopsis", NODE_IGNTEXT }, |
{ "code", 0 }, |
{ "code", 0 }, |
{ "command", 0 }, |
{ "command", 0 }, |
|
{ "constant", 0 }, |
|
{ "copyright", NODE_IGNTEXT }, |
{ "date", 0 }, |
{ "date", 0 }, |
{ "emphasis", 0 }, |
{ "emphasis", 0 }, |
|
{ "entry", 0 }, |
|
{ "envar", 0 }, |
{ "filename", 0 }, |
{ "filename", 0 }, |
{ "funcdef", 0 }, |
{ "funcdef", 0 }, |
{ "funcprototype", NODE_IGNTEXT }, |
{ "funcprototype", NODE_IGNTEXT }, |
{ "funcsynopsis", NODE_IGNTEXT }, |
{ "funcsynopsis", NODE_IGNTEXT }, |
{ "funcsynopsisinfo", 0 }, |
{ "funcsynopsisinfo", 0 }, |
{ "function", 0 }, |
{ "function", 0 }, |
|
{ "group", NODE_IGNTEXT }, |
|
{ "holder", NODE_IGNTEXT }, |
|
{ "info", NODE_IGNTEXT }, |
|
{ "informaltable", NODE_IGNTEXT }, |
{ "itemizedlist", NODE_IGNTEXT }, |
{ "itemizedlist", NODE_IGNTEXT }, |
{ "link", 0 }, |
{ "link", 0 }, |
{ "listitem", NODE_IGNTEXT }, |
{ "listitem", NODE_IGNTEXT }, |
{ "literal", 0 }, |
{ "literal", 0 }, |
{ "manvolnum", 0 }, |
{ "manvolnum", 0 }, |
|
{ "note", NODE_IGNTEXT }, |
{ "option", 0 }, |
{ "option", 0 }, |
|
{ "orderedlist", NODE_IGNTEXT }, |
{ "para", 0 }, |
{ "para", 0 }, |
{ "paramdef", 0 }, |
{ "paramdef", 0 }, |
{ "parameter", 0 }, |
{ "parameter", 0 }, |
{ "programlisting", 0 }, |
{ "programlisting", 0 }, |
|
{ "prompt", 0 }, |
|
{ "quote", 0 }, |
{ "refclass", NODE_IGNTEXT }, |
{ "refclass", NODE_IGNTEXT }, |
{ "refdescriptor", NODE_IGNTEXT }, |
{ "refdescriptor", NODE_IGNTEXT }, |
{ "refentry", NODE_IGNTEXT }, |
{ "refentry", NODE_IGNTEXT }, |
Line 122 static const struct node nodes[NODE__MAX] = { |
|
Line 138 static const struct node nodes[NODE__MAX] = { |
|
{ "refpurpose", 0 }, |
{ "refpurpose", 0 }, |
{ "refsect1", NODE_IGNTEXT }, |
{ "refsect1", NODE_IGNTEXT }, |
{ "refsect2", NODE_IGNTEXT }, |
{ "refsect2", NODE_IGNTEXT }, |
|
{ "refsect3", NODE_IGNTEXT }, |
|
{ "refsection", NODE_IGNTEXT }, |
{ "refsynopsisdiv", NODE_IGNTEXT }, |
{ "refsynopsisdiv", NODE_IGNTEXT }, |
{ "replaceable", 0 }, |
{ "replaceable", 0 }, |
|
{ "row", NODE_IGNTEXT }, |
{ "sbr", NODE_IGNTEXT }, |
{ "sbr", NODE_IGNTEXT }, |
|
{ "screen", NODE_IGNTEXT }, |
|
{ "sgmltag", 0 }, |
{ "structname", 0 }, |
{ "structname", 0 }, |
{ "synopsis", 0 }, |
{ "synopsis", 0 }, |
|
{ "table", NODE_IGNTEXT }, |
|
{ "tbody", NODE_IGNTEXT }, |
{ "term", 0 }, |
{ "term", 0 }, |
{ NULL, 0 }, |
{ NULL, 0 }, |
|
{ "tfoot", NODE_IGNTEXT }, |
|
{ "tgroup", NODE_IGNTEXT }, |
|
{ "thead", NODE_IGNTEXT }, |
|
{ "tip", NODE_IGNTEXT }, |
{ "title", 0 }, |
{ "title", 0 }, |
|
{ "trademark", 0 }, |
{ "ulink", 0 }, |
{ "ulink", 0 }, |
|
{ "userinput", 0 }, |
{ "variablelist", NODE_IGNTEXT }, |
{ "variablelist", NODE_IGNTEXT }, |
{ "varlistentry", NODE_IGNTEXT }, |
{ "varlistentry", NODE_IGNTEXT }, |
|
{ "varname", 0 }, |
|
{ "warning", NODE_IGNTEXT }, |
|
{ "wordasword", 0 }, |
|
{ "year", NODE_IGNTEXT }, |
}; |
}; |
|
|
static void |
static void |
Line 237 xml_elem_start(void *arg, const XML_Char *name, const |
|
Line 270 xml_elem_start(void *arg, const XML_Char *name, const |
|
struct pattr *pattr; |
struct pattr *pattr; |
const XML_Char **att; |
const XML_Char **att; |
|
|
if (ps->stop) |
/* FIXME: find a better way to ditch other namespaces. */ |
|
if (ps->stop || 0 == strcmp(name, "xi:include")) |
return; |
return; |
|
|
/* Close out text node, if applicable... */ |
/* Close out text node, if applicable... */ |
Line 249 xml_elem_start(void *arg, const XML_Char *name, const |
|
Line 283 xml_elem_start(void *arg, const XML_Char *name, const |
|
ps->node = ps->cur->node; |
ps->node = ps->cur->node; |
} |
} |
|
|
|
|
for (node = 0; node < NODE__MAX; node++) |
for (node = 0; node < NODE__MAX; node++) |
if (NULL == nodes[node].name) |
if (NULL == nodes[node].name) |
continue; |
continue; |
Line 309 xml_elem_start(void *arg, const XML_Char *name, const |
|
Line 344 xml_elem_start(void *arg, const XML_Char *name, const |
|
if (0 == strcmp(*att, attrkeys[key])) |
if (0 == strcmp(*att, attrkeys[key])) |
break; |
break; |
if (ATTRKEY__MAX == key) { |
if (ATTRKEY__MAX == key) { |
fprintf(stderr, "%s:%zu:%zu: unknown " |
fprintf(stderr, "%s:%zu:%zu: warning: " |
"attribute \"%s\"\n", ps->fname, |
"unknown attribute \"%s\"\n", |
|
ps->fname, |
XML_GetCurrentLineNumber(ps->xml), |
XML_GetCurrentLineNumber(ps->xml), |
XML_GetCurrentColumnNumber(ps->xml), |
XML_GetCurrentColumnNumber(ps->xml), |
*att); |
*att); |
continue; |
continue; |
} else if ( ! isattrkey(node, key)) { |
} else if ( ! isattrkey(node, key)) { |
fprintf(stderr, "%s:%zu:%zu: bad " |
fprintf(stderr, "%s:%zu:%zu: warning: " |
"attribute \"%s\"\n", ps->fname, |
"bad attribute \"%s\"\n", |
|
ps->fname, |
XML_GetCurrentLineNumber(ps->xml), |
XML_GetCurrentLineNumber(ps->xml), |
XML_GetCurrentColumnNumber(ps->xml), |
XML_GetCurrentColumnNumber(ps->xml), |
*att); |
*att); |
Line 327 xml_elem_start(void *arg, const XML_Char *name, const |
|
Line 364 xml_elem_start(void *arg, const XML_Char *name, const |
|
if (0 == strcmp(*(att + 1), attrvals[val])) |
if (0 == strcmp(*(att + 1), attrvals[val])) |
break; |
break; |
if (ATTRVAL__MAX != val && ! isattrval(key, val)) { |
if (ATTRVAL__MAX != val && ! isattrval(key, val)) { |
fprintf(stderr, "%s:%zu:%zu: bad " |
fprintf(stderr, "%s:%zu:%zu: warning: " |
"value \"%s\"\n", ps->fname, |
"bad attribute value \"%s\"\n", |
|
ps->fname, |
XML_GetCurrentLineNumber(ps->xml), |
XML_GetCurrentLineNumber(ps->xml), |
XML_GetCurrentColumnNumber(ps->xml), |
XML_GetCurrentColumnNumber(ps->xml), |
*(att + 1)); |
*(att + 1)); |
Line 354 xml_elem_end(void *arg, const XML_Char *name) |
|
Line 392 xml_elem_end(void *arg, const XML_Char *name) |
|
{ |
{ |
struct parse *ps = arg; |
struct parse *ps = arg; |
|
|
|
/* FIXME: find a better way to ditch other namespaces. */ |
if (ps->stop || NODE_ROOT == ps->node) |
if (ps->stop || NODE_ROOT == ps->node) |
return; |
return; |
|
else if (0 == strcmp(name, "xi:include")) |
|
return; |
|
|
/* Close out text node, if applicable... */ |
/* Close out text node, if applicable... */ |
if (NODE_TEXT == ps->node) { |
if (NODE_TEXT == ps->node) { |
Line 471 bufappend_r(struct parse *p, struct pnode *pn) |
|
Line 512 bufappend_r(struct parse *p, struct pnode *pn) |
|
bufappend_r(p, pp); |
bufappend_r(p, pp); |
} |
} |
|
|
|
/* |
|
* Recursively search and return the first instance of "node". |
|
*/ |
|
static struct pnode * |
|
pnode_findfirst(struct pnode *pn, enum nodeid node) |
|
{ |
|
struct pnode *pp, *res; |
|
|
|
res = NULL; |
|
TAILQ_FOREACH(pp, &pn->childq, child) { |
|
res = pp->node == node ? pp : |
|
pnode_findfirst(pp, node); |
|
if (NULL != res) |
|
break; |
|
} |
|
|
|
return(res); |
|
} |
|
|
#define MACROLINE_NORM 0 |
#define MACROLINE_NORM 0 |
#define MACROLINE_UPPER 1 |
#define MACROLINE_UPPER 1 |
|
#define MACROLINE_NOWS 2 |
/* |
/* |
* Recursively print text presumably on a macro line. |
* Recursively print text presumably on a macro line. |
* Convert all whitespace to regular spaces. |
* Convert all whitespace to regular spaces. |
Line 482 pnode_printmacrolinetext(struct parse *p, struct pnode |
|
Line 543 pnode_printmacrolinetext(struct parse *p, struct pnode |
|
{ |
{ |
char *cp; |
char *cp; |
|
|
if (0 == p->newln) |
if (0 == p->newln && ! (MACROLINE_NOWS & fl)) |
putchar(' '); |
putchar(' '); |
|
|
bufclear(p); |
bufclear(p); |
Line 585 pnode_printrefsect(struct parse *p, struct pnode *pn) |
|
Line 646 pnode_printrefsect(struct parse *p, struct pnode *pn) |
|
if (NODE_TITLE == pp->node) |
if (NODE_TITLE == pp->node) |
break; |
break; |
|
|
if (NODE_REFSECT1 == pn->node) |
switch (pn->node) { |
|
case (NODE_REFSECT1): |
fputs(".Sh", stdout); |
fputs(".Sh", stdout); |
else |
break; |
|
case (NODE_REFSECT2): |
fputs(".Ss", stdout); |
fputs(".Ss", stdout); |
|
break; |
|
case (NODE_REFSECT3): |
|
puts(".Pp"); |
|
fputs(".Sy", stdout); |
|
break; |
|
case (NODE_NOTE): |
|
/* FALLTHROUGH */ |
|
case (NODE_REFSECTION): |
|
/* FALLTHROUGH */ |
|
case (NODE_TIP): |
|
/* FALLTHROUGH */ |
|
case (NODE_CAUTION): |
|
/* FALLTHROUGH */ |
|
case (NODE_WARNING): |
|
puts(".Pp"); |
|
if (NULL == pp) |
|
return; |
|
fputs(".Em", stdout); |
|
break; |
|
default: |
|
break; |
|
} |
|
|
p->newln = 0; |
p->newln = 0; |
|
|
Line 599 pnode_printrefsect(struct parse *p, struct pnode *pn) |
|
Line 684 pnode_printrefsect(struct parse *p, struct pnode *pn) |
|
pnode_printmclose(p, 1); |
pnode_printmclose(p, 1); |
pnode_unlink(pp); |
pnode_unlink(pp); |
} else { |
} else { |
puts("UNKNOWN"); |
puts(NODE_REFSECT1 == pn->node ? |
|
"UNKNOWN" : "unknown"); |
p->newln = 1; |
p->newln = 1; |
} |
} |
} |
} |
Line 613 pnode_printciterefentry(struct parse *p, struct pnode |
|
Line 699 pnode_printciterefentry(struct parse *p, struct pnode |
|
struct pnode *pp, *title, *manvol; |
struct pnode *pp, *title, *manvol; |
|
|
title = manvol = NULL; |
title = manvol = NULL; |
assert(p->newln); |
|
TAILQ_FOREACH(pp, &pn->childq, child) |
TAILQ_FOREACH(pp, &pn->childq, child) |
if (NODE_MANVOLNUM == pp->node) |
if (NODE_MANVOLNUM == pp->node) |
manvol = pp; |
manvol = pp; |
else if (NODE_REFENTRYTITLE == pp->node) |
else if (NODE_REFENTRYTITLE == pp->node) |
title = pp; |
title = pp; |
|
|
fputs(".Xr", stdout); |
|
p->newln = 0; |
|
|
|
if (NULL != title) { |
if (NULL != title) { |
pnode_printmacrolinepart(p, title); |
pnode_printmacrolinepart(p, title); |
} else |
} else |
Line 632 pnode_printciterefentry(struct parse *p, struct pnode |
|
Line 714 pnode_printciterefentry(struct parse *p, struct pnode |
|
puts(" 1"); |
puts(" 1"); |
p->newln = 1; |
p->newln = 1; |
} else |
} else |
pnode_printmacroline(p, manvol); |
pnode_printmacrolinepart(p, manvol); |
} |
} |
|
|
static void |
static void |
Line 711 pnode_printparamdef(struct parse *p, struct pnode *pn) |
|
Line 793 pnode_printparamdef(struct parse *p, struct pnode *pn) |
|
fputs(".Fa \"", stdout); |
fputs(".Fa \"", stdout); |
p->newln = 0; |
p->newln = 0; |
if (NULL != ptype) { |
if (NULL != ptype) { |
pnode_printmacrolinepart(p, ptype); |
pnode_printmacrolinetext(p, ptype, MACROLINE_NOWS); |
putchar(' '); |
putchar(' '); |
} |
} |
|
|
Line 786 pnode_printarg(struct parse *p, struct pnode *pn) |
|
Line 868 pnode_printarg(struct parse *p, struct pnode *pn) |
|
} |
} |
} |
} |
|
|
/* |
static void |
* Recursively search and return the first instance of "node". |
pnode_printgroup(struct parse *p, struct pnode *pn) |
*/ |
|
static struct pnode * |
|
pnode_findfirst(struct pnode *pn, enum nodeid node) |
|
{ |
{ |
struct pnode *pp, *res; |
struct pnode *pp, *np; |
|
struct pattr *ap; |
|
int isop, sv; |
|
|
res = NULL; |
isop = 1; |
TAILQ_FOREACH(pp, &pn->childq, child) { |
TAILQ_FOREACH(ap, &pn->attrq, child) |
res = pp->node == node ? pp : |
if (ATTRKEY_CHOICE == ap->key && |
pnode_findfirst(pp, node); |
(ATTRVAL_PLAIN == ap->val || |
if (NULL != res) |
ATTRVAL_REQ == ap->val)) { |
|
isop = 0; |
break; |
break; |
|
} |
|
|
|
/* |
|
* Make sure we're on a macro line. |
|
* This will prevent pnode_print() for putting us on a |
|
* subsequent line. |
|
*/ |
|
sv = p->newln; |
|
pnode_printmopen(p); |
|
if (isop) |
|
fputs("Op", stdout); |
|
else if (sv) |
|
fputs("No", stdout); |
|
|
|
/* |
|
* Keep on printing text separated by the vertical bar as long |
|
* as we're within the same origin node as the group. |
|
* This is kind of a nightmare. |
|
* Eh, DocBook... |
|
* FIXME: if there's a "Fl", we don't cut off the leading "-" |
|
* like we do in pnode_print(). |
|
*/ |
|
TAILQ_FOREACH(pp, &pn->childq, child) { |
|
pnode_print(p, pp); |
|
np = TAILQ_NEXT(pp, child); |
|
while (NULL != np) { |
|
if (pp->node != np->node) |
|
break; |
|
fputs(" |", stdout); |
|
pnode_printmacrolinepart(p, np); |
|
pp = np; |
|
np = TAILQ_NEXT(np, child); |
|
} |
} |
} |
|
|
return(res); |
pnode_printmclose(p, sv); |
} |
} |
|
|
static void |
static void |
Line 832 pnode_printvarlistentry(struct parse *p, struct pnode |
|
Line 947 pnode_printvarlistentry(struct parse *p, struct pnode |
|
assert(p->newln); |
assert(p->newln); |
TAILQ_FOREACH(pp, &pn->childq, child) |
TAILQ_FOREACH(pp, &pn->childq, child) |
if (NODE_TERM == pp->node) { |
if (NODE_TERM == pp->node) { |
|
assert(p->newln); |
fputs(".It", stdout); |
fputs(".It", stdout); |
p->newln = 0; |
p->newln = 0; |
pnode_print(p, pp); |
pnode_print(p, pp); |
Line 845 pnode_printvarlistentry(struct parse *p, struct pnode |
|
Line 961 pnode_printvarlistentry(struct parse *p, struct pnode |
|
} |
} |
|
|
static void |
static void |
pnode_printitemizedlist(struct parse *p, struct pnode *pn) |
pnode_printrow(struct parse *p, struct pnode *pn) |
{ |
{ |
struct pnode *pp; |
struct pnode *pp; |
|
|
|
puts(".Bl -dash -compact"); |
|
|
|
TAILQ_FOREACH(pp, &pn->childq, child) { |
|
assert(p->newln); |
|
puts(".It"); |
|
pnode_print(p, pp); |
|
pnode_printmclose(p, 1); |
|
} |
assert(p->newln); |
assert(p->newln); |
|
puts(".El"); |
|
} |
|
|
|
static void |
|
pnode_printtable(struct parse *p, struct pnode *pn) |
|
{ |
|
struct pnode *pp; |
|
|
|
assert(p->newln); |
TAILQ_FOREACH(pp, &pn->childq, child) |
TAILQ_FOREACH(pp, &pn->childq, child) |
if (NODE_TITLE == pp->node) { |
if (NODE_TITLE == pp->node) { |
puts(".Pp"); |
puts(".Pp"); |
pnode_print(p, pp); |
pnode_print(p, pp); |
pnode_unlink(pp); |
pnode_unlink(pp); |
} |
} |
|
assert(p->newln); |
|
puts(".Bl -ohang"); |
|
while (NULL != (pp = pnode_findfirst(pn, NODE_ROW))) { |
|
puts(".It Table Row"); |
|
pnode_printrow(p, pp); |
|
pnode_printmclose(p, 1); |
|
pnode_unlink(pp); |
|
} |
|
assert(p->newln); |
|
puts(".El"); |
|
} |
|
|
|
static void |
|
pnode_printlist(struct parse *p, struct pnode *pn) |
|
{ |
|
struct pnode *pp; |
|
|
assert(p->newln); |
assert(p->newln); |
puts(".Bl -item"); |
TAILQ_FOREACH(pp, &pn->childq, child) |
|
if (NODE_TITLE == pp->node) { |
|
puts(".Pp"); |
|
pnode_print(p, pp); |
|
pnode_unlink(pp); |
|
} |
|
assert(p->newln); |
|
|
|
if (NODE_ORDEREDLIST == pn->node) |
|
puts(".Bl -enum"); |
|
else |
|
puts(".Bl -item"); |
|
|
TAILQ_FOREACH(pp, &pn->childq, child) { |
TAILQ_FOREACH(pp, &pn->childq, child) { |
assert(p->newln); |
assert(p->newln); |
puts(".It"); |
puts(".It"); |
Line 900 pnode_printvariablelist(struct parse *p, struct pnode |
|
Line 1061 pnode_printvariablelist(struct parse *p, struct pnode |
|
/* |
/* |
* Print a parsed node (or ignore it--whatever). |
* Print a parsed node (or ignore it--whatever). |
* This is a recursive function. |
* This is a recursive function. |
* FIXME: macro line continuation? |
* FIXME: if we're in a literal context (<screen> or <programlisting> or |
|
* whatever), don't print inline macros. |
*/ |
*/ |
static void |
static void |
pnode_print(struct parse *p, struct pnode *pn) |
pnode_print(struct parse *p, struct pnode *pn) |
Line 915 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1077 pnode_print(struct parse *p, struct pnode *pn) |
|
sv = p->newln; |
sv = p->newln; |
|
|
switch (pn->node) { |
switch (pn->node) { |
|
case (NODE_APPLICATION): |
|
pnode_printmopen(p); |
|
fputs("Nm", stdout); |
|
break; |
|
case (NODE_ANCHOR): |
|
/* Don't print anything! */ |
|
return; |
case (NODE_ARG): |
case (NODE_ARG): |
pnode_printarg(p, pn); |
pnode_printarg(p, pn); |
pnode_unlinksub(pn); |
pnode_unlinksub(pn); |
break; |
break; |
case (NODE_CITEREFENTRY): |
case (NODE_CITEREFENTRY): |
assert(p->newln); |
pnode_printmopen(p); |
|
fputs("Xr", stdout); |
pnode_printciterefentry(p, pn); |
pnode_printciterefentry(p, pn); |
pnode_unlinksub(pn); |
pnode_unlinksub(pn); |
break; |
break; |
Line 932 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1102 pnode_print(struct parse *p, struct pnode *pn) |
|
pnode_printmopen(p); |
pnode_printmopen(p); |
fputs("Nm", stdout); |
fputs("Nm", stdout); |
break; |
break; |
|
case (NODE_CONSTANT): |
|
pnode_printmopen(p); |
|
fputs("Dv", stdout); |
|
break; |
case (NODE_EMPHASIS): |
case (NODE_EMPHASIS): |
pnode_printmopen(p); |
pnode_printmopen(p); |
fputs("Em", stdout); |
fputs("Em", stdout); |
break; |
break; |
|
case (NODE_ENVAR): |
|
pnode_printmopen(p); |
|
fputs("Ev", stdout); |
|
break; |
case (NODE_FILENAME): |
case (NODE_FILENAME): |
pnode_printmopen(p); |
pnode_printmopen(p); |
fputs("Pa", stdout); |
fputs("Pa", stdout); |
Line 955 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1133 pnode_print(struct parse *p, struct pnode *pn) |
|
break; |
break; |
case (NODE_ITEMIZEDLIST): |
case (NODE_ITEMIZEDLIST): |
assert(p->newln); |
assert(p->newln); |
pnode_printitemizedlist(p, pn); |
pnode_printlist(p, pn); |
|
pnode_unlinksub(pn); |
break; |
break; |
|
case (NODE_GROUP): |
|
pnode_printgroup(p, pn); |
|
pnode_unlinksub(pn); |
|
break; |
case (NODE_LITERAL): |
case (NODE_LITERAL): |
pnode_printmopen(p); |
pnode_printmopen(p); |
fputs("Li", stdout); |
fputs("Li", stdout); |
Line 965 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1148 pnode_print(struct parse *p, struct pnode *pn) |
|
pnode_printmopen(p); |
pnode_printmopen(p); |
fputs("Fl", stdout); |
fputs("Fl", stdout); |
break; |
break; |
|
case (NODE_ORDEREDLIST): |
|
assert(p->newln); |
|
pnode_printlist(p, pn); |
|
pnode_unlinksub(pn); |
|
break; |
case (NODE_PARA): |
case (NODE_PARA): |
assert(p->newln); |
assert(p->newln); |
if (NULL != pn->parent && |
if (NULL != pn->parent && |
Line 976 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1164 pnode_print(struct parse *p, struct pnode *pn) |
|
/* Suppress non-text children... */ |
/* Suppress non-text children... */ |
pnode_printmopen(p); |
pnode_printmopen(p); |
fputs("Fa \"", stdout); |
fputs("Fa \"", stdout); |
pnode_printmacrolinepart(p, pn); |
pnode_printmacrolinetext(p, pn, MACROLINE_NOWS); |
puts("\""); |
fputs("\"", stdout); |
pnode_unlinksub(pn); |
pnode_unlinksub(pn); |
break; |
break; |
|
case (NODE_QUOTE): |
|
pnode_printmopen(p); |
|
fputs("Qo", stdout); |
|
break; |
case (NODE_PROGRAMLISTING): |
case (NODE_PROGRAMLISTING): |
|
/* FALLTHROUGH */ |
|
case (NODE_SCREEN): |
assert(p->newln); |
assert(p->newln); |
puts(".Bd -literal"); |
puts(".Bd -literal"); |
break; |
break; |
Line 1016 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1210 pnode_print(struct parse *p, struct pnode *pn) |
|
case (NODE_REFSECT1): |
case (NODE_REFSECT1): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (NODE_REFSECT2): |
case (NODE_REFSECT2): |
|
/* FALLTHROUGH */ |
|
case (NODE_REFSECT3): |
|
/* FALLTHROUGH */ |
|
case (NODE_REFSECTION): |
|
/* FALLTHROUGH */ |
|
case (NODE_NOTE): |
|
/* FALLTHROUGH */ |
|
case (NODE_TIP): |
|
/* FALLTHROUGH */ |
|
case (NODE_CAUTION): |
|
/* FALLTHROUGH */ |
|
case (NODE_WARNING): |
assert(p->newln); |
assert(p->newln); |
pnode_printrefsect(p, pn); |
pnode_printrefsect(p, pn); |
break; |
break; |
Line 1027 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1233 pnode_print(struct parse *p, struct pnode *pn) |
|
assert(p->newln); |
assert(p->newln); |
puts(".br"); |
puts(".br"); |
break; |
break; |
|
case (NODE_SGMLTAG): |
|
pnode_printmopen(p); |
|
fputs("Li", stdout); |
|
break; |
case (NODE_STRUCTNAME): |
case (NODE_STRUCTNAME): |
pnode_printmopen(p); |
pnode_printmopen(p); |
fputs("Vt", stdout); |
fputs("Vt", stdout); |
break; |
break; |
|
case (NODE_TABLE): |
|
/* FALLTHROUGH */ |
|
case (NODE_INFORMALTABLE): |
|
assert(p->newln); |
|
pnode_printtable(p, pn); |
|
pnode_unlinksub(pn); |
|
break; |
case (NODE_TEXT): |
case (NODE_TEXT): |
if (0 == p->newln) |
if (0 == p->newln) |
putchar(' '); |
putchar(' '); |
Line 1070 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1287 pnode_print(struct parse *p, struct pnode *pn) |
|
} |
} |
p->newln = 0; |
p->newln = 0; |
break; |
break; |
|
case (NODE_USERINPUT): |
|
pnode_printmopen(p); |
|
fputs("Li", stdout); |
|
break; |
case (NODE_VARIABLELIST): |
case (NODE_VARIABLELIST): |
assert(p->newln); |
assert(p->newln); |
pnode_printvariablelist(p, pn); |
pnode_printvariablelist(p, pn); |
Line 1079 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1300 pnode_print(struct parse *p, struct pnode *pn) |
|
assert(p->newln); |
assert(p->newln); |
pnode_printvarlistentry(p, pn); |
pnode_printvarlistentry(p, pn); |
break; |
break; |
|
case (NODE_VARNAME): |
|
pnode_printmopen(p); |
|
fputs("Va", stdout); |
|
break; |
default: |
default: |
break; |
break; |
} |
} |
Line 1087 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1312 pnode_print(struct parse *p, struct pnode *pn) |
|
pnode_print(p, pp); |
pnode_print(p, pp); |
|
|
switch (pn->node) { |
switch (pn->node) { |
|
case (NODE_APPLICATION): |
case (NODE_ARG): |
case (NODE_ARG): |
|
case (NODE_CITEREFENTRY): |
case (NODE_CODE): |
case (NODE_CODE): |
case (NODE_COMMAND): |
case (NODE_COMMAND): |
|
case (NODE_CONSTANT): |
case (NODE_EMPHASIS): |
case (NODE_EMPHASIS): |
|
case (NODE_ENVAR): |
case (NODE_FILENAME): |
case (NODE_FILENAME): |
case (NODE_FUNCTION): |
case (NODE_FUNCTION): |
case (NODE_FUNCSYNOPSISINFO): |
case (NODE_FUNCSYNOPSISINFO): |
Line 1099 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1328 pnode_print(struct parse *p, struct pnode *pn) |
|
case (NODE_PARAMETER): |
case (NODE_PARAMETER): |
case (NODE_REPLACEABLE): |
case (NODE_REPLACEABLE): |
case (NODE_REFPURPOSE): |
case (NODE_REFPURPOSE): |
|
case (NODE_SGMLTAG): |
case (NODE_STRUCTNAME): |
case (NODE_STRUCTNAME): |
case (NODE_TEXT): |
case (NODE_TEXT): |
|
case (NODE_USERINPUT): |
|
case (NODE_VARNAME): |
pnode_printmclose(p, sv); |
pnode_printmclose(p, sv); |
break; |
break; |
|
case (NODE_QUOTE): |
|
pnode_printmclose(p, sv); |
|
sv = p->newln; |
|
pnode_printmopen(p); |
|
fputs("Qc", stdout); |
|
pnode_printmclose(p, sv); |
|
break; |
case (NODE_REFNAME): |
case (NODE_REFNAME): |
/* |
/* |
* If we're in the NAME macro and we have multiple |
* If we're in the NAME macro and we have multiple |
Line 1117 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1356 pnode_print(struct parse *p, struct pnode *pn) |
|
pnode_printmclose(p, sv); |
pnode_printmclose(p, sv); |
break; |
break; |
case (NODE_PROGRAMLISTING): |
case (NODE_PROGRAMLISTING): |
|
/* FALLTHROUGH */ |
|
case (NODE_SCREEN): |
assert(p->newln); |
assert(p->newln); |
puts(".Ed"); |
puts(".Ed"); |
p->newln = 1; |
p->newln = 1; |
Line 1150 readfile(XML_Parser xp, int fd, |
|
Line 1391 readfile(XML_Parser xp, int fd, |
|
|
|
while ((ssz = read(fd, b, bsz)) >= 0) { |
while ((ssz = read(fd, b, bsz)) >= 0) { |
if (0 == (rc = XML_Parse(xp, b, ssz, 0 == ssz))) |
if (0 == (rc = XML_Parse(xp, b, ssz, 0 == ssz))) |
fprintf(stderr, "%s: %s\n", fn, |
fprintf(stderr, "%s:%zu:%zu: %s\n", fn, |
|
XML_GetCurrentLineNumber(xp), |
|
XML_GetCurrentColumnNumber(xp), |
XML_ErrorString |
XML_ErrorString |
(XML_GetErrorCode(xp))); |
(XML_GetErrorCode(xp))); |
else if ( ! p.stop && ssz > 0) |
else if ( ! p.stop && ssz > 0) |