version 1.5, 2016/10/03 22:52:11 |
version 1.6, 2017/05/15 16:44:04 |
|
|
return (ch - entry->key); |
return (ch - entry->key); |
} |
} |
|
|
|
/* Should this terminal use ACS instead of UTF-8 line drawing? */ |
|
int |
|
tty_acs_needed(struct tty *tty) |
|
{ |
|
if (tty == NULL) |
|
return (0); |
|
|
|
/* |
|
* If the U8 flag is present, it marks whether a terminal supports |
|
* UTF-8 and ACS together. |
|
* |
|
* If it is present and zero, we force ACS - this gives users a way to |
|
* turn off UTF-8 line drawing. |
|
* |
|
* If it is nonzero, we can fall through to the default and use UTF-8 |
|
* line drawing on UTF-8 terminals. |
|
*/ |
|
if (tty_term_has(tty->term, TTYC_U8) && |
|
tty_term_number(tty->term, TTYC_U8) == 0) |
|
return (1); |
|
|
|
if (tty->flags & TTY_UTF8) |
|
return (0); |
|
return (1); |
|
} |
|
|
/* Retrieve ACS to output as a string. */ |
/* Retrieve ACS to output as a string. */ |
const char * |
const char * |
tty_acs_get(struct tty *tty, u_char ch) |
tty_acs_get(struct tty *tty, u_char ch) |
{ |
{ |
struct tty_acs_entry *entry; |
struct tty_acs_entry *entry; |
|
|
/* If not a UTF-8 terminal, use the ACS set. */ |
/* Use the ACS set instead of UTF-8 if needed. */ |
if (tty != NULL && !(tty->flags & TTY_UTF8)) { |
if (tty_acs_needed(tty)) { |
if (tty->term->acs[ch][0] == '\0') |
if (tty->term->acs[ch][0] == '\0') |
return (NULL); |
return (NULL); |
return (&tty->term->acs[ch][0]); |
return (&tty->term->acs[ch][0]); |
} |
} |
|
|
/* Otherwise look up the UTF-8 translation. */ |
/* Otherwise look up the UTF-8 translation. */ |
entry = bsearch(&ch, |
entry = bsearch(&ch, tty_acs_table, nitems(tty_acs_table), |
tty_acs_table, nitems(tty_acs_table), sizeof tty_acs_table[0], |
sizeof tty_acs_table[0], tty_acs_cmp); |
tty_acs_cmp); |
|
if (entry == NULL) |
if (entry == NULL) |
return (NULL); |
return (NULL); |
return (entry->string); |
return (entry->string); |