=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.39 retrieving revision 1.40 diff -u -p -r1.39 -r1.40 --- docbook2mdoc/docbook2mdoc.c 2014/04/30 13:18:38 1.39 +++ docbook2mdoc/docbook2mdoc.c 2014/10/12 15:08:45 1.40 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.39 2014/04/30 13:18:38 kristaps Exp $ */ +/* $Id: docbook2mdoc.c,v 1.40 2014/10/12 15:08:45 kristaps Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * @@ -114,12 +114,23 @@ static const struct node nodes[NODE__MAX] = { { "group", NODE_IGNTEXT }, { "holder", NODE_IGNTEXT }, { "info", NODE_IGNTEXT }, + { "informalequation", NODE_IGNTEXT }, { "informaltable", NODE_IGNTEXT }, + { "inlineequation", NODE_IGNTEXT }, { "itemizedlist", NODE_IGNTEXT }, { "link", 0 }, { "listitem", NODE_IGNTEXT }, { "literal", 0 }, { "manvolnum", 0 }, + { "mml:math", NODE_IGNTEXT }, + { "mml:mfenced", 0 }, + { "mml:mfrac", 0 }, + { "mml:mi", 0 }, + { "mml:mn", 0 }, + { "mml:mo", 0 }, + { "mml:mrow", 0 }, + { "mml:msub", 0 }, + { "mml:msup", 0 }, { "modifier", 0 }, { "note", NODE_IGNTEXT }, { "option", 0 }, @@ -851,7 +862,39 @@ pnode_printparamdef(struct parse *p, struct pnode *pn) p->newln = 1; } +/* + * These math nodes require special handling because they have infix + * syntax, instead of the usual prefix or prefix. + * So we need to break up the first and second child node with a + * particular eqn(7) word. + */ static void +pnode_printmath(struct parse *p, struct pnode *pn) +{ + struct pnode *pp; + + pp = TAILQ_FIRST(&pn->childq); + pnode_print(p, pp); + + switch (pn->node) { + case (NODE_MML_MSUP): + printf(" sup "); + break; + case (NODE_MML_MFRAC): + printf(" over "); + break; + case (NODE_MML_MSUB): + printf(" sub "); + break; + default: + break; + } + + pp = TAILQ_NEXT(pp, child); + pnode_print(p, pp); +} + +static void pnode_printfuncprototype(struct parse *p, struct pnode *pn) { struct pnode *pp, *fdef; @@ -1191,6 +1234,27 @@ pnode_print(struct parse *p, struct pnode *pn) pnode_printmopen(p); fputs("Li", stdout); break; + case (NODE_MML_MATH): + if ( ! p->newln) + putchar('\n'); + puts(".EQ"); + p->newln = 0; + break; + case (NODE_MML_MFENCED): + printf("left {"); + break; + case (NODE_MML_MROW): + case (NODE_MML_MI): + case (NODE_MML_MN): + case (NODE_MML_MO): + putchar('{'); + break; + case (NODE_MML_MFRAC): + case (NODE_MML_MSUB): + case (NODE_MML_MSUP): + pnode_printmath(p, pn); + pnode_unlinksub(pn); + break; case (NODE_OPTION): pnode_printmopen(p); fputs("Fl", stdout); @@ -1371,6 +1435,21 @@ pnode_print(struct parse *p, struct pnode *pn) pnode_print(p, pp); switch (pn->node) { + case (NODE_MML_MATH): + if ( ! p->newln) + putchar('\n'); + puts(".EN"); + p->newln = 1; + break; + case (NODE_MML_MFENCED): + printf("right }"); + break; + case (NODE_MML_MROW): + case (NODE_MML_MI): + case (NODE_MML_MN): + case (NODE_MML_MO): + putchar('}'); + break; case (NODE_APPLICATION): case (NODE_ARG): case (NODE_CITEREFENTRY):