=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.106 retrieving revision 1.107 diff -u -p -r1.106 -r1.107 --- docbook2mdoc/docbook2mdoc.c 2019/04/12 07:05:19 1.106 +++ docbook2mdoc/docbook2mdoc.c 2019/04/12 08:48:16 1.107 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.106 2019/04/12 07:05:19 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