=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.69 retrieving revision 1.70 diff -u -p -r1.69 -r1.70 --- docbook2mdoc/docbook2mdoc.c 2019/03/24 16:45:46 1.69 +++ docbook2mdoc/docbook2mdoc.c 2019/03/24 21:00:11 1.70 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.69 2019/03/24 16:45:46 schwarze Exp $ */ +/* $Id: docbook2mdoc.c,v 1.70 2019/03/24 21:00:11 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -711,6 +711,23 @@ macro_closepunct(struct parse *p, struct pnode *pn) } static void +print_text(struct parse *p, const char *word) +{ + switch (p->linestate) { + case LINE_NEW: + break; + case LINE_TEXT: + putchar(' '); + break; + case LINE_MACRO: + macro_close(p); + break; + } + fputs(word, stdout); + p->linestate = LINE_TEXT; +} + +static void pnode_printpara(struct parse *p, struct pnode *pn) { struct pnode *pp; @@ -1109,7 +1126,7 @@ pnode_printprologue(struct parse *p, struct pnode *pn) if (p->flags & PARSE_EQN) { macro_line(p, "EQ"); - puts("delim $$"); + print_text(p, "delim $$"); macro_line(p, "EN"); } } @@ -1129,7 +1146,7 @@ pnode_printvarlistentry(struct parse *p, struct pnode if (pp->node != NODE_TERM) continue; if ( ! first) - putchar(','); + macro_addarg(p, ",", MACROLINE_NOWS); pnode_print(p, pp); first = 0; } @@ -1273,10 +1290,7 @@ pnode_print(struct parse *p, struct pnode *pn) macro_open(p, "Dv"); break; case NODE_EDITOR: - if (p->linestate != LINE_NEW) - putchar('\n'); - puts("editor:"); - p->linestate = LINE_TEXT; + print_text(p, "editor:"); macro_open(p, "An"); break; case NODE_EMAIL: @@ -1391,7 +1405,8 @@ pnode_print(struct parse *p, struct pnode *pn) break; case NODE_REFNAME: /* Suppress non-text children... */ - macro_nodeline(p, "Nm", pn); + macro_open(p, "Nm"); + macro_addnode(p, pn, 0); pnode_unlinksub(pn); break; case NODE_REFNAMEDIV: @@ -1566,7 +1581,7 @@ pnode_print(struct parse *p, struct pnode *pn) pn->parent->node == NODE_REFNAMEDIV && TAILQ_NEXT(pn, child) != NULL && TAILQ_NEXT(pn, child)->node == NODE_REFNAME) - fputs(" ,", stdout); + macro_addarg(p, ",", 0); if (sv == LINE_NEW) macro_close(p); break;