summaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_html.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-10-07 14:39:00 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-10-07 14:39:00 +0000
commitf5e75ed5519b5b47bb34547ca91bbac10c5c5981 (patch)
tree78d8116839450f6448f282582941456eef5eee53 /mdoc_html.c
parent3876e08da8b548350ddd22a8bc8e6fe8076ecd45 (diff)
downloadmandoc-f5e75ed5519b5b47bb34547ca91bbac10c5c5981.tar.gz
mandoc-f5e75ed5519b5b47bb34547ca91bbac10c5c5981.tar.zst
mandoc-f5e75ed5519b5b47bb34547ca91bbac10c5c5981.zip
Made default string units (-Thtml -mdoc) to use `m' and not `n' scaling (better more than less).
Fixed -column widths for -Thtml -mdoc. Fixed left-hand margin padding for -Thtml -mdoc.
Diffstat (limited to 'mdoc_html.c')
-rw-r--r--mdoc_html.c60
1 files changed, 45 insertions, 15 deletions
diff --git a/mdoc_html.c b/mdoc_html.c
index e2bb3d3c..0a9726d9 100644
--- a/mdoc_html.c
+++ b/mdoc_html.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_html.c,v 1.23 2009/10/07 12:35:24 kristaps Exp $ */
+/* $Id: mdoc_html.c,v 1.24 2009/10/07 14:39:00 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -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;