implement so-called absolute horizontal motion: \h'|...',
authorschwarze <schwarze@openbsd.org>
Wed, 14 Jun 2017 23:23:51 +0000 (23:23 +0000)
committerschwarze <schwarze@openbsd.org>
Wed, 14 Jun 2017 23:23:51 +0000 (23:23 +0000)
used for example by zoem(1)

regress/usr.bin/mandoc/roff/esc/h.in
regress/usr.bin/mandoc/roff/esc/h.out_ascii
regress/usr.bin/mandoc/roff/esc/h.out_lint
share/man/man7/roff.7
usr.bin/mandoc/term.c

index 56e4275..8fa23e7 100644 (file)
@@ -9,6 +9,8 @@ simple: >\h'0'<
 .br
 rounding: >\h'0.16i'<
 .br
+absolute: >\h'|12n'<
+.br
 escape only: >\h'\w'\&'M'<
 .br
 escape at the end: >\h'0+\w'\&''<
index ae378a4..ddfac19 100644 (file)
@@ -6,6 +6,7 @@ N\bNA\bAM\bME\bE
 D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
      simple: ><
      rounding: >  <
+     absolute: > <
      escape only: ><
      escape at the end: ><
      escape at the beginning: ><
index b7facfb..23ff9ce 100644 (file)
@@ -1,2 +1,2 @@
-mandoc: h.in:20:21: WARNING: invalid escape sequence: \h-
+mandoc: h.in:22:21: WARNING: invalid escape sequence: \h-
 mandoc: h.in:1:5: STYLE: Mdocdate missing: Dd May
index 9409bb1..3e01893 100644 (file)
@@ -1,4 +1,4 @@
-.\"    $OpenBSD: roff.7,v 1.72 2017/06/14 22:50:37 schwarze Exp $
+.\"    $OpenBSD: roff.7,v 1.73 2017/06/14 23:23:51 schwarze Exp $
 .\"
 .\" Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
 .\" Copyright (c) 2010,2011,2013-2015,2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -1954,8 +1954,11 @@ and
 .Ss \eH\(aq Ns Oo +|- Oc Ns Ar number Ns \(aq
 Set the height of the current font; ignored by
 .Xr mandoc 1 .
-.Ss \eh\(aq Ns Ar width Ns \(aq
-Horizontal motion relative to the current position.
+.Ss \eh\(aq Ns Oo Cm \&| Oc Ns Ar width Ns \(aq
+Horizontal motion.
+If the vertical bar is given, the motion is relative to the current
+indentation.
+Otherwise, it is relative to the current position.
 The default scaling unit is
 .Cm m .
 .Ss \ek[ Ns Ar name ]
index 0f59fdc..0970f68 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: term.c,v 1.132 2017/06/14 18:23:26 schwarze Exp $ */
+/*     $OpenBSD: term.c,v 1.133 2017/06/14 23:23:51 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -524,9 +524,14 @@ term_word(struct termp *p, const char *word)
                                p->flags |= (TERMP_NOSPACE | TERMP_NONEWLINE);
                        continue;
                case ESCAPE_HORIZ:
+                       if (*seq == '|') {
+                               seq++;
+                               uc = -p->col;
+                       } else
+                               uc = 0;
                        if (a2roffsu(seq, &su, SCALE_EM) == NULL)
                                continue;
-                       uc = term_hen(p, &su);
+                       uc += term_hen(p, &su);
                        if (uc > 0)
                                while (uc-- > 0)
                                        bufferc(p, ASCII_NBRSP);