summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--html.c155
-rw-r--r--html.h1
-rw-r--r--mandoc_html.331
-rw-r--r--mdoc_html.c5
-rw-r--r--out.h5
5 files changed, 22 insertions, 175 deletions
diff --git a/html.c b/html.c
index 9d73fc7a..267221cd 100644
--- a/html.c
+++ b/html.c
@@ -104,19 +104,6 @@ static const struct htmldata htmltags[TAG_MAX] = {
{"mover", 0},
};
-static const char *const roffscales[SCALE_MAX] = {
- "cm", /* SCALE_CM */
- "in", /* SCALE_IN */
- "pc", /* SCALE_PC */
- "pt", /* SCALE_PT */
- "em", /* SCALE_EM */
- "em", /* SCALE_MM */
- "ex", /* SCALE_EN */
- "ex", /* SCALE_BU */
- "em", /* SCALE_VS */
- "ex", /* SCALE_FS */
-};
-
/* Avoid duplicate HTML id= attributes. */
static struct ohash id_unique;
@@ -323,57 +310,6 @@ html_make_id(const struct roff_node *n, int unique)
return buf;
}
-int
-html_strlen(const char *cp)
-{
- size_t rsz;
- int skip, sz;
-
- /*
- * Account for escaped sequences within string length
- * calculations. This follows the logic in term_strlen() as we
- * must calculate the width of produced strings.
- * Assume that characters are always width of "1". This is
- * hacky, but it gets the job done for approximation of widths.
- */
-
- sz = 0;
- skip = 0;
- while (1) {
- rsz = strcspn(cp, "\\");
- if (rsz) {
- cp += rsz;
- if (skip) {
- skip = 0;
- rsz--;
- }
- sz += rsz;
- }
- if ('\0' == *cp)
- break;
- cp++;
- switch (mandoc_escape(&cp, NULL, NULL)) {
- case ESCAPE_ERROR:
- return sz;
- case ESCAPE_UNICODE:
- case ESCAPE_NUMBERED:
- case ESCAPE_SPECIAL:
- case ESCAPE_OVERSTRIKE:
- if (skip)
- skip = 0;
- else
- sz++;
- break;
- case ESCAPE_SKIPCHAR:
- skip = 1;
- break;
- default:
- break;
- }
- }
- return sz;
-}
-
static int
print_escape(struct html *h, char c)
{
@@ -553,13 +489,10 @@ struct tag *
print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
{
va_list ap;
- struct roffsu *su;
- char numbuf[16];
struct tag *t;
const char *attr;
char *arg1, *arg2;
- double v;
- int have_style, tflags;
+ int tflags;
tflags = htmltags[tag].flags;
@@ -599,17 +532,12 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
va_start(ap, fmt);
- have_style = 0;
while (*fmt != '\0') {
- if (*fmt == 's') {
- have_style = 1;
- fmt++;
- break;
- }
- /* Parse a non-style attribute and its arguments. */
+ /* Parse attributes and arguments. */
arg1 = va_arg(ap, char *);
+ arg2 = NULL;
switch (*fmt++) {
case 'c':
attr = "class";
@@ -620,6 +548,10 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
case 'i':
attr = "id";
break;
+ case 's':
+ attr = "style";
+ arg2 = va_arg(ap, char *);
+ break;
case '?':
attr = arg1;
arg1 = va_arg(ap, char *);
@@ -627,13 +559,12 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
default:
abort();
}
- arg2 = NULL;
if (*fmt == 'M')
arg2 = va_arg(ap, char *);
if (arg1 == NULL)
continue;
- /* Print the non-style attributes. */
+ /* Print the attributes. */
print_byte(h, ' ');
print_word(h, attr);
@@ -660,71 +591,19 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
fmt++;
break;
default:
- print_encode(h, arg1, NULL, 1);
+ if (arg2 == NULL)
+ print_encode(h, arg1, NULL, 1);
+ else {
+ print_word(h, arg1);
+ print_byte(h, ':');
+ print_byte(h, ' ');
+ print_word(h, arg2);
+ print_byte(h, ';');
+ }
break;
}
print_byte(h, '"');
}
-
- /* Print out styles. */
-
- while (*fmt != '\0') {
- arg1 = NULL;
- su = NULL;
-
- /* First letter: input argument type. */
-
- switch (*fmt++) {
- case 's':
- arg1 = va_arg(ap, char *);
- break;
- case 'u':
- su = va_arg(ap, struct roffsu *);
- break;
- default:
- abort();
- }
-
- /* Second letter: style name. */
-
- switch (*fmt++) {
- case 'h':
- attr = "height";
- break;
- case '?':
- attr = arg1;
- arg1 = va_arg(ap, char *);
- break;
- default:
- abort();
- }
- if (su == NULL && arg1 == NULL)
- continue;
-
- if (have_style == 1)
- print_word(h, " style=\"");
- else
- print_byte(h, ' ');
- print_word(h, attr);
- print_byte(h, ':');
- print_byte(h, ' ');
- if (su != NULL) {
- v = su->scale;
- if (su->unit == SCALE_MM && (v /= 100.0) == 0.0)
- v = 1.0;
- else if (su->unit == SCALE_BU)
- v /= 24.0;
- (void)snprintf(numbuf, sizeof(numbuf), "%.2f", v);
- print_word(h, numbuf);
- print_word(h, roffscales[su->unit]);
- } else
- print_word(h, arg1);
- print_byte(h, ';');
- have_style = 2;
- }
- if (have_style == 2)
- print_byte(h, '"');
-
va_end(ap);
/* Accommodate for "well-formed" singleton escaping. */
diff --git a/html.h b/html.h
index 06d56fe9..84d88dc9 100644
--- a/html.h
+++ b/html.h
@@ -132,4 +132,3 @@ void print_paragraph(struct html *);
void print_endline(struct html *);
char *html_make_id(const struct roff_node *, int);
-int html_strlen(const char *);
diff --git a/mandoc_html.3 b/mandoc_html.3
index 31547ad4..2f3be54c 100644
--- a/mandoc_html.3
+++ b/mandoc_html.3
@@ -212,35 +212,10 @@ Print a
.Cm style
attribute.
If present, it must be the last format letter.
-In contrast to the other format letters, this one does not yet
-print the value and does not take an argument.
-Instead, the rest of the format string consists of pairs of
-argument type letters and style name letters.
-.El
-.Pp
-Argument type letters each require one argument as follows:
-.Bl -tag -width 1n -offset indent
-.It Cm s
-Requires one
-.Vt char *
-argument, used as a style value.
-.It Cm u
-Requires one
-.Vt struct roffsu *
-argument, used as a length.
-.El
-.Pp
-Style name letters decide what to do with the preceding argument:
-.Bl -tag -width 1n -offset indent
-.It Cm \&?
-The special pair
-.Cm s?
-requires two
-.Vt char *
+It requires two
+.Va char *
arguments.
-The first is the style name, the second its value.
-The style name must not be
-.Dv NULL .
+The first is the name of the style property, the second its value.
.El
.Pp
.Fn print_otag
diff --git a/mdoc_html.c b/mdoc_html.c
index 6ccda04d..495df583 100644
--- a/mdoc_html.c
+++ b/mdoc_html.c
@@ -719,8 +719,7 @@ mdoc_it_pre(MDOC_ARGS)
break;
case ROFFT_BODY:
if (n->child == NULL) {
- print_otag(h, TAG_DD, "ss?",
- "width", "auto");
+ print_otag(h, TAG_DD, "s", "width", "auto");
print_text(h, "\\ ");
} else
print_otag(h, TAG_DD, "");
@@ -1175,7 +1174,7 @@ mdoc_fn_pre(MDOC_ARGS)
for (n = n->child->next; n; n = n->next) {
if (NODE_SYNPRETTY & n->flags)
- t = print_otag(h, TAG_VAR, "cTss?", "Fa",
+ t = print_otag(h, TAG_VAR, "cTs", "Fa",
"white-space", "nowrap");
else
t = print_otag(h, TAG_VAR, "cT", "Fa");
diff --git a/out.h b/out.h
index 14e7ddc7..c9042641 100644
--- a/out.h
+++ b/out.h
@@ -54,11 +54,6 @@ struct rofftbl {
void *arg; /* passed to sulen, slen, and len */
};
-#define SCALE_VS_INIT(p, v) \
- do { (p)->unit = SCALE_VS; \
- (p)->scale = (v); } \
- while (/* CONSTCOND */ 0)
-
#define SCALE_HS_INIT(p, v) \
do { (p)->unit = SCALE_EN; \
(p)->scale = (v); } \