aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_man.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2012-11-19 02:14:45 +0000
committerIngo Schwarze <schwarze@openbsd.org>2012-11-19 02:14:45 +0000
commit8711ad899a9dd0e4c4f8845e5862612465264781 (patch)
treeff06525b1ae0da0aa526401eaeff00ec18f66574 /mdoc_man.c
parent96e68bb947ec46849925ed6850e64391bc2d85e3 (diff)
downloadmandoc-8711ad899a9dd0e4c4f8845e5862612465264781.tar.gz
mandoc-8711ad899a9dd0e4c4f8845e5862612465264781.tar.zst
mandoc-8711ad899a9dd0e4c4f8845e5862612465264781.zip
In -Tman mode, support automatic word keeps in the SYNOPSIS
just like in -Tascii mode; requested by millert@. While here, do not escape the blank characters terminating man(7) macros; this is becoming more important as we use more keeps now. Note that -Tman still does not support .nr nS.
Diffstat (limited to 'mdoc_man.c')
-rw-r--r--mdoc_man.c56
1 files changed, 34 insertions, 22 deletions
diff --git a/mdoc_man.c b/mdoc_man.c
index f7463498..acf4f16c 100644
--- a/mdoc_man.c
+++ b/mdoc_man.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_man.c,v 1.45 2012/11/19 02:08:33 schwarze Exp $ */
+/* $Id: mdoc_man.c,v 1.46 2012/11/19 02:14:45 schwarze Exp $ */
/*
* Copyright (c) 2011, 2012 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -251,9 +251,10 @@ static int outflags;
#define MMAN_PP (1 << 5) /* reset indentation etc. */
#define MMAN_Sm (1 << 6) /* horizontal spacing mode */
#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 MMAN_Bk_susp (1 << 8) /* suspend this (after a macro) */
+#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 BL_STACK_MAX 32
@@ -334,7 +335,8 @@ 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 &&
+ ! (MMAN_Bk_susp & outflags))
putchar('\\');
putchar(' ');
if (TPremain)
@@ -351,7 +353,7 @@ print_word(const char *s)
outflags |= MMAN_spc;
else
outflags &= ~MMAN_spc;
- outflags &= ~MMAN_spc_force;
+ outflags &= ~(MMAN_spc_force | MMAN_Bk_susp);
for ( ; *s; s++) {
switch (*s) {
@@ -391,13 +393,11 @@ print_block(const char *s, int newflags)
print_line(".PD", 0);
outflags &= ~MMAN_PD;
}
- } else if (! (MMAN_PD & outflags)) {
- print_line(".PD 0", 0);
- outflags |= MMAN_PD;
- }
+ } else if (! (MMAN_PD & outflags))
+ print_line(".PD 0", MMAN_PD);
outflags |= MMAN_nl;
print_word(s);
- outflags |= newflags;
+ outflags |= MMAN_Bk_susp | newflags;
}
static void
@@ -475,7 +475,7 @@ print_width(const char *v, const struct mdoc_node *child, size_t defsz)
* preserve its indentation.
*/
if (Bl_stack_len && Bl_stack[Bl_stack_len - 1]) {
- print_line(".RS", 0);
+ print_line(".RS", MMAN_Bk_susp);
snprintf(buf, sizeof(buf), "%ldn",
Bl_stack[Bl_stack_len - 1]);
print_word(buf);
@@ -556,7 +556,7 @@ print_node(DECL_ARGS)
const struct mdoc_node *prev, *sub;
const struct manact *act;
int cond, do_sub;
-
+
/*
* Break the line if we were parsed subsequent the current node.
* This makes the page structure be more consistent.
@@ -706,13 +706,25 @@ static int
pre_sect(DECL_ARGS)
{
- if (MDOC_HEAD != n->type)
- return(1);
- outflags |= MMAN_sp;
- print_block(manacts[n->tok].prefix, 0);
- print_word("");
- putchar('\"');
- outflags &= ~MMAN_spc;
+ switch (n->type) {
+ case (MDOC_HEAD):
+ outflags |= MMAN_sp;
+ print_block(manacts[n->tok].prefix, 0);
+ print_word("");
+ putchar('\"');
+ outflags &= ~MMAN_spc;
+ break;
+ case (MDOC_BODY):
+ if (MDOC_Sh == n->tok) {
+ if (MDOC_SYNPRETTY & n->flags)
+ outflags |= MMAN_Bk;
+ else
+ outflags &= ~MMAN_Bk;
+ }
+ break;
+ default:
+ break;
+ }
return(1);
}
@@ -817,7 +829,7 @@ pre_bd(DECL_ARGS)
print_line(".nf", 0);
if (0 == n->norm->Bd.comp && NULL != n->parent->prev)
outflags |= MMAN_sp;
- print_line(".RS", 0);
+ print_line(".RS", MMAN_Bk_susp);
print_offs(n->norm->Bd.offs);
outflags |= MMAN_nl;
return(1);
@@ -841,7 +853,7 @@ post_bd(DECL_ARGS)
*/
if (NULL != n->parent->next &&
Bl_stack_len && Bl_stack[Bl_stack_len - 1]) {
- print_line(".RS", 0);
+ print_line(".RS", MMAN_Bk_susp);
snprintf(buf, sizeof(buf), "%ldn",
Bl_stack[Bl_stack_len - 1]);
print_word(buf);