}
#endif
- if (!strcmp(buffer, "utf-8"))
+ if (mutt_is_utf8 (buffer))
Charset_is_utf8 = 1;
#ifndef HAVE_WC_FUNCS
else if (!ascii_strcasecmp(buffer, "euc-jp") || !ascii_strcasecmp(buffer, "shift_jis")
return x;
}
+static int iswupper_ucs (wint_t x)
+{
+ /* Only works for x < 0x130 */
+ if ((0x60 < x && x < 0x7b) || (0xe0 <= x && x < 0xff && x != 0xf7))
+ return 0;
+ else if ((0x40 < x && x < 0x5b) || (0xbf < x && x < 0xde))
+ return 1;
+ else if (0x100 <= x && x < 0x130)
+ return 1;
+ else if (x == 0xb5)
+ return 1;
+ else if (x == 0xff)
+ return 0;
+ else
+ return 0;
+}
+
static wint_t towlower_ucs (wint_t x)
{
/* Only works for x < 0x130 */
return !(wc == 0xd7 || wc == 0xf7);
}
+static int iswalpha_ucs (wint_t wc)
+{
+ /* Only works for x < 0x220 */
+ if (wc >= 0x100)
+ return 1;
+ else if (wc < 0x3a)
+ return 0;
+ else if (wc < 0xa0)
+ return (0x40 < (wc & ~0x20) && (wc & ~0x20) < 0x5b);
+ else if (wc < 0xc0)
+ return (wc == 0xaa || wc == 0xb5 || wc == 0xba);
+ else
+ return !(wc == 0xd7 || wc == 0xf7);
+}
+
wint_t towupper (wint_t wc)
{
if (Charset_is_utf8 || charset_is_ja)
return (0 <= wc && wc < 256) ? isalnum (wc) : 0;
}
+int iswalpha (wint_t wc)
+{
+ if (Charset_is_utf8 || charset_is_ja)
+ return iswalpha_ucs (wc);
+ else
+ return (0 <= wc && wc < 256) ? isalpha (wc) : 0;
+}
+
+int iswupper (wint_t wc)
+{
+ if (Charset_is_utf8 || charset_is_ja)
+ return iswupper_ucs (wc);
+ else
+ return (0 <= wc && wc < 256) ? isupper (wc) : 0;
+}
+
/*
* l10n for Japanese:
* Symbols, Greek and Cyrillic in JIS X 0208, Japanese Kanji
if (k == (size_t)(-1) || k == (size_t)(-2))
{
k = 1;
+ memset (&mbstate1, 0, sizeof (mbstate1));
wc = replacement_char();
}
if (!IsWPrint (wc))