version 1.285, 2022/01/10 18:01:35 |
version 1.287, 2022/08/15 10:22:14 |
Line 268 term_fill(struct termp *p, size_t *nbr, size_t *vbr, s |
|
Line 268 term_fill(struct termp *p, size_t *nbr, size_t *vbr, s |
|
vis -= (*p->width)(p, p->tcol->buf[ic - 1]); |
vis -= (*p->width)(p, p->tcol->buf[ic - 1]); |
continue; |
continue; |
|
|
case '\t': /* Normal ASCII whitespace. */ |
|
case ' ': |
case ' ': |
case ASCII_BREAK: /* Escape \: (breakpoint). */ |
case ASCII_BREAK: /* Escape \: (breakpoint). */ |
switch (p->tcol->buf[ic]) { |
vn = vis; |
case '\t': |
if (p->tcol->buf[ic] == ' ') |
vn = term_tab_next(vis); |
vn += (*p->width)(p, ' '); |
break; |
|
case ' ': |
|
vn = vis + (*p->width)(p, ' '); |
|
break; |
|
case ASCII_BREAK: |
|
vn = vis; |
|
break; |
|
default: |
|
abort(); |
|
} |
|
/* Can break at the end of a word. */ |
/* Can break at the end of a word. */ |
if (breakline || vn > vtarget) |
if (breakline || vn > vtarget) |
break; |
break; |
Line 317 term_fill(struct termp *p, size_t *nbr, size_t *vbr, s |
|
Line 306 term_fill(struct termp *p, size_t *nbr, size_t *vbr, s |
|
*vbr = vis; |
*vbr = vis; |
continue; |
continue; |
|
|
case ASCII_NBRSP: /* Non-breakable space. */ |
default: |
p->tcol->buf[ic] = ' '; |
switch (p->tcol->buf[ic]) { |
/* FALLTHROUGH */ |
case '\t': |
default: /* Printable character. */ |
vis = term_tab_next(vis); |
|
break; |
|
case ASCII_NBRSP: /* Non-breakable space. */ |
|
p->tcol->buf[ic] = ' '; |
|
/* FALLTHROUGH */ |
|
default: /* Printable character. */ |
|
vis += (*p->width)(p, p->tcol->buf[ic]); |
|
break; |
|
} |
graph = 1; |
graph = 1; |
vis += (*p->width)(p, p->tcol->buf[ic]); |
|
if (vis > vtarget && *nbr > 0) |
if (vis > vtarget && *nbr > 0) |
return; |
return; |
continue; |
continue; |
Line 628 term_word(struct termp *p, const char *word) |
|
Line 624 term_word(struct termp *p, const char *word) |
|
encode(p, "utf8", 4); |
encode(p, "utf8", 4); |
continue; |
continue; |
case ESCAPE_HORIZ: |
case ESCAPE_HORIZ: |
|
if (p->flags & TERMP_BACKAFTER) { |
|
p->flags &= ~TERMP_BACKAFTER; |
|
continue; |
|
} |
if (*seq == '|') { |
if (*seq == '|') { |
seq++; |
seq++; |
uc = -p->col; |
uc = -p->col; |
Line 636 term_word(struct termp *p, const char *word) |
|
Line 636 term_word(struct termp *p, const char *word) |
|
if (a2roffsu(seq, &su, SCALE_EM) == NULL) |
if (a2roffsu(seq, &su, SCALE_EM) == NULL) |
continue; |
continue; |
uc += term_hen(p, &su); |
uc += term_hen(p, &su); |
if (uc > 0) { |
if (uc >= 0) { |
while (uc > 0) { |
while (uc > 0) { |
bufferc(p, ASCII_NBRSP); |
|
uc -= term_len(p, 1); |
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; |
p->col += uc; |
} else { |
} else { |
uc += p->col; |
uc += p->col; |