summaryrefslogtreecommitdiffstatshomepage
path: root/man_macro.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-03-29 10:10:35 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-03-29 10:10:35 +0000
commitaa85d82aeaa92eb4f5ebff80f69420180ae71322 (patch)
tree0556ae001303938e8dee9b2a7b3a24541b53fe57 /man_macro.c
parent17fb05b577517a04553bc0c0a3301f3113889621 (diff)
downloadmandoc-aa85d82aeaa92eb4f5ebff80f69420180ae71322.tar.gz
mandoc-aa85d82aeaa92eb4f5ebff80f69420180ae71322.tar.zst
mandoc-aa85d82aeaa92eb4f5ebff80f69420180ae71322.zip
Final (?) fix to issue pointed out by Sascha Wildner: roff instructions clobbering prior scope rules and line modes.
Diffstat (limited to 'man_macro.c')
-rw-r--r--man_macro.c30
1 files changed, 10 insertions, 20 deletions
diff --git a/man_macro.c b/man_macro.c
index 81dd6057..37534e09 100644
--- a/man_macro.c
+++ b/man_macro.c
@@ -1,4 +1,4 @@
-/* $Id: man_macro.c,v 1.41 2010/03/29 04:52:14 kristaps Exp $ */
+/* $Id: man_macro.c,v 1.42 2010/03/29 10:10:35 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -314,28 +314,14 @@ blk_dotted(MACRO_PROT_ARGS)
if ( ! rew_scope(MAN_BLOCK, m, ntok))
return(0);
- /*
- * XXX: manually adjust our next-line status. roff macros are,
- * for the moment, ignored, so we don't want to close out bodies
- * and so on.
- */
-
- switch (m->last->type) {
- case (MAN_BODY):
- m->next = MAN_NEXT_CHILD;
- break;
- default:
- break;
- }
-
/*
* Restore flags set when we got here and also stipulate that we
* don't post-process the line when exiting the macro op
- * function in man_pmacro().
+ * function in man_pmacro(). See blk_exp().
*/
- m->flags = m->svflags;
- m->flags |= MAN_ILINE;
+ m->flags = m->svflags | MAN_ILINE;
+ m->next = m->svnext;
return(1);
}
@@ -395,10 +381,14 @@ blk_exp(MACRO_PROT_ARGS)
return(0);
} else {
/*
- * Save our state; we restore it when exiting from the
- * roff instruction block.
+ * Save our state and next-scope indicator; we restore
+ * it when exiting from the roff instruction block. See
+ * blk_dotted().
*/
m->svflags = m->flags;
+ m->svnext = m->next;
+
+ /* Make sure we drop any line modes. */
m->flags = 0;
}