]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_man.c
Use C99 uint32_t, not BSD-style u_int32_t.
[mandoc.git] / mdoc_man.c
index 97b3a78ef464a4f08ec10748b0d3b64f0295a29c..6ee8b3abf45e5781857c765acae3a3261359f3e7 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_man.c,v 1.54 2013/12/24 20:45:27 schwarze Exp $ */
+/*     $Id: mdoc_man.c,v 1.57 2013/12/25 22:00:45 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012, 2013 Ingo Schwarze <schwarze@openbsd.org>
  *
@@ -256,6 +256,7 @@ static      int             outflags;
 #define        MMAN_An_split   (1 << 9)  /* author mode is "split" */
 #define        MMAN_An_nosplit (1 << 10) /* author mode is "nosplit" */
 #define        MMAN_PD         (1 << 11) /* inter-paragraph spacing disabled */
+#define        MMAN_nbrword    (1 << 12) /* do not break the next word */
 
 #define        BL_STACK_MAX    32
 
@@ -364,6 +365,12 @@ print_word(const char *s)
                case (ASCII_HYPH):
                        putchar('-');
                        break;
+               case (' '):
+                       if (MMAN_nbrword & outflags) {
+                               printf("\\ ");
+                               break;
+                       }
+                       /* FALLTHROUGH */
                default:
                        putchar((unsigned char)*s);
                        break;
@@ -371,6 +378,7 @@ print_word(const char *s)
                if (TPremain)
                        TPremain--;
        }
+       outflags &= ~MMAN_nbrword;
 }
 
 static void
@@ -1022,12 +1030,17 @@ post_eo(DECL_ARGS)
 static int
 pre_fa(DECL_ARGS)
 {
+       int      am_Fa;
 
-       if (MDOC_Fa == n->tok)
+       am_Fa = MDOC_Fa == n->tok;
+
+       if (am_Fa)
                n = n->child;
 
        while (NULL != n) {
                font_push('I');
+               if (am_Fa || MDOC_SYNPRETTY & n->flags)
+                       outflags |= MMAN_nbrword;
                print_node(meta, n);
                font_pop();
                if (NULL != (n = n->next))
@@ -1091,6 +1104,9 @@ pre_fn(DECL_ARGS)
        if (NULL == n)
                return(0);
 
+       if (MDOC_SYNPRETTY & n->flags)
+               print_block(".HP 4n", MMAN_nl);
+
        font_push('B');
        print_node(meta, n);
        font_pop();
@@ -1111,7 +1127,7 @@ post_fn(DECL_ARGS)
        print_word(")");
        if (MDOC_SYNPRETTY & n->flags) {
                print_word(";");
-               outflags |= MMAN_br;
+               outflags |= MMAN_PP;
        }
 }
 
@@ -1124,6 +1140,8 @@ pre_fo(DECL_ARGS)
                pre_syn(n);
                break;
        case (MDOC_HEAD):
+               if (MDOC_SYNPRETTY & n->flags)
+                       print_block(".HP 4n", MMAN_nl);
                font_push('B');
                break;
        case (MDOC_BODY):
@@ -1136,7 +1154,7 @@ pre_fo(DECL_ARGS)
        }
        return(1);
 }
-               
+
 static void
 post_fo(DECL_ARGS)
 {