diff options
author | Ingo Schwarze <schwarze@cvs.openbsd.org> | 2012-07-07 13:51:04 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@cvs.openbsd.org> | 2012-07-07 13:51:04 +0000 |
commit | 29ec7dad371b3cb19268cd20523ecb369b7b19bb (patch) | |
tree | 36d867225b861d055ebfa7aea678049b34186ab4 /usr.bin/mandoc | |
parent | 79da717e01e22b66a763650d8989244e5f5eb964 (diff) |
implement -Tman .Sm
Diffstat (limited to 'usr.bin/mandoc')
-rw-r--r-- | usr.bin/mandoc/mdoc_man.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/usr.bin/mandoc/mdoc_man.c b/usr.bin/mandoc/mdoc_man.c index 418e66edab3..a8244e9cccf 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.8 2012/07/07 13:45:26 schwarze Exp $ */ +/* $Id: mdoc_man.c,v 1.9 2012/07/07 13:51:03 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Ingo Schwarze <schwarze@openbsd.org> * @@ -14,6 +14,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include <assert.h> #include <stdio.h> #include <string.h> @@ -28,6 +29,7 @@ struct mman *mm struct mman { + int mode_space; /* spacing mode: 1 = on */ int need_space; /* next word needs prior ws */ int need_nl; /* next word needs prior nl */ }; @@ -60,6 +62,7 @@ static int pre_it(DECL_ARGS); static int pre_nm(DECL_ARGS); static int pre_ns(DECL_ARGS); static int pre_pp(DECL_ARGS); +static int pre_sm(DECL_ARGS); static int pre_sp(DECL_ARGS); static int pre_sect(DECL_ARGS); static int pre_ux(DECL_ARGS); @@ -164,7 +167,7 @@ static const struct manact manacts[MDOC_MAX + 1] = { { NULL, NULL, NULL, NULL, NULL }, /* Sc */ { cond_body, pre_enc, post_enc, "`", "'" }, /* So */ { cond_body, pre_enc, post_enc, "`", "'" }, /* Sq */ - { NULL, NULL, NULL, NULL, NULL }, /* _Sm */ + { NULL, pre_sm, NULL, NULL, NULL }, /* Sm */ { NULL, pre_enc, post_enc, "\\fI", "\\fP" }, /* Sx */ { NULL, pre_enc, post_enc, "\\fB", "\\fP" }, /* Sy */ { NULL, pre_enc, post_enc, "\\fR", "\\fP" }, /* Tn */ @@ -225,8 +228,8 @@ print_word(struct mman *mm, const char *s) * Reassign needing space if we're not following opening * punctuation. */ - mm->need_space = - ('(' != s[0] && '[' != s[0]) || '\0' != s[1]; + mm->need_space = mm->mode_space && + (('(' != s[0] && '[' != s[0]) || '\0' != s[1]); for ( ; *s; s++) { switch (*s) { @@ -294,6 +297,7 @@ man_mdoc(void *arg, const struct mdoc *mdoc) memset(&mm, 0, sizeof(struct mman)); + mm.mode_space = 1; mm.need_nl = 1; print_node(m, n, &mm); putchar('\n'); @@ -627,6 +631,18 @@ pre_pp(DECL_ARGS) } static int +pre_sm(DECL_ARGS) +{ + + assert(n->child && MDOC_TEXT == n->child->type); + if (0 == strcmp("on", n->child->string)) + mm->mode_space = 1; + else + mm->mode_space = 0; + return(0); +} + +static int pre_sp(DECL_ARGS) { |