=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/term.c,v retrieving revision 1.145 retrieving revision 1.146 diff -u -r1.145 -r1.146 --- src/usr.bin/mandoc/term.c 2022/01/10 17:59:45 1.145 +++ src/usr.bin/mandoc/term.c 2022/04/27 13:30:19 1.146 @@ -1,4 +1,4 @@ -/* $OpenBSD: term.c,v 1.145 2022/01/10 17:59:45 schwarze Exp $ */ +/* $OpenBSD: term.c,v 1.146 2022/04/27 13:30:19 schwarze Exp $ */ /* * Copyright (c) 2010-2022 Ingo Schwarze * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons @@ -626,6 +626,10 @@ encode(p, "utf8", 4); continue; case ESCAPE_HORIZ: + if (p->flags & TERMP_BACKAFTER) { + p->flags &= ~TERMP_BACKAFTER; + continue; + } if (*seq == '|') { seq++; uc = -p->col; @@ -634,12 +638,22 @@ if (a2roffsu(seq, &su, SCALE_EM) == NULL) continue; uc += term_hen(p, &su); - if (uc > 0) { + if (uc >= 0) { while (uc > 0) { - bufferc(p, ASCII_NBRSP); uc -= term_len(p, 1); + if (p->flags & TERMP_BACKBEFORE) + p->flags &= ~TERMP_BACKBEFORE; + else + bufferc(p, ASCII_NBRSP); } - } else if (p->col > (size_t)(-uc)) { + continue; + } + if (p->flags & TERMP_BACKBEFORE) { + p->flags &= ~TERMP_BACKBEFORE; + assert(p->col > 0); + p->col--; + } + if (p->col >= (size_t)(-uc)) { p->col += uc; } else { uc += p->col;