aboutsummaryrefslogtreecommitdiff
path: root/contrib/mdocml/roff.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/mdocml/roff.c')
-rw-r--r--contrib/mdocml/roff.c40
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;
}