diff options
Diffstat (limited to 'contrib/mdocml/roff.c')
-rw-r--r-- | contrib/mdocml/roff.c | 40 |
1 files changed, 17 insertions, 23 deletions
diff --git a/contrib/mdocml/roff.c b/contrib/mdocml/roff.c index 13b9439e4df9..966ed9d53dd9 100644 --- a/contrib/mdocml/roff.c +++ b/contrib/mdocml/roff.c @@ -1,7 +1,7 @@ -/* $Id: roff.c,v 1.284 2016/01/08 17:48:10 schwarze Exp $ */ +/* $Id: roff.c,v 1.288 2017/01/12 18:02:20 schwarze Exp $ */ /* * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv> - * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org> + * Copyright (c) 2010-2015, 2017 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -991,11 +991,11 @@ roff_node_alloc(struct roff_man *man, int line, int pos, n->sec = man->lastsec; if (man->flags & MDOC_SYNOPSIS) - n->flags |= MDOC_SYNPRETTY; + n->flags |= NODE_SYNPRETTY; else - n->flags &= ~MDOC_SYNPRETTY; + n->flags &= ~NODE_SYNPRETTY; if (man->flags & MDOC_NEWLINE) - n->flags |= MDOC_LINE; + n->flags |= NODE_LINE; man->flags &= ~MDOC_NEWLINE; return n; @@ -1017,9 +1017,13 @@ roff_node_append(struct roff_man *man, struct roff_node *n) n->parent = man->last->parent; break; case ROFF_NEXT_CHILD: + if (man->last->child != NULL) { + n->next = man->last->child; + man->last->child->prev = n; + } else + man->last->last = n; man->last->child = n; n->parent = man->last; - n->parent->last = n; break; default: abort(); @@ -1059,10 +1063,7 @@ roff_word_alloc(struct roff_man *man, int line, int pos, const char *word) n = roff_node_alloc(man, line, pos, ROFFT_TEXT, TOKEN_NONE); n->string = roff_strdup(man->roff, word); roff_node_append(man, n); - if (man->macroset == MACROSET_MDOC) - n->flags |= MDOC_VALID | MDOC_ENDED; - else - n->flags |= MAN_VALID; + n->flags |= NODE_VALID | NODE_ENDED; man->next = ROFF_NEXT_SIBLING; } @@ -1132,7 +1133,7 @@ roff_addeqn(struct roff_man *man, const struct eqn *eqn) n = roff_node_alloc(man, eqn->ln, eqn->pos, ROFFT_EQN, TOKEN_NONE); n->eqn = eqn; if (eqn->ln > man->last->line) - n->flags |= MDOC_LINE; + n->flags |= NODE_LINE; roff_node_append(man, n); man->next = ROFF_NEXT_SIBLING; } @@ -1147,10 +1148,7 @@ roff_addtbl(struct roff_man *man, const struct tbl_span *tbl) n = roff_node_alloc(man, tbl->line, 0, ROFFT_TBL, TOKEN_NONE); n->span = tbl; roff_node_append(man, n); - if (man->macroset == MACROSET_MDOC) - n->flags |= MDOC_VALID | MDOC_ENDED; - else - n->flags |= MAN_VALID; + n->flags |= NODE_VALID | NODE_ENDED; man->next = ROFF_NEXT_SIBLING; } @@ -1225,16 +1223,12 @@ deroff(char **dest, const struct roff_node *n) return; } - /* Skip leading whitespace and escape sequences. */ + /* Skip leading whitespace. */ - cp = n->string; - while (*cp != '\0') { - if ('\\' == *cp) { - cp++; - mandoc_escape((const char **)&cp, NULL, NULL); - } else if (isspace((unsigned char)*cp)) + for (cp = n->string; *cp != '\0'; cp++) { + if (cp[0] == '\\' && strchr(" %&0^|~", cp[1]) != NULL) cp++; - else + else if ( ! isspace((unsigned char)*cp)) break; } |