Replace use of WKCopyCFLocalizationPreferredName with NSLocale public API
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Aug 2014 19:39:51 +0000 (19:39 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Aug 2014 19:39:51 +0000 (19:39 +0000)
https://bugs.webkit.org/show_bug.cgi?id=136082

Reviewed by Alexey Proskuryakov.

Source/WebCore:

* platform/mac/Language.mm:
(WebCore::httpStyleLanguageCode): Replace use of WKCopyCFLocalizationPreferredName
with new WebCoreNSStringExtras helper.
* platform/mac/WebCoreNSStringExtras.mm: Replacements for the aspects of
WKCopyCFLocalizationPreferredName.
(preferredBundleLocalizationName): New helper - most preferred localization available
in the main bundle, canonicalized the way we like it.
(canonicalLocalizationName): Convert a lcalization name to a string with language and
country code, using default if necessary (e.g. "en" maps to "en_US").
* WebCore.order: Remove mention of WKCopyCFLocalizationPreferredName.
* WebCore.exp.in: ditto; also export preferredBundleLocalizationName for WebKit(2).
* platform/ios/WebCoreSystemInterfaceIOS.mm: ditto
* platform/mac/WebCoreSystemInterface.h: ditto
* platform/mac/WebCoreSystemInterface.mm: ditto

Source/WebKit/mac:

* Plugins/Hosted/NetscapePluginHostManager.mm:
(WebKit::NetscapePluginHostManager::spawnPluginHost): Get current
localization name using WebCore helper instead of SPI.
* Plugins/WebBasePluginPackage.mm: Fixed the include style for this
file.
(-[WebBasePluginPackage getPluginInfoFromPLists]): Get current
localization name using WebCore helper instead of SPI.
(+[WebBasePluginPackage preferredLocalizationName]): Deleted. This
helper no longer pulls its weight.
* WebCoreSupport/WebSystemInterface.mm:
(InitWebCoreSystemInterface): Remove mention of
WKCopyCFLocalizationPreferredName.
* WebKit.order: ditto

Source/WebKit2:

* UIProcess/Launcher/mac/ProcessLauncherMac.mm:
(WebKit::connectToService): Remove accidental leftover retrieval
of the localization.
(WebKit::createProcess): Get current localization name from
CFBundle API instead of using SPI.
* WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
(InitWebCoreSystemInterface): Remove mention of WKCopyCFLocalizationPreferredName
* mac/WebKit2.order: ditto

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@172866 268f45cc-cd09-0410-ab3c-d52691b4dbfc

18 files changed:
Source/WebCore/ChangeLog
Source/WebCore/WebCore.exp.in
Source/WebCore/WebCore.order
Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm
Source/WebCore/platform/mac/Language.mm
Source/WebCore/platform/mac/WebCoreNSStringExtras.h
Source/WebCore/platform/mac/WebCoreNSStringExtras.mm
Source/WebCore/platform/mac/WebCoreSystemInterface.h
Source/WebCore/platform/mac/WebCoreSystemInterface.mm
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/Plugins/Hosted/NetscapePluginHostManager.mm
Source/WebKit/mac/Plugins/WebBasePluginPackage.mm
Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm
Source/WebKit/mac/WebKit.order
Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm
Source/WebKit2/WebProcess/WebCoreSupport/mac/WebSystemInterface.mm
Source/WebKit2/mac/WebKit2.order

index c91fb4c..5666324 100644 (file)
@@ -1,3 +1,25 @@
+2014-08-20  Maciej Stachowiak  <mjs@apple.com>
+
+        Replace use of WKCopyCFLocalizationPreferredName with NSLocale public API
+        https://bugs.webkit.org/show_bug.cgi?id=136082
+
+        Reviewed by Alexey Proskuryakov.
+
+        * platform/mac/Language.mm:
+        (WebCore::httpStyleLanguageCode): Replace use of WKCopyCFLocalizationPreferredName
+        with new WebCoreNSStringExtras helper.
+        * platform/mac/WebCoreNSStringExtras.mm: Replacements for the aspects of
+        WKCopyCFLocalizationPreferredName.
+        (preferredBundleLocalizationName): New helper - most preferred localization available
+        in the main bundle, canonicalized the way we like it.
+        (canonicalLocalizationName): Convert a lcalization name to a string with language and
+        country code, using default if necessary (e.g. "en" maps to "en_US").
+        * WebCore.order: Remove mention of WKCopyCFLocalizationPreferredName.
+        * WebCore.exp.in: ditto; also export preferredBundleLocalizationName for WebKit(2).
+        * platform/ios/WebCoreSystemInterfaceIOS.mm: ditto
+        * platform/mac/WebCoreSystemInterface.h: ditto
+        * platform/mac/WebCoreSystemInterface.mm: ditto
+
 2014-08-22  Daniel Bates  <dabates@apple.com>
 
         [iOS] Disable ENABLE_IOS_{GESTURE, TOUCH}_EVENTS, and temporarily disable ENABLE_TOUCH_EVENTS
index c29f9a5..0b832df 100644 (file)
@@ -2077,6 +2077,7 @@ _filenameByFixingIllegalCharacters
 _hasCaseInsensitivePrefix
 _hasCaseInsensitiveSubstring
 _hasCaseInsensitiveSuffix
+_preferredBundleLocalizationName
 _stringIsCaseInsensitiveEqualToString
 _suggestedFilenameWithMIMEType
 _wkCALayerEnumerateRectsBeingDrawnWithBlock
@@ -2087,7 +2088,6 @@ _wkCGContextResetClip
 _wkCGPathAddRoundedRect
 _wkCGPatternCreateWithImageAndTransform
 _wkCTRunGetInitialAdvance
-_wkCopyCFLocalizationPreferredName
 _wkCopyCFURLResponseSuggestedFilename
 _wkCopyCONNECTProxyResponse
 _wkCopyHTTPCookieStorage
index 72619c1..21dfae4 100644 (file)
@@ -30590,7 +30590,6 @@ _wkCGContextGetShouldSmoothFonts
 _wkCGContextResetClip
 _wkCGContextDrawsWithCorrectShadowOffsets
 _wkCGPatternCreateWithImageAndTransform
-_wkCopyCFLocalizationPreferredName
 _wkCopyNSURLResponseStatusLine
 _wkCopyNSURLResponseCertificateChain
 _wkDrawBezeledTextFieldCell
index 921fb84..cb00173 100644 (file)
@@ -30,7 +30,6 @@ WEBCORE_EXPORT void (*wkCALayerEnumerateRectsBeingDrawnWithBlock)(CALayer *, CGC
 WEBCORE_EXPORT BOOL (*wkCGContextGetShouldSmoothFonts)(CGContextRef);
 WEBCORE_EXPORT CGPatternRef (*wkCGPatternCreateWithImageAndTransform)(CGImageRef, CGAffineTransform, int);
 WEBCORE_EXPORT void (*wkCGContextResetClip)(CGContextRef);
-WEBCORE_EXPORT CFStringRef (*wkCopyCFLocalizationPreferredName)(CFStringRef);
 WEBCORE_EXPORT void (*wkClearGlyphVector)(void* glyphs);
 WEBCORE_EXPORT OSStatus (*wkConvertCharToGlyphs)(void* styleGroup, const UniChar*, unsigned numCharacters, void* glyphs);
 WEBCORE_EXPORT NSString* (*wkGetMIMETypeForExtension)(NSString*);
index bc72c49..fa2542b 100644 (file)
@@ -27,7 +27,7 @@
 #import "Language.h"
 
 #import "BlockExceptions.h"
-#import "WebCoreSystemInterface.h"
+#import "WebCoreNSStringExtras.h"
 #import <mutex>
 #import <wtf/Assertions.h>
 #import <wtf/NeverDestroyed.h>
@@ -77,25 +77,9 @@ static Vector<String>& preferredLanguages()
 
 namespace WebCore {
 
-static String httpStyleLanguageCode(NSString *languageCode)
+static String httpStyleLanguageCode(NSString *language)
 {
-    // Look up the language code using CFBundle.
-    RetainPtr<CFStringRef> preferredLanguageCode = adoptCF(wkCopyCFLocalizationPreferredName((CFStringRef)languageCode));
-
-    if (preferredLanguageCode)
-        languageCode = (NSString *)preferredLanguageCode.get();
-
-    // Make the string lowercase.
-    NSString *lowercaseLanguageCode = [languageCode lowercaseString];
-
-    // Turn a '_' into a '-' if it appears after a 2-letter language code.
-    if ([lowercaseLanguageCode length] >= 3 && [lowercaseLanguageCode characterAtIndex:2] == '_') {
-        RetainPtr<NSMutableString> mutableLanguageCode = adoptNS([lowercaseLanguageCode mutableCopy]);
-        [mutableLanguageCode.get() replaceCharactersInRange:NSMakeRange(2, 1) withString:@"-"];
-        return mutableLanguageCode.get();
-    }
-
-    return lowercaseLanguageCode;
+    return [[NSLocale canonicalLanguageIdentifierFromString:canonicalLocaleName(language)] lowercaseString];
 }
 
 Vector<String> platformUserPreferredLanguages()
index d535990..09d0886 100644 (file)
@@ -48,6 +48,9 @@ NSString *filenameByFixingIllegalCharacters(NSString *);
 CFStringEncoding stringEncodingForResource(Handle resource);
 #endif
 
+NSString *preferredBundleLocalizationName();
+NSString *canonicalLocaleName(NSString *);
+
 #ifdef __cplusplus
 }
 #endif
index 129ec26..33c7411 100644 (file)
@@ -122,6 +122,34 @@ CFStringEncoding stringEncodingForResource(Handle resource)
     return encoding;
 }
 
+
+NSString *preferredBundleLocalizationName()
+{
+    // FIXME: Any use of this function to pass localizations to another
+    // process is likely not completely right, since it only considers
+    // one localization.
+    NSArray *preferredLocalizations = [[NSBundle mainBundle] preferredLocalizations];
+    if (!preferredLocalizations || ![preferredLocalizations count])
+        return @"en_US";
+
+    return canonicalLocaleName([preferredLocalizations objectAtIndex:0]);
+}
+
+NSString *canonicalLocaleName(NSString *language)
+{
+    // FIXME: <rdar://problem/18083880> Replace use of Script Manager
+    // to canonicalize locales with a custom Web-specific table
+    LangCode languageCode;
+    RegionCode regionCode;
+
+    OSStatus status = LocaleStringToLangAndRegionCodes([language UTF8String], &languageCode, &regionCode);
+    if (status != noErr)
+        return @"en_US";
+
+    RetainPtr<CFStringRef> code = adoptCF(CFLocaleCreateCanonicalLocaleIdentifierFromScriptManagerCodes(0, languageCode, regionCode));
+    return [(NSString*)code.get() autorelease];
+}
+
 #if COMPILER(CLANG)
 #pragma clang diagnostic pop
 #endif
index b0f7732..0ae5d38 100644 (file)
@@ -149,7 +149,6 @@ extern CFReadStreamRef (*wkCreateCustomCFReadStream)(void *(*formCreate)(CFReadS
     void (*formSchedule)(CFReadStreamRef, CFRunLoopRef, CFStringRef, void *), 
     void (*formUnschedule)(CFReadStreamRef, CFRunLoopRef, CFStringRef, void *),
     void *context);
-extern CFStringRef (*wkCopyCFLocalizationPreferredName)(CFStringRef);
 extern NSString* (*wkCopyNSURLResponseStatusLine)(NSURLResponse*);
 extern CFArrayRef (*wkCopyNSURLResponseCertificateChain)(NSURLResponse*);
 extern CFStringEncoding (*wkGetWebDefaultCFStringEncoding)(void);
index cbd6333..1a23acb 100644 (file)
@@ -35,7 +35,6 @@ void (*wkCGContextResetClip)(CGContextRef);
 bool (*wkCGContextDrawsWithCorrectShadowOffsets)(CGContextRef);
 #endif
 CGPatternRef (*wkCGPatternCreateWithImageAndTransform)(CGImageRef, CGAffineTransform, int);
-CFStringRef (*wkCopyCFLocalizationPreferredName)(CFStringRef);
 NSString* (*wkCopyNSURLResponseStatusLine)(NSURLResponse*);
 CFArrayRef (*wkCopyNSURLResponseCertificateChain)(NSURLResponse*);
 CFStringEncoding (*wkGetWebDefaultCFStringEncoding)(void);
index 9358120..18b5601 100644 (file)
@@ -1,3 +1,24 @@
+2014-08-20  Maciej Stachowiak  <mjs@apple.com>
+
+        Replace use of WKCopyCFLocalizationPreferredName with NSLocale public API
+        https://bugs.webkit.org/show_bug.cgi?id=136082
+
+        Reviewed by Alexey Proskuryakov.
+
+        * Plugins/Hosted/NetscapePluginHostManager.mm:
+        (WebKit::NetscapePluginHostManager::spawnPluginHost): Get current
+        localization name using WebCore helper instead of SPI.
+        * Plugins/WebBasePluginPackage.mm: Fixed the include style for this 
+        file.
+        (-[WebBasePluginPackage getPluginInfoFromPLists]): Get current
+        localization name using WebCore helper instead of SPI.
+        (+[WebBasePluginPackage preferredLocalizationName]): Deleted. This
+        helper no longer pulls its weight.
+        * WebCoreSupport/WebSystemInterface.mm: 
+        (InitWebCoreSystemInterface): Remove mention of
+        WKCopyCFLocalizationPreferredName.
+        * WebKit.order: ditto
+
 2014-08-22  Daniel Bates  <dabates@apple.com>
 
         [iOS] Disable ENABLE_IOS_{GESTURE, TOUCH}_EVENTS, and temporarily disable ENABLE_TOUCH_EVENTS
index f168a7a..ecfb34c 100644 (file)
@@ -32,6 +32,7 @@
 #import "WebLocalizableStringsInternal.h"
 #import "WebKitSystemInterface.h"
 #import "WebNetscapePluginPackage.h"
+#import <WebCore/WebCoreNSStringExtras.h>
 #import <mach/mach_port.h>
 #import <servers/bootstrap.h>
 #import <spawn.h>
@@ -113,12 +114,10 @@ bool NetscapePluginHostManager::spawnPluginHost(const String& pluginPath, cpu_ty
     NSString *pluginHostAppPath = [[NSBundle bundleForClass:[WebNetscapePluginPackage class]] pathForAuxiliaryExecutable:pluginHostAppName];
     NSString *pluginHostAppExecutablePath = [[NSBundle bundleWithPath:pluginHostAppPath] executablePath];
 
-    RetainPtr<CFStringRef> localization = adoptCF(WKCopyCFLocalizationPreferredName(NULL));
-    
     NSDictionary *launchProperties = [[NSDictionary alloc] initWithObjectsAndKeys:
                                       pluginHostAppExecutablePath, @"pluginHostPath",
                                       [NSNumber numberWithInt:pluginArchitecture], @"cpuType",
-                                      (NSString *)localization.get(), @"localization",
+                                      preferredBundleLocalizationName(), @"localization",
                                       nil];
 
     NSData *data = [NSPropertyListSerialization dataWithPropertyList:launchProperties format:NSPropertyListBinaryFormat_v1_0 options:0 error:nullptr];
index bc13dc8..a4820d8 100644 (file)
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#import <WebKitLegacy/WebBasePluginPackage.h>
+#import "WebBasePluginPackage.h"
 
-#import <algorithm>
+#import "WebKitLogging.h"
+#import "WebKitNSStringExtras.h"
+#import "WebNetscapePluginPackage.h"
+#import "WebPluginPackage.h"
+#import "WebTypesInternal.h"
+#import <WebCore/WebCoreNSStringExtras.h>
 #import <WebCore/WebCoreObjCExtras.h>
-#import <WebKitLegacy/WebKitNSStringExtras.h>
-#import <WebKitLegacy/WebNetscapePluginPackage.h>
-#import <WebKitLegacy/WebPluginPackage.h>
+#import <algorithm>
+#import <mach-o/arch.h>
+#import <mach-o/fat.h>
+#import <mach-o/loader.h>
 #import <runtime/InitializeThreading.h>
 #import <wtf/Assertions.h>
 #import <wtf/MainThread.h>
 #import <wtf/Vector.h>
 #import <wtf/text/CString.h>
 
-#import <WebKitSystemInterface.h>
-
-#import "WebKitLogging.h"
-#import "WebTypesInternal.h"
-
-#import <mach-o/arch.h>
-#import <mach-o/fat.h>
-#import <mach-o/loader.h>
 
 #define JavaCocoaPluginIdentifier   "com.apple.JavaPluginCocoa"
 #define JavaCarbonPluginIdentifier  "com.apple.JavaAppletPlugin"
@@ -90,11 +88,6 @@ using namespace WebCore;
     return [pluginPackage autorelease];
 }
 
-+ (NSString *)preferredLocalizationName
-{
-    return CFBridgingRelease(WKCopyCFLocalizationPreferredName(NULL));
-}
-
 #if COMPILER(CLANG)
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -196,7 +189,7 @@ static NSString *pathByResolvingSymlinksAndAliases(NSString *thePath)
         if (pList) {
             // If the plist isn't localized, have the plug-in recreate it in the preferred language.
             NSString *localizationName = [pList objectForKey:WebPluginLocalizationNameKey];
-            if (![localizationName isEqualToString:[[self class] preferredLocalizationName]])
+            if (![localizationName isEqualToString:preferredBundleLocalizationName()])
                 pList = [self pListForPath:pListPath createFile:YES];
             MIMETypes = [pList objectForKey:WebPluginMIMETypesKey];
         } else
index f3b82d9..44315ef 100644 (file)
@@ -57,7 +57,6 @@ void InitWebCoreSystemInterface(void)
 #if PLATFORM(IOS) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
     INIT(CTFontTransformGlyphs);
 #endif
-    INIT(CopyCFLocalizationPreferredName);
     INIT(CopyCONNECTProxyResponse);
     INIT(CopyNSURLResponseStatusLine);
     INIT(CopyNSURLResponseCertificateChain);
index ad880a1..6f1c2ca 100644 (file)
@@ -26,7 +26,6 @@ __Z26InitWebCoreSystemInterfacev
 +[WebView _shouldAutomaticDashSubstitutionBeEnabled]
 +[WebView _shouldAutomaticTextReplacementBeEnabled]
 +[WebView _shouldAutomaticSpellingCorrectionBeEnabled]
-_WKCopyCFLocalizationPreferredName
 +[WebView(WebPrivate) _setDomainRelaxationForbidden:forURLScheme:]
 +[WebView(WebPrivate) _registerURLSchemeAsAllowingLocalStorageAccessInPrivateBrowsing:]
 +[WebView(WebPrivate) _registerURLSchemeAsAllowingDatabaseAccessInPrivateBrowsing:]
@@ -849,7 +848,6 @@ __ZN3WTF6VectorINS_6StringELm0ENS_15CrashOnOverflowEEC2ERKS3_
 __ZN7WebCore13MimeClassInfoD2Ev
 -[WebBasePluginPackage isNativeLibraryData:]
 -[WebBasePluginPackage pListForPath:createFile:]
-+[WebBasePluginPackage preferredLocalizationName]
 -[WebPluginDatabase(Internal) _addPlugin:]
 -[WebBasePluginPackage path]
 -[WebBasePluginPackage wasAddedToPluginDatabase:]
index 76d3541..52c00b9 100644 (file)
@@ -1,3 +1,19 @@
+2014-08-19  Maciej Stachowiak  <mjs@apple.com>
+
+        Replace use of WKCopyCFLocalizationPreferredName with NSLocale public API
+        https://bugs.webkit.org/show_bug.cgi?id=136082
+
+        Reviewed by Alexey Proskuryakov.
+
+        * UIProcess/Launcher/mac/ProcessLauncherMac.mm:
+        (WebKit::connectToService): Remove accidental leftover retrieval
+        of the localization.
+        (WebKit::createProcess): Get current localization name from
+        CFBundle API instead of using SPI.
+        * WebProcess/WebCoreSupport/mac/WebSystemInterface.mm:
+        (InitWebCoreSystemInterface): Remove mention of WKCopyCFLocalizationPreferredName
+        * mac/WebKit2.order: ditto
+
 2014-08-22  Daniel Bates  <dabates@apple.com>
 
         [iOS] Disable ENABLE_IOS_{GESTURE, TOUCH}_EVENTS, and temporarily disable ENABLE_TOUCH_EVENTS
index d0c9d7c..8e32a3b 100644 (file)
@@ -28,8 +28,8 @@
 
 #import "DynamicLinkerEnvironmentExtractor.h"
 #import "EnvironmentVariables.h"
-#import "WebKitSystemInterface.h"
 #import <WebCore/SoftLinking.h>
+#import <WebCore/WebCoreNSStringExtras.h>
 #import <crt_externs.h>
 #import <mach-o/dyld.h>
 #import <mach/machine.h>
@@ -210,8 +210,7 @@ static void connectToService(const ProcessLauncher::LaunchOptions& launchOptions
     // 1. When the application and system frameworks simply have different localized resources available, we should match the application.
     // 1.1. An important case is WebKitTestRunner, where we should use English localizations for all system frameworks.
     // 2. When AppleLanguages is passed as command line argument for UI process, or set in its preferences, we should respect it in child processes.
-    RetainPtr<CFStringRef> localization = adoptCF(WKCopyCFLocalizationPreferredName(0));
-    if (localization && _CFBundleSetupXPCBootstrapPtr()) {
+    if (_CFBundleSetupXPCBootstrapPtr()) {
         auto initializationMessage = IPC::adoptXPC(xpc_dictionary_create(nullptr, nullptr, 0));
         _CFBundleSetupXPCBootstrapPtr()(initializationMessage.get());
         xpc_connection_set_bootstrap(connection.get(), initializationMessage.get());
@@ -457,7 +456,7 @@ static void createProcess(const ProcessLauncher::LaunchOptions& launchOptions, b
     // 1. When the application and system frameworks simply have different localized resources available, we should match the application.
     // 1.1. An important case is WebKitTestRunner, where we should use English localizations for all system frameworks.
     // 2. When AppleLanguages is passed as command line argument for UI process, or set in its preferences, we should respect it in child processes.
-    CString appleLanguagesArgument = String("('" + String(adoptCF(WKCopyCFLocalizationPreferredName(0)).get()) + "')").utf8();
+    CString appleLanguagesArgument = String("('" + String(preferredBundleLocalizationName()) + "')").utf8();
 
     Vector<const char*> args;
     args.append([processAppExecutablePath fileSystemRepresentation]);
index f9e0716..4f6e3f8 100644 (file)
@@ -40,7 +40,6 @@ void InitWebCoreSystemInterface(void)
         INIT(AdvanceDefaultButtonPulseAnimation);
 #endif
         INIT(CALayerEnumerateRectsBeingDrawnWithBlock);
-        INIT(CopyCFLocalizationPreferredName);
         INIT(CGContextGetShouldSmoothFonts);
         INIT(CGPatternCreateWithImageAndTransform);
         INIT(CGContextResetClip);
index 70ca41f..444b5f2 100644 (file)
@@ -3423,7 +3423,6 @@ __ZN3WTF16VectorBufferBaseINS_6RefPtrIN8Messages15WebProcessProxy26GetPluginProc
 __ZN6WebKit20EnvironmentVariables11appendValueEPKcS2_c
 __ZN3WTF6VectorINSt3__14pairINS_7CStringES3_EELm0ENS_15CrashOnOverflowEED2Ev
 __ZN3WTF6VectorINSt3__14pairINS_7CStringES3_EELm0ENS_15CrashOnOverflowEE6shrinkEm
-_WKCopyCFLocalizationPreferredName
 __ZN6WebKit15ProcessLauncher19processTypeAsStringENS0_11ProcessTypeE
 __ZNK3WTF12StringAppendIPKcNS_6StringEEcvS3_Ev
 __ZN3WTF6VectorINS_7CStringELm0ENS_15CrashOnOverflowEE14appendSlowCaseIS1_EEvRKT_