=================================================================== RCS file: /cvs/mandoc/mdoc_man.c,v retrieving revision 1.43 retrieving revision 1.45 diff -u -p -r1.43 -r1.45 --- mandoc/mdoc_man.c 2012/11/18 18:02:23 1.43 +++ mandoc/mdoc_man.c 2012/11/19 02:08:33 1.45 @@ -1,4 +1,4 @@ -/* $Id: mdoc_man.c,v 1.43 2012/11/18 18:02:23 schwarze Exp $ */ +/* $Id: mdoc_man.c,v 1.45 2012/11/19 02:08:33 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Ingo Schwarze * @@ -253,6 +253,7 @@ static int outflags; #define MMAN_Bk (1 << 7) /* word keep mode */ #define MMAN_An_split (1 << 8) /* author mode is "split" */ #define MMAN_An_nosplit (1 << 9) /* author mode is "nosplit" */ +#define MMAN_PD (1 << 10) /* inter-paragraph spacing disabled */ #define BL_STACK_MAX 32 @@ -304,8 +305,15 @@ print_word(const char *s) * If we need a newline, print it now and start afresh. */ if (MMAN_PP & outflags) { - if ( ! (MMAN_sp & outflags)) - printf("\n.sp -1v"); + if (MMAN_sp & outflags) { + if (MMAN_PD & outflags) { + printf("\n.PD"); + outflags &= ~MMAN_PD; + } + } else if ( ! (MMAN_PD & outflags)) { + printf("\n.PD 0"); + outflags |= MMAN_PD; + } printf("\n.PP\n"); } else if (MMAN_sp & outflags) printf("\n.sp\n"); @@ -326,11 +334,9 @@ print_word(const char *s) */ if (MMAN_spc_force & outflags || '\0' == s[0] || NULL == strchr(".,:;)]?!", s[0]) || '\0' != s[1]) { - if (MMAN_Bk & outflags) { + if (MMAN_Bk & outflags) putchar('\\'); - putchar('~'); - } else - putchar(' '); + putchar(' '); if (TPremain) TPremain--; } @@ -350,7 +356,7 @@ print_word(const char *s) for ( ; *s; s++) { switch (*s) { case (ASCII_NBRSP): - printf("\\~"); + printf("\\ "); break; case (ASCII_HYPH): putchar('-'); @@ -379,10 +385,16 @@ print_block(const char *s, int newflags) { outflags &= ~MMAN_PP; - if (MMAN_sp & outflags) + if (MMAN_sp & outflags) { outflags &= ~(MMAN_sp | MMAN_br); - else - print_line(".sp -1v", 0); + if (MMAN_PD & outflags) { + print_line(".PD", 0); + outflags &= ~MMAN_PD; + } + } else if (! (MMAN_PD & outflags)) { + print_line(".PD 0", 0); + outflags |= MMAN_PD; + } outflags |= MMAN_nl; print_word(s); outflags |= newflags; @@ -521,10 +533,13 @@ man_mdoc(void *arg, const struct mdoc *mdoc) meta = mdoc_meta(mdoc); n = mdoc_node(mdoc); - printf(".TH \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"", + printf(".TH \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"\n", meta->title, meta->msec, meta->date, meta->os, meta->vol); + /* Disable hyphenation and if nroff, disable justification. */ + printf(".nh\n.if n .ad l"); + outflags = MMAN_nl | MMAN_Sm; if (0 == fontqueue.size) { fontqueue.size = 8; @@ -1039,7 +1054,7 @@ pre_fl(DECL_ARGS) { font_push('B'); - print_word("-"); + print_word("\\-"); outflags &= ~MMAN_spc; return(1); } @@ -1517,7 +1532,7 @@ pre_ux(DECL_ARGS) if (NULL == n->child) return(0); outflags &= ~MMAN_spc; - print_word("\\~"); + print_word("\\ "); outflags &= ~MMAN_spc; return(1); }