=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/term.c,v retrieving revision 1.147 retrieving revision 1.148 diff -c -r1.147 -r1.148 *** src/usr.bin/mandoc/term.c 2022/08/15 10:21:01 1.147 --- src/usr.bin/mandoc/term.c 2022/08/15 13:01:40 1.148 *************** *** 1,4 **** ! /* $OpenBSD: term.c,v 1.147 2022/08/15 10:21:01 schwarze Exp $ */ /* * Copyright (c) 2010-2022 Ingo Schwarze * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons --- 1,4 ---- ! /* $OpenBSD: term.c,v 1.148 2022/08/15 13:01:40 schwarze Exp $ */ /* * Copyright (c) 2010-2022 Ingo Schwarze * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons *************** *** 155,160 **** --- 155,161 ---- /* Finally, print the field content. */ term_field(p, vbl, nbr); + p->tcol->taboff += vbr + (*p->width)(p, ' '); /* * If there is no text left in the field, exit the loop. *************** *** 307,313 **** --- 308,316 ---- default: switch (p->tcol->buf[ic]) { case '\t': + vis += p->tcol->taboff; vis = term_tab_next(vis); + vis -= p->tcol->taboff; break; case ASCII_NBRSP: /* Non-breakable space. */ p->tcol->buf[ic] = ' '; *************** *** 346,353 **** { size_t ic; /* Character position in the input buffer. */ size_t vis; /* Visual position of the current character. */ size_t dv; /* Visual width of the current character. */ - size_t vn; /* Visual position of the next character. */ vis = 0; for (ic = p->tcol->col; ic < nbr; ic++) { --- 349,356 ---- { size_t ic; /* Character position in the input buffer. */ size_t vis; /* Visual position of the current character. */ + size_t vt; /* Visual position including tab offset. */ size_t dv; /* Visual width of the current character. */ vis = 0; for (ic = p->tcol->col; ic < nbr; ic++) { *************** *** 362,374 **** case ASCII_BREAK: continue; case '\t': - vn = term_tab_next(vis); - vbl += vn - vis; - vis = vn; - continue; case ' ': case ASCII_NBRSP: ! dv = (*p->width)(p, ' '); vbl += dv; vis += dv; continue; --- 365,377 ---- case ASCII_BREAK: continue; case '\t': case ' ': case ASCII_NBRSP: ! if (p->tcol->buf[ic] == '\t') { ! vt = p->tcol->taboff + vis; ! dv = term_tab_next(vt) - vt; ! } else ! dv = (*p->width)(p, ' '); vbl += dv; vis += dv; continue; *************** *** 430,436 **** void term_newln(struct termp *p) { ! p->flags |= TERMP_NOSPACE; if (p->tcol->lastcol || p->viscol) term_flushln(p); --- 433,439 ---- void term_newln(struct termp *p) { ! p->tcol->taboff = 0; p->flags |= TERMP_NOSPACE; if (p->tcol->lastcol || p->viscol) term_flushln(p);