short: нет - он (тритон и сленг) просто не делает , что.
long:
newt использует функцию SLsmg_draw_box
, которая показаназдесь для справки:
void SLsmg_draw_box (int r, int c, unsigned int dr, unsigned int dc)
{
if (Smg_Mode == SMG_MODE_NONE) return;
if (!dr || !dc) return;
This_Row = r; This_Col = c;
dr--; dc--;
SLsmg_draw_hline (dc);
SLsmg_draw_vline (dr);
This_Row = r; This_Col = c;
SLsmg_draw_vline (dr);
SLsmg_draw_hline (dc);
SLsmg_draw_object (r, c, SLSMG_ULCORN_CHAR);
SLsmg_draw_object (r, c + (int) dc, SLSMG_URCORN_CHAR);
SLsmg_draw_object (r + (int) dr, c, SLSMG_LLCORN_CHAR);
SLsmg_draw_object (r + (int) dr, c + (int) dc, SLSMG_LRCORN_CHAR);
This_Row = r; This_Col = c;
}
В файле slsmg.c
сленг имеет таблицу:
typedef struct
{
unsigned char vt100_char;
unsigned char ascii;
SLwchar_Type unicode; /* may have an ambiguous width */
SLwchar_Type unicode_narrow; /* has a narrow width */
}
ACS_Def_Type;
static SLCONST ACS_Def_Type UTF8_ACS_Map[] =
{
{'+', '>', 0x2192, '>'}, /* RIGHTWARDS ARROW [A] */
{',', '<', 0x2190, '<'}, /* LEFTWARDS ARROW [A] */
{'-', '^', 0x2191, 0x2303}, /* UPWARDS ARROW [A] */
{'.', 'v', 0x2193, 0x2304}, /* DOWNWARDS ARROW [A] */
, но он автоматически выберет значения Unicode, если это указано в приложении (newt) использовать кодировку UTF-8.newt делает это безоговорочно, игнорируя информацию о терминале и локали:
/**
* @brief Initialize the newt library
* @return int - 0 for success, else < 0
*/
int newtInit(void) {
char * MonoValue, * MonoEnv = "NEWT_MONO";
const char *lang;
int ret;
if ((lang = getenv("LC_ALL")) == NULL)
if ((lang = getenv("LC_CTYPE")) == NULL)
if ((lang = getenv("LANG")) == NULL)
lang = "";
/* slang doesn't support multibyte encodings except UTF-8,
avoid character corruption by redrawing the screen */
if (strstr (lang, ".euc") != NULL)
trashScreen = 1;
(void) strlen(ident);
SLutf8_enable(-1);
SLtt_get_terminfo();
SLtt_get_screen_size();
Вернувшись в slsmg.c
, функция init_acs()
сначала попытается использовать Unicode (и всегда будет успешной, если ваша локаль поддерживает UTF-8),Если это что-то другое, функции переходят к использованию любой информации, существующей в описании терминала.
Как правило, если терминал поддерживает символы рисования линий, каждое описание терминала пишется, чтобы рассказать, как рисоватьлиний.Если вы изменили описание терминала, чтобы удалить эти возможности, вы можете получить только ASCII (но это основано на простом чтении функции: slang имеет множество жестко закодированных случаев, предназначенных для заполнения описаний терминалов, которые неведите себя так, как хочет автор сленга, и вы можете споткнуться об одном из них).
Для чего стоит, терминология terminfo, используемая сленгом: acsc
, enacs
, rmacs
, smacs
.