version 1.24, 2014/03/30 18:15:55 |
version 1.29, 2014/04/02 10:59:07 |
Line 88 static const char *attrvals[ATTRVAL__MAX] = { |
|
Line 88 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 }, |
{ "acronym", 0 }, |
|
{ "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 }, |
{ "date", 0 }, |
{ "date", 0 }, |
{ "emphasis", 0 }, |
{ "emphasis", 0 }, |
|
{ "entry", 0 }, |
{ "envar", 0 }, |
{ "envar", 0 }, |
{ "filename", 0 }, |
{ "filename", 0 }, |
{ "funcdef", 0 }, |
{ "funcdef", 0 }, |
Line 108 static const struct node nodes[NODE__MAX] = { |
|
Line 111 static const struct node nodes[NODE__MAX] = { |
|
{ "listitem", NODE_IGNTEXT }, |
{ "listitem", NODE_IGNTEXT }, |
{ "literal", 0 }, |
{ "literal", 0 }, |
{ "manvolnum", 0 }, |
{ "manvolnum", 0 }, |
|
{ "note", NODE_IGNTEXT }, |
{ "option", 0 }, |
{ "option", 0 }, |
{ "orderedlist", NODE_IGNTEXT }, |
{ "orderedlist", NODE_IGNTEXT }, |
{ "para", 0 }, |
{ "para", 0 }, |
Line 115 static const struct node nodes[NODE__MAX] = { |
|
Line 119 static const struct node nodes[NODE__MAX] = { |
|
{ "parameter", 0 }, |
{ "parameter", 0 }, |
{ "programlisting", 0 }, |
{ "programlisting", 0 }, |
{ "prompt", 0 }, |
{ "prompt", 0 }, |
|
{ "quote", 0 }, |
{ "refclass", NODE_IGNTEXT }, |
{ "refclass", NODE_IGNTEXT }, |
{ "refdescriptor", NODE_IGNTEXT }, |
{ "refdescriptor", NODE_IGNTEXT }, |
{ "refentry", NODE_IGNTEXT }, |
{ "refentry", NODE_IGNTEXT }, |
Line 127 static const struct node nodes[NODE__MAX] = { |
|
Line 132 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 }, |
{ "screen", NODE_IGNTEXT }, |
{ "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 }, |
{ "ulink", 0 }, |
{ "ulink", 0 }, |
{ "userinput", 0 }, |
{ "userinput", 0 }, |
{ "variablelist", NODE_IGNTEXT }, |
{ "variablelist", NODE_IGNTEXT }, |
{ "varlistentry", NODE_IGNTEXT }, |
{ "varlistentry", NODE_IGNTEXT }, |
|
{ "varname", 0 }, |
|
{ "warning", NODE_IGNTEXT }, |
}; |
}; |
|
|
static void |
static void |
Line 478 bufappend_r(struct parse *p, struct pnode *pn) |
|
Line 494 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 |
/* |
/* |
Line 592 pnode_printrefsect(struct parse *p, struct pnode *pn) |
|
Line 627 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 606 pnode_printrefsect(struct parse *p, struct pnode *pn) |
|
Line 665 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 845 pnode_printgroup(struct parse *p, struct pnode *pn) |
|
Line 905 pnode_printgroup(struct parse *p, struct pnode *pn) |
|
pnode_printmclose(p, sv); |
pnode_printmclose(p, sv); |
} |
} |
|
|
/* |
|
* 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); |
|
} |
|
|
|
static void |
static void |
pnode_printprologue(struct parse *p, struct pnode *pn) |
pnode_printprologue(struct parse *p, struct pnode *pn) |
{ |
{ |
Line 904 pnode_printvarlistentry(struct parse *p, struct pnode |
|
Line 945 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); |
|
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) |
if (NODE_ORDEREDLIST == pn->node) |
puts(".Bl -enum"); |
puts(".Bl -enum"); |
Line 980 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1061 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_ARG): |
case (NODE_ARG): |
pnode_printarg(p, pn); |
pnode_printarg(p, pn); |
pnode_unlinksub(pn); |
pnode_unlinksub(pn); |
Line 1023 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1108 pnode_print(struct parse *p, struct pnode *pn) |
|
fputs("Fd", stdout); |
fputs("Fd", stdout); |
break; |
break; |
case (NODE_ITEMIZEDLIST): |
case (NODE_ITEMIZEDLIST): |
/* FALLTHROUGH */ |
|
case (NODE_ORDEREDLIST): |
|
assert(p->newln); |
assert(p->newln); |
pnode_printitemizedlist(p, pn); |
pnode_printlist(p, pn); |
|
pnode_unlinksub(pn); |
break; |
break; |
case (NODE_GROUP): |
case (NODE_GROUP): |
pnode_printgroup(p, pn); |
pnode_printgroup(p, pn); |
Line 1040 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1124 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 1055 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1144 pnode_print(struct parse *p, struct pnode *pn) |
|
puts("\""); |
puts("\""); |
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 */ |
/* FALLTHROUGH */ |
case (NODE_SCREEN): |
case (NODE_SCREEN): |
Line 1093 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1186 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 1108 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1213 pnode_print(struct parse *p, struct pnode *pn) |
|
pnode_printmopen(p); |
pnode_printmopen(p); |
fputs("Vt", stdout); |
fputs("Vt", stdout); |
break; |
break; |
|
case (NODE_TABLE): |
|
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 1147 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1257 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 1156 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1270 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_USERINPUT): |
case (NODE_VARNAME): |
pnode_printmopen(p); |
pnode_printmopen(p); |
fputs("Li", stdout); |
fputs("Va", stdout); |
break; |
break; |
default: |
default: |
break; |
break; |
Line 1168 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1282 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_CODE): |
case (NODE_CODE): |
case (NODE_COMMAND): |
case (NODE_COMMAND): |
Line 1184 pnode_print(struct parse *p, struct pnode *pn) |
|
Line 1299 pnode_print(struct parse *p, struct pnode *pn) |
|
case (NODE_STRUCTNAME): |
case (NODE_STRUCTNAME): |
case (NODE_TEXT): |
case (NODE_TEXT): |
case (NODE_USERINPUT): |
case (NODE_USERINPUT): |
|
case (NODE_VARNAME): |
|
pnode_printmclose(p, sv); |
|
break; |
|
case (NODE_QUOTE): |
|
pnode_printmclose(p, sv); |
|
sv = p->newln; |
|
pnode_printmopen(p); |
|
fputs("Qc", stdout); |
pnode_printmclose(p, sv); |
pnode_printmclose(p, sv); |
break; |
break; |
case (NODE_REFNAME): |
case (NODE_REFNAME): |