version 1.279, 2019/01/04 03:21:02 |
version 1.283, 2021/08/10 12:55:04 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2010-2019 Ingo Schwarze <schwarze@openbsd.org> |
* Copyright (c) 2010-2020 Ingo Schwarze <schwarze@openbsd.org> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
Line 38 static void bufferc(struct termp *, char); |
|
Line 38 static void bufferc(struct termp *, char); |
|
static void encode(struct termp *, const char *, size_t); |
static void encode(struct termp *, const char *, size_t); |
static void encode1(struct termp *, int); |
static void encode1(struct termp *, int); |
static void endline(struct termp *); |
static void endline(struct termp *); |
static void term_field(struct termp *, size_t, size_t, |
static void term_field(struct termp *, size_t, size_t); |
size_t, size_t); |
|
static void term_fill(struct termp *, size_t *, size_t *, |
static void term_fill(struct termp *, size_t *, size_t *, |
size_t); |
size_t); |
|
|
Line 127 term_flushln(struct termp *p) |
|
Line 126 term_flushln(struct termp *p) |
|
* and with the BRNEVER flag, never break it at all. |
* and with the BRNEVER flag, never break it at all. |
*/ |
*/ |
|
|
vtarget = p->flags & TERMP_BRNEVER ? SIZE_MAX : |
vtarget = (p->flags & TERMP_NOBREAK) == 0 ? vfield : |
(p->flags & TERMP_NOBREAK) == 0 ? vfield : |
|
p->maxrmargin > p->viscol + vbl ? |
p->maxrmargin > p->viscol + vbl ? |
p->maxrmargin - p->viscol - vbl : 0; |
p->maxrmargin - p->viscol - vbl : 0; |
|
|
Line 137 term_flushln(struct termp *p) |
|
Line 135 term_flushln(struct termp *p) |
|
* If there is whitespace only, print nothing. |
* If there is whitespace only, print nothing. |
*/ |
*/ |
|
|
term_fill(p, &nbr, &vbr, vtarget); |
term_fill(p, &nbr, &vbr, |
|
p->flags & TERMP_BRNEVER ? SIZE_MAX : vtarget); |
if (nbr == 0) |
if (nbr == 0) |
break; |
break; |
|
|
Line 156 term_flushln(struct termp *p) |
|
Line 155 term_flushln(struct termp *p) |
|
|
|
/* Finally, print the field content. */ |
/* Finally, print the field content. */ |
|
|
term_field(p, vbl, nbr, vbr, vtarget); |
term_field(p, vbl, nbr); |
|
|
/* |
/* |
* If there is no text left in the field, exit the loop. |
* If there is no text left in the field, exit the loop. |
Line 281 term_fill(struct termp *p, size_t *nbr, size_t *vbr, s |
|
Line 280 term_fill(struct termp *p, size_t *nbr, size_t *vbr, s |
|
case ASCII_BREAK: |
case ASCII_BREAK: |
vn = vis; |
vn = vis; |
break; |
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) |
Line 343 term_fill(struct termp *p, size_t *nbr, size_t *vbr, s |
|
Line 344 term_fill(struct termp *p, size_t *nbr, size_t *vbr, s |
|
/* |
/* |
* Print the contents of one field |
* Print the contents of one field |
* with an indentation of vbl visual columns, |
* with an indentation of vbl visual columns, |
* an input string length of nbr characters, |
* and an input string length of nbr characters. |
* an output width of vbr visual columns, |
|
* and a desired field width of vtarget visual columns. |
|
*/ |
*/ |
static void |
static void |
term_field(struct termp *p, size_t vbl, size_t nbr, size_t vbr, size_t vtarget) |
term_field(struct termp *p, size_t vbl, size_t nbr) |
{ |
{ |
size_t ic; /* Character position in the input buffer. */ |
size_t ic; /* Character position in the input buffer. */ |
size_t vis; /* Visual position of the current character. */ |
size_t vis; /* Visual position of the current character. */ |
Line 374 term_field(struct termp *p, size_t vbl, size_t nbr, si |
|
Line 373 term_field(struct termp *p, size_t vbl, size_t nbr, si |
|
continue; |
continue; |
case ' ': |
case ' ': |
case ASCII_NBRSP: |
case ASCII_NBRSP: |
vbl++; |
dv = (*p->width)(p, ' '); |
vis++; |
vbl += dv; |
|
vis += dv; |
continue; |
continue; |
default: |
default: |
break; |
break; |
Line 589 term_word(struct termp *p, const char *word) |
|
Line 589 term_word(struct termp *p, const char *word) |
|
uc = *seq; |
uc = *seq; |
break; |
break; |
case ESCAPE_FONTBOLD: |
case ESCAPE_FONTBOLD: |
|
case ESCAPE_FONTCB: |
term_fontrepl(p, TERMFONT_BOLD); |
term_fontrepl(p, TERMFONT_BOLD); |
continue; |
continue; |
case ESCAPE_FONTITALIC: |
case ESCAPE_FONTITALIC: |
|
case ESCAPE_FONTCI: |
term_fontrepl(p, TERMFONT_UNDER); |
term_fontrepl(p, TERMFONT_UNDER); |
continue; |
continue; |
case ESCAPE_FONTBI: |
case ESCAPE_FONTBI: |
term_fontrepl(p, TERMFONT_BI); |
term_fontrepl(p, TERMFONT_BI); |
continue; |
continue; |
case ESCAPE_FONT: |
case ESCAPE_FONT: |
case ESCAPE_FONTCW: |
case ESCAPE_FONTCR: |
case ESCAPE_FONTROMAN: |
case ESCAPE_FONTROMAN: |
term_fontrepl(p, TERMFONT_NONE); |
term_fontrepl(p, TERMFONT_NONE); |
continue; |
continue; |