summaryrefslogtreecommitdiffstats
path: root/usr.bin/mandoc/man.c
diff options
context:
space:
mode:
authorschwarze <schwarze@openbsd.org>2017-05-01 23:27:23 +0000
committerschwarze <schwarze@openbsd.org>2017-05-01 23:27:23 +0000
commit129c7e1f23772b77921dcfe03d36008cc8bae45b (patch)
treebdfb2036374e96634ef35f9530b3e4fe0f9277ef /usr.bin/mandoc/man.c
parentwhen freeing a bitmap, zero all it bytes; spotted by Ilya Kaliman (diff)
downloadwireguard-openbsd-129c7e1f23772b77921dcfe03d36008cc8bae45b.tar.xz
wireguard-openbsd-129c7e1f23772b77921dcfe03d36008cc8bae45b.zip
A few days ago, a patch from <G dot Branden dot Robinson at gmail dot com>
got committed to groff which changed .TP from using .it to using .itc, such that groff now supports more than one man(7) macro line in the .TP head if all but the last line in the head end with \c. Of course, relying on that behaviour is utterly non-portable, but if authors are reckless enough to use that idiom, let's do what they want.
Diffstat (limited to 'usr.bin/mandoc/man.c')
-rw-r--r--usr.bin/mandoc/man.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/usr.bin/mandoc/man.c b/usr.bin/mandoc/man.c
index 1db9e879202..4895f0fbd16 100644
--- a/usr.bin/mandoc/man.c
+++ b/usr.bin/mandoc/man.c
@@ -1,7 +1,7 @@
-/* $OpenBSD: man.c,v 1.118 2017/04/29 12:43:55 schwarze Exp $ */
+/* $OpenBSD: man.c,v 1.119 2017/05/01 23:27:23 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2011 Joerg Sonnenberger <joerg@netbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
@@ -199,6 +199,20 @@ man_pmacro(struct roff_man *man, int ln, char *buf, int offs)
man_breakscope(man, tok);
bline = man->flags & MAN_BLINE;
+ /*
+ * If the line in next-line scope ends with \c, keep the
+ * next-line scope open for the subsequent input line.
+ * That is not at all portable, only groff >= 1.22.4
+ * does it, but *if* this weird idiom occurs in a manual
+ * page, that's very likely what the author intended.
+ */
+
+ if (bline) {
+ cp = strchr(buf + offs, '\0') - 2;
+ if (cp >= buf && cp[0] == '\\' && cp[1] == 'c')
+ bline = 0;
+ }
+
/* Call to handler... */
assert(man_macros[tok].fp);