version 1.264, 2017/06/04 22:44:15 |
version 1.265, 2017/06/07 02:14:09 |
Line 117 term_flushln(struct termp *p) |
|
Line 117 term_flushln(struct termp *p) |
|
vis = vend = 0; |
vis = vend = 0; |
i = 0; |
i = 0; |
|
|
while (i < p->col) { |
while (i < p->lastcol) { |
/* |
/* |
* Handle literal tab characters: collapse all |
* Handle literal tab characters: collapse all |
* subsequent tabs into a single huge set of spaces. |
* subsequent tabs into a single huge set of spaces. |
*/ |
*/ |
ntab = 0; |
ntab = 0; |
while (i < p->col && p->buf[i] == '\t') { |
while (i < p->lastcol && p->buf[i] == '\t') { |
vend = term_tab_next(vis); |
vend = term_tab_next(vis); |
vbl += vend - vis; |
vbl += vend - vis; |
vis = vend; |
vis = vend; |
Line 138 term_flushln(struct termp *p) |
|
Line 138 term_flushln(struct termp *p) |
|
* space is printed according to regular spacing rules). |
* space is printed according to regular spacing rules). |
*/ |
*/ |
|
|
for (j = i, jhy = 0; j < p->col; j++) { |
for (j = i, jhy = 0; j < p->lastcol; j++) { |
if (' ' == p->buf[j] || '\t' == p->buf[j]) |
if (' ' == p->buf[j] || '\t' == p->buf[j]) |
break; |
break; |
|
|
Line 193 term_flushln(struct termp *p) |
|
Line 193 term_flushln(struct termp *p) |
|
} |
} |
|
|
/* Write out the [remaining] word. */ |
/* Write out the [remaining] word. */ |
for ( ; i < p->col; i++) { |
for ( ; i < p->lastcol; i++) { |
if (vend > bp && jhy > 0 && i > jhy) |
if (vend > bp && jhy > 0 && i > jhy) |
break; |
break; |
if ('\t' == p->buf[i]) |
if ('\t' == p->buf[i]) |
break; |
break; |
if (' ' == p->buf[i]) { |
if (' ' == p->buf[i]) { |
j = i; |
j = i; |
while (i < p->col && ' ' == p->buf[i]) |
while (i < p->lastcol && ' ' == p->buf[i]) |
i++; |
i++; |
dv = (i - j) * (*p->width)(p, ' '); |
dv = (i - j) * (*p->width)(p, ' '); |
vbl += dv; |
vbl += dv; |
Line 243 term_flushln(struct termp *p) |
|
Line 243 term_flushln(struct termp *p) |
|
else |
else |
vis = 0; |
vis = 0; |
|
|
p->col = 0; |
p->col = p->lastcol = 0; |
p->minbl = p->trailspace; |
p->minbl = p->trailspace; |
p->flags &= ~(TERMP_BACKAFTER | TERMP_BACKBEFORE | TERMP_NOPAD); |
p->flags &= ~(TERMP_BACKAFTER | TERMP_BACKBEFORE | TERMP_NOPAD); |
|
|
Line 287 term_newln(struct termp *p) |
|
Line 287 term_newln(struct termp *p) |
|
{ |
{ |
|
|
p->flags |= TERMP_NOSPACE; |
p->flags |= TERMP_NOSPACE; |
if (p->col || p->viscol) |
if (p->lastcol || p->viscol) |
term_flushln(p); |
term_flushln(p); |
} |
} |
|
|
Line 556 term_word(struct termp *p, const char *word) |
|
Line 556 term_word(struct termp *p, const char *word) |
|
} |
} |
} |
} |
/* Trim trailing backspace/blank pair. */ |
/* Trim trailing backspace/blank pair. */ |
if (p->col > 2 && |
if (p->lastcol > 2 && |
(p->buf[p->col - 1] == ' ' || |
(p->buf[p->lastcol - 1] == ' ' || |
p->buf[p->col - 1] == '\t')) |
p->buf[p->lastcol - 1] == '\t')) |
p->col -= 2; |
p->lastcol -= 2; |
|
if (p->col > p->lastcol) |
|
p->col = p->lastcol; |
continue; |
continue; |
default: |
default: |
continue; |
continue; |
Line 604 bufferc(struct termp *p, char c) |
|
Line 606 bufferc(struct termp *p, char c) |
|
} |
} |
if (p->col + 1 >= p->maxcols) |
if (p->col + 1 >= p->maxcols) |
adjbuf(p, p->col + 1); |
adjbuf(p, p->col + 1); |
p->buf[p->col++] = c; |
if (p->lastcol <= p->col || (c != ' ' && c != ASCII_NBRSP)) |
|
p->buf[p->col] = c; |
|
if (p->lastcol < ++p->col) |
|
p->lastcol = p->col; |
} |
} |
|
|
/* |
/* |
Line 646 encode1(struct termp *p, int c) |
|
Line 651 encode1(struct termp *p, int c) |
|
p->buf[p->col++] = c; |
p->buf[p->col++] = c; |
p->buf[p->col++] = 8; |
p->buf[p->col++] = 8; |
} |
} |
p->buf[p->col++] = c; |
if (p->lastcol <= p->col || (c != ' ' && c != ASCII_NBRSP)) |
|
p->buf[p->col] = c; |
|
if (p->lastcol < ++p->col) |
|
p->lastcol = p->col; |
if (p->flags & TERMP_BACKAFTER) { |
if (p->flags & TERMP_BACKAFTER) { |
p->flags |= TERMP_BACKBEFORE; |
p->flags |= TERMP_BACKBEFORE; |
p->flags &= ~TERMP_BACKAFTER; |
p->flags &= ~TERMP_BACKAFTER; |
Line 672 encode(struct termp *p, const char *word, size_t sz) |
|
Line 680 encode(struct termp *p, const char *word, size_t sz) |
|
isgraph((unsigned char)word[i])) |
isgraph((unsigned char)word[i])) |
encode1(p, word[i]); |
encode1(p, word[i]); |
else { |
else { |
p->buf[p->col++] = word[i]; |
if (p->lastcol <= p->col || |
|
(word[i] != ' ' && word[i] != ASCII_NBRSP)) |
|
p->buf[p->col] = word[i]; |
|
p->col++; |
|
|
/* |
/* |
* Postpone the effect of \z while handling |
* Postpone the effect of \z while handling |
Line 686 encode(struct termp *p, const char *word, size_t sz) |
|
Line 697 encode(struct termp *p, const char *word, size_t sz) |
|
} |
} |
} |
} |
} |
} |
|
if (p->lastcol < p->col) |
|
p->lastcol = p->col; |
} |
} |
|
|
void |
void |