aboutsummaryrefslogtreecommitdiff
path: root/contrib/ncurses/ncurses/widechar/lib_wacs.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ncurses/ncurses/widechar/lib_wacs.c')
-rw-r--r--contrib/ncurses/ncurses/widechar/lib_wacs.c43
1 files changed, 20 insertions, 23 deletions
diff --git a/contrib/ncurses/ncurses/widechar/lib_wacs.c b/contrib/ncurses/ncurses/widechar/lib_wacs.c
index 05fa329dd9fa..fe893b4d2f8b 100644
--- a/contrib/ncurses/ncurses/widechar/lib_wacs.c
+++ b/contrib/ncurses/ncurses/widechar/lib_wacs.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright (c) 2002 Free Software Foundation, Inc. *
+ * Copyright (c) 2002,2006 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
@@ -33,23 +33,10 @@
#include <curses.priv.h>
#include <term.h>
-MODULE_ID("$Id: lib_wacs.c,v 1.2 2002/02/17 00:02:15 tom Exp $")
+MODULE_ID("$Id: lib_wacs.c,v 1.7 2006/12/17 15:16:17 tom Exp $")
NCURSES_EXPORT_VAR(cchar_t) * _nc_wacs = 0;
-static int
-_nc_unicode_locale(void)
-{
- char *s;
- if (((s = getenv("LC_ALL")) != 0 && *s != '\0')
- || ((s = getenv("LC_ALL")) != 0 && *s != '\0')
- || ((s = getenv("LC_ALL")) != 0 && *s != '\0')) {
- if (strstr(s, ".UTF-8") != 0)
- return 1;
- }
- return 0;
-}
-
NCURSES_EXPORT(void)
_nc_init_wacs(void)
{
@@ -72,7 +59,7 @@ _nc_init_wacs(void)
{ 'n', { '+', 0x253c }}, /* large plus or crossover */
{ 'o', { '~', 0x23ba }}, /* scan line 1 */
{ 's', { '_', 0x23bd }}, /* scan line 9 */
- { '\'', { '+', 0x25c6 }}, /* diamond */
+ { '`', { '+', 0x25c6 }}, /* diamond */
{ 'a', { ':', 0x2592 }}, /* checker board (stipple) */
{ 'f', { '\'', 0x00b0 }}, /* degree symbol */
{ 'g', { '#', 0x00b1 }}, /* plus/minus */
@@ -99,19 +86,29 @@ _nc_init_wacs(void)
unsigned n, m;
int active = _nc_unicode_locale();
+ /*
+ * If we're running in a UTF-8 locale, will use the Unicode equivalents
+ * rather than the terminfo information. Actually the terminfo should
+ * be the rule, but there are people who are offended by the notion that
+ * a Unicode-capable terminal would have something resembling a mode.
+ * So the smacs/rmacs may be disabled -- sometime.
+ */
T(("initializing WIDE-ACS map (Unicode is%s active)",
active ? "" : " not"));
- if (active) {
- enter_alt_charset_mode = "";
- exit_alt_charset_mode = "";
- acs_chars = "";
- ena_acs = "";
- }
_nc_wacs = typeCalloc(cchar_t, ACS_LEN);
for (n = 0; n < SIZEOF(table); ++n) {
+ int wide = wcwidth(table[n].value[active]);
+
m = table[n].map;
- SetChar(_nc_wacs[m], table[n].value[active], A_NORMAL);
+ if (active && (wide == 1)) {
+ SetChar(_nc_wacs[m], table[n].value[active], A_NORMAL);
+ } else if (acs_map[m] & A_ALTCHARSET) {
+ SetChar(_nc_wacs[m], m, A_ALTCHARSET);
+ } else {
+ SetChar(_nc_wacs[m], table[n].value[0], A_NORMAL);
+ }
+
T(("#%d, SetChar(%c, %#04x) = %s",
n, m,
table[n].value[active],