=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.90 retrieving revision 1.92 diff -u -p -r1.90 -r1.92 --- docbook2mdoc/docbook2mdoc.c 2019/04/03 17:53:02 1.90 +++ docbook2mdoc/docbook2mdoc.c 2019/04/06 22:37:57 1.92 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.90 2019/04/03 17:53:02 schwarze Exp $ */ +/* $Id: docbook2mdoc.c,v 1.92 2019/04/06 22:37:57 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -642,6 +642,7 @@ pnode_print(struct format *p, struct pnode *pn) if (pn == NULL) return; + p->spc = pn->spc; sv = p->linestate; switch (pn->node) { @@ -674,6 +675,7 @@ pnode_print(struct format *p, struct pnode *pn) break; case NODE_EDITOR: print_text(p, "editor:", ARG_SPACE); + sv = LINE_TEXT; macro_open(p, "An"); break; case NODE_EMAIL: @@ -692,7 +694,7 @@ pnode_print(struct format *p, struct pnode *pn) case NODE_ESCAPE: if (p->linestate == LINE_NEW) p->linestate = LINE_TEXT; - else + else if (pn->spc || p->linestate == LINE_MACRO) putchar(' '); fputs(pn->b, stdout); break; @@ -822,7 +824,7 @@ pnode_print(struct format *p, struct pnode *pn) } if (p->linestate == LINE_NEW) p->linestate = LINE_TEXT; - else + else if (pn->spc || p->linestate == LINE_MACRO) putchar(' '); /* @@ -894,6 +896,24 @@ pnode_print(struct format *p, struct pnode *pn) fputs("$ ", stdout); p->linestate = sv; break; + case NODE_MEMBER: + if ((pp = TAILQ_NEXT(pn, child)) != NULL && + pp->node != NODE_MEMBER) + pp = NULL; + switch (p->linestate) { + case LINE_TEXT: + if (pp != NULL) + print_text(p, ",", 0); + break; + case LINE_MACRO: + if (pp != NULL) + macro_addarg(p, ",", ARG_SPACE); + macro_close(p); + break; + case LINE_NEW: + break; + } + break; case NODE_MML_MROW: case NODE_MML_MI: case NODE_MML_MN: @@ -927,7 +947,8 @@ pnode_print(struct format *p, struct pnode *pn) case NODE_SGMLTAG: case NODE_TYPE: case NODE_VARNAME: - if (sv != LINE_MACRO && p->linestate == LINE_MACRO) + if (sv != LINE_MACRO && p->linestate == LINE_MACRO && + (pn->parent == NULL || pn->parent->node != NODE_MEMBER)) macro_closepunct(p, pn); break; case NODE_QUOTE: