=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.105 retrieving revision 1.107 diff -u -p -r1.105 -r1.107 --- docbook2mdoc/docbook2mdoc.c 2019/04/12 04:17:11 1.105 +++ docbook2mdoc/docbook2mdoc.c 2019/04/12 08:48:16 1.107 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.105 2019/04/12 04:17:11 schwarze Exp $ */ +/* $Id: docbook2mdoc.c,v 1.107 2019/04/12 08:48:16 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -38,11 +38,10 @@ pnode_printtext(struct format *f, struct pnode *n) struct pnode *nn; char *cp; int accept_arg; - char last; cp = n->b; accept_arg = f->flags & FMT_ARG; - if (f->linestate == LINE_MACRO && n->spc == 0 && !accept_arg) { + if (f->linestate == LINE_MACRO && !n->spc && !accept_arg) { for (;;) { if (*cp == '\0') return; @@ -80,33 +79,28 @@ pnode_printtext(struct format *f, struct pnode *n) } switch (f->linestate) { + case LINE_NEW: + break; case LINE_TEXT: if (n->spc) { - if (n->node == NODE_TEXT) { - putchar('\n'); - last = '\n'; - break; - } - putchar(' '); + if (n->node == NODE_TEXT) + macro_close(f); + else + putchar(' '); } - last = ' '; break; case LINE_MACRO: - if (accept_arg) { + if (accept_arg) putchar(' '); - last = ' '; - break; - } - macro_close(f); - /* FALLTHROUGH */ - case LINE_NEW: - f->linestate = LINE_TEXT; - last = '\n'; + else + macro_close(f); break; } if (n->node == NODE_ESCAPE) { fputs(n->b, stdout); + if (f->linestate == LINE_NEW) + f->linestate = LINE_TEXT; return; } @@ -118,23 +112,10 @@ pnode_printtext(struct format *f, struct pnode *n) if (n->parent != NULL && n->parent->node == NODE_OPTION && *cp == '-') cp++; - /* - * Print the text, skipping whitespace on new lines, - * escaping control characters on new lines, - * and escaping backslashes. - */ - - for (; *cp != '\0'; cp++) { - if (last == '\n') { - if (isspace((unsigned char)*cp)) - continue; - if (*cp == '\'' || *cp == '.') - fputs("\\&", stdout); - } - putchar(last = *cp); - if (last == '\\') - putchar('e'); - } + if (f->linestate == LINE_MACRO) + macro_addarg(f, cp, 0); + else + print_text(f, cp, 0); } static void @@ -914,6 +895,9 @@ pnode_print(struct format *f, struct pnode *n) macro_argline(f, "Bd", pnode_getattr(n, ATTRKEY_CLASS) == ATTRVAL_MONOSPACED ? "-literal" : "-unfilled"); break; + case NODE_MARKUP: + macro_open(f, "Ic"); + break; case NODE_MML_MFENCED: pnode_printmathfenced(f, n); break; @@ -988,9 +972,6 @@ pnode_print(struct format *f, struct pnode *n) break; case NODE_SBR: macro_line(f, "br"); - break; - case NODE_SGMLTAG: - macro_open(f, "Ic"); break; case NODE_TEXT: case NODE_ESCAPE: