From ed7b34daec8f64113849ed8b3d816f617cdf3983 Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Tue, 17 May 2011 11:34:31 +0000 Subject: 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. --- html.c | 31 ++++++------------------------- html.h | 14 +++++++------- man_html.c | 12 ++++++------ mdoc_html.c | 55 ++++++++++++++++++++++++++----------------------------- 4 files changed, 45 insertions(+), 67 deletions(-) diff --git a/html.c b/html.c index a32b4d9a..5203abdb 100644 --- a/html.c +++ b/html.c @@ -1,4 +1,4 @@ -/* $Id: html.c,v 1.141 2011/05/17 11:19:45 kristaps Exp $ */ +/* $Id: html.c,v 1.142 2011/05/17 11:34:31 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2011 Ingo Schwarze @@ -713,32 +713,13 @@ bufcat_su(struct html *h, const char *p, const struct roffsu *su) } void -html_idcat(char *dst, const char *src, int sz) +bufcat_id(struct html *h, const char *src) { - int ssz; - - assert(sz > 2); /* Cf. . */ - /* 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++); } diff --git a/html.h b/html.h index 2fc63316..aba635f1 100644 --- a/html.h +++ b/html.h @@ -1,4 +1,4 @@ -/* $Id: html.h,v 1.43 2011/05/17 11:19:45 kristaps Exp $ */ +/* $Id: html.h,v 1.44 2011/05/17 11:34:31 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons * @@ -142,18 +142,18 @@ void print_text(struct html *, const char *); 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 diff --git a/man_html.c b/man_html.c index d9c2cd31..73953ecd 100644 --- a/man_html.c +++ b/man_html.c @@ -1,4 +1,4 @@ -/* $Id: man_html.c,v 1.71 2011/05/17 11:19:45 kristaps Exp $ */ +/* $Id: man_html.c,v 1.72 2011/05/17 11:34:31 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * @@ -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); diff --git a/mdoc_html.c b/mdoc_html.c index b5fc053a..1e766b04 100644 --- a/mdoc_html.c +++ b/mdoc_html.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_html.c,v 1.167 2011/05/17 11:19:45 kristaps Exp $ */ +/* $Id: mdoc_html.c,v 1.168 2011/05/17 11:34:31 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * @@ -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. */ -- cgit v1.2.3-56-ge451