=================================================================== RCS file: /cvs/docbook2mdoc/parse.c,v retrieving revision 1.55 retrieving revision 1.59 diff -u -p -r1.55 -r1.59 --- docbook2mdoc/parse.c 2019/04/29 02:00:50 1.55 +++ docbook2mdoc/parse.c 2019/05/02 11:58:18 1.59 @@ -1,4 +1,4 @@ -/* $Id: parse.c,v 1.55 2019/04/29 02:00:50 schwarze Exp $ */ +/* $Id: parse.c,v 1.59 2019/05/02 11:58:18 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -97,10 +97,12 @@ static const struct alias aliases[] = { { "imageobject", NODE_IGNORE }, { "indexterm", NODE_DELETE }, { "informaltable", NODE_TABLE }, + { "jobtitle", NODE_IGNORE }, { "keycap", NODE_KEYSYM }, { "keycode", NODE_IGNORE }, { "keycombo", NODE_IGNORE }, { "mediaobject", NODE_BLOCKQUOTE }, + { "orgdiv", NODE_IGNORE }, { "orgname", NODE_IGNORE }, { "othercredit", NODE_AUTHOR }, { "othername", NODE_PERSONNAME }, @@ -130,7 +132,6 @@ static const struct alias aliases[] = { { "trademark", NODE_IGNORE }, { "ulink", NODE_LINK }, { "userinput", NODE_LITERAL }, - { "year", NODE_IGNORE }, { NULL, NODE_IGNORE } }; @@ -269,8 +270,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); /* @@ -353,13 +356,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); @@ -434,8 +437,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); } @@ -507,6 +512,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. @@ -527,8 +536,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++;