From 2aa67a98b630bd0e3eb3e096150efe6624793fa7 Mon Sep 17 00:00:00 2001 From: schwarze Date: Wed, 14 Jun 2017 23:23:51 +0000 Subject: [PATCH] implement so-called absolute horizontal motion: \h'|...', used for example by zoem(1) --- regress/usr.bin/mandoc/roff/esc/h.in | 2 ++ regress/usr.bin/mandoc/roff/esc/h.out_ascii | 1 + regress/usr.bin/mandoc/roff/esc/h.out_lint | 2 +- share/man/man7/roff.7 | 9 ++++++--- usr.bin/mandoc/term.c | 9 +++++++-- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/regress/usr.bin/mandoc/roff/esc/h.in b/regress/usr.bin/mandoc/roff/esc/h.in index 56e4275cd3c..8fa23e7b12f 100644 --- a/regress/usr.bin/mandoc/roff/esc/h.in +++ b/regress/usr.bin/mandoc/roff/esc/h.in @@ -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'\&''< diff --git a/regress/usr.bin/mandoc/roff/esc/h.out_ascii b/regress/usr.bin/mandoc/roff/esc/h.out_ascii index ae378a45e9c..ddfac195362 100644 --- a/regress/usr.bin/mandoc/roff/esc/h.out_ascii +++ b/regress/usr.bin/mandoc/roff/esc/h.out_ascii @@ -6,6 +6,7 @@ NNAAMMEE DDEESSCCRRIIPPTTIIOONN simple: >< rounding: > < + absolute: > < escape only: >< escape at the end: >< escape at the beginning: >< diff --git a/regress/usr.bin/mandoc/roff/esc/h.out_lint b/regress/usr.bin/mandoc/roff/esc/h.out_lint index b7facfb1ebb..23ff9ce8bf9 100644 --- a/regress/usr.bin/mandoc/roff/esc/h.out_lint +++ b/regress/usr.bin/mandoc/roff/esc/h.out_lint @@ -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 diff --git a/share/man/man7/roff.7 b/share/man/man7/roff.7 index 9409bb19419..3e01893d483 100644 --- a/share/man/man7/roff.7 +++ b/share/man/man7/roff.7 @@ -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 .\" Copyright (c) 2010,2011,2013-2015,2017 Ingo Schwarze @@ -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 ] diff --git a/usr.bin/mandoc/term.c b/usr.bin/mandoc/term.c index 0f59fdc5439..0970f6835b0 100644 --- a/usr.bin/mandoc/term.c +++ b/usr.bin/mandoc/term.c @@ -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 * Copyright (c) 2010-2017 Ingo Schwarze @@ -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); -- 2.20.1