=================================================================== RCS file: /cvs/docbook2mdoc/parse.c,v retrieving revision 1.56 retrieving revision 1.58 diff -u -p -r1.56 -r1.58 --- docbook2mdoc/parse.c 2019/05/01 11:34:20 1.56 +++ docbook2mdoc/parse.c 2019/05/02 04:09:26 1.58 @@ -1,4 +1,4 @@ -/* $Id: parse.c,v 1.56 2019/05/01 11:34:20 schwarze Exp $ */ +/* $Id: parse.c,v 1.58 2019/05/02 04:09:26 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -268,8 +268,10 @@ xml_text(struct parse *p, const char *word, int sz) n = pnode_alloc(p->cur); n->node = NODE_TEXT; - n->flags = ((p->flags & PFLAG_LINE) ? NFLAG_LINE : 0) | - ((p->flags & PFLAG_SPC) ? NFLAG_SPC : 0); + if (p->flags & PFLAG_LINE && TAILQ_PREV(n, pnodeq, child) != NULL) + n->flags |= NFLAG_LINE; + if (p->flags & PFLAG_SPC) + n->flags |= NFLAG_SPC; p->flags &= ~(PFLAG_LINE | PFLAG_SPC); /* @@ -352,13 +354,13 @@ pnode_closetext(struct parse *p, int check_last_word) while (cp > n->b && !isspace((unsigned char)cp[-1])) cp--; + last_word = cp; + while (cp > n->b && isspace((unsigned char)cp[-1])) + cp--; if (cp == n->b) return; + *cp = '\0'; - last_word = cp; - while (cp > n->b && isspace((unsigned char)cp[-1])) - *--cp = '\0'; - /* Move the last word into its own node, for use with .Pf. */ n = pnode_alloc_text(p->cur, last_word); @@ -433,8 +435,10 @@ xml_entity(struct parse *p, const char *name) n->b = xstrdup(entity->roff); done: n->node = NODE_ESCAPE; - n->flags = ((p->flags & PFLAG_LINE) ? NFLAG_LINE : 0) | - ((p->flags & PFLAG_SPC) ? NFLAG_SPC : 0); + if (p->flags & PFLAG_LINE && TAILQ_PREV(n, pnodeq, child) != NULL) + n->flags |= NFLAG_LINE; + if (p->flags & PFLAG_SPC) + n->flags |= NFLAG_SPC; p->flags &= ~(PFLAG_LINE | PFLAG_SPC); } @@ -506,6 +510,10 @@ xml_elem_start(struct parse *p, const char *name) } n = pnode_alloc(p->cur); + if (p->flags & PFLAG_LINE && p->cur != NULL && + TAILQ_PREV(n, pnodeq, child) != NULL) + n->flags |= NFLAG_LINE; + p->flags &= ~PFLAG_LINE; /* * Some elements are self-closing. @@ -526,8 +534,8 @@ xml_elem_start(struct parse *p, const char *name) switch (pnode_class(p->ncur)) { case CLASS_LINE: case CLASS_ENCL: - n->flags = ((p->flags & PFLAG_LINE) ? NFLAG_LINE : 0) | - ((p->flags & PFLAG_SPC) ? NFLAG_SPC : 0); + if (p->flags & PFLAG_SPC) + n->flags |= NFLAG_SPC; break; case CLASS_NOFILL: p->nofill++;