/*++ Function: PAL_iswlower See MSDN --*/ int __cdecl PAL_iswlower( wchar_16 c ) { BOOL bRetVal = FALSE; #if HAVE_CFSTRING static CFCharacterSetRef sLowercaseSet; if (sLowercaseSet == NULL) { sLowercaseSet = CFCharacterSetGetPredefined( kCFCharacterSetLowercaseLetter); } ENTRY( "iswlower (c=%d)\n", c ); bRetVal = CFCharacterSetIsCharacterMember(sLowercaseSet, c); #else /* HAVE_CFSTRING */ UnicodeDataRec dataRec; ENTRY("iswlower (c=%d)\n", c); if (!GetUnicodeData(c, &dataRec)) { TRACE( "Unable to retrive unicode data for the character %c.\n", c ); goto exit; } if (dataRec.C1_TYPE_FLAGS & C1_LOWER) { bRetVal = TRUE; } exit: #endif /* HAVE_CFSTRING */ LOGEXIT( "iswlower returns %s.\n", bRetVal == TRUE ? "TRUE" : "FALSE" ); return bRetVal; }
/*++ Function: PAL_towupper See MSDN --*/ wchar_16 __cdecl PAL_towupper( wchar_16 c ) { #if HAVE_COREFOUNDATION PERF_ENTRY(towupper); ENTRY("towupper (c=%d)\n", c); if (!PAL_iswupper(c)) { CFMutableStringRef cfString = CFStringCreateMutable( kCFAllocatorDefault, 1); if (cfString != NULL) { CFStringAppendCharacters(cfString, (const UniChar*)&c, 1); CFStringUppercase(cfString, NULL); c = CFStringGetCharacterAtIndex(cfString, 0); CFRelease(cfString); } } LOGEXIT("towupper returns int %d\n", c ); PERF_EXIT(towupper); return c; #else /* HAVE_COREFOUNDATION */ UnicodeDataRec dataRec; PERF_ENTRY(towupper); ENTRY("towupper (c=%d)\n", c); if (!GetUnicodeData(c, &dataRec)) { TRACE( "Unable to retrieve unicode data for the character %c.\n", c ); LOGEXIT("towupper returns int %d\n", c ); PERF_EXIT(towupper); return c; } if ( (dataRec.C1_TYPE_FLAGS & C1_UPPER) || (dataRec.nOpposingCase == 0 )) { LOGEXIT("towupper returns int %d\n", c ); PERF_EXIT(towupper); return c; } else { LOGEXIT("towupper returns int %d\n", dataRec.nOpposingCase ); PERF_EXIT(towupper); return dataRec.nOpposingCase; } #endif /* HAVE_COREFOUNDATION */ }
/*++ Function: PAL_towlower See MSDN --*/ wchar_16 __cdecl PAL_towlower( wchar_16 c ) { #if HAVE_CFSTRING ENTRY("towlower (c=%d)\n", c); if (!PAL_iswlower(c)) { CFMutableStringRef cfString = CFStringCreateMutable( kCFAllocatorDefault, 1); if (cfString != NULL) { CFStringAppendCharacters(cfString, &c, 1); CFStringLowercase(cfString, NULL); c = CFStringGetCharacterAtIndex(cfString, 0); CFRelease(cfString); } } ENTRY("towlower returns int %d\n", c ); return c; #else /* HAVE_CFSTRING */ UnicodeDataRec dataRec; ENTRY("towlower (c=%d)\n", c); if (!GetUnicodeData(c, &dataRec)) { TRACE( "Unable to retrive unicode data for the character %c.\n", c ); LOGEXIT("towlower returns int %d\n", c ); return c; } if ( (dataRec.C1_TYPE_FLAGS & C1_LOWER) || (dataRec.nOpposingCase == 0 )) { LOGEXIT("towlower returns int %d\n", c ); return c; } else { LOGEXIT("towlower returns int %d\n", dataRec.nOpposingCase ); return dataRec.nOpposingCase; } #endif /* HAVE_CFSTRING */ }
/*++ Function: iswdigit See MSDN for more details. --*/ int __cdecl PAL_iswdigit( wchar_16 c ) { UINT nRetVal = 0; #if HAVE_COREFOUNDATION static CFCharacterSetRef sDigitSet; if (sDigitSet == NULL) { sDigitSet = CFCharacterSetGetPredefined( kCFCharacterSetDecimalDigit); } PERF_ENTRY(iswdigit); ENTRY("PAL_iswdigit (c=%d)\n", c); nRetVal = CFCharacterSetIsCharacterMember(sDigitSet, c); #else /* HAVE_COREFOUNDATION */ UnicodeDataRec dataRec; PERF_ENTRY(iswdigit); ENTRY("PAL_iswdigit (c=%d)\n", c); if (GetUnicodeData(c, &dataRec)) { if (dataRec.C1_TYPE_FLAGS & C1_DIGIT) { nRetVal = 1; } else { nRetVal = 0; } } else { TRACE( "No corresonding unicode record for character %d.\n", c ); } #endif /* HAVE_COREFOUNDATION */ LOGEXIT("PAL_iswdigit returning %d\n", nRetVal); PERF_EXIT(iswdigit); return nRetVal; }
/*++ Function: PAL_iswupper See MSDN --*/ int __cdecl PAL_iswupper( wchar_16 c ) { BOOL bRetVal = FALSE; #if HAVE_COREFOUNDATION static CFCharacterSetRef sUppercaseSet; if (sUppercaseSet == NULL) { sUppercaseSet = CFCharacterSetGetPredefined( kCFCharacterSetUppercaseLetter); } PERF_ENTRY(iswupper); ENTRY( "iswupper (c=%d)\n", c ); bRetVal = CFCharacterSetIsCharacterMember(sUppercaseSet, c); #else /* HAVE_COREFOUNDATION */ UnicodeDataRec dataRec; PERF_ENTRY(iswupper); ENTRY( "iswupper (c=%d)\n", c ); if (!GetUnicodeData(c, &dataRec)) { TRACE( "Unable to retrieve unicode data for the character %c.\n", c ); goto exit; } if (dataRec.C1_TYPE_FLAGS & C1_UPPER) { bRetVal = TRUE; } exit: #endif /* HAVE_COREFOUNDATION */ LOGEXIT( "iswupper returns %s.\n", bRetVal == TRUE ? "TRUE" : "FALSE" ); PERF_EXIT(iswupper); return bRetVal; }