summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--out.c4
-rw-r--r--regress/roff/esc/Makefile4
-rw-r--r--regress/roff/esc/l.in22
-rw-r--r--regress/roff/esc/l.out_ascii16
-rw-r--r--regress/roff/esc/l.out_lint2
-rw-r--r--term.c10
6 files changed, 48 insertions, 10 deletions
diff --git a/out.c b/out.c
index e8916b5e..2dc09900 100644
--- a/out.c
+++ b/out.c
@@ -85,10 +85,8 @@ a2roffsu(const char *src, struct roffsu *dst, enum roffscale def)
case 'v':
dst->unit = SCALE_VS;
break;
- case '\0':
- endptr--;
- /* FALLTHROUGH */
default:
+ endptr--;
if (SCALE_MAX == def)
return NULL;
dst->unit = def;
diff --git a/regress/roff/esc/Makefile b/regress/roff/esc/Makefile
index 4c8e492b..32589479 100644
--- a/regress/roff/esc/Makefile
+++ b/regress/roff/esc/Makefile
@@ -1,6 +1,6 @@
# $OpenBSD: Makefile,v 1.11 2015/04/29 18:32:57 schwarze Exp $
-REGRESS_TARGETS = one two multi B c c_man e f h o p w z ignore
-LINT_TARGETS = B h w ignore
+REGRESS_TARGETS = one two multi B c c_man e f h l o p w z ignore
+LINT_TARGETS = B h l w ignore
.include <bsd.regress.mk>
diff --git a/regress/roff/esc/l.in b/regress/roff/esc/l.in
new file mode 100644
index 00000000..59b9b5cf
--- /dev/null
+++ b/regress/roff/esc/l.in
@@ -0,0 +1,22 @@
+.Dd June 14, 2017
+.Dt ESC-L 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-l
+.Nd the roff escape l sequence: horizontal line
+.Sh DESCRIPTION
+explicit scaling unit and fill char: >\l'2nf'<
+.br
+explicit scaling unit and default char: >\l'3n'<
+.br
+default unit and explicit fill char: >\l'4x'<
+.br
+default unit and char: >\l'5'<
+.br
+explicit scaling unit and escape sequence: >\l'6n\(+-'<
+.br
+default unit and escape char: >\l'7n\(at'<
+.br
+rounding: >\l'0.26ix'<
+.br
+invalid delimiter: >\h-<
diff --git a/regress/roff/esc/l.out_ascii b/regress/roff/esc/l.out_ascii
new file mode 100644
index 00000000..f8ab5d19
--- /dev/null
+++ b/regress/roff/esc/l.out_ascii
@@ -0,0 +1,16 @@
+ESC-L(1) General Commands Manual ESC-L(1)
+
+NNAAMMEE
+ eesscc--ll - the roff escape l sequence: horizontal line
+
+DDEESSCCRRIIPPTTIIOONN
+ explicit scaling unit and fill char: >ff<
+ explicit scaling unit and default char: >___<
+ default unit and explicit fill char: >xxxx<
+ default unit and char: >_____<
+ explicit scaling unit and escape sequence: >+-+-+-<
+ default unit and escape char: >@@@@@@@<
+ rounding: >xxx<
+ invalid delimiter: ><
+
+OpenBSD June 14, 2017 OpenBSD
diff --git a/regress/roff/esc/l.out_lint b/regress/roff/esc/l.out_lint
new file mode 100644
index 00000000..2141ef41
--- /dev/null
+++ b/regress/roff/esc/l.out_lint
@@ -0,0 +1,2 @@
+mandoc: l.in:22:21: WARNING: invalid escape sequence: \h-
+mandoc: l.in:1:5: STYLE: Mdocdate missing: Dd June
diff --git a/term.c b/term.c
index c91ac2f2..076dc033 100644
--- a/term.c
+++ b/term.c
@@ -547,7 +547,7 @@ term_word(struct termp *p, const char *word)
}
continue;
case ESCAPE_HLINE:
- if ((seq = a2roffsu(seq, &su, SCALE_EM)) == NULL)
+ if ((cp = a2roffsu(seq, &su, SCALE_EM)) == NULL)
continue;
uc = term_hen(p, &su);
if (uc <= 0) {
@@ -556,10 +556,10 @@ term_word(struct termp *p, const char *word)
lsz = p->tcol->rmargin - p->tcol->offset;
} else
lsz = uc;
- if (*seq == '\0')
+ if (*cp == seq[-1])
uc = -1;
- else if (*seq == '\\') {
- seq++;
+ else if (*cp == '\\') {
+ seq = cp + 1;
esc = mandoc_escape(&seq, &cp, &sz);
switch (esc) {
case ESCAPE_UNICODE:
@@ -576,7 +576,7 @@ term_word(struct termp *p, const char *word)
break;
}
} else
- uc = *seq;
+ uc = *cp;
if (uc < 0x20 || (uc > 0x7E && uc < 0xA0))
uc = '_';
if (p->enc == TERMENC_ASCII) {