=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.93 retrieving revision 1.95 diff -u -p -r1.93 -r1.95 --- docbook2mdoc/docbook2mdoc.c 2019/04/07 13:16:21 1.93 +++ docbook2mdoc/docbook2mdoc.c 2019/04/07 15:06:56 1.95 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.93 2019/04/07 13:16:21 schwarze Exp $ */ +/* $Id: docbook2mdoc.c,v 1.95 2019/04/07 15:06:56 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -34,6 +34,7 @@ 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; @@ -42,6 +43,19 @@ pnode_printtext(struct format *f, struct pnode *n) 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; @@ -182,9 +196,11 @@ pnode_printrefsect(struct format *p, struct pnode *pn) switch (level) { case 1: + macro_close(p); macro_open(p, "Sh"); break; case 2: + macro_close(p); macro_open(p, "Ss"); break; default: @@ -240,6 +256,7 @@ pnode_printrefmeta(struct format *p, struct pnode *pn) else if (pp->node == NODE_REFENTRYTITLE) title = pp; } + macro_close(p); macro_open(p, "Dt"); if (title == NULL) macro_addarg(p, "UNKNOWN", ARG_SPACE); @@ -540,6 +557,7 @@ pnode_printvarlistentry(struct format *p, struct pnode struct pnode *pp; int first = 1; + macro_close(p); macro_open(p, "It"); TAILQ_FOREACH(pp, &pn->childq, child) { if (pp->node != NODE_TERM) @@ -608,6 +626,7 @@ pnode_printtgroup2(struct format *f, struct pnode *n) while ((nr = pnode_findfirst(n, NODE_ROW)) != NULL) { if ((ne = pnode_findfirst(n, NODE_ENTRY)) == NULL) break; + macro_close(f); macro_open(f, "It"); pnode_print(f, ne); macro_close(f); @@ -784,6 +803,7 @@ pnode_print(struct format *p, struct pnode *pn) macro_open(p, "Ql"); break; case NODE_LITERALLAYOUT: + macro_close(p); macro_argline(p, "Bd", pnode_getattr(pn, ATTRKEY_CLASS) == ATTRVAL_MONOSPACED ? "-literal" : "-unfilled"); break;