[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mandoc-source
Subject:    mdocml: In -Tman mode, support automatic word keeps in the SYNOPSIS just
From:       schwarze () mdocml ! bsd ! lv
Date:       2012-11-19 2:14:45
Message-ID: 201211190214.qAJ2Ejp7008953 () krisdoz ! my ! domain
[Download RAW message or body]

Log Message:
-----------
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.

Modified Files:
--------------
    mdocml:
        mdoc_man.c

Revision Data
-------------
Index: mdoc_man.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_man.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -Lmdoc_man.c -Lmdoc_man.c -u -p -r1.45 -r1.46
--- mdoc_man.c
+++ mdoc_man.c
@@ -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 
 	 * 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);
--
 To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic