/* Single byte: first check normally, then with ignore case. */
if (s1[i] != s2[i])
{
- cdiff = TOLOWER_LOC(s1[i]) - TOLOWER_LOC(s2[i]);
+ cdiff = MB_TOLOWER(s1[i]) - MB_TOLOWER(s2[i]);
if (cdiff != 0)
return cdiff;
}
break;
case CLASS_LOWER:
for (cu = 1; cu <= 255; cu++)
- if (islower(cu))
+ if (MB_ISLOWER(cu))
regc(cu);
break;
case CLASS_PRINT:
break;
case CLASS_UPPER:
for (cu = 1; cu <= 255; cu++)
- if (isupper(cu))
+ if (MB_ISUPPER(cu))
regc(cu);
break;
case CLASS_XDIGIT:
(enc_utf8 && utf_fold(prog->regstart) == utf_fold(c)))
|| (c < 255 && prog->regstart < 255 &&
#endif
- TOLOWER_LOC(prog->regstart) == TOLOWER_LOC(c)))))
+ MB_TOLOWER(prog->regstart) == MB_TOLOWER(c)))))
retval = regtry(prog, col);
else
retval = 0;
#ifdef FEAT_MBYTE
!enc_utf8 &&
#endif
- TOLOWER_LOC(*opnd) != TOLOWER_LOC(*reginput))))
+ MB_TOLOWER(*opnd) != MB_TOLOWER(*reginput))))
status = RA_NOMATCH;
else if (*opnd == NUL)
{
rst.nextb = *OPERAND(next);
if (ireg_ic)
{
- if (isupper(rst.nextb))
- rst.nextb_ic = TOLOWER_LOC(rst.nextb);
+ if (MB_ISUPPER(rst.nextb))
+ rst.nextb_ic = MB_TOLOWER(rst.nextb);
else
- rst.nextb_ic = TOUPPER_LOC(rst.nextb);
+ rst.nextb_ic = MB_TOUPPER(rst.nextb);
}
else
rst.nextb_ic = rst.nextb;
int cu, cl;
/* This doesn't do a multi-byte character, because a MULTIBYTECODE
- * would have been used for it. */
+ * would have been used for it. It does handle single-byte
+ * characters, such as latin1. */
if (ireg_ic)
{
- cu = TOUPPER_LOC(*opnd);
- cl = TOLOWER_LOC(*opnd);
+ cu = MB_TOUPPER(*opnd);
+ cl = MB_TOLOWER(*opnd);
while (count < maxcount && (*scan == cu || *scan == cl))
{
count++;
cc = utf_fold(c);
else
#endif
- if (isupper(c))
- cc = TOLOWER_LOC(c);
- else if (islower(c))
- cc = TOUPPER_LOC(c);
+ if (MB_ISUPPER(c))
+ cc = MB_TOLOWER(c);
+ else if (MB_ISLOWER(c))
+ cc = MB_TOUPPER(c);
else
return vim_strchr(s, c);
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 61,
/**/
60,
/**/
#endif
#ifdef FEAT_MBYTE
-# define MB_STRICMP(d, s) (has_mbyte ? mb_strnicmp((char_u *)(d), (char_u *)(s), (int)MAXCOL) : STRICMP((d), (s)))
-# define MB_STRNICMP(d, s, n) (has_mbyte ? mb_strnicmp((char_u *)(d), (char_u *)(s), (int)(n)) : STRNICMP((d), (s), (n)))
+/* We need to call mb_stricmp() even when we aren't dealing with a multi-byte
+ * encoding because mb_stricmp() takes care of all ascii and non-ascii
+ * encodings, including characters with umluats in latin1, etc., while
+ * STRICMP() only handles the system locale version, which often does not
+ * handle non-ascii properly. */
+
+# define MB_STRICMP(d, s) mb_strnicmp((char_u *)(d), (char_u *)(s), (int)MAXCOL)
+# define MB_STRNICMP(d, s, n) mb_strnicmp((char_u *)(d), (char_u *)(s), (int)(n))
#else
# define MB_STRICMP(d, s) STRICMP((d), (s))
# define MB_STRNICMP(d, s, n) STRNICMP((d), (s), (n))