summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@cvs.openbsd.org>2017-06-23 02:31:40 +0000
committerIngo Schwarze <schwarze@cvs.openbsd.org>2017-06-23 02:31:40 +0000
commitea8977dc21d1c4884ad8062bda9355ffdaf34105 (patch)
tree160a544049907ab814854ee9d30794d5e73ca89b /usr.bin
parent954d7a9ad862b1a430da31a4b63a36ad52c4bef3 (diff)
Write text boxes as <mi>, <mn>, or <mo> as appropriate,
and write fontstyle or fontweight attributes where required. Missing features reported by bentley@.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/mandoc/eqn_html.c54
-rw-r--r--usr.bin/mandoc/html.c3
-rw-r--r--usr.bin/mandoc/html.h3
3 files changed, 54 insertions, 6 deletions
diff --git a/usr.bin/mandoc/eqn_html.c b/usr.bin/mandoc/eqn_html.c
index 4b29457047c..7ac73b44be1 100644
--- a/usr.bin/mandoc/eqn_html.c
+++ b/usr.bin/mandoc/eqn_html.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: eqn_html.c,v 1.8 2017/06/20 17:24:09 schwarze Exp $ */
+/* $OpenBSD: eqn_html.c,v 1.9 2017/06/23 02:31:39 schwarze Exp $ */
/*
* Copyright (c) 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -18,6 +18,7 @@
#include <sys/types.h>
#include <assert.h>
+#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -31,7 +32,10 @@ eqn_box(struct html *p, const struct eqn_box *bp)
{
struct tag *post, *row, *cell, *t;
const struct eqn_box *child, *parent;
+ const unsigned char *cp;
size_t i, j, rows;
+ enum htmltag tag;
+ enum eqn_fontt font;
if (NULL == bp)
return;
@@ -134,9 +138,51 @@ eqn_box(struct html *p, const struct eqn_box *bp)
print_otag(p, TAG_MTD, "");
}
- if (NULL != bp->text) {
- assert(NULL == post);
- post = print_otag(p, TAG_MI, "");
+ if (bp->text != NULL) {
+ assert(post == NULL);
+ tag = TAG_MI;
+ cp = (unsigned char *)bp->text;
+ if (isdigit(cp[0]) || (cp[0] == '.' && isdigit(cp[1]))) {
+ tag = TAG_MN;
+ while (*++cp != '\0') {
+ if (*cp != '.' && !isdigit(*cp)) {
+ tag = TAG_MI;
+ break;
+ }
+ }
+ } else if (*cp != '\0' && isalpha(*cp) == 0) {
+ tag = TAG_MO;
+ while (*++cp != '\0') {
+ if (isalnum(*cp)) {
+ tag = TAG_MI;
+ break;
+ }
+ }
+ }
+ font = bp->font;
+ if (bp->text[0] != '\0' &&
+ (((tag == TAG_MN || tag == TAG_MO) &&
+ font == EQNFONT_ROMAN) ||
+ (tag == TAG_MI && font == (bp->text[1] == '\0' ?
+ EQNFONT_ITALIC : EQNFONT_ROMAN))))
+ font = EQNFONT_NONE;
+ switch (font) {
+ case EQNFONT_NONE:
+ post = print_otag(p, tag, "");
+ break;
+ case EQNFONT_ROMAN:
+ post = print_otag(p, tag, "?", "fontstyle", "normal");
+ break;
+ case EQNFONT_BOLD:
+ case EQNFONT_FAT:
+ post = print_otag(p, tag, "?", "fontweight", "bold");
+ break;
+ case EQNFONT_ITALIC:
+ post = print_otag(p, tag, "?", "fontstyle", "italic");
+ break;
+ default:
+ abort();
+ }
print_text(p, bp->text);
} else if (NULL == post) {
if (NULL != bp->left || NULL != bp->right)
diff --git a/usr.bin/mandoc/html.c b/usr.bin/mandoc/html.c
index 58576242ace..169bed91b9e 100644
--- a/usr.bin/mandoc/html.c
+++ b/usr.bin/mandoc/html.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: html.c,v 1.84 2017/06/14 01:31:19 schwarze Exp $ */
+/* $OpenBSD: html.c,v 1.85 2017/06/23 02:31:39 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -85,6 +85,7 @@ static const struct htmldata htmltags[TAG_MAX] = {
{"math", HTML_NLALL | HTML_INDENT},
{"mrow", 0},
{"mi", 0},
+ {"mn", 0},
{"mo", 0},
{"msup", 0},
{"msub", 0},
diff --git a/usr.bin/mandoc/html.h b/usr.bin/mandoc/html.h
index b4a4c35cb82..94fd0594f4a 100644
--- a/usr.bin/mandoc/html.h
+++ b/usr.bin/mandoc/html.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: html.h,v 1.47 2017/05/04 22:07:44 schwarze Exp $ */
+/* $OpenBSD: html.h,v 1.48 2017/06/23 02:31:39 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -51,6 +51,7 @@ enum htmltag {
TAG_MATH,
TAG_MROW,
TAG_MI,
+ TAG_MN,
TAG_MO,
TAG_MSUP,
TAG_MSUB,