source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: implement -Tman .Sm; OpenBSD rev.
@ 2012-07-07 13:53 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2012-07-07 13:53 UTC (permalink / raw)
  To: source

Log Message:
-----------
implement -Tman .Sm; OpenBSD rev. 1.9

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.11
retrieving revision 1.12
diff -Lmdoc_man.c -Lmdoc_man.c -u -p -r1.11 -r1.12
--- mdoc_man.c
+++ mdoc_man.c
@@ -18,6 +18,7 @@
 #include "config.h"
 #endif
 
+#include <assert.h>
 #include <stdio.h>
 #include <string.h>
 
@@ -32,6 +33,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 */
 };
@@ -64,6 +66,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);
@@ -168,7 +171,7 @@ static	const struct manact manacts[MDOC_
 	{ 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 */
@@ -229,8 +232,8 @@ print_word(struct mman *mm, const char *
 	 * 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) {
@@ -298,6 +301,7 @@ man_mdoc(void *arg, const struct mdoc *m
 
 	memset(&mm, 0, sizeof(struct mman));
 
+	mm.mode_space = 1;
 	mm.need_nl = 1;
 	print_node(m, n, &mm);
 	putchar('\n');
@@ -628,6 +632,18 @@ pre_pp(DECL_ARGS)
 		print_word(mm, ".PP");
 	mm->need_nl = 1;
 	return(MDOC_Rs == n->tok);
+}
+
+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
--
 To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2012-07-07 13:53 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-07 13:53 mdocml: implement -Tman .Sm; OpenBSD rev schwarze

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).