WebKit:
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 30 Jan 2005 17:52:27 +0000 (17:52 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 30 Jan 2005 17:52:27 +0000 (17:52 +0000)
        Reviewed by John.

        - fixed <rdar://problem/3965265> Safari displays HTML as source when default encoding is Hebrew (due to direction overrides added by encoding converter)

        * WebView.subproj/WebPreferencesPrivate.h: Added _systemCFStringEncoding, and changed
        _setInitialDefaultTextEncodingToSystemEncoding to be a class method.
        * WebView.subproj/WebPreferences.m:
        (+[WebPreferences _systemCFStringEncoding]): Added. New SPI to be used by Safari. Broken out of
        _setInitialDefaultTextEncodingToSystemEncoding, but also added cases for MacArabic and MacHebrew.
        (+[WebPreferences _setInitialDefaultTextEncodingToSystemEncoding]): Refactor to use _systemCFStringEncoding.

WebBrowser:

        - fixed <rdar://problem/3965265> Safari displays HTML as source when default encoding is Hebrew (due to direction overrides added by encoding converter)

        * Preferences.subproj/AppearancePreferences.m: (-[AppearancePreferences awakeFromNib]): Use the
        new +[WebPreferences _systemCFStringEncoding] instead of CFStringGetSystemEncoding because the latter
        can return Mac-specific encodings that we never want to use.
        * TextEncodingMenu.m: (-[NSMenu addStandardTextEncodingMenuItemsWithTarget:action:preferredEncoding:]):
        Same as above.

        * AppController.m: (-[AppController applicationDidFinishLaunching:]): Update call to use class method.

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

WebKit/ChangeLog
WebKit/WebView.subproj/WebPreferences.m
WebKit/WebView.subproj/WebPreferencesPrivate.h

index b2f892f2eb47ad46aa0392eb869e0824ec2dc910..c45a4b94d024f0d77b0c3147da0a19aa35c1fd55 100644 (file)
@@ -1,3 +1,16 @@
+2005-01-30  Darin Adler  <darin@apple.com>
+
+        Reviewed by John.
+
+        - fixed <rdar://problem/3965265> Safari displays HTML as source when default encoding is Hebrew (due to direction overrides added by encoding converter)
+
+        * WebView.subproj/WebPreferencesPrivate.h: Added _systemCFStringEncoding, and changed
+        _setInitialDefaultTextEncodingToSystemEncoding to be a class method.
+        * WebView.subproj/WebPreferences.m:
+        (+[WebPreferences _systemCFStringEncoding]): Added. New SPI to be used by Safari. Broken out of
+        _setInitialDefaultTextEncodingToSystemEncoding, but also added cases for MacArabic and MacHebrew.
+        (+[WebPreferences _setInitialDefaultTextEncodingToSystemEncoding]): Refactor to use _systemCFStringEncoding.
+
 2005-01-28  Jens Alfke  <jens@apple.com>
 
         Reviewed by Richard.
index 783f3ce6d0e9454ada8213269a0092bfee54063e..c6a0ea802716af62d0e425a251fc857fe207d342 100644 (file)
@@ -609,24 +609,38 @@ static NSMutableDictionary *webPreferencesInstances = nil;
                     userInfo:nil];
 }
 
-- (void)_setInitialDefaultTextEncodingToSystemEncoding
++ (CFStringEncoding)_systemCFStringEncoding
 {
     CFStringEncoding encoding = CFStringGetSystemEncoding();
-    
-    // MacRoman is a special case; maybe we will learn that there should be other special cases later.
-    if (encoding == kCFStringEncodingMacRoman) {
-        encoding = kCFStringEncodingISOLatin1;
-    }
-    
-    NSString *name = (NSString *)CFStringConvertEncodingToIANACharSetName(encoding);
-    
-    // fall back to latin1 if necessary
-    if (name == nil) {
-        name = (NSString *)CFStringConvertEncodingToIANACharSetName(kCFStringEncodingISOLatin1);
+
+    // Map from system encodings to the appropriate default web encoding.
+    // Web pages that are not labeled will be decoded assuming this encoding,
+    // so it's important that this be the most likely encoding to encounter
+    // on a web page. MacArabic, MacHebrew, and MacRoman are not common on
+    // the web, so instead we map to the most common similar encoding actually used.
+    switch (encoding) {
+        case kCFStringEncodingMacArabic:
+            encoding = kCFStringEncodingDOSArabic;
+            break;
+        case kCFStringEncodingMacHebrew:
+            encoding = kCFStringEncodingDOSHebrew;
+            break;
+        case kCFStringEncodingMacRoman:
+            encoding = kCFStringEncodingISOLatin1;
+            break;
     }
-    
+
+    // We must not use any encoding that has no IANA character set name.
+    if (CFStringConvertEncodingToIANACharSetName(encoding) == NULL)
+        return kCFStringEncodingISOLatin1;
+
+    return encoding;
+}
+
++ (void)_setInitialDefaultTextEncodingToSystemEncoding
+{
     [[NSUserDefaults standardUserDefaults] registerDefaults:
-        [NSDictionary dictionaryWithObject:name
+        [NSDictionary dictionaryWithObject:(NSString *)CFStringConvertEncodingToIANACharSetName([self _systemCFStringEncoding])
                                     forKey:WebKitDefaultTextEncodingNamePreferenceKey]];
 }
 
index 561c5a45f6487a58468b94f6c3ec7f92fdd09919..4abadca69df66b78eb436d9af259ac0dca2a4514 100644 (file)
@@ -22,6 +22,7 @@
 + (void)_setInstance:(WebPreferences *)instance forIdentifier:(NSString *)identifier;
 + (void)_removeReferenceForIdentifier:(NSString *)identifier;
 - (NSTimeInterval)_backForwardCacheExpirationInterval;
-- (void)_setInitialDefaultTextEncodingToSystemEncoding;
++ (CFStringEncoding)_systemCFStringEncoding;
++ (void)_setInitialDefaultTextEncodingToSystemEncoding;
 + (void)_setIBCreatorID:(NSString *)string;
 @end