summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorschwarze <schwarze@openbsd.org>2012-07-11 16:18:08 +0000
committerschwarze <schwarze@openbsd.org>2012-07-11 16:18:08 +0000
commit9ea7155c492ffd9930b3e4031f52df4fbed90057 (patch)
tree8ddcbe452eae272c41051e100c806bbe4988d81a
parent#ifdef the uvm swap checker fn for hibernate only, to save space in kernels (diff)
downloadwireguard-openbsd-9ea7155c492ffd9930b3e4031f52df4fbed90057.tar.xz
wireguard-openbsd-9ea7155c492ffd9930b3e4031f52df4fbed90057.zip
Basic implementation of -Tman .Bl -column using tbl(7).
In the end, this turned out to be surprisingly simple; of course, getting identical output will be quite hard, so there is no way to quickly set up unit tests.
-rw-r--r--usr.bin/mandoc/mdoc_man.c48
1 files changed, 42 insertions, 6 deletions
diff --git a/usr.bin/mandoc/mdoc_man.c b/usr.bin/mandoc/mdoc_man.c
index a15dde346ef..7611bcc7e89 100644
--- a/usr.bin/mandoc/mdoc_man.c
+++ b/usr.bin/mandoc/mdoc_man.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_man.c,v 1.30 2012/07/10 20:36:33 schwarze Exp $ */
+/* $Id: mdoc_man.c,v 1.31 2012/07/11 16:18:08 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -750,9 +750,24 @@ post_bk(DECL_ARGS)
static int
pre_bl(DECL_ARGS)
{
+ size_t icol;
- if (LIST_enum == n->norm->Bl.type)
+ switch (n->norm->Bl.type) {
+ case (LIST_enum):
n->norm->Bl.count = 0;
+ return(1);
+ case (LIST_column):
+ break;
+ default:
+ return(1);
+ }
+
+ outflags |= MMAN_nl;
+ print_word(".TS");
+ outflags |= MMAN_nl;
+ for (icol = 0; icol < n->norm->Bl.ncols; icol++)
+ print_word("l");
+ print_word(".");
return(1);
}
@@ -760,9 +775,18 @@ static void
post_bl(DECL_ARGS)
{
- outflags |= MMAN_br;
- if (LIST_enum == n->norm->Bl.type)
+ switch (n->norm->Bl.type) {
+ case (LIST_enum):
n->norm->Bl.count = 0;
+ break;
+ case (LIST_column):
+ outflags |= MMAN_nl;
+ print_word(".TE");
+ break;
+ default:
+ break;
+ }
+ outflags |= MMAN_br;
}
static int
@@ -1071,8 +1095,10 @@ post_it(DECL_ARGS)
{
const struct mdoc_node *bln;
- if (MDOC_HEAD == n->type) {
- bln = n->parent->parent;
+ bln = n->parent->parent;
+
+ switch (n->type) {
+ case (MDOC_HEAD):
switch (bln->norm->Bl.type) {
case (LIST_diag):
outflags &= ~MMAN_spc;
@@ -1084,6 +1110,16 @@ post_it(DECL_ARGS)
default:
break;
}
+ break;
+ case (MDOC_BODY):
+ if (LIST_column == bln->norm->Bl.type &&
+ NULL != n->next) {
+ putchar('\t');
+ outflags &= ~MMAN_spc;
+ }
+ break;
+ default:
+ break;
}
}