version 1.75, 2015/11/12 11:09:11 |
version 1.76, 2015/11/12 22:04:37 |
|
|
{ |
{ |
va_list ap; |
va_list ap; |
char *msg; |
char *msg; |
struct utf8_data utf8data; |
struct utf8_data ud; |
u_char *ptr; |
u_char *ptr; |
size_t left, size = 0; |
size_t left, size = 0; |
|
|
|
|
|
|
ptr = msg; |
ptr = msg; |
while (*ptr != '\0') { |
while (*ptr != '\0') { |
if (*ptr > 0x7f && utf8_open(&utf8data, *ptr)) { |
if (*ptr > 0x7f && utf8_open(&ud, *ptr)) { |
ptr++; |
ptr++; |
|
|
left = strlen(ptr); |
left = strlen(ptr); |
if (left < utf8data.size - 1) |
if (left < ud.size - 1) |
break; |
break; |
while (utf8_append(&utf8data, *ptr)) |
while (utf8_append(&ud, *ptr)) |
ptr++; |
ptr++; |
ptr++; |
ptr++; |
|
|
size += utf8data.width; |
size += ud.width; |
} else { |
} else { |
if (*ptr > 0x1f && *ptr < 0x7f) |
if (*ptr > 0x1f && *ptr < 0x7f) |
size++; |
size++; |
|
|
struct grid_cell *gc, const char *fmt, va_list ap) |
struct grid_cell *gc, const char *fmt, va_list ap) |
{ |
{ |
char *msg; |
char *msg; |
struct utf8_data utf8data; |
struct utf8_data ud; |
u_char *ptr; |
u_char *ptr; |
size_t left, size = 0; |
size_t left, size = 0; |
|
|
|
|
|
|
ptr = msg; |
ptr = msg; |
while (*ptr != '\0') { |
while (*ptr != '\0') { |
if (*ptr > 0x7f && utf8_open(&utf8data, *ptr)) { |
if (*ptr > 0x7f && utf8_open(&ud, *ptr)) { |
ptr++; |
ptr++; |
|
|
left = strlen(ptr); |
left = strlen(ptr); |
if (left < utf8data.size - 1) |
if (left < ud.size - 1) |
break; |
break; |
while (utf8_append(&utf8data, *ptr)) |
while (utf8_append(&ud, *ptr)) |
ptr++; |
ptr++; |
ptr++; |
ptr++; |
|
|
if (maxlen > 0 && |
if (maxlen > 0 && |
size + utf8data.width > (size_t) maxlen) { |
size + ud.width > (size_t) maxlen) { |
while (size < (size_t) maxlen) { |
while (size < (size_t) maxlen) { |
screen_write_putc(ctx, gc, ' '); |
screen_write_putc(ctx, gc, ' '); |
size++; |
size++; |
} |
} |
break; |
break; |
} |
} |
size += utf8data.width; |
size += ud.width; |
|
|
grid_cell_set(gc, &utf8data); |
grid_cell_set(gc, &ud); |
screen_write_cell(ctx, gc); |
screen_write_cell(ctx, gc); |
} else { |
} else { |
if (maxlen > 0 && size + 1 > (size_t) maxlen) |
if (maxlen > 0 && size + 1 > (size_t) maxlen) |
|
|
struct grid_cell *gc, const char *fmt, ...) |
struct grid_cell *gc, const char *fmt, ...) |
{ |
{ |
struct grid_cell lgc; |
struct grid_cell lgc; |
struct utf8_data utf8data; |
struct utf8_data ud; |
va_list ap; |
va_list ap; |
char *msg; |
char *msg; |
u_char *ptr, *last; |
u_char *ptr, *last; |
|
|
continue; |
continue; |
} |
} |
|
|
if (*ptr > 0x7f && utf8_open(&utf8data, *ptr)) { |
if (*ptr > 0x7f && utf8_open(&ud, *ptr)) { |
ptr++; |
ptr++; |
|
|
left = strlen(ptr); |
left = strlen(ptr); |
if (left < utf8data.size - 1) |
if (left < ud.size - 1) |
break; |
break; |
while (utf8_append(&utf8data, *ptr)) |
while (utf8_append(&ud, *ptr)) |
ptr++; |
ptr++; |
ptr++; |
ptr++; |
|
|
if (maxlen > 0 && |
if (maxlen > 0 && |
size + utf8data.width > (size_t) maxlen) { |
size + ud.width > (size_t) maxlen) { |
while (size < (size_t) maxlen) { |
while (size < (size_t) maxlen) { |
screen_write_putc(ctx, gc, ' '); |
screen_write_putc(ctx, gc, ' '); |
size++; |
size++; |
} |
} |
break; |
break; |
} |
} |
size += utf8data.width; |
size += ud.width; |
|
|
grid_cell_set(&lgc, &utf8data); |
grid_cell_set(&lgc, &ud); |
screen_write_cell(ctx, &lgc); |
screen_write_cell(ctx, &lgc); |
} else { |
} else { |
if (maxlen > 0 && size + 1 > (size_t) maxlen) |
if (maxlen > 0 && size + 1 > (size_t) maxlen) |