diff options
author | 2012-07-11 16:18:08 +0000 | |
---|---|---|
committer | 2012-07-11 16:18:08 +0000 | |
commit | 9ea7155c492ffd9930b3e4031f52df4fbed90057 (patch) | |
tree | 8ddcbe452eae272c41051e100c806bbe4988d81a | |
parent | #ifdef the uvm swap checker fn for hibernate only, to save space in kernels (diff) | |
download | wireguard-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.c | 48 |
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; } } |