]> git.cameronkatri.com Git - mandoc.git/blobdiff - term.c
"sys/param.h is for kernel interface programs.
[mandoc.git] / term.c
diff --git a/term.c b/term.c
index 41c6c65556bbec0aed4135fb4287a407a181a07f..79a0f45f4786d8165d302a200aab7cb7027fd81b 100644 (file)
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/*     $Id: term.c,v 1.167 2010/08/20 01:02:07 schwarze Exp $ */
+/*     $Id: term.c,v 1.169 2010/08/20 23:34:02 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -169,12 +169,11 @@ term_flushln(struct termp *p)
                 * Handle literal tab characters: collapse all
                 * subsequent tabs into a single huge set of spaces.
                 */
                 * Handle literal tab characters: collapse all
                 * subsequent tabs into a single huge set of spaces.
                 */
-               for (j = i; j < (int)p->col; j++) {
-                       if ('\t' != p->buf[j])
-                               break;
+               while (i < (int)p->col && '\t' == p->buf[i]) {
                        vend = (vis / p->tabwidth + 1) * p->tabwidth;
                        vbl += vend - vis;
                        vis = vend;
                        vend = (vis / p->tabwidth + 1) * p->tabwidth;
                        vbl += vend - vis;
                        vis = vend;
+                       i++;
                }
 
                /*
                }
 
                /*
@@ -185,7 +184,7 @@ term_flushln(struct termp *p)
                 */
 
                /* LINTED */
                 */
 
                /* LINTED */
-               for (jhy = 0; j < (int)p->col; j++) {
+               for (j = i, jhy = 0; j < (int)p->col; j++) {
                        if ((j && ' ' == p->buf[j]) || '\t' == p->buf[j])
                                break;
 
                        if ((j && ' ' == p->buf[j]) || '\t' == p->buf[j])
                                break;
 
@@ -228,12 +227,6 @@ term_flushln(struct termp *p)
                        p->overstep = 0;
                }
 
                        p->overstep = 0;
                }
 
-               /*
-                * Skip leading tabs, they were handled above.
-                */
-               while (i < (int)p->col && '\t' == p->buf[i])
-                       i++;
-
                /* Write out the [remaining] word. */
                for ( ; i < (int)p->col; i++) {
                        if (vend > bp && jhy > 0 && i > jhy)
                /* Write out the [remaining] word. */
                for ( ; i < (int)p->col; i++) {
                        if (vend > bp && jhy > 0 && i > jhy)
@@ -275,6 +268,12 @@ term_flushln(struct termp *p)
                vis = vend;
        }
 
                vis = vend;
        }
 
+       /*
+        * If there was trailing white space, it was not printed;
+        * so reset the cursor position accordingly.
+        */
+       vis -= vbl;
+
        p->col = 0;
        p->overstep = 0;
 
        p->col = 0;
        p->overstep = 0;