Print this page
Update to 1.12.3.

*** 1,6 **** ! /* $Id: mdoc_html.c,v 1.182 2011/11/03 20:37:00 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above --- 1,6 ---- ! /* $Id: mdoc_html.c,v 1.186 2013/12/24 20:45:27 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above
*** 33,43 **** #include "mdoc.h" #include "main.h" #define INDENT 5 ! #define MDOC_ARGS const struct mdoc_meta *m, \ const struct mdoc_node *n, \ struct html *h #ifndef MIN #define MIN(a,b) ((/*CONSTCOND*/(a)<(b))?(a):(b)) --- 33,43 ---- #include "mdoc.h" #include "main.h" #define INDENT 5 ! #define MDOC_ARGS const struct mdoc_meta *meta, \ const struct mdoc_node *n, \ struct html *h #ifndef MIN #define MIN(a,b) ((/*CONSTCOND*/(a)<(b))?(a):(b))
*** 258,271 **** "list-ohang", "list-tag" }; void ! html_mdoc(void *arg, const struct mdoc *m) { ! print_mdoc(mdoc_meta(m), mdoc_node(m), (struct html *)arg); putchar('\n'); } /* --- 258,272 ---- "list-ohang", "list-tag" }; void ! html_mdoc(void *arg, const struct mdoc *mdoc) { ! print_mdoc(mdoc_meta(mdoc), mdoc_node(mdoc), ! (struct html *)arg); putchar('\n'); } /*
*** 359,376 **** if ( ! (HTML_FRAGMENT & h->oflags)) { print_gen_decls(h); t = print_otag(h, TAG_HTML, 0, NULL); tt = print_otag(h, TAG_HEAD, 0, NULL); ! print_mdoc_head(m, n, h); print_tagq(h, tt); print_otag(h, TAG_BODY, 0, NULL); print_otag(h, TAG_DIV, 1, &tag); } else t = print_otag(h, TAG_DIV, 1, &tag); ! print_mdoc_nodelist(m, n, h); print_tagq(h, t); } /* ARGSUSED */ --- 360,377 ---- if ( ! (HTML_FRAGMENT & h->oflags)) { print_gen_decls(h); t = print_otag(h, TAG_HTML, 0, NULL); tt = print_otag(h, TAG_HEAD, 0, NULL); ! print_mdoc_head(meta, n, h); print_tagq(h, tt); print_otag(h, TAG_BODY, 0, NULL); print_otag(h, TAG_DIV, 1, &tag); } else t = print_otag(h, TAG_DIV, 1, &tag); ! print_mdoc_nodelist(meta, n, h); print_tagq(h, t); } /* ARGSUSED */
*** 378,391 **** print_mdoc_head(MDOC_ARGS) { print_gen_head(h); bufinit(h); ! bufcat_fmt(h, "%s(%s)", m->title, m->msec); ! if (m->arch) ! bufcat_fmt(h, " (%s)", m->arch); print_otag(h, TAG_TITLE, 0, NULL); print_text(h, h->buf); } --- 379,392 ---- print_mdoc_head(MDOC_ARGS) { print_gen_head(h); bufinit(h); ! bufcat_fmt(h, "%s(%s)", meta->title, meta->msec); ! if (meta->arch) ! bufcat_fmt(h, " (%s)", meta->arch); print_otag(h, TAG_TITLE, 0, NULL); print_text(h, h->buf); }
*** 392,404 **** static void print_mdoc_nodelist(MDOC_ARGS) { ! print_mdoc_node(m, n, h); if (n->next) ! print_mdoc_nodelist(m, n->next, h); } static void print_mdoc_node(MDOC_ARGS) --- 393,405 ---- static void print_mdoc_nodelist(MDOC_ARGS) { ! print_mdoc_node(meta, n, h); if (n->next) ! print_mdoc_nodelist(meta, n->next, h); } static void print_mdoc_node(MDOC_ARGS)
*** 409,419 **** child = 1; t = h->tags.head; switch (n->type) { case (MDOC_ROOT): ! child = mdoc_root_pre(m, n, h); break; case (MDOC_TEXT): /* No tables in this mode... */ assert(NULL == h->tblt); --- 410,420 ---- child = 1; t = h->tags.head; switch (n->type) { case (MDOC_ROOT): ! child = mdoc_root_pre(meta, n, h); break; case (MDOC_TEXT): /* No tables in this mode... */ assert(NULL == h->tblt);
*** 452,491 **** t = h->tags.head; } assert(NULL == h->tblt); if (mdocs[n->tok].pre && ENDBODY_NOT == n->end) ! child = (*mdocs[n->tok].pre)(m, n, h); 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); print_stagq(h, t); switch (n->type) { case (MDOC_ROOT): ! mdoc_root_post(m, n, h); break; case (MDOC_EQN): break; default: if (mdocs[n->tok].post && ENDBODY_NOT == n->end) ! (*mdocs[n->tok].post)(m, n, h); break; } } /* ARGSUSED */ --- 453,488 ---- t = h->tags.head; } assert(NULL == h->tblt); if (mdocs[n->tok].pre && ENDBODY_NOT == n->end) ! child = (*mdocs[n->tok].pre)(meta, n, h); break; } if (HTML_KEEP & h->flags) { ! if (n->prev ? (n->prev->lastline != n->line) : ! (n->parent && n->parent->line != n->line)) { h->flags &= ~HTML_KEEP; h->flags |= HTML_PREKEEP; } } if (child && n->child) ! print_mdoc_nodelist(meta, n->child, h); print_stagq(h, t); switch (n->type) { case (MDOC_ROOT): ! mdoc_root_post(meta, n, h); break; case (MDOC_EQN): break; default: if (mdocs[n->tok].post && ENDBODY_NOT == n->end) ! (*mdocs[n->tok].post)(meta, n, h); break; } } /* ARGSUSED */
*** 507,523 **** tt = print_otag(h, TAG_TR, 0, NULL); PAIR_CLASS_INIT(&tag[0], "foot-date"); print_otag(h, TAG_TD, 1, tag); ! print_text(h, m->date); print_stagq(h, tt); PAIR_CLASS_INIT(&tag[0], "foot-os"); PAIR_INIT(&tag[1], ATTR_ALIGN, "right"); print_otag(h, TAG_TD, 2, tag); ! print_text(h, m->os); print_tagq(h, t); } /* ARGSUSED */ --- 504,520 ---- tt = print_otag(h, TAG_TR, 0, NULL); PAIR_CLASS_INIT(&tag[0], "foot-date"); print_otag(h, TAG_TD, 1, tag); ! print_text(h, meta->date); print_stagq(h, tt); PAIR_CLASS_INIT(&tag[0], "foot-os"); PAIR_INIT(&tag[1], ATTR_ALIGN, "right"); print_otag(h, TAG_TD, 2, tag); ! print_text(h, meta->os); print_tagq(h, t); } /* ARGSUSED */
*** 526,544 **** { struct htmlpair tag[3]; struct tag *t, *tt; char b[BUFSIZ], title[BUFSIZ]; ! strlcpy(b, m->vol, BUFSIZ); ! if (m->arch) { strlcat(b, " (", BUFSIZ); ! strlcat(b, m->arch, BUFSIZ); strlcat(b, ")", BUFSIZ); } ! snprintf(title, BUFSIZ - 1, "%s(%s)", m->title, m->msec); PAIR_SUMMARY_INIT(&tag[0], "Document Header"); PAIR_CLASS_INIT(&tag[1], "head"); PAIR_INIT(&tag[2], ATTR_WIDTH, "100%"); t = print_otag(h, TAG_TABLE, 3, tag); --- 523,541 ---- { struct htmlpair tag[3]; struct tag *t, *tt; char b[BUFSIZ], title[BUFSIZ]; ! strlcpy(b, meta->vol, BUFSIZ); ! if (meta->arch) { strlcat(b, " (", BUFSIZ); ! strlcat(b, meta->arch, BUFSIZ); strlcat(b, ")", BUFSIZ); } ! snprintf(title, BUFSIZ - 1, "%s(%s)", meta->title, meta->msec); PAIR_SUMMARY_INIT(&tag[0], "Document Header"); PAIR_CLASS_INIT(&tag[1], "head"); PAIR_INIT(&tag[2], ATTR_WIDTH, "100%"); t = print_otag(h, TAG_TABLE, 3, tag);
*** 687,703 **** switch (n->type) { case (MDOC_ELEM): synopsis_pre(h, n); PAIR_CLASS_INIT(&tag, "name"); print_otag(h, TAG_B, 1, &tag); ! if (NULL == n->child && m->name) ! print_text(h, m->name); return(1); case (MDOC_HEAD): print_otag(h, TAG_TD, 0, NULL); ! if (NULL == n->child && m->name) ! print_text(h, m->name); return(1); case (MDOC_BODY): print_otag(h, TAG_TD, 0, NULL); return(1); default: --- 684,700 ---- switch (n->type) { case (MDOC_ELEM): synopsis_pre(h, n); PAIR_CLASS_INIT(&tag, "name"); print_otag(h, TAG_B, 1, &tag); ! if (NULL == n->child && meta->name) ! print_text(h, meta->name); return(1); case (MDOC_HEAD): print_otag(h, TAG_TD, 0, NULL); ! if (NULL == n->child && meta->name) ! print_text(h, meta->name); return(1); case (MDOC_BODY): print_otag(h, TAG_TD, 0, NULL); return(1); default:
*** 710,721 **** for (len = 0, n = n->child; n; n = n->next) if (MDOC_TEXT == n->type) len += html_strlen(n->string); ! if (0 == len && m->name) ! len = html_strlen(m->name); SCALE_HS_INIT(&su, (double)len); bufinit(h); bufcat_su(h, "width", &su); PAIR_STYLE_INIT(&tag, h); --- 707,718 ---- for (len = 0, n = n->child; n; n = n->next) if (MDOC_TEXT == n->type) len += html_strlen(n->string); ! if (0 == len && meta->name) ! len = html_strlen(meta->name); SCALE_HS_INIT(&su, (double)len); bufinit(h); bufcat_su(h, "width", &su); PAIR_STYLE_INIT(&tag, h);
*** 979,990 **** int i; struct htmlpair tag[3]; 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); return(1); } --- 976,985 ----
*** 999,1008 **** --- 994,1004 ---- * in terminal mode it auto-sizes to the width of the * screen and we want to preserve that behaviour. */ for (i = 0; i < (int)n->norm->Bl.ncols; i++) { + bufinit(h); a2width(n->norm->Bl.cols[i], &su); if (i < (int)n->norm->Bl.ncols - 1) bufcat_su(h, "width", &su); else bufcat_su(h, "min-width", &su);
*** 1012,1021 **** --- 1008,1018 ---- return(0); } 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); assert(lists[n->norm->Bl.type]);
*** 1223,1233 **** sv = h->flags & HTML_LITERAL; h->flags |= HTML_LITERAL; for (nn = n->child; nn; nn = nn->next) { ! print_mdoc_node(m, nn, h); /* * If the printed node flushes its own line, then we * needn't do it here as well. This is hacky, but the * notion of selective eoln whitespace is pretty dumb * anyway, so don't sweat it. --- 1220,1230 ---- sv = h->flags & HTML_LITERAL; h->flags |= HTML_LITERAL; for (nn = n->child; nn; nn = nn->next) { ! print_mdoc_node(meta, nn, h); /* * If the printed node flushes its own line, then we * needn't do it here as well. This is hacky, but the * notion of selective eoln whitespace is pretty dumb * anyway, so don't sweat it.
*** 2271,2281 **** case (MDOC_Ql): /* FALLTHROUGH */ case (MDOC_So): /* FALLTHROUGH */ case (MDOC_Sq): ! print_text(h, "\\(aq"); break; default: abort(); /* NOTREACHED */ } --- 2268,2278 ---- case (MDOC_Ql): /* FALLTHROUGH */ case (MDOC_So): /* FALLTHROUGH */ case (MDOC_Sq): ! print_text(h, "\\(cq"); break; default: abort(); /* NOTREACHED */ }