summaryrefslogtreecommitdiff
path: root/usr.bin/mandoc/html.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/mandoc/html.c')
-rw-r--r--usr.bin/mandoc/html.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/usr.bin/mandoc/html.c b/usr.bin/mandoc/html.c
index f25c21da748..58576242ace 100644
--- a/usr.bin/mandoc/html.c
+++ b/usr.bin/mandoc/html.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: html.c,v 1.83 2017/06/08 12:54:40 schwarze Exp $ */
+/* $OpenBSD: html.c,v 1.84 2017/06/14 01:31:19 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -343,16 +343,18 @@ static int
print_encode(struct html *h, const char *p, const char *pend, int norecurse)
{
char numbuf[16];
- size_t sz;
- int c, len, nospace;
+ struct tag *t;
const char *seq;
+ size_t sz;
+ int c, len, breakline, nospace;
enum mandoc_esc esc;
- static const char rejs[9] = { '\\', '<', '>', '&', '"',
+ static const char rejs[10] = { ' ', '\\', '<', '>', '&', '"',
ASCII_NBRSP, ASCII_HYPH, ASCII_BREAK, '\0' };
if (pend == NULL)
pend = strchr(p, '\0');
+ breakline = 0;
nospace = 0;
while (p < pend) {
@@ -363,14 +365,28 @@ print_encode(struct html *h, const char *p, const char *pend, int norecurse)
}
for (sz = strcspn(p, rejs); sz-- && p < pend; p++)
- if (*p == ' ')
- print_endword(h);
- else
- print_byte(h, *p);
+ print_byte(h, *p);
+
+ if (breakline &&
+ (p >= pend || *p == ' ' || *p == ASCII_NBRSP)) {
+ t = print_otag(h, TAG_DIV, "");
+ print_text(h, "\\~");
+ print_tagq(h, t);
+ breakline = 0;
+ while (p < pend && (*p == ' ' || *p == ASCII_NBRSP))
+ p++;
+ continue;
+ }
if (p >= pend)
break;
+ if (*p == ' ') {
+ print_endword(h);
+ p++;
+ continue;
+ }
+
if (print_escape(h, *p++))
continue;
@@ -415,6 +431,9 @@ print_encode(struct html *h, const char *p, const char *pend, int norecurse)
if (c <= 0)
continue;
break;
+ case ESCAPE_BREAK:
+ breakline = 1;
+ continue;
case ESCAPE_NOSPACE:
if ('\0' == *p)
nospace = 1;