[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

darin darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 07:21:31 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 287852833587c8448cac2fed42ef9e310db8567f
Author: darin <darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Jan 23 21:29:32 2003 +0000

            Reviewed by Maciej.
    
    	- fixed 3129556 -- can't search on japanese string at yahoo.co.jp
    
    	The key to fixing this was to look up character sets in a way that does not
    	pay attention to punctuation. Only alphanumeric characters count. Also did
    	a little belt tightening and speeding up while I was at it.
    
            * kwq/KWQCharsets.h: Use const char * instead of CFStringRef.
            * kwq/KWQCharsets.mm:
            (buildDictionaries): Store const char * in the dictionaries instead of CFStringRef,
    	and use the key compare and hash functions that obey only alphanumeric characters.
            (KWQCFStringEncodingFromIANACharsetName): Use const char * directly.
            (KWQCFStringEncodingFromMIB): Tweak code a bit.
            (KWQCFStringEncodingToIANACharsetName): Use const char * directly.
            (KWQCFStringEncodingToMIB): Tweak code a bit.
            (encodingNamesEqual): Added. Compares two names, ignoring non-alphanumeric characters.
            (encodingNameHash): Added.
    
            * kwq/KWQKCharsets.h: Take a const char * instead of a QString. Also overload for QCString.
    	This fixes conversion back and forth from QString that was happening before.
            * kwq/KWQKCharsets.mm: (KCharsets::codecForName): Update for above parameter change.
    
            * kwq/KWQTextCodec.mm:
            (codecForCFStringEncoding): Add check for kCFStringEncodingInvalidId.
            (QTextCodec::codecForMib): Simplify because of above check.
            (QTextCodec::codecForName): Simplify because we don't need to make a CFStringRef, and
    	because of above check.
            (QTextCodec::name): No need to convert the CFStringRef back to a const char * now.
    
            * kwq/WebCoreBridge.mm:
            (-[WebCoreBridge textEncoding]): Convert character set name to a const char * to pass in.
            (+[WebCoreBridge stringWithData:textEncodingName:]): Ditto.
            * kwq/WebCoreEncodings.mm:
            (+[WebCoreEncodings charsetNameForEncoding:]): Convert character set name to an NSString
    	to use as a return value.
            (+[WebCoreEncodings encodingForCharsetName:]): Convert character set name to a const char *
    	to pass in.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@3428 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index a8152fe..b02bc34 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,44 @@
+2003-01-23  Darin Adler  <darin at apple.com>
+
+        Reviewed by Maciej.
+
+	- fixed 3129556 -- can't search on japanese string at yahoo.co.jp
+
+	The key to fixing this was to look up character sets in a way that does not
+	pay attention to punctuation. Only alphanumeric characters count. Also did
+	a little belt tightening and speeding up while I was at it.
+
+        * kwq/KWQCharsets.h: Use const char * instead of CFStringRef.
+        * kwq/KWQCharsets.mm:
+        (buildDictionaries): Store const char * in the dictionaries instead of CFStringRef,
+	and use the key compare and hash functions that obey only alphanumeric characters.
+        (KWQCFStringEncodingFromIANACharsetName): Use const char * directly.
+        (KWQCFStringEncodingFromMIB): Tweak code a bit.
+        (KWQCFStringEncodingToIANACharsetName): Use const char * directly.
+        (KWQCFStringEncodingToMIB): Tweak code a bit.
+        (encodingNamesEqual): Added. Compares two names, ignoring non-alphanumeric characters.
+        (encodingNameHash): Added.
+
+        * kwq/KWQKCharsets.h: Take a const char * instead of a QString. Also overload for QCString.
+	This fixes conversion back and forth from QString that was happening before.
+        * kwq/KWQKCharsets.mm: (KCharsets::codecForName): Update for above parameter change.
+
+        * kwq/KWQTextCodec.mm:
+        (codecForCFStringEncoding): Add check for kCFStringEncodingInvalidId.
+        (QTextCodec::codecForMib): Simplify because of above check.
+        (QTextCodec::codecForName): Simplify because we don't need to make a CFStringRef, and
+	because of above check.
+        (QTextCodec::name): No need to convert the CFStringRef back to a const char * now.
+
+        * kwq/WebCoreBridge.mm:
+        (-[WebCoreBridge textEncoding]): Convert character set name to a const char * to pass in.
+        (+[WebCoreBridge stringWithData:textEncodingName:]): Ditto.
+        * kwq/WebCoreEncodings.mm:
+        (+[WebCoreEncodings charsetNameForEncoding:]): Convert character set name to an NSString
+	to use as a return value.
+        (+[WebCoreEncodings encodingForCharsetName:]): Convert character set name to a const char *
+	to pass in.
+
 2003-01-23  Chris Blumenberg  <cblu at apple.com>
 	
 	Fixed a divide by zero problem.
@@ -32,7 +73,6 @@
 	prevent default if this is an html event handler, rather than one
 	set with addEventListener or the like.
 
->>>>>>> 1.1299
 2003-01-23  Chris Blumenberg  <cblu at apple.com>
 
 	Replaced the paint phase constants with the PaintAction enum. Added PaintActionSelection as a paint action. This will eventually allow us to only paint selected objects. This is needed for the text dragging image.
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index a8152fe..b02bc34 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,44 @@
+2003-01-23  Darin Adler  <darin at apple.com>
+
+        Reviewed by Maciej.
+
+	- fixed 3129556 -- can't search on japanese string at yahoo.co.jp
+
+	The key to fixing this was to look up character sets in a way that does not
+	pay attention to punctuation. Only alphanumeric characters count. Also did
+	a little belt tightening and speeding up while I was at it.
+
+        * kwq/KWQCharsets.h: Use const char * instead of CFStringRef.
+        * kwq/KWQCharsets.mm:
+        (buildDictionaries): Store const char * in the dictionaries instead of CFStringRef,
+	and use the key compare and hash functions that obey only alphanumeric characters.
+        (KWQCFStringEncodingFromIANACharsetName): Use const char * directly.
+        (KWQCFStringEncodingFromMIB): Tweak code a bit.
+        (KWQCFStringEncodingToIANACharsetName): Use const char * directly.
+        (KWQCFStringEncodingToMIB): Tweak code a bit.
+        (encodingNamesEqual): Added. Compares two names, ignoring non-alphanumeric characters.
+        (encodingNameHash): Added.
+
+        * kwq/KWQKCharsets.h: Take a const char * instead of a QString. Also overload for QCString.
+	This fixes conversion back and forth from QString that was happening before.
+        * kwq/KWQKCharsets.mm: (KCharsets::codecForName): Update for above parameter change.
+
+        * kwq/KWQTextCodec.mm:
+        (codecForCFStringEncoding): Add check for kCFStringEncodingInvalidId.
+        (QTextCodec::codecForMib): Simplify because of above check.
+        (QTextCodec::codecForName): Simplify because we don't need to make a CFStringRef, and
+	because of above check.
+        (QTextCodec::name): No need to convert the CFStringRef back to a const char * now.
+
+        * kwq/WebCoreBridge.mm:
+        (-[WebCoreBridge textEncoding]): Convert character set name to a const char * to pass in.
+        (+[WebCoreBridge stringWithData:textEncodingName:]): Ditto.
+        * kwq/WebCoreEncodings.mm:
+        (+[WebCoreEncodings charsetNameForEncoding:]): Convert character set name to an NSString
+	to use as a return value.
+        (+[WebCoreEncodings encodingForCharsetName:]): Convert character set name to a const char *
+	to pass in.
+
 2003-01-23  Chris Blumenberg  <cblu at apple.com>
 	
 	Fixed a divide by zero problem.
@@ -32,7 +73,6 @@
 	prevent default if this is an html event handler, rather than one
 	set with addEventListener or the like.
 
->>>>>>> 1.1299
 2003-01-23  Chris Blumenberg  <cblu at apple.com>
 
 	Replaced the paint phase constants with the PaintAction enum. Added PaintActionSelection as a paint action. This will eventually allow us to only paint selected objects. This is needed for the text dragging image.
diff --git a/WebCore/kwq/KWQCharsets.h b/WebCore/kwq/KWQCharsets.h
index 84e2b5a..83f600c 100644
--- a/WebCore/kwq/KWQCharsets.h
+++ b/WebCore/kwq/KWQCharsets.h
@@ -28,11 +28,10 @@
 
 #include <CoreFoundation/CoreFoundation.h>
 
-CFStringEncoding KWQCFStringEncodingFromIANACharsetName(CFStringRef charsetName);
-CFStringEncoding KWQCFStringEncodingFromMIB(int mib);
+CFStringEncoding KWQCFStringEncodingFromIANACharsetName(const char *);
+const char *KWQCFStringEncodingToIANACharsetName(CFStringEncoding);
 
-CFStringRef KWQCFStringEncodingToIANACharsetName(CFStringEncoding encoding);
-int KWQCFStringEncodingToMIB(CFStringEncoding encoding);
+CFStringEncoding KWQCFStringEncodingFromMIB(int mib);
+int KWQCFStringEncodingToMIB(CFStringEncoding);
 
 #endif /* KWQCHARSETS_H_ */
-
diff --git a/WebCore/kwq/KWQCharsets.mm b/WebCore/kwq/KWQCharsets.mm
index f416f22..e39c2d9 100644
--- a/WebCore/kwq/KWQCharsets.mm
+++ b/WebCore/kwq/KWQCharsets.mm
@@ -24,7 +24,6 @@
  */
 
 #import "KWQCharsets.h"
-#import <CoreFoundation/CoreFoundation.h>
 
 struct CharsetEntry {
     const char *name;
@@ -32,10 +31,14 @@ struct CharsetEntry {
     CFStringEncoding encoding;
 };
 
-
 /* The following autogenerated file includes the charset data. */
 #import "KWQCharsetData.c"
 
+static Boolean encodingNamesEqual(const void *value1, const void *value2);
+static CFHashCode encodingNameHash(const void *value);
+
+static CFDictionaryKeyCallBacks encodingNameKeyCallbacks = { 0, NULL, NULL, NULL, encodingNamesEqual, encodingNameHash };
+
 static CFMutableDictionaryRef nameToEncoding = NULL;
 static CFMutableDictionaryRef mibToEncoding = NULL;
 static CFMutableDictionaryRef encodingToName = NULL;
@@ -43,22 +46,14 @@ static CFMutableDictionaryRef encodingToMIB = NULL;
 
 static void buildDictionaries()
 {
-    int i;
-
-    nameToEncoding = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, NULL);
+    nameToEncoding = CFDictionaryCreateMutable(NULL, 0, &encodingNameKeyCallbacks, NULL);
     mibToEncoding = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
-
-    encodingToName = CFDictionaryCreateMutable(NULL, 0, NULL, &kCFTypeDictionaryValueCallBacks);
+    encodingToName = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
     encodingToMIB = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
 
-    for (i = 0; table[i].name != NULL; i++) {
-        CFStringRef name;
-        name = CFStringCreateWithCString(NULL, table[i].name, kCFStringEncodingASCII);
-
-        if (name != NULL) {
-            CFDictionarySetValue(nameToEncoding, name, (void *)table[i].encoding);
-            CFDictionarySetValue(encodingToName, (void *)table[i].encoding, name);
-        }
+    for (int i = 0; table[i].name != NULL; i++) {
+        CFDictionarySetValue(nameToEncoding, table[i].name, (void *)table[i].encoding);
+        CFDictionarySetValue(encodingToName, (void *)table[i].encoding, table[i].name);
 
         if (table[i].mib != -1) {
             CFDictionarySetValue(mibToEncoding, (void *)table[i].mib, (void *)table[i].encoding);
@@ -67,74 +62,101 @@ static void buildDictionaries()
     }
 }
 
-CFStringEncoding KWQCFStringEncodingFromIANACharsetName(CFStringRef charsetName)
+CFStringEncoding KWQCFStringEncodingFromIANACharsetName(const char *name)
 {
-    CFStringEncoding encoding;
-    const void *value;
-    
     if (nameToEncoding == NULL) {
-        buildDictionaries ();
+        buildDictionaries();
     }
 
-    CFMutableStringRef lowercaseCharsetName = CFStringCreateMutableCopy(NULL, 0, charsetName);
-    CFStringLowercase(lowercaseCharsetName, NULL);
-    
-    if (CFDictionaryGetValueIfPresent(nameToEncoding, (void *)lowercaseCharsetName, &value)) {
-        encoding = (CFStringEncoding)value;
-    } else {
-        encoding = kCFStringEncodingInvalidId;
+    const void *value;
+    if (!CFDictionaryGetValueIfPresent(nameToEncoding, name, &value)) {
+        return kCFStringEncodingInvalidId;
     }
-
-    CFRelease(lowercaseCharsetName);
-
-    return encoding;
+    return (CFStringEncoding)value;
 }
 
 
 CFStringEncoding KWQCFStringEncodingFromMIB(int mib)
 {
-    const void *value;
-    
     if (mibToEncoding == NULL) {
-        buildDictionaries ();
+        buildDictionaries();
     }
     
-    if (CFDictionaryGetValueIfPresent(mibToEncoding, (void *)mib, &value)) {
-        return (CFStringEncoding) value;
-    } else {
+    const void *value;
+    if (!CFDictionaryGetValueIfPresent(mibToEncoding, (void *)mib, &value)) {
         return kCFStringEncodingInvalidId;
     }
+    return (CFStringEncoding)value;
 }
 
-
-
-CFStringRef KWQCFStringEncodingToIANACharsetName(CFStringEncoding encoding)
+const char *KWQCFStringEncodingToIANACharsetName(CFStringEncoding encoding)
 {
-    const void *value;
-    
     if (encodingToName == NULL) {
-        buildDictionaries ();
+        buildDictionaries();
     }
     
-    if (CFDictionaryGetValueIfPresent(encodingToName, (void *)encoding, &value)) {
-        return (CFStringRef) value;
-    } else {
+    const void *value;
+    if (!CFDictionaryGetValueIfPresent(encodingToName, (void *)encoding, &value)) {
         return NULL;
     }
+    return (const char *)value;
 }
 
-
 int KWQCFStringEncodingToMIB(CFStringEncoding encoding)
 {
-    const void *value;
-    
     if (encodingToMIB == NULL) {
-        buildDictionaries ();
+        buildDictionaries();
     }
     
-    if (CFDictionaryGetValueIfPresent(encodingToMIB, (void *)encoding, &value)) {
-        return (int) value;
-    } else {
+    const void *value;
+    if (!CFDictionaryGetValueIfPresent(encodingToMIB, (void *)encoding, &value)) {
         return -1;
     }
+    return (int)value;
+}
+
+static Boolean encodingNamesEqual(const void *value1, const void *value2)
+{
+    const char *s1 = (const char *)value1;
+    const char *s2 = (const char *)value2;
+    
+    while (1) {
+        char c1;
+        do {
+            c1 = *s1++;
+        } while (c1 && !isalnum(c1));
+        char c2;
+        do {
+            c2 = *s2++;
+        } while (c2 && !isalnum(c2));
+        
+        if (tolower(c1) != tolower(c2)) {
+            return false;
+        }
+        
+        if (!c1 || !c2) {
+            return !c1 && !c2;
+        }
+    }
+}
+
+static CFHashCode encodingNameHash(const void *value)
+{
+    const char *s = (const char *)value;
+    
+    CFHashCode h = 0;
+    for (int i = 0; i != 16; ++i) {
+        char c;
+        do {
+            c = *s++;
+        } while (c && !isalnum(c));
+        if (!c) {
+            break;
+        }
+        h = 127 * h + tolower(c);
+    }
+    if (h == 0) {
+        h = 0x80000000;
+    }
+    return h;
 }
diff --git a/WebCore/kwq/KWQKCharsets.h b/WebCore/kwq/KWQKCharsets.h
index 6690e54..737bd23 100644
--- a/WebCore/kwq/KWQKCharsets.h
+++ b/WebCore/kwq/KWQKCharsets.h
@@ -23,17 +23,18 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#ifndef KCHARSETS_H_
-#define KCHARSETS_H_
-
-#include "KWQFont.h"
-#include "KWQString.h"
+#ifndef KWQKCHARSETS_H_
+#define KWQKCHARSETS_H_
 
+class QCString;
+class QString;
 class QTextCodec;
 
 class KCharsets {
 public:
-    QTextCodec *codecForName(const QString &) const;
+    QTextCodec *codecForName(const char *) const;
+    QTextCodec *codecForName(const char *, bool &) const;
+    QTextCodec *codecForName(const QCString &, bool &) const;
     QTextCodec *codecForName(const QString &, bool &) const;
 };
 
diff --git a/WebCore/kwq/KWQKCharsets.mm b/WebCore/kwq/KWQKCharsets.mm
index 205ea2e..c1416ab 100644
--- a/WebCore/kwq/KWQKCharsets.mm
+++ b/WebCore/kwq/KWQKCharsets.mm
@@ -24,16 +24,17 @@
  */
 
 #import "KWQKCharsets.h"
+
 #import "KWQTextCodec.h"
 
-QTextCodec *KCharsets::codecForName(const QString &qs) const
+QTextCodec *KCharsets::codecForName(const char *s) const
 {
-    return QTextCodec::codecForName(qs.latin1());
+    return QTextCodec::codecForName(s);
 }
 
-QTextCodec *KCharsets::codecForName(const QString &qs, bool &ok) const
+QTextCodec *KCharsets::codecForName(const char *s, bool &ok) const
 {
-    QTextCodec *codec = QTextCodec::codecForName(qs.latin1());
+    QTextCodec *codec = QTextCodec::codecForName(s);
     if (codec == NULL) {
         ok = false;
         codec = QTextCodec::codecForName("latin1");
@@ -42,3 +43,13 @@ QTextCodec *KCharsets::codecForName(const QString &qs, bool &ok) const
     }
     return codec;
 }
+
+QTextCodec *KCharsets::codecForName(const QCString &qs, bool &ok) const
+{
+    return codecForName(qs.data(), ok);
+}
+
+QTextCodec *KCharsets::codecForName(const QString &qs, bool &ok) const
+{
+    return codecForName(qs.latin1(), ok);
+}
diff --git a/WebCore/kwq/KWQTextCodec.mm b/WebCore/kwq/KWQTextCodec.mm
index ca0a0da..e47131b 100644
--- a/WebCore/kwq/KWQTextCodec.mm
+++ b/WebCore/kwq/KWQTextCodec.mm
@@ -31,50 +31,31 @@ static CFMutableDictionaryRef encodingToCodec = NULL;
 
 static QTextCodec *codecForCFStringEncoding(CFStringEncoding encoding)
 {
-    const void *value;
-    QTextCodec *codec;
-
+    if (encoding == kCFStringEncodingInvalidId) {
+        return NULL;
+    }
+    
     if (encodingToCodec == NULL) {
         encodingToCodec = CFDictionaryCreateMutable(NULL, 0, NULL, NULL);
     }
     
+    const void *value;
     if (CFDictionaryGetValueIfPresent(encodingToCodec, (void *)encoding, &value)) {
         return (QTextCodec *)value;
-    } else {
-        codec = new QTextCodec(encoding);
-	CFDictionarySetValue(encodingToCodec, (void *)encoding, codec);
-	return codec;
     }
+    QTextCodec *codec = new QTextCodec(encoding);
+    CFDictionarySetValue(encodingToCodec, (void *)encoding, codec);
+    return codec;
 }
 
 QTextCodec *QTextCodec::codecForMib(int mib)
 {
-    CFStringEncoding encoding;
-
-    encoding = KWQCFStringEncodingFromMIB(mib);
-
-    if (encoding == kCFStringEncodingInvalidId) {
-        return NULL;
-    } else {
-        return codecForCFStringEncoding(encoding);
-    }
+    return codecForCFStringEncoding(KWQCFStringEncodingFromMIB(mib));
 }
 
 QTextCodec *QTextCodec::codecForName(const char *name)
 {
-    CFStringRef cfname;
-    CFStringEncoding encoding;
-    
-    cfname = CFStringCreateWithCString(NULL, name, kCFStringEncodingASCII);
-
-    encoding = KWQCFStringEncodingFromIANACharsetName(cfname);
-    CFRelease(cfname);
-
-    if (encoding == kCFStringEncodingInvalidId) {
-        return NULL;
-    } else {
-        return codecForCFStringEncoding(encoding);
-    }
+    return codecForCFStringEncoding(KWQCFStringEncodingFromIANACharsetName(name));
 }
 
 QTextCodec *QTextCodec::codecForLocale()
@@ -84,7 +65,7 @@ QTextCodec *QTextCodec::codecForLocale()
 
 const char *QTextCodec::name() const
 {
-    return [(NSString *)KWQCFStringEncodingToIANACharsetName(encoding) cString];
+    return KWQCFStringEncodingToIANACharsetName(encoding);
 }
 
 int QTextCodec::mibEnum() const
diff --git a/WebCore/kwq/WebCoreBridge.mm b/WebCore/kwq/WebCoreBridge.mm
index d411af0..077a1ed 100644
--- a/WebCore/kwq/WebCoreBridge.mm
+++ b/WebCore/kwq/WebCoreBridge.mm
@@ -534,7 +534,7 @@ static bool initializedObjectCacheSize = FALSE;
 
 - (CFStringEncoding)textEncoding
 {
-    return KWQCFStringEncodingFromIANACharsetName(_part->encoding().getCFString());
+    return KWQCFStringEncodingFromIANACharsetName(_part->encoding().latin1());
 }
 
 - (NSView *)nextKeyView
@@ -646,7 +646,7 @@ static bool initializedObjectCacheSize = FALSE;
 
 + (NSString *)stringWithData:(NSData *)data textEncodingName:(NSString *)textEncodingName
 {
-    CFStringEncoding textEncoding = KWQCFStringEncodingFromIANACharsetName((CFStringRef)textEncodingName);
+    CFStringEncoding textEncoding = KWQCFStringEncodingFromIANACharsetName([textEncodingName lossyCString]);
     return [WebCoreBridge stringWithData:data textEncoding:textEncoding];
 }
 
diff --git a/WebCore/kwq/WebCoreEncodings.mm b/WebCore/kwq/WebCoreEncodings.mm
index 0fd92cd..bfb729b 100644
--- a/WebCore/kwq/WebCoreEncodings.mm
+++ b/WebCore/kwq/WebCoreEncodings.mm
@@ -30,12 +30,12 @@
 
 + (NSString *)charsetNameForEncoding:(CFStringEncoding)encoding
 {
-    return (NSString *)KWQCFStringEncodingToIANACharsetName(encoding);
+    return [NSString stringWithCString:KWQCFStringEncodingToIANACharsetName(encoding)];
 }
 
 + (CFStringEncoding)encodingForCharsetName:(NSString *)charsetName
 {
-    return KWQCFStringEncodingFromIANACharsetName((CFStringRef)charsetName);
+    return KWQCFStringEncodingFromIANACharsetName([charsetName lossyCString]);
 }
 
 @end

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list