=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.70 retrieving revision 1.71 diff -u -p -r1.70 -r1.71 --- docbook2mdoc/docbook2mdoc.c 2019/03/24 21:00:11 1.70 +++ docbook2mdoc/docbook2mdoc.c 2019/03/24 23:48:58 1.71 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.70 2019/03/24 21:00:11 schwarze Exp $ */ +/* $Id: docbook2mdoc.c,v 1.71 2019/03/24 23:48:58 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -757,13 +757,13 @@ pnode_printpara(struct parse *p, struct pnode *pn) static void pnode_printrefsynopsisdiv(struct parse *p, struct pnode *pn) { - struct pnode *pp; + struct pnode *pp, *pq; - TAILQ_FOREACH(pp, &pn->childq, child) - if (pp->node == NODE_TITLE) { + TAILQ_FOREACH_SAFE(pp, &pn->childq, child, pq) + if (pp->node == NODE_TITLE) pnode_unlink(pp); - return; - } + + macro_line(p, "Sh SYNOPSIS"); } /* @@ -867,6 +867,7 @@ pnode_printciterefentry(struct parse *p, struct pnode else macro_addnode(p, manvol, 0); macro_close(p); + pnode_unlinksub(pn); } static void @@ -891,6 +892,7 @@ pnode_printrefmeta(struct parse *p, struct pnode *pn) else macro_addnode(p, manvol, 0); macro_close(p); + pnode_unlink(pn); } static void @@ -961,8 +963,8 @@ pnode_printmathfenced(struct parse *p, struct pnode *p putchar(','); pnode_print(p, pp); } - printf("right %s ", pnode_getattr_raw(pn, ATTRKEY_CLOSE, ")")); + pnode_unlinksub(pn); } /* @@ -995,6 +997,7 @@ pnode_printmath(struct parse *p, struct pnode *pn) pp = TAILQ_NEXT(pp, child); pnode_print(p, pp); + pnode_unlinksub(pn); } static void @@ -1016,6 +1019,7 @@ pnode_printfuncprototype(struct parse *p, struct pnode pnode_printparamdef(p, pp); macro_line(p, "Fc"); + pnode_unlinksub(pn); } /* @@ -1051,6 +1055,7 @@ pnode_printarg(struct parse *p, struct pnode *pn) if (isrep && pp->node == NODE_TEXT) macro_addarg(p, "...", 0); } + pnode_unlinksub(pn); } static void @@ -1101,6 +1106,7 @@ pnode_printgroup(struct parse *p, struct pnode *pn) } if (sv) macro_close(p); + pnode_unlinksub(pn); } static void @@ -1112,10 +1118,9 @@ pnode_printprologue(struct parse *p, struct pnode *pn) pnode_findfirst(p->root, NODE_REFMETA); macro_line(p, "Dd $Mdocdate" "$"); - if (pp != NULL) { + if (pp != NULL) pnode_printrefmeta(p, pp); - pnode_unlink(pp); - } else { + else { macro_open(p, "Dt"); macro_addarg(p, pnode_getattr_raw(p->root, ATTRKEY_ID, "UNKNOWN"), 0); @@ -1154,9 +1159,24 @@ pnode_printvarlistentry(struct parse *p, struct pnode TAILQ_FOREACH(pp, &pn->childq, child) if (pp->node != NODE_TERM) pnode_print(p, pp); + pnode_unlinksub(pn); } static void +pnode_printtitle(struct parse *p, struct pnode *pn) +{ + struct pnode *pp, *pq; + + TAILQ_FOREACH_SAFE(pp, &pn->childq, child, pq) { + if (pp->node == NODE_TITLE) { + pnode_printpara(p, pp); + pnode_print(p, pp); + pnode_unlink(pp); + } + } +} + +static void pnode_printrow(struct parse *p, struct pnode *pn) { struct pnode *pp; @@ -1167,6 +1187,7 @@ pnode_printrow(struct parse *p, struct pnode *pn) pnode_print(p, pp); } macro_line(p, "El"); + pnode_unlink(pn); } static void @@ -1174,20 +1195,14 @@ pnode_printtable(struct parse *p, struct pnode *pn) { struct pnode *pp; - TAILQ_FOREACH(pp, &pn->childq, child) { - if (pp->node == NODE_TITLE) { - pnode_printpara(p, pp); - pnode_print(p, pp); - pnode_unlink(pp); - } - } + pnode_printtitle(p, pn); macro_line(p, "Bl -ohang"); while ((pp = pnode_findfirst(pn, NODE_ROW)) != NULL) { macro_line(p, "It Table Row"); pnode_printrow(p, pp); - pnode_unlink(pp); } macro_line(p, "El"); + pnode_unlinksub(pn); } static void @@ -1195,13 +1210,7 @@ pnode_printlist(struct parse *p, struct pnode *pn) { struct pnode *pp; - TAILQ_FOREACH(pp, &pn->childq, child) { - if (pp->node == NODE_TITLE) { - pnode_printpara(p, pp); - pnode_print(p, pp); - pnode_unlink(pp); - } - } + pnode_printtitle(p, pn); macro_argline(p, "Bl", pn->node == NODE_ORDEREDLIST ? "-enum" : "-bullet"); TAILQ_FOREACH(pp, &pn->childq, child) { @@ -1209,6 +1218,7 @@ pnode_printlist(struct parse *p, struct pnode *pn) pnode_print(p, pp); } macro_line(p, "El"); + pnode_unlinksub(pn); } static void @@ -1216,13 +1226,7 @@ pnode_printvariablelist(struct parse *p, struct pnode { struct pnode *pp; - TAILQ_FOREACH(pp, &pn->childq, child) { - if (pp->node == NODE_TITLE) { - pnode_printpara(p, pp); - pnode_print(p, pp); - pnode_unlink(pp); - } - } + pnode_printtitle(p, pn); macro_line(p, "Bl -tag -width Ds"); TAILQ_FOREACH(pp, &pn->childq, child) { if (pp->node == NODE_VARLISTENTRY) @@ -1231,6 +1235,7 @@ pnode_printvariablelist(struct parse *p, struct pnode macro_nodeline(p, "It", pp); } macro_line(p, "El"); + pnode_unlinksub(pn); } /* @@ -1262,7 +1267,6 @@ pnode_print(struct parse *p, struct pnode *pn) return; case NODE_ARG: pnode_printarg(p, pn); - pnode_unlinksub(pn); break; case NODE_AUTHOR: macro_open(p, "An"); @@ -1275,7 +1279,6 @@ pnode_print(struct parse *p, struct pnode *pn) break; case NODE_CITEREFENTRY: pnode_printciterefentry(p, pn); - pnode_unlinksub(pn); break; case NODE_CITETITLE: macro_open(p, "%T"); @@ -1311,7 +1314,6 @@ pnode_print(struct parse *p, struct pnode *pn) break; case NODE_FUNCPROTOTYPE: pnode_printfuncprototype(p, pn); - pnode_unlinksub(pn); break; case NODE_FUNCSYNOPSISINFO: macro_open(p, "Fd"); @@ -1328,11 +1330,9 @@ pnode_print(struct parse *p, struct pnode *pn) break; case NODE_ITEMIZEDLIST: pnode_printlist(p, pn); - pnode_unlinksub(pn); break; case NODE_GROUP: pnode_printgroup(p, pn); - pnode_unlinksub(pn); break; case NODE_KEYSYM: macro_open(p, "Sy"); @@ -1355,7 +1355,6 @@ pnode_print(struct parse *p, struct pnode *pn) break; case NODE_MML_MFENCED: pnode_printmathfenced(p, pn); - pnode_unlinksub(pn); break; case NODE_MML_MROW: case NODE_MML_MI: @@ -1369,14 +1368,12 @@ pnode_print(struct parse *p, struct pnode *pn) case NODE_MML_MSUB: case NODE_MML_MSUP: pnode_printmath(p, pn); - pnode_unlinksub(pn); break; case NODE_OPTION: macro_open(p, "Fl"); break; case NODE_ORDEREDLIST: pnode_printlist(p, pn); - pnode_unlinksub(pn); break; case NODE_PARA: pnode_printpara(p, pn); @@ -1417,7 +1414,6 @@ pnode_print(struct parse *p, struct pnode *pn) break; case NODE_REFSYNOPSISDIV: pnode_printrefsynopsisdiv(p, pn); - macro_line(p, "Sh SYNOPSIS"); break; case NODE_PREFACE: case NODE_SECTION: @@ -1442,7 +1438,6 @@ pnode_print(struct parse *p, struct pnode *pn) case NODE_TABLE: case NODE_INFORMALTABLE: pnode_printtable(p, pn); - pnode_unlinksub(pn); break; case NODE_TEXT: bufclear(p); @@ -1501,11 +1496,9 @@ pnode_print(struct parse *p, struct pnode *pn) break; case NODE_VARIABLELIST: pnode_printvariablelist(p, pn); - pnode_unlinksub(pn); break; case NODE_VARLISTENTRY: pnode_printvarlistentry(p, pn); - pnode_unlinksub(pn); break; case NODE_VARNAME: macro_open(p, "Va");