diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2017-05-07 17:31:45 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2017-05-07 17:31:45 +0000 |
commit | 72ffb5f81a5259c8b01aa48d71c3542bc8eed8d7 (patch) | |
tree | 31fa6b4a1d8a875e8da528874a5b9907e452f853 /term.c | |
parent | 3bbe9ca77bfa0a811b6ac068444fadfbb440cb8e (diff) | |
download | mandoc-72ffb5f81a5259c8b01aa48d71c3542bc8eed8d7.tar.gz mandoc-72ffb5f81a5259c8b01aa48d71c3542bc8eed8d7.tar.zst mandoc-72ffb5f81a5259c8b01aa48d71c3542bc8eed8d7.zip |
Basic implementation of the roff(7) .ta (define tab stops) request.
This is the first feature made possible by the parser reorganization.
Improves the formatting of the SYNOPSIS in many Xenocara GL manuals.
Also important for ports, as reported by many, including naddy@.
Diffstat (limited to 'term.c')
-rw-r--r-- | term.c | 27 |
1 files changed, 15 insertions, 12 deletions
@@ -1,4 +1,4 @@ -/* $Id: term.c,v 1.259 2017/01/08 18:16:58 schwarze Exp $ */ +/* $Id: term.c,v 1.260 2017/05/07 17:31:45 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org> @@ -141,8 +141,8 @@ term_flushln(struct termp *p) * subsequent tabs into a single huge set of spaces. */ ntab = 0; - while (i < p->col && '\t' == p->buf[i]) { - vend = (vis / p->tabwidth + 1) * p->tabwidth; + while (i < p->col && p->buf[i] == '\t') { + vend = term_tab_next(vis); vbl += vend - vis; vis = vend; ntab++; @@ -192,17 +192,20 @@ term_flushln(struct termp *p) vend -= vis; (*p->endline)(p); p->viscol = 0; - if (TERMP_BRIND & p->flags) { - vbl = p->rmargin; - vend += p->rmargin; - vend -= p->offset; - } else - vbl = p->offset; - /* use pending tabs on the new line */ + /* Use pending tabs on the new line. */ + + vbl = 0; + while (ntab--) + vbl = term_tab_next(vbl); - if (0 < ntab) - vbl += ntab * p->tabwidth; + /* Re-establish indentation. */ + + if (p->flags & TERMP_BRIND) { + vbl += p->rmargin; + vend += p->rmargin - p->offset; + } else + vbl += p->offset; /* * Remove the p->overstep width. |