[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