summaryrefslogtreecommitdiffstatshomepage
path: root/man.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-08-21 12:12:12 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-08-21 12:12:12 +0000
commit3c7b73a2f8774480e0df1984d751f9ead2c8c29d (patch)
tree846bc1f18a8cba7aab6f267663b62f33b0180bd5 /man.c
parenta7382486c8399484becfa0fc2722457091759977 (diff)
downloadmandoc-3c7b73a2f8774480e0df1984d751f9ead2c8c29d.tar.gz
mandoc-3c7b73a2f8774480e0df1984d751f9ead2c8c29d.tar.zst
mandoc-3c7b73a2f8774480e0df1984d751f9ead2c8c29d.zip
Open explicit scope on libman exit now only generates warning.
Consecutive ELINE scopes are now pruned (with a warning).
Diffstat (limited to 'man.c')
-rw-r--r--man.c32
1 files changed, 27 insertions, 5 deletions
diff --git a/man.c b/man.c
index 6cac5884..f1c461e6 100644
--- a/man.c
+++ b/man.c
@@ -1,4 +1,4 @@
-/* $Id: man.c,v 1.33 2009/08/20 11:51:07 kristaps Exp $ */
+/* $Id: man.c,v 1.34 2009/08/21 12:12:12 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -454,8 +454,9 @@ descope:
int
man_pmacro(struct man *m, int ln, char *buf)
{
- int i, j, c, ppos, fl;
- char mac[5];
+ int i, j, c, ppos, fl;
+ char mac[5];
+ struct man_node *n;
/* Comments and empties are quickly ignored. */
@@ -512,6 +513,29 @@ man_pmacro(struct man *m, int ln, char *buf)
while (buf[i] && ' ' == buf[i])
i++;
+ /* Remove prior ELINE macro, if applicable. */
+
+ if (m->flags & MAN_ELINE) {
+ n = m->last;
+ assert(NULL == n->child);
+ if ( ! man_nwarn(m, n, WLNSCOPE))
+ return(0);
+
+ if (n->prev) {
+ assert(n != n->parent->child);
+ assert(n == n->prev->next);
+ n->prev->next = NULL;
+ m->last = n->prev;
+ } else {
+ assert(n == n->parent->child);
+ n->parent->child = NULL;
+ m->last = n->parent;
+ }
+
+ man_node_free(n);
+ m->flags &= ~MAN_ELINE;
+ }
+
/* Begin recursive parse sequence. */
assert(man_macros[c].fp);
@@ -533,8 +557,6 @@ out:
/* Close out the block scope opened in the prior line. */
- /* XXX - this should be in man_action.c. */
-
assert(MAN_BLINE & m->flags);
m->flags &= ~MAN_BLINE;