source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Give -T[x]html `Bk -words' capability.
@ 2010-07-06 12:37 kristaps
  0 siblings, 0 replies; only message in thread
From: kristaps @ 2010-07-06 12:37 UTC (permalink / raw)
  To: source

Log Message:
-----------
Give -T[x]html `Bk -words' capability.

Modified Files:
--------------
    mdocml:
        html.c
        html.h
        mdoc_html.c

Revision Data
-------------
Index: html.h
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/html.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -Lhtml.h -Lhtml.h -u -p -r1.24 -r1.25
--- html.h
+++ html.h
@@ -110,7 +110,9 @@ enum	htmltype {
 struct	html {
 	int		  flags;
 #define	HTML_NOSPACE	 (1 << 0)
-#define	HTML_IGNDELIM	 (1 << 2)
+#define	HTML_IGNDELIM	 (1 << 1)
+#define	HTML_KEEP	 (1 << 2)
+#define	HTML_PREKEEP	 (1 << 3)
 	struct tagq	  tags;
 	struct ordq	  ords;
 	void		 *symtab;
Index: html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/html.c,v
retrieving revision 1.104
retrieving revision 1.105
diff -Lhtml.c -Lhtml.c -u -p -r1.104 -r1.105
--- html.c
+++ html.c
@@ -393,8 +393,15 @@ print_otag(struct html *h, enum htmltag 
 		t = NULL;
 
 	if ( ! (HTML_NOSPACE & h->flags))
-		if ( ! (HTML_CLRLINE & htmltags[tag].flags))
-			putchar(' ');
+		if ( ! (HTML_CLRLINE & htmltags[tag].flags)) {
+			/* Manage keeps! */
+			if ( ! (HTML_KEEP & h->flags)) {
+				if (HTML_PREKEEP & h->flags)
+					h->flags |= HTML_KEEP;
+				putchar(' ');
+			} else
+				printf("&#160;");
+		}
 
 	/* Print out the tag name and attributes. */
 
@@ -511,8 +518,15 @@ print_text(struct html *h, const char *w
 			break;
 		}
 
-	if ( ! (h->flags & HTML_NOSPACE))
-		putchar(' ');
+	if ( ! (HTML_NOSPACE & h->flags)) {
+		/* Manage keeps! */
+		if ( ! (HTML_KEEP & h->flags)) {
+			if (HTML_PREKEEP & h->flags)
+				h->flags |= HTML_KEEP;
+			putchar(' ');
+		} else
+			printf("&#160;");
+	}
 
 	assert(word);
 	if ( ! print_encode(h, word, 0))
Index: mdoc_html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_html.c,v
retrieving revision 1.93
retrieving revision 1.94
diff -Lmdoc_html.c -Lmdoc_html.c -u -p -r1.93 -r1.94
--- mdoc_html.c
+++ mdoc_html.c
@@ -73,6 +73,8 @@ static	int		  mdoc_aq_pre(MDOC_ARGS);
 static	int		  mdoc_ar_pre(MDOC_ARGS);
 static	int		  mdoc_bd_pre(MDOC_ARGS);
 static	int		  mdoc_bf_pre(MDOC_ARGS);
+static	void		  mdoc_bk_post(MDOC_ARGS);
+static	int		  mdoc_bk_pre(MDOC_ARGS);
 static	void		  mdoc_bl_post(MDOC_ARGS);
 static	int		  mdoc_bl_pre(MDOC_ARGS);
 static	void		  mdoc_bq_post(MDOC_ARGS);
@@ -237,7 +239,7 @@ static	const struct htmlmdoc mdocs[MDOC_
 	{NULL, NULL}, /* Fc */ 
 	{mdoc_op_pre, mdoc_op_post}, /* Oo */
 	{NULL, NULL}, /* Oc */
-	{NULL, NULL}, /* Bk */
+	{mdoc_bk_pre, mdoc_bk_post}, /* Bk */
 	{NULL, NULL}, /* Ek */
 	{mdoc_bt_pre, NULL}, /* Bt */
 	{NULL, NULL}, /* Hf */
@@ -442,6 +444,18 @@ print_mdoc_node(MDOC_ARGS)
 		break;
 	}
 
+	if (HTML_KEEP & h->flags) {
+		if (n->prev && n->prev->line != n->line) {
+			h->flags &= ~HTML_KEEP;
+			h->flags |= HTML_PREKEEP;
+		} else if (NULL == n->prev) {
+			if (n->parent && n->parent->line != n->line) {
+				h->flags &= ~HTML_KEEP;
+				h->flags |= HTML_PREKEEP;
+			}
+		}
+	}
+
 	if (child && n->child)
 		print_mdoc_nodelist(m, n->child, h);
 
@@ -2226,4 +2240,36 @@ mdoc__x_post(MDOC_ARGS)
 
 	h->flags |= HTML_NOSPACE;
 	print_text(h, n->next ? "," : ".");
+}
+
+
+/* ARGSUSED */
+static int
+mdoc_bk_pre(MDOC_ARGS)
+{
+
+	switch (n->type) {
+	case (MDOC_BLOCK):
+		break;
+	case (MDOC_HEAD):
+		return(0);
+	case (MDOC_BODY):
+		h->flags |= HTML_PREKEEP;
+		break;
+	default:
+		abort();
+		/* NOTREACHED */
+	}
+
+	return(1);
+}
+
+
+/* ARGSUSED */
+static void
+mdoc_bk_post(MDOC_ARGS)
+{
+
+	if (MDOC_BODY == n->type)
+		h->flags &= ~(HTML_KEEP | HTML_PREKEEP);
 }
--
 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:[~2010-07-06 12:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-07-06 12:37 mdocml: Give -T[x]html `Bk -words' capability kristaps

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).