diff options
-rw-r--r-- | html.c | 11 | ||||
-rw-r--r-- | mdoc_html.c | 58 | ||||
-rw-r--r-- | style.css | 8 |
3 files changed, 57 insertions, 20 deletions
@@ -614,14 +614,21 @@ bufcat_su(struct html *h, const char *p, const struct roffsu *su) case (SCALE_PT): u = "pt"; break; + case (SCALE_EM): + u = "em"; + break; case (SCALE_MM): if (0 == (v /= 100)) v = 1; u = "em"; break; + case (SCALE_EN): + u = "ex"; + break; + case (SCALE_BU): + u = "ex"; + break; case (SCALE_VS): - /* FALLTHROUGH */ - case (SCALE_EM): u = "em"; break; default: diff --git a/mdoc_html.c b/mdoc_html.c index 93f370eb..4fb02bde 100644 --- a/mdoc_html.c +++ b/mdoc_html.c @@ -326,8 +326,10 @@ static void a2width(const char *p, struct roffsu *su) { - if ( ! a2roffsu(p, su)) - SCALE_HS_INIT(su, (int)strlen(p)); + if (a2roffsu(p, su)) + return; + su->unit = SCALE_EM; + su->scale = (int)strlen(p); } @@ -346,8 +348,10 @@ a2offs(const char *p, struct roffsu *su) SCALE_HS_INIT(su, INDENT); else if (0 == strcmp(p, "indent-two")) SCALE_HS_INIT(su, INDENT * 2); - else if ( ! a2roffsu(p, su)) - SCALE_HS_INIT(su, (int)strlen(p)); + else if ( ! a2roffsu(p, su)) { + su->unit = SCALE_EM; + su->scale = (int)strlen(p); + } } @@ -673,7 +677,8 @@ mdoc_nd_pre(MDOC_ARGS) if (MDOC_BODY != n->type) return(1); - /* XXX - this can contain block elements! */ + /* XXX: this tag in theory can contain block elements. */ + print_text(h, "\\(em"); PAIR_CLASS_INIT(&tag, "desc-body"); print_otag(h, TAG_SPAN, 1, &tag); @@ -690,7 +695,8 @@ mdoc_op_pre(MDOC_ARGS) if (MDOC_BODY != n->type) return(1); - /* XXX - this can contain block elements! */ + /* XXX: this tag in theory can contain block elements. */ + print_text(h, "\\(lB"); h->flags |= HTML_NOSPACE; PAIR_CLASS_INIT(&tag, "opt"); @@ -859,12 +865,20 @@ mdoc_it_block_pre(MDOC_ARGS, int type, struct roffsu *offs, nn = n->parent->parent; assert(nn->args); - if (MDOC_Column == type) - comp = 0; + /* XXX: see notes in mdoc_it_pre(). */ + + if (MDOC_Column == type) { + /* Don't width-pad on the left. */ + SCALE_HS_INIT(width, 0); + /* Also disallow non-compact. */ + comp = 1; + } if (MDOC_Diag == type) + /* Mandate non-compact with empty prior. */ if (n->prev && NULL == n->prev->body->child) comp = 1; + bufcat_style(h, "clear", "both"); if (offs->scale > 0) bufcat_su(h, "margin-left", offs); if (width->scale > 0) @@ -872,6 +886,8 @@ mdoc_it_block_pre(MDOC_ARGS, int type, struct roffsu *offs, PAIR_STYLE_INIT(&tag, h); + /* Mandate compact following `Ss' and `Sh' starts. */ + for (nn = n; nn && ! comp; nn = nn->parent) { if (MDOC_BLOCK != nn->type) continue; @@ -906,6 +922,10 @@ mdoc_it_body_pre(MDOC_ARGS, int type) case (MDOC_Column): break; default: + /* + * XXX: this tricks CSS into aligning the bodies with + * the right-padding in the head. + */ SCALE_HS_INIT(&su, 2); bufcat_su(h, "margin-left", &su); PAIR_STYLE_INIT(&tag, h); @@ -944,6 +964,8 @@ mdoc_it_head_pre(MDOC_ARGS, int type, struct roffsu *width) bufcat_su(h, "margin-left", width); if (n->next && n->next->child) bufcat_style(h, "float", "left"); + + /* XXX: buffer if we run into body. */ SCALE_HS_INIT(width, 1); bufcat_su(h, "margin-right", width); PAIR_STYLE_INIT(&tag, h); @@ -987,7 +1009,11 @@ mdoc_it_pre(MDOC_ARGS) const struct mdoc_node *bl, *nn; struct roffsu width, offs; - /* This is the `Bl' block parent. */ + /* + * XXX: be very careful in changing anything, here. Lists in + * mandoc have many peculiarities; furthermore, they don't + * translate well into HTML and require a bit of mangling. + */ bl = n->parent->parent; if (MDOC_BLOCK != n->type) @@ -997,6 +1023,8 @@ mdoc_it_pre(MDOC_ARGS) /* Set default width and offset. */ + SCALE_HS_INIT(&offs, 0); + switch (type) { case (MDOC_Enum): /* FALLTHROUGH */ @@ -1012,14 +1040,14 @@ mdoc_it_pre(MDOC_ARGS) break; } - SCALE_HS_INIT(&offs, 0); - /* Get width, offset, and compact arguments. */ for (wp = -1, comp = i = 0; i < (int)bl->args->argc; i++) switch (bl->args->argv[i].arg) { + case (MDOC_Column): + wp = i; /* Save for later. */ + break; case (MDOC_Width): - wp = i; /* Save offset. */ a2width(bl->args->argv[i].value[0], &width); break; case (MDOC_Offset): @@ -1060,7 +1088,7 @@ mdoc_it_pre(MDOC_ARGS) nn = n->parent->child; for (i = 0; nn && nn != n; nn = nn->next, i++) /* Counter... */ ; - if (wp >= 0 && i < (int)bl->args[wp].argv->sz) + if (i < (int)bl->args->argv[wp].sz) a2width(bl->args->argv[wp].value[i], &width); } @@ -1315,12 +1343,13 @@ mdoc_bd_pre(MDOC_ARGS) else bl = n->parent; + SCALE_VS_INIT(&su, 0); + type = comp = 0; for (i = 0; i < (int)bl->args->argc; i++) switch (bl->args->argv[i].arg) { case (MDOC_Offset): a2offs(bl->args->argv[i].value[0], &su); - bufcat_su(h, "margin-left", &su); break; case (MDOC_Compact): comp = 1; @@ -1337,6 +1366,7 @@ mdoc_bd_pre(MDOC_ARGS) } if (MDOC_BLOCK == n->type) { + bufcat_su(h, "margin-left", &su); for (nn = n; nn && ! comp; nn = nn->parent) { if (MDOC_BLOCK != nn->type) continue; @@ -4,14 +4,13 @@ div.body { color: #333333; font-size: smaller; font-family: Verdana, Tahoma, Arial, sans-serif; } -span.sec-head { font-weight: bold; color: blue; } /* Sections (Sh). */ -div.sec-head { } +div.sec-head { font-weight: bold; color: blue; } /* Sections (Sh). */ div.sec-body { } div.sec-block { } -span.ssec-head { font-weight: bold; color: blue; } /* Sub-sections (Ss). */ -div.ssec-head { } +div.ssec-head { font-weight: bold; color: blue; } /* Sub-sections (Ss). */ div.ssec-body { } div.ssec-block { } + span.addr { } /* Address (Ad). */ span.arg { font-style: italic; } /* Command argument (Ar). */ span.author { } /* Author name (An). */ @@ -55,6 +54,7 @@ span.utility { font-weight: bold; } /* Name of utility (Ex). */ span.var { font-weight: bold; } /* Variables (Rv). */ a.link-ext { background: transparent url(external.png) center right no-repeat; padding-right: 12px; }/* Off-site link (Lk). */ +a.link-includes { } /* Include-file link (In). */ a.link-mail { background: transparent url(external.png) center right no-repeat; padding-right: 12px; }/* Mailto links (Mt). */ a.link-man { } /* Manual links (Xr). */ a.link-sec { } /* Section links (Sx). */ |