=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.80 retrieving revision 1.97 diff -u -p -r1.80 -r1.97 --- docbook2mdoc/docbook2mdoc.c 2019/04/02 16:24:23 1.80 +++ docbook2mdoc/docbook2mdoc.c 2019/04/07 17:42:36 1.97 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.80 2019/04/02 16:24:23 schwarze Exp $ */ +/* $Id: docbook2mdoc.c,v 1.97 2019/04/07 17:42:36 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