aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2018-11-26 01:38:23 +0000
committerIngo Schwarze <schwarze@openbsd.org>2018-11-26 01:38:23 +0000
commit61fcffec773b678355426660027d08c645313d1e (patch)
tree1ec144d9d43c25233318b28579c04e1d7a4c0249
parentc262512cda526a647bc53812a01794100b385be9 (diff)
downloadmandoc-61fcffec773b678355426660027d08c645313d1e.tar.gz
mandoc-61fcffec773b678355426660027d08c645313d1e.tar.zst
mandoc-61fcffec773b678355426660027d08c645313d1e.zip
Support more than one style attribute one the same HTML element.
In fact, this is already required when a table uses non-default horizontal and vertical alignment in the same cell.
-rw-r--r--html.c41
-rw-r--r--mandoc_html.312
2 files changed, 35 insertions, 18 deletions
diff --git a/html.c b/html.c
index 63b93c0b..db5c471b 100644
--- a/html.c
+++ b/html.c
@@ -1,4 +1,4 @@
-/* $Id: html.c,v 1.243 2018/11/23 19:17:05 schwarze Exp $ */
+/* $Id: html.c,v 1.244 2018/11/26 01:38:23 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -523,7 +523,7 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
struct tag *t;
const char *attr;
char *arg1, *arg2;
- int tflags;
+ int style_written, tflags;
tflags = htmltags[tag].flags;
@@ -563,7 +563,7 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
va_start(ap, fmt);
- while (*fmt != '\0') {
+ while (*fmt != '\0' && *fmt != 's') {
/* Parse attributes and arguments. */
@@ -579,10 +579,6 @@ 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 *);
@@ -622,19 +618,32 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
fmt++;
break;
default:
- 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, ';');
- }
+ print_encode(h, arg1, NULL, 1);
break;
}
print_byte(h, '"');
}
+
+ style_written = 0;
+ while (*fmt++ == 's') {
+ arg1 = va_arg(ap, char *);
+ arg2 = va_arg(ap, char *);
+ if (arg2 == NULL)
+ continue;
+ print_byte(h, ' ');
+ if (style_written == 0) {
+ print_word(h, "style=\"");
+ style_written = 1;
+ }
+ print_word(h, arg1);
+ print_byte(h, ':');
+ print_byte(h, ' ');
+ print_word(h, arg2);
+ print_byte(h, ';');
+ }
+ if (style_written)
+ print_byte(h, '"');
+
va_end(ap);
/* Accommodate for "well-formed" singleton escaping. */
diff --git a/mandoc_html.3 b/mandoc_html.3
index 5bd9446d..9e922915 100644
--- a/mandoc_html.3
+++ b/mandoc_html.3
@@ -1,4 +1,4 @@
-.\" $Id: mandoc_html.3,v 1.17 2018/06/25 16:54:59 schwarze Exp $
+.\" $Id: mandoc_html.3,v 1.18 2018/11/26 01:38:23 schwarze Exp $
.\"
.\" Copyright (c) 2014, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
.\"
@@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: June 25 2018 $
+.Dd $Mdocdate: November 26 2018 $
.Dt MANDOC_HTML 3
.Os
.Sh NAME
@@ -216,6 +216,14 @@ It requires two
.Va char *
arguments.
The first is the name of the style property, the second its value.
+The name must not be
+.Dv NULL .
+The
+.Cm s
+.Ar fmt
+letter can be repeated, each repetition requiring an additional pair of
+.Va char *
+arguments.
.El
.Pp
.Fn print_otag