source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Cleanups in -T[x]html: make html_idcat() use the buffer and be
@ 2011-05-17 11:34 kristaps
  0 siblings, 0 replies; only message in thread
From: kristaps @ 2011-05-17 11:34 UTC (permalink / raw)
  To: source

Log Message:
-----------
Cleanups in -T[x]html: make html_idcat() use the buffer and be called
bufcat_id(), then collapse it into a little function without so much
crap.  Next, make bufinit() only be called when we really need to do so,
and not simply before pre/post calls.

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

Revision Data
-------------
Index: html.h
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/html.h,v
retrieving revision 1.43
retrieving revision 1.44
diff -Lhtml.h -Lhtml.h -u -p -r1.43 -r1.44
--- html.h
+++ html.h
@@ -142,18 +142,18 @@ void		  print_text(struct html *, const 
 void		  print_tblclose(struct html *);
 void		  print_tbl(struct html *, const struct tbl_span *);
 
-void		  bufcat_su(struct html *, const char *, 
-			const struct roffsu *);
-void		  buffmt_man(struct html *, 
-			const char *, const char *);
-void		  buffmt_includes(struct html *, const char *);
 void		  bufcat_fmt(struct html *, const char *, ...);
 void		  bufcat(struct html *, const char *);
+void		  bufcat_id(struct html *, const char *);
 void		  bufcat_style(struct html *, 
 			const char *, const char *);
+void		  bufcat_su(struct html *, const char *, 
+			const struct roffsu *);
 void		  bufinit(struct html *);
+void		  buffmt_man(struct html *, 
+			const char *, const char *);
+void		  buffmt_includes(struct html *, const char *);
 
-void		  html_idcat(char *, const char *, int);
 int		  html_strlen(const char *);
 
 __END_DECLS
Index: man_html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_html.c,v
retrieving revision 1.71
retrieving revision 1.72
diff -Lman_html.c -Lman_html.c -u -p -r1.71 -r1.72
--- man_html.c
+++ man_html.c
@@ -157,9 +157,7 @@ print_man_head(MAN_ARGS)
 {
 
 	print_gen_head(h);
-	bufinit(h);
 	bufcat_fmt(h, "%s(%s)", m->title, m->msec);
-
 	print_otag(h, TAG_TITLE, 0, NULL);
 	print_text(h, h->buf);
 }
@@ -184,7 +182,6 @@ print_man_node(MAN_ARGS)
 
 	child = 1;
 	t = h->tags.head;
-	bufinit(h);
 
 	switch (n->type) {
 	case (MAN_ROOT):
@@ -259,8 +256,6 @@ print_man_node(MAN_ARGS)
 	/* This will automatically close out any font scope. */
 	print_stagq(h, t);
 
-	bufinit(h);
-
 	switch (n->type) {
 	case (MAN_ROOT):
 		man_root_post(m, n, mh, h);
@@ -401,6 +396,7 @@ man_br_pre(MAN_ARGS)
 	} else
 		su.scale = 0;
 
+	bufinit(h);
 	bufcat_su(h, "height", &su);
 	PAIR_STYLE_INIT(&tag, h);
 	print_otag(h, TAG_DIV, 1, &tag);
@@ -569,6 +565,7 @@ man_IP_pre(MAN_ARGS)
 	if (MAN_BLOCK == n->type) {
 		print_otag(h, TAG_P, 0, NULL);
 		print_otag(h, TAG_TABLE, 0, NULL);
+		bufinit(h);
 		bufcat_su(h, "width", &su);
 		PAIR_STYLE_INIT(&tag, h);
 		print_otag(h, TAG_COL, 1, &tag);
@@ -604,6 +601,8 @@ man_HP_pre(MAN_ARGS)
 	struct roffsu	 su;
 	const struct man_node *np;
 
+	bufinit(h);
+
 	np = MAN_BLOCK == n->type ? 
 		n->head->child : 
 		n->parent->head->child;
@@ -704,6 +703,7 @@ man_RS_pre(MAN_ARGS)
 	if (n->head->child)
 		a2width(n->head->child, &su);
 
+	bufinit(h);
 	bufcat_su(h, "margin-left", &su);
 	PAIR_STYLE_INIT(&tag, h);
 	print_otag(h, TAG_DIV, 1, &tag);
Index: html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/html.c,v
retrieving revision 1.141
retrieving revision 1.142
diff -Lhtml.c -Lhtml.c -u -p -r1.141 -r1.142
--- html.c
+++ html.c
@@ -713,32 +713,13 @@ bufcat_su(struct html *h, const char *p,
 }
 
 void
-html_idcat(char *dst, const char *src, int sz)
+bufcat_id(struct html *h, const char *src)
 {
-	int		 ssz;
-
-	assert(sz > 2);
 
 	/* Cf. <http://www.w3.org/TR/html4/types.html#h-6.2>. */
 
-	/* We can't start with a number (bah). */
-
-	if ('#' == *dst) {
-		dst++;
-		sz--;
-	}
-	if ('\0' == *dst) {
-		*dst++ = 'x';
-		*dst = '\0';
-		sz--;
-	}
-
-	for ( ; *dst != '\0' && sz; dst++, sz--)
-		/* Jump to end. */ ;
-
-	for ( ; *src != '\0' && sz > 1; src++) {
-		ssz = snprintf(dst, (size_t)sz, "%.2x", *src);
-		sz -= ssz;
-		dst += ssz;
-	}
+	if (0 == h->buflen)
+		bufcat(h, "#x");
+	while ('\0' != *src)
+		bufcat_fmt(h, "%.2x", *src++);
 }
Index: mdoc_html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_html.c,v
retrieving revision 1.167
retrieving revision 1.168
diff -Lmdoc_html.c -Lmdoc_html.c -u -p -r1.167 -r1.168
--- mdoc_html.c
+++ mdoc_html.c
@@ -384,11 +384,8 @@ print_mdoc_head(MDOC_ARGS)
 	bufinit(h);
 	bufcat_fmt(h, "%s(%s)", m->title, m->msec);
 
-	if (m->arch) {
-		bufcat(h, " (");
-		bufcat(h, m->arch);
-		bufcat(h, ")");
-	}
+	if (m->arch)
+		bufcat_fmt(h, " (%s)", m->arch);
 
 	print_otag(h, TAG_TITLE, 0, NULL);
 	print_text(h, h->buf);
@@ -415,7 +412,6 @@ print_mdoc_node(MDOC_ARGS)
 	child = 1;
 	t = h->tags.head;
 
-	bufinit(h);
 	switch (n->type) {
 	case (MDOC_ROOT):
 		child = mdoc_root_pre(m, n, h);
@@ -484,7 +480,6 @@ print_mdoc_node(MDOC_ARGS)
 
 	print_stagq(h, t);
 
-	bufinit(h);
 	switch (n->type) {
 	case (MDOC_ROOT):
 		mdoc_root_post(m, n, h);
@@ -606,7 +601,6 @@ static int
 mdoc_sh_pre(MDOC_ARGS)
 {
 	struct htmlpair	 tag;
-	char		 buf[BUFSIZ];
 
 	if (MDOC_BLOCK == n->type) {
 		PAIR_CLASS_INIT(&tag, "section");
@@ -615,14 +609,14 @@ mdoc_sh_pre(MDOC_ARGS)
 	} else if (MDOC_BODY == n->type)
 		return(1);
 
-	buf[0] = '\0';
+	bufinit(h);
 	for (n = n->child; n; n = n->next) {
-		html_idcat(buf, n->string, BUFSIZ);
+		bufcat_id(h, n->string);
 		if (n->next)
-			html_idcat(buf, " ", BUFSIZ);
+			bufcat_id(h, " ");
 	}
 
-	PAIR_ID_INIT(&tag, buf);
+	PAIR_ID_INIT(&tag, h->buf);
 	print_otag(h, TAG_H1, 1, &tag);
 	return(1);
 }
@@ -633,7 +627,6 @@ static int
 mdoc_ss_pre(MDOC_ARGS)
 {
 	struct htmlpair	 tag;
-	char		 buf[BUFSIZ];
 
 	if (MDOC_BLOCK == n->type) {
 		PAIR_CLASS_INIT(&tag, "subsection");
@@ -642,14 +635,14 @@ mdoc_ss_pre(MDOC_ARGS)
 	} else if (MDOC_BODY == n->type)
 		return(1);
 
-	buf[0] = '\0';
+	bufinit(h);
 	for (n = n->child; n; n = n->next) {
-		html_idcat(buf, n->string, BUFSIZ);
+		bufcat_id(h, n->string);
 		if (n->next)
-			html_idcat(buf, " ", BUFSIZ);
+			bufcat_id(h, " ");
 	}
 
-	PAIR_ID_INIT(&tag, buf);
+	PAIR_ID_INIT(&tag, h->buf);
 	print_otag(h, TAG_H2, 1, &tag);
 	return(1);
 }
@@ -737,6 +730,7 @@ mdoc_nm_pre(MDOC_ARGS)
 		len = html_strlen(m->name);
 
 	SCALE_HS_INIT(&su, (double)len);
+	bufinit(h);
 	bufcat_su(h, "width", &su);
 	PAIR_STYLE_INIT(&tag, h);
 	print_otag(h, TAG_COL, 1, &tag);
@@ -899,6 +893,8 @@ mdoc_it_pre(MDOC_ARGS)
 	assert(lists[type]);
 	PAIR_CLASS_INIT(&tag[0], lists[type]);
 
+	bufinit(h);
+
 	if (MDOC_HEAD == n->type) {
 		switch (type) {
 		case(LIST_bullet):
@@ -999,6 +995,8 @@ mdoc_bl_pre(MDOC_ARGS)
 	struct roffsu	 su;
 	char		 buf[BUFSIZ];
 
+	bufinit(h);
+
 	if (MDOC_BODY == n->type) {
 		if (LIST_column == n->norm->Bl.type)
 			print_otag(h, TAG_TBODY, 0, NULL);
@@ -1018,7 +1016,6 @@ mdoc_bl_pre(MDOC_ARGS)
 
 		for (i = 0; i < (int)n->norm->Bl.ncols; i++) {
 			a2width(n->norm->Bl.cols[i], &su);
-			bufinit(h);
 			if (i < (int)n->norm->Bl.ncols - 1)
 				bufcat_su(h, "width", &su);
 			else
@@ -1147,6 +1144,7 @@ mdoc_d1_pre(MDOC_ARGS)
 		return(1);
 
 	SCALE_VS_INIT(&su, 0);
+	bufinit(h);
 	bufcat_su(h, "margin-top", &su);
 	bufcat_su(h, "margin-bottom", &su);
 	PAIR_STYLE_INIT(&tag[0], h);
@@ -1171,17 +1169,16 @@ static int
 mdoc_sx_pre(MDOC_ARGS)
 {
 	struct htmlpair	 tag[2];
-	char		 buf[BUFSIZ];
 
-	strlcpy(buf, "#", BUFSIZ);
+	bufinit(h);
 	for (n = n->child; n; n = n->next) {
-		html_idcat(buf, n->string, BUFSIZ);
+		bufcat_id(h, n->string);
 		if (n->next)
-			html_idcat(buf, " ", BUFSIZ);
+			bufcat_id(h, " ");
 	}
 
 	PAIR_CLASS_INIT(&tag[0], "link-sec");
-	PAIR_HREF_INIT(&tag[1], buf);
+	PAIR_HREF_INIT(&tag[1], h->buf);
 
 	print_otag(h, TAG_I, 1, tag);
 	print_otag(h, TAG_A, 2, tag);
@@ -1219,7 +1216,8 @@ mdoc_bd_pre(MDOC_ARGS)
 	SCALE_HS_INIT(&su, 0);
 	if (n->norm->Bd.offs)
 		a2offs(n->norm->Bd.offs, &su);
-
+	
+	bufinit(h);
 	bufcat_su(h, "margin-left", &su);
 	PAIR_STYLE_INIT(&tag[0], h);
 
@@ -1438,7 +1436,6 @@ mdoc_fd_pre(MDOC_ARGS)
 			buf[sz - 1] = '\0';
 
 		PAIR_CLASS_INIT(&tag[0], "link-includes");
-		bufinit(h);
 		
 		i = 1;
 		if (h->base_includes) {
@@ -1560,8 +1557,8 @@ mdoc_fn_pre(MDOC_ARGS)
 	print_text(h, "(");
 	h->flags |= HTML_NOSPACE;
 
-	bufinit(h);
 	PAIR_CLASS_INIT(&tag[0], "farg");
+	bufinit(h);
 	bufcat_style(h, "white-space", "nowrap");
 	PAIR_STYLE_INIT(&tag[1], h);
 
@@ -1640,6 +1637,7 @@ mdoc_sp_pre(MDOC_ARGS)
 	} else
 		su.scale = 0;
 
+	bufinit(h);
 	bufcat_su(h, "height", &su);
 	PAIR_STYLE_INIT(&tag, h);
 	print_otag(h, TAG_DIV, 1, &tag);
@@ -1776,10 +1774,8 @@ mdoc_in_pre(MDOC_ARGS)
 		assert(MDOC_TEXT == n->type);
 
 		PAIR_CLASS_INIT(&tag[0], "link-includes");
-		bufinit(h);
 
 		i = 1;
-
 		if (h->base_includes) {
 			buffmt_includes(h, n->string);
 			PAIR_HREF_INIT(&tag[i], h->buf);
@@ -1918,6 +1914,7 @@ mdoc_bf_pre(MDOC_ARGS)
 	 * We want this to be inline-formatted, but needs to be div to
 	 * accept block children. 
 	 */
+	bufinit(h);
 	bufcat_style(h, "display", "inline");
 	SCALE_HS_INIT(&su, 1);
 	/* Needs a left-margin for spacing. */
--
 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:[~2011-05-17 11:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-05-17 11:34 mdocml: Cleanups in -T[x]html: make html_idcat() use the buffer and be 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).