=================================================================== RCS file: /cvs/mandoc/mdoc_html.c,v retrieving revision 1.124 retrieving revision 1.131 diff -u -p -r1.124 -r1.131 --- mandoc/mdoc_html.c 2010/12/17 01:02:00 1.124 +++ mandoc/mdoc_html.c 2010/12/19 12:14:36 1.131 @@ -1,4 +1,4 @@ -/* $Id: mdoc_html.c,v 1.124 2010/12/17 01:02:00 kristaps Exp $ */ +/* $Id: mdoc_html.c,v 1.131 2010/12/19 12:14:36 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons * @@ -287,7 +287,7 @@ a2width(const char *p, struct roffsu *su) { if ( ! a2roffsu(p, su, SCALE_MAX)) { - su->unit = SCALE_EM; + su->unit = SCALE_BU; su->scale = (int)strlen(p); } } @@ -299,21 +299,15 @@ a2width(const char *p, struct roffsu *su) static void synopsis_pre(struct html *h, const struct mdoc_node *n) { - struct roffsu su; - struct htmlpair tag; if (NULL == n->prev || ! (MDOC_SYNPRETTY & n->flags)) return; - SCALE_VS_INIT(&su, 1); - bufcat_su(h, "margin-top", &su); - PAIR_STYLE_INIT(&tag, h); - if (n->prev->tok == n->tok && MDOC_Fo != n->tok && MDOC_Ft != n->tok && MDOC_Fn != n->tok) { - print_otag(h, TAG_DIV, 0, NULL); + print_otag(h, TAG_BR, 0, NULL); return; } @@ -327,16 +321,16 @@ synopsis_pre(struct html *h, const struct mdoc_node *n case (MDOC_In): /* FALLTHROUGH */ case (MDOC_Vt): - print_otag(h, TAG_DIV, 1, &tag); + print_otag(h, TAG_P, 0, NULL); break; case (MDOC_Ft): if (MDOC_Fn != n->tok && MDOC_Fo != n->tok) { - print_otag(h, TAG_DIV, 1, &tag); + print_otag(h, TAG_P, 0, NULL); break; } /* FALLTHROUGH */ default: - print_otag(h, TAG_DIV, 0, NULL); + print_otag(h, TAG_BR, 0, NULL); break; } } @@ -360,7 +354,7 @@ a2offs(const char *p, struct roffsu *su) else if (0 == strcmp(p, "indent-two")) SCALE_HS_INIT(su, INDENT * 2); else if ( ! a2roffsu(p, su, SCALE_MAX)) { - su->unit = SCALE_EM; + su->unit = SCALE_BU; su->scale = (int)strlen(p); } } @@ -463,37 +457,31 @@ print_mdoc_node(MDOC_ARGS) } } - /* ARGSUSED */ static void mdoc_root_post(MDOC_ARGS) { - struct htmlpair tag[3]; + struct htmlpair tag[2]; struct tag *t, *tt; char b[DATESIZ]; time2a(m->date, b, DATESIZ); - PAIR_CLASS_INIT(&tag[0], "footer"); - bufcat_style(h, "width", "100%"); - PAIR_STYLE_INIT(&tag[1], h); - PAIR_SUMMARY_INIT(&tag[2], "footer"); + PAIR_CLASS_INIT(&tag[0], "foot"); + PAIR_SUMMARY_INIT(&tag[1], "Document Footer"); + t = print_otag(h, TAG_TABLE, 2, tag); - t = print_otag(h, TAG_TABLE, 3, tag); tt = print_otag(h, TAG_TR, 0, NULL); - bufinit(h); - bufcat_style(h, "width", "50%"); - PAIR_STYLE_INIT(&tag[0], h); + PAIR_CLASS_INIT(&tag[0], "foot-date"); print_otag(h, TAG_TD, 1, tag); + print_text(h, b); print_stagq(h, tt); - bufinit(h); - bufcat_style(h, "width", "50%"); - bufcat_style(h, "text-align", "right"); - PAIR_STYLE_INIT(&tag[0], h); + PAIR_CLASS_INIT(&tag[0], "foot-os"); print_otag(h, TAG_TD, 1, tag); + print_text(h, m->os); print_tagq(h, t); } @@ -517,36 +505,27 @@ mdoc_root_pre(MDOC_ARGS) snprintf(title, BUFSIZ - 1, "%s(%s)", m->title, m->msec); - PAIR_CLASS_INIT(&tag[0], "header"); - bufcat_style(h, "width", "100%"); - PAIR_STYLE_INIT(&tag[1], h); - PAIR_SUMMARY_INIT(&tag[2], "header"); + PAIR_CLASS_INIT(&tag[0], "head"); + PAIR_SUMMARY_INIT(&tag[1], "Document Header"); + t = print_otag(h, TAG_TABLE, 2, tag); - t = print_otag(h, TAG_TABLE, 3, tag); - tt = print_otag(h, TAG_TR, 0, NULL); - bufinit(h); - bufcat_style(h, "width", "10%"); - PAIR_STYLE_INIT(&tag[0], h); + PAIR_CLASS_INIT(&tag[0], "head-ltitle"); print_otag(h, TAG_TD, 1, tag); + print_text(h, title); print_stagq(h, tt); - bufinit(h); - bufcat_style(h, "text-align", "center"); - bufcat_style(h, "white-space", "nowrap"); - bufcat_style(h, "width", "80%"); - PAIR_STYLE_INIT(&tag[0], h); + PAIR_CLASS_INIT(&tag[0], "head-vol"); print_otag(h, TAG_TD, 1, tag); + print_text(h, b); print_stagq(h, tt); - bufinit(h); - bufcat_style(h, "text-align", "right"); - bufcat_style(h, "width", "10%"); - PAIR_STYLE_INIT(&tag[0], h); + PAIR_CLASS_INIT(&tag[0], "head-rtitle"); print_otag(h, TAG_TD, 1, tag); + print_text(h, title); print_tagq(h, t); return(1); @@ -966,7 +945,10 @@ mdoc_bl_pre(MDOC_ARGS) PAIR_STYLE_INIT(&tag[0], h); assert(lists[n->data.Bl->type]); - PAIR_CLASS_INIT(&tag[1], lists[n->data.Bl->type]); + bufinit(h); + bufcat(h, "list "); + bufcat(h, lists[n->data.Bl->type]); + PAIR_INIT(&tag[1], ATTR_CLASS, h->buf); i = 2; /* Set the block's left-hand margin. */ @@ -1021,6 +1003,9 @@ mdoc_ex_pre(MDOC_ARGS) struct tag *t; struct htmlpair tag; + if (n->prev) + print_otag(h, TAG_BR, 0, NULL); + PAIR_CLASS_INIT(&tag, "utility"); print_text(h, "The"); @@ -1079,12 +1064,12 @@ mdoc_d1_pre(MDOC_ARGS) /* BLOCKQUOTE needs a block body. */ - if (MDOC_Dl == n->tok) { - PAIR_CLASS_INIT(&tag[1], "lit"); - print_otag(h, TAG_DIV, 1, tag); - } else - print_otag(h, TAG_DIV, 0, tag); + if (MDOC_Dl == n->tok) + PAIR_CLASS_INIT(&tag[0], "lit display"); + else + PAIR_CLASS_INIT(&tag[0], "display"); + print_otag(h, TAG_DIV, 1, tag); return(1); } @@ -1124,19 +1109,8 @@ mdoc_bd_pre(MDOC_ARGS) if (MDOC_HEAD == n->type) return(0); - SCALE_VS_INIT(&su, 0); - - assert(n->data.Bd); - if (n->data.Bd->offs) - a2offs(n->data.Bd->offs, &su); - - comp = n->data.Bd->comp; - - /* FIXME: -centered, etc. formatting. */ - /* FIXME: does not respect -offset ??? */ - if (MDOC_BLOCK == n->type) { - bufcat_su(h, "margin-left", &su); + comp = n->data.Bd->comp; for (nn = n; nn && ! comp; nn = nn->parent) { if (MDOC_BLOCK != nn->type) continue; @@ -1145,26 +1119,27 @@ mdoc_bd_pre(MDOC_ARGS) if (nn->prev) break; } - if (comp) { - PAIR_STYLE_INIT(&tag[0], h); - print_otag(h, TAG_DIV, 1, tag); - return(1); - } - SCALE_VS_INIT(&su, 1); - bufcat_su(h, "margin-top", &su); - PAIR_STYLE_INIT(&tag[0], h); - print_otag(h, TAG_DIV, 1, tag); + if ( ! comp) + print_otag(h, TAG_P, 0, NULL); return(1); } + SCALE_HS_INIT(&su, 0); + if (n->data.Bd->offs) + a2offs(n->data.Bd->offs, &su); + + bufcat_su(h, "margin-left", &su); + PAIR_STYLE_INIT(&tag[0], h); + if (DISP_unfilled != n->data.Bd->type && - DISP_literal != n->data.Bd->type) + DISP_literal != n->data.Bd->type) { + PAIR_CLASS_INIT(&tag[1], "display"); + print_otag(h, TAG_DIV, 2, tag); return(1); + } - PAIR_CLASS_INIT(&tag[0], "lit"); - bufcat_style(h, "white-space", "pre"); - PAIR_STYLE_INIT(&tag[1], h); - print_otag(h, TAG_DIV, 2, tag); + PAIR_CLASS_INIT(&tag[1], "lit display"); + print_otag(h, TAG_PRE, 2, tag); for (nn = n->child; nn; nn = nn->next) { print_mdoc_node(m, nn, h); @@ -1196,7 +1171,9 @@ mdoc_bd_pre(MDOC_ARGS) } if (nn->next && nn->next->line == nn->line) continue; - print_text(h, "\n"); + else if (nn->next) + print_text(h, "\n"); + h->flags |= HTML_NOSPACE; } @@ -1665,7 +1642,9 @@ mdoc_rv_pre(MDOC_ARGS) struct htmlpair tag; struct tag *t; - print_otag(h, TAG_DIV, 0, NULL); + if (n->prev) + print_otag(h, TAG_BR, 0, NULL); + print_text(h, "The"); for (nn = n->child; nn; nn = nn->next) { @@ -1861,8 +1840,9 @@ mdoc_lb_pre(MDOC_ARGS) { struct htmlpair tag; - if (SEC_LIBRARY == n->sec && MDOC_LINE & n->flags) - print_otag(h, TAG_DIV, 0, NULL); + if (SEC_LIBRARY == n->sec && MDOC_LINE & n->flags && n->prev) + print_otag(h, TAG_BR, 0, NULL); + PAIR_CLASS_INIT(&tag, "lib"); print_otag(h, TAG_SPAN, 1, &tag); return(1); @@ -1968,7 +1948,8 @@ mdoc_bk_pre(MDOC_ARGS) case (MDOC_HEAD): return(0); case (MDOC_BODY): - h->flags |= HTML_PREKEEP; + if (n->parent->args || 0 == n->prev->nchild) + h->flags |= HTML_PREKEEP; break; default: abort();