summaryrefslogtreecommitdiffstats
path: root/man_html.c
diff options
context:
space:
mode:
Diffstat (limited to 'man_html.c')
-rw-r--r--man_html.c137
1 files changed, 46 insertions, 91 deletions
diff --git a/man_html.c b/man_html.c
index ce4ef0da..a1163627 100644
--- a/man_html.c
+++ b/man_html.c
@@ -1,7 +1,7 @@
/* $Id$ */
/*
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -147,24 +147,22 @@ void
html_man(void *arg, const struct roff_man *man)
{
struct mhtml mh;
- struct htmlpair tag;
struct html *h;
struct tag *t, *tt;
memset(&mh, 0, sizeof(mh));
- PAIR_CLASS_INIT(&tag, "mandoc");
h = (struct html *)arg;
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);
+ t = print_otag(h, TAG_HTML, "");
+ tt = print_otag(h, TAG_HEAD, "");
print_man_head(&man->meta, man->first, &mh, h);
print_tagq(h, tt);
- print_otag(h, TAG_BODY, 0, NULL);
- print_otag(h, TAG_DIV, 1, &tag);
+ print_otag(h, TAG_BODY, "");
+ print_otag(h, TAG_DIV, "c", "mandoc");
} else
- t = print_otag(h, TAG_DIV, 1, &tag);
+ t = print_otag(h, TAG_DIV, "c", "mandoc");
print_man_nodelist(&man->meta, man->first, &mh, h);
print_tagq(h, t);
@@ -178,8 +176,9 @@ print_man_head(MAN_ARGS)
print_gen_head(h);
assert(man->title);
assert(man->msec);
+ bufinit(h);
bufcat_fmt(h, "%s(%s)", man->title, man->msec);
- print_otag(h, TAG_TITLE, 0, NULL);
+ print_otag(h, TAG_TITLE, "");
print_text(h, h->buf);
}
@@ -214,7 +213,7 @@ print_man_node(MAN_ARGS)
if (n->flags & NODE_LINE && (*n->string == ' ' ||
(n->prev != NULL && mh->fl & MANH_LITERAL &&
! (h->flags & HTML_NONEWLINE))))
- print_otag(h, TAG_BR, 0, NULL);
+ print_otag(h, TAG_BR, "");
print_text(h, n->string);
return;
case ROFFT_EQN:
@@ -288,7 +287,6 @@ a2width(const struct roff_node *n, struct roffsu *su)
static void
man_root_pre(MAN_ARGS)
{
- struct htmlpair tag;
struct tag *t, *tt;
char *title;
@@ -296,26 +294,20 @@ man_root_pre(MAN_ARGS)
assert(man->msec);
mandoc_asprintf(&title, "%s(%s)", man->title, man->msec);
- PAIR_CLASS_INIT(&tag, "head");
- t = print_otag(h, TAG_TABLE, 1, &tag);
-
- print_otag(h, TAG_TBODY, 0, NULL);
-
- tt = print_otag(h, TAG_TR, 0, NULL);
+ t = print_otag(h, TAG_TABLE, "c", "head");
+ print_otag(h, TAG_TBODY, "");
+ tt = print_otag(h, TAG_TR, "");
- PAIR_CLASS_INIT(&tag, "head-ltitle");
- print_otag(h, TAG_TD, 1, &tag);
+ print_otag(h, TAG_TD, "c", "head-ltitle");
print_text(h, title);
print_stagq(h, tt);
- PAIR_CLASS_INIT(&tag, "head-vol");
- print_otag(h, TAG_TD, 1, &tag);
+ print_otag(h, TAG_TD, "c", "head-vol");
if (NULL != man->vol)
print_text(h, man->vol);
print_stagq(h, tt);
- PAIR_CLASS_INIT(&tag, "head-rtitle");
- print_otag(h, TAG_TD, 1, &tag);
+ print_otag(h, TAG_TD, "c", "head-rtitle");
print_text(h, title);
print_tagq(h, t);
free(title);
@@ -324,24 +316,16 @@ man_root_pre(MAN_ARGS)
static void
man_root_post(MAN_ARGS)
{
- struct htmlpair tag;
struct tag *t, *tt;
- PAIR_CLASS_INIT(&tag, "foot");
- t = print_otag(h, TAG_TABLE, 1, &tag);
-
- tt = print_otag(h, TAG_TR, 0, NULL);
-
- PAIR_CLASS_INIT(&tag, "foot-date");
- print_otag(h, TAG_TD, 1, &tag);
+ t = print_otag(h, TAG_TABLE, "c", "foot");
+ tt = print_otag(h, TAG_TR, "");
- assert(man->date);
+ print_otag(h, TAG_TD, "c", "foot-date");
print_text(h, man->date);
print_stagq(h, tt);
- PAIR_CLASS_INIT(&tag, "foot-os");
- print_otag(h, TAG_TD, 1, &tag);
-
+ print_otag(h, TAG_TD, "c", "foot-os");
if (man->os)
print_text(h, man->os);
print_tagq(h, t);
@@ -352,7 +336,6 @@ static int
man_br_pre(MAN_ARGS)
{
struct roffsu su;
- struct htmlpair tag;
SCALE_VS_INIT(&su, 1);
@@ -363,10 +346,7 @@ man_br_pre(MAN_ARGS)
} else
su.scale = 0.0;
- bufinit(h);
- bufcat_su(h, "height", &su);
- PAIR_STYLE_INIT(&tag, h);
- print_otag(h, TAG_DIV, 1, &tag);
+ print_otag(h, TAG_DIV, "suh", &su);
/* So the div isn't empty: */
print_text(h, "\\~");
@@ -377,17 +357,14 @@ man_br_pre(MAN_ARGS)
static int
man_SH_pre(MAN_ARGS)
{
- struct htmlpair tag;
-
if (n->type == ROFFT_BLOCK) {
mh->fl &= ~MANH_LITERAL;
- PAIR_CLASS_INIT(&tag, "section");
- print_otag(h, TAG_DIV, 1, &tag);
+ print_otag(h, TAG_DIV, "c", "section");
return 1;
} else if (n->type == ROFFT_BODY)
return 1;
- print_otag(h, TAG_H1, 0, NULL);
+ print_otag(h, TAG_H1, "");
return 1;
}
@@ -400,7 +377,7 @@ man_alt_pre(MAN_ARGS)
struct tag *t;
if ((savelit = mh->fl & MANH_LITERAL))
- print_otag(h, TAG_BR, 0, NULL);
+ print_otag(h, TAG_BR, "");
mh->fl &= ~MANH_LITERAL;
@@ -433,7 +410,7 @@ man_alt_pre(MAN_ARGS)
h->flags |= HTML_NOSPACE;
if (TAG_MAX != fp)
- t = print_otag(h, fp, 0, NULL);
+ t = print_otag(h, fp, "");
print_man_node(man, nn, mh, h);
@@ -450,27 +427,23 @@ man_alt_pre(MAN_ARGS)
static int
man_SM_pre(MAN_ARGS)
{
-
- print_otag(h, TAG_SMALL, 0, NULL);
+ print_otag(h, TAG_SMALL, "");
if (MAN_SB == n->tok)
- print_otag(h, TAG_B, 0, NULL);
+ print_otag(h, TAG_B, "");
return 1;
}
static int
man_SS_pre(MAN_ARGS)
{
- struct htmlpair tag;
-
if (n->type == ROFFT_BLOCK) {
mh->fl &= ~MANH_LITERAL;
- PAIR_CLASS_INIT(&tag, "subsection");
- print_otag(h, TAG_DIV, 1, &tag);
+ print_otag(h, TAG_DIV, "c", "subsection");
return 1;
} else if (n->type == ROFFT_BODY)
return 1;
- print_otag(h, TAG_H2, 0, NULL);
+ print_otag(h, TAG_H2, "");
return 1;
}
@@ -492,16 +465,16 @@ man_IP_pre(MAN_ARGS)
const struct roff_node *nn;
if (n->type == ROFFT_BODY) {
- print_otag(h, TAG_DD, 0, NULL);
+ print_otag(h, TAG_DD, "");
return 1;
} else if (n->type != ROFFT_HEAD) {
- print_otag(h, TAG_DL, 0, NULL);
+ print_otag(h, TAG_DL, "");
return 1;
}
/* FIXME: width specification. */
- print_otag(h, TAG_DT, 0, NULL);
+ print_otag(h, TAG_DT, "");
/* For IP, only print the first header element. */
@@ -526,8 +499,7 @@ man_IP_pre(MAN_ARGS)
static int
man_HP_pre(MAN_ARGS)
{
- struct htmlpair tag[2];
- struct roffsu su;
+ struct roffsu sum, sui;
const struct roff_node *np;
if (n->type == ROFFT_HEAD)
@@ -537,18 +509,14 @@ man_HP_pre(MAN_ARGS)
np = n->head->child;
- if (NULL == np || ! a2width(np, &su))
- SCALE_HS_INIT(&su, INDENT);
+ if (np == NULL || !a2width(np, &sum))
+ SCALE_HS_INIT(&sum, INDENT);
- bufinit(h);
+ sui.unit = sum.unit;
+ sui.scale = -sum.scale;
print_bvspace(h, n);
- bufcat_su(h, "margin-left", &su);
- su.scale = -su.scale;
- bufcat_su(h, "text-indent", &su);
- PAIR_STYLE_INIT(&tag[0], h);
- PAIR_CLASS_INIT(&tag[1], "spacer");
- print_otag(h, TAG_DIV, 2, tag);
+ print_otag(h, TAG_DIV, "csului", "spacer", &sum, &sui);
return 1;
}
@@ -556,22 +524,20 @@ static int
man_OP_pre(MAN_ARGS)
{
struct tag *tt;
- struct htmlpair tag;
print_text(h, "[");
h->flags |= HTML_NOSPACE;
- PAIR_CLASS_INIT(&tag, "opt");
- tt = print_otag(h, TAG_SPAN, 1, &tag);
+ tt = print_otag(h, TAG_SPAN, "c", "opt");
if (NULL != (n = n->child)) {
- print_otag(h, TAG_B, 0, NULL);
+ print_otag(h, TAG_B, "");
print_text(h, n->string);
}
print_stagq(h, tt);
if (NULL != n && NULL != n->next) {
- print_otag(h, TAG_I, 0, NULL);
+ print_otag(h, TAG_I, "");
print_text(h, n->next->string);
}
@@ -584,16 +550,14 @@ man_OP_pre(MAN_ARGS)
static int
man_B_pre(MAN_ARGS)
{
-
- print_otag(h, TAG_B, 0, NULL);
+ print_otag(h, TAG_B, "");
return 1;
}
static int
man_I_pre(MAN_ARGS)
{
-
- print_otag(h, TAG_I, 0, NULL);
+ print_otag(h, TAG_I, "");
return 1;
}
@@ -602,7 +566,7 @@ man_literal_pre(MAN_ARGS)
{
if (MAN_fi == n->tok || MAN_EE == n->tok) {
- print_otag(h, TAG_BR, 0, NULL);
+ print_otag(h, TAG_BR, "");
mh->fl &= ~MANH_LITERAL;
} else
mh->fl |= MANH_LITERAL;
@@ -613,8 +577,7 @@ man_literal_pre(MAN_ARGS)
static int
man_in_pre(MAN_ARGS)
{
-
- print_otag(h, TAG_BR, 0, NULL);
+ print_otag(h, TAG_BR, "");
return 0;
}
@@ -628,7 +591,6 @@ man_ign_pre(MAN_ARGS)
static int
man_RS_pre(MAN_ARGS)
{
- struct htmlpair tag;
struct roffsu su;
if (n->type == ROFFT_HEAD)
@@ -640,25 +602,18 @@ 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);
+ print_otag(h, TAG_DIV, "sul", &su);
return 1;
}
static int
man_UR_pre(MAN_ARGS)
{
- struct htmlpair tag[2];
-
n = n->child;
assert(n->type == ROFFT_HEAD);
if (n->child != NULL) {
assert(n->child->type == ROFFT_TEXT);
- PAIR_CLASS_INIT(&tag[0], "link-ext");
- PAIR_HREF_INIT(&tag[1], n->child->string);
- print_otag(h, TAG_A, 2, tag);
+ print_otag(h, TAG_A, "ch", "link-ext", n->child->string);
}
assert(n->next->type == ROFFT_BODY);