From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from localhost (fantadrom.bsd.lv [local]) by fantadrom.bsd.lv (OpenSMTPD) with ESMTPA id aa07cbb4 for ; Fri, 12 Apr 2019 04:39:51 -0500 (EST) Date: Fri, 12 Apr 2019 04:39:51 -0500 (EST) X-Mailinglist: mandoc-source Reply-To: source@mandoc.bsd.lv MIME-Version: 1.0 From: schwarze@mandoc.bsd.lv To: source@mandoc.bsd.lv Subject: docbook2mdoc: Fix an assertion failure when content inside a term causes X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Message-ID: Log Message: ----------- Fix an assertion failure when content inside a term causes an output line break. The solution isn't perfect: content from the still leaks into the .It body, but fixing *that* is a much more complex task than merely fixing the assertion. Modified Files: -------------- docbook2mdoc: docbook2mdoc.c Revision Data ------------- Index: docbook2mdoc.c =================================================================== RCS file: /home/cvs/mdocml/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.107 retrieving revision 1.108 diff -Ldocbook2mdoc.c -Ldocbook2mdoc.c -u -p -r1.107 -r1.108 --- docbook2mdoc.c +++ docbook2mdoc.c @@ -641,25 +641,36 @@ pnode_printprologue(struct format *f, st static void pnode_printvarlistentry(struct format *f, struct pnode *n) { - struct pnode *nc; + struct pnode *nc, *nn; int first = 1; - macro_close(f); macro_open(f, "It"); f->flags |= FMT_IMPL; - TAILQ_FOREACH(nc, &n->childq, child) { + TAILQ_FOREACH_SAFE(nc, &n->childq, child, nn) { if (nc->node != NODE_TERM && nc->node != NODE_GLOSSTERM) continue; - if ( ! first) - macro_addarg(f, ",", 0); + if (first == 0) { + switch (f->linestate) { + case LINE_NEW: + break; + case LINE_TEXT: + print_text(f, ",", 0); + break; + case LINE_MACRO: + macro_addarg(f, ",", 0); + break; + } + } pnode_print(f, nc); + pnode_unlink(nc); first = 0; } macro_close(f); - TAILQ_FOREACH(nc, &n->childq, child) - if (nc->node != NODE_TERM && nc->node != NODE_GLOSSTERM) - pnode_print(f, nc); - pnode_unlinksub(n); + while ((nc = TAILQ_FIRST(&n->childq)) != NULL) { + pnode_print(f, nc); + pnode_unlink(nc); + } + macro_close(f); } static void -- To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv