=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.86 retrieving revision 1.98 diff -u -p -r1.86 -r1.98 --- docbook2mdoc/docbook2mdoc.c 2019/04/03 15:05:08 1.86 +++ docbook2mdoc/docbook2mdoc.c 2019/04/07 17:55:18 1.98 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.86 2019/04/03 15:05:08 schwarze Exp $ */ +/* $Id: docbook2mdoc.c,v 1.98 2019/04/07 17:55:18 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -32,14 +32,83 @@ static void pnode_print(struct format *, struct pnode static void +pnode_printtext(struct format *f, struct pnode *n) +{ + struct pnode *nn; + char *cp; + char last; + + if (n->bsz == 0) { + assert(n->real < n->b); + return; + } + + /* + * Text preceding a macro without intervening whitespace + * requires a .Pf macro. + * Set the spacing flag to avoid a redundant .Ns macro. + */ + + if (f->linestate != LINE_MACRO && + (nn = TAILQ_NEXT(n, child)) != NULL && nn->spc == 0 && + (nn->node != NODE_TEXT && nn->node != NODE_ESCAPE)) { + macro_open(f, "Pf"); + nn->spc = 1; + } + + if (f->linestate == LINE_NEW) { + last = '\n'; + f->linestate = LINE_TEXT; + } else { + last = ' '; + if (n->spc || f->linestate == LINE_MACRO) + putchar(' '); + } + + if (n->node == NODE_ESCAPE) { + fputs(n->b, stdout); + return; + } + + /* + * Remove the prefix '-' from