[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.18-1-697-g2f78b87
darin at apple.com
darin at apple.com
Wed Jan 20 22:20:09 UTC 2010
The following commit has been merged in the debian/unstable branch:
commit bcd2d660a38213c1f9d41f2cdafda4e66f313ca3
Author: darin at apple.com <darin at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Tue Jan 12 01:48:23 2010 +0000
Fix handling of unusual kana sequences in search
https://bugs.webkit.org/show_bug.cgi?id=33506
Reviewed by Dan Bernstein.
WebCore:
* editing/TextIterator.cpp:
(WebCore::composedVoicedSoundMark): Removed unnnecessary case for a
non-kana-letter character. This function only works for kana letters.
(WebCore::SearchBuffer::isBadMatch): Fixed voiced sound mark code to
properly handle cases where one character has a shorter list of
combining voiced sound marks than the other.
LayoutTests:
* fast/text/find-kana-expected.txt: Updated.
* fast/text/script-tests/find-kana.js: Added new tests for sequences
that do not have composed equivalents. This is needed to test the code
that compares voice marks. The old test cases didn't cover the combining
character code path because normalizing to NFC combined all the sequences.
* platform/mac-leopard/fast/text/find-kana-expected.txt: Updated.
* platform/qt/fast/text/find-kana-expected.txt: Updated.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53114 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 305f466..604a1f4 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,18 @@
+2010-01-11 Darin Adler <darin at apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Fix handling of unusual kana sequences in search
+ https://bugs.webkit.org/show_bug.cgi?id=33506
+
+ * fast/text/find-kana-expected.txt: Updated.
+ * fast/text/script-tests/find-kana.js: Added new tests for sequences
+ that do not have composed equivalents. This is needed to test the code
+ that compares voice marks. The old test cases didn't cover the combining
+ character code path because normalizing to NFC combined all the sequences.
+ * platform/mac-leopard/fast/text/find-kana-expected.txt: Updated.
+ * platform/qt/fast/text/find-kana-expected.txt: Updated.
+
2010-01-11 Simon Fraser <simon.fraser at apple.com>
Reviewed by Kevin Decker.
diff --git a/LayoutTests/fast/text/find-kana-expected.txt b/LayoutTests/fast/text/find-kana-expected.txt
index 8bee3bf..07f6245 100644
--- a/LayoutTests/fast/text/find-kana-expected.txt
+++ b/LayoutTests/fast/text/find-kana-expected.txt
@@ -5,19 +5,27 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
Exact matches first as a baseline
+PASS canFind(decomposedHalfwidthKatakanaLetterBa, decomposedHalfwidthKatakanaLetterBa) is true
+PASS canFind(decomposedHalfwidthKatakanaLetterPa, decomposedHalfwidthKatakanaLetterPa) is true
+PASS canFind(decomposedHiraganaLetterBa, decomposedHiraganaLetterBa) is true
PASS canFind(decomposedHiraganaLetterGa, decomposedHiraganaLetterGa) is true
+PASS canFind(decomposedHiraganaLetterPa, decomposedHiraganaLetterPa) is true
PASS canFind(decomposedKatakanaLetterGa, decomposedKatakanaLetterGa) is true
PASS canFind(decomposedLatinCapitalLetterAWithGrave, decomposedLatinCapitalLetterAWithGrave) is true
PASS canFind(halfwidthKatakanaLetterA, halfwidthKatakanaLetterA) is true
+PASS canFind(halfwidthKatakanaLetterHa, halfwidthKatakanaLetterHa) is true
+PASS canFind(halfwidthKatakanaLetterKa, halfwidthKatakanaLetterKa) is true
PASS canFind(halfwidthKatakanaLetterSmallA, halfwidthKatakanaLetterSmallA) is true
PASS canFind(hiraganaLetterA, hiraganaLetterA) is true
-PASS canFind(hiraganaLetterA, hiraganaLetterA) is true
PASS canFind(hiraganaLetterBa, hiraganaLetterBa) is true
PASS canFind(hiraganaLetterGa, hiraganaLetterGa) is true
PASS canFind(hiraganaLetterHa, hiraganaLetterHa) is true
PASS canFind(hiraganaLetterKa, hiraganaLetterKa) is true
PASS canFind(hiraganaLetterPa, hiraganaLetterPa) is true
+PASS canFind(hiraganaLetterSmallA, hiraganaLetterSmallA) is true
PASS canFind(katakanaLetterA, katakanaLetterA) is true
+PASS canFind(katakanaLetterGa, katakanaLetterGa) is true
+PASS canFind(katakanaLetterKa, katakanaLetterKa) is true
PASS canFind(katakanaLetterSmallA, katakanaLetterSmallA) is true
PASS canFind(latinCapitalLetterAWithGrave, latinCapitalLetterAWithGrave) is true
@@ -55,14 +63,20 @@ PASS canFind(katakanaLetterSmallA, katakanaLetterA) is false
Kana letters where the only difference is in voiced sound marks: Must *not* be treated as equal
+PASS canFind(decomposedHalfwidthKatakanaLetterBa, halfwidthKatakanaLetterHa) is false
+PASS canFind(decomposedHalfwidthKatakanaLetterPa, halfwidthKatakanaLetterHa) is false
PASS canFind(decomposedHiraganaLetterBa, hiraganaLetterHa) is false
PASS canFind(decomposedHiraganaLetterBa, hiraganaLetterPa) is false
PASS canFind(decomposedHiraganaLetterGa, halfwidthKatakanaLetterKa) is false
PASS canFind(decomposedHiraganaLetterGa, hiraganaLetterKa) is false
-PASS canFind(decomposedHiraganaLetterGa, hiraganaLetterKa) is false
PASS canFind(decomposedHiraganaLetterPa, hiraganaLetterBa) is false
PASS canFind(decomposedHiraganaLetterPa, hiraganaLetterHa) is false
+PASS canFind(decomposedKatakanaLetterGa, halfwidthKatakanaLetterKa) is false
+PASS canFind(decomposedKatakanaLetterGa, hiraganaLetterKa) is false
+PASS canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterBa) is false
+PASS canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterPa) is false
PASS canFind(halfwidthKatakanaLetterKa, decomposedHiraganaLetterGa) is false
+PASS canFind(halfwidthKatakanaLetterKa, decomposedKatakanaLetterGa) is false
PASS canFind(hiraganaLetterBa, decomposedHiraganaLetterPa) is false
PASS canFind(hiraganaLetterBa, hiraganaLetterHa) is false
PASS canFind(hiraganaLetterBa, hiraganaLetterPa) is false
@@ -72,7 +86,7 @@ PASS canFind(hiraganaLetterHa, decomposedHiraganaLetterPa) is false
PASS canFind(hiraganaLetterHa, hiraganaLetterBa) is false
PASS canFind(hiraganaLetterHa, hiraganaLetterPa) is false
PASS canFind(hiraganaLetterKa, decomposedHiraganaLetterGa) is false
-PASS canFind(hiraganaLetterKa, decomposedHiraganaLetterGa) is false
+PASS canFind(hiraganaLetterKa, decomposedKatakanaLetterGa) is false
PASS canFind(hiraganaLetterKa, hiraganaLetterGa) is false
PASS canFind(hiraganaLetterPa, decomposedHiraganaLetterBa) is false
PASS canFind(hiraganaLetterPa, hiraganaLetterBa) is false
diff --git a/LayoutTests/fast/text/script-tests/find-kana.js b/LayoutTests/fast/text/script-tests/find-kana.js
index 1bc9913..4596f74 100644
--- a/LayoutTests/fast/text/script-tests/find-kana.js
+++ b/LayoutTests/fast/text/script-tests/find-kana.js
@@ -15,7 +15,9 @@ function canFind(target, specimen)
var combiningGraveAccent = String.fromCharCode(0x0300);
var combiningKatakanaHiraganaSemiVoicedSoundMark = String.fromCharCode(0x309A);
var combiningKatakanaHiraganaVoicedSoundMark = String.fromCharCode(0x3099);
+
var halfwidthKatakanaLetterA = String.fromCharCode(0xFF71);
+var halfwidthKatakanaLetterHa = String.fromCharCode(0xFF76);
var halfwidthKatakanaLetterKa = String.fromCharCode(0xFF76);
var halfwidthKatakanaLetterSmallA = String.fromCharCode(0xFF67);
var hiraganaLetterA = String.fromCharCode(0x3042);
@@ -31,6 +33,8 @@ var katakanaLetterKa = String.fromCharCode(0x30AB);
var katakanaLetterSmallA = String.fromCharCode(0x30A1);
var latinCapitalLetterAWithGrave = String.fromCharCode(0x00C0);
+var decomposedHalfwidthKatakanaLetterBa = halfwidthKatakanaLetterHa + combiningKatakanaHiraganaVoicedSoundMark;
+var decomposedHalfwidthKatakanaLetterPa = halfwidthKatakanaLetterHa + combiningKatakanaHiraganaSemiVoicedSoundMark;
var decomposedHiraganaLetterBa = hiraganaLetterHa + combiningKatakanaHiraganaVoicedSoundMark;
var decomposedHiraganaLetterGa = hiraganaLetterKa + combiningKatakanaHiraganaVoicedSoundMark;
var decomposedHiraganaLetterPa = hiraganaLetterHa + combiningKatakanaHiraganaSemiVoicedSoundMark;
@@ -40,19 +44,27 @@ var decomposedLatinCapitalLetterAWithGrave = 'A' + combiningGraveAccent;
debug('Exact matches first as a baseline');
debug('');
+shouldBe('canFind(decomposedHalfwidthKatakanaLetterBa, decomposedHalfwidthKatakanaLetterBa)', 'true');
+shouldBe('canFind(decomposedHalfwidthKatakanaLetterPa, decomposedHalfwidthKatakanaLetterPa)', 'true');
+shouldBe('canFind(decomposedHiraganaLetterBa, decomposedHiraganaLetterBa)', 'true');
shouldBe('canFind(decomposedHiraganaLetterGa, decomposedHiraganaLetterGa)', 'true');
+shouldBe('canFind(decomposedHiraganaLetterPa, decomposedHiraganaLetterPa)', 'true');
shouldBe('canFind(decomposedKatakanaLetterGa, decomposedKatakanaLetterGa)', 'true');
shouldBe('canFind(decomposedLatinCapitalLetterAWithGrave, decomposedLatinCapitalLetterAWithGrave)', 'true');
shouldBe('canFind(halfwidthKatakanaLetterA, halfwidthKatakanaLetterA)', 'true');
+shouldBe('canFind(halfwidthKatakanaLetterHa, halfwidthKatakanaLetterHa)', 'true');
+shouldBe('canFind(halfwidthKatakanaLetterKa, halfwidthKatakanaLetterKa)', 'true');
shouldBe('canFind(halfwidthKatakanaLetterSmallA, halfwidthKatakanaLetterSmallA)', 'true');
shouldBe('canFind(hiraganaLetterA, hiraganaLetterA)', 'true');
-shouldBe('canFind(hiraganaLetterA, hiraganaLetterA)', 'true');
shouldBe('canFind(hiraganaLetterBa, hiraganaLetterBa)', 'true');
shouldBe('canFind(hiraganaLetterGa, hiraganaLetterGa)', 'true');
shouldBe('canFind(hiraganaLetterHa, hiraganaLetterHa)', 'true');
shouldBe('canFind(hiraganaLetterKa, hiraganaLetterKa)', 'true');
shouldBe('canFind(hiraganaLetterPa, hiraganaLetterPa)', 'true');
+shouldBe('canFind(hiraganaLetterSmallA, hiraganaLetterSmallA)', 'true');
shouldBe('canFind(katakanaLetterA, katakanaLetterA)', 'true');
+shouldBe('canFind(katakanaLetterGa, katakanaLetterGa)', 'true');
+shouldBe('canFind(katakanaLetterKa, katakanaLetterKa)', 'true');
shouldBe('canFind(katakanaLetterSmallA, katakanaLetterSmallA)', 'true');
shouldBe('canFind(latinCapitalLetterAWithGrave, latinCapitalLetterAWithGrave)', 'true');
@@ -98,14 +110,20 @@ debug('');
debug('Kana letters where the only difference is in voiced sound marks: Must *not* be treated as equal');
debug('');
+shouldBe('canFind(decomposedHalfwidthKatakanaLetterBa, halfwidthKatakanaLetterHa)', 'false');
+shouldBe('canFind(decomposedHalfwidthKatakanaLetterPa, halfwidthKatakanaLetterHa)', 'false');
shouldBe('canFind(decomposedHiraganaLetterBa, hiraganaLetterHa)', 'false');
shouldBe('canFind(decomposedHiraganaLetterBa, hiraganaLetterPa)', 'false');
shouldBe('canFind(decomposedHiraganaLetterGa, halfwidthKatakanaLetterKa)', 'false');
shouldBe('canFind(decomposedHiraganaLetterGa, hiraganaLetterKa)', 'false');
-shouldBe('canFind(decomposedHiraganaLetterGa, hiraganaLetterKa)', 'false');
shouldBe('canFind(decomposedHiraganaLetterPa, hiraganaLetterBa)', 'false');
shouldBe('canFind(decomposedHiraganaLetterPa, hiraganaLetterHa)', 'false');
+shouldBe('canFind(decomposedKatakanaLetterGa, halfwidthKatakanaLetterKa)', 'false');
+shouldBe('canFind(decomposedKatakanaLetterGa, hiraganaLetterKa)', 'false');
+shouldBe('canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterBa)', 'false');
+shouldBe('canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterPa)', 'false');
shouldBe('canFind(halfwidthKatakanaLetterKa, decomposedHiraganaLetterGa)', 'false');
+shouldBe('canFind(halfwidthKatakanaLetterKa, decomposedKatakanaLetterGa)', 'false');
shouldBe('canFind(hiraganaLetterBa, decomposedHiraganaLetterPa)', 'false');
shouldBe('canFind(hiraganaLetterBa, hiraganaLetterHa)', 'false');
shouldBe('canFind(hiraganaLetterBa, hiraganaLetterPa)', 'false');
@@ -115,7 +133,7 @@ shouldBe('canFind(hiraganaLetterHa, decomposedHiraganaLetterPa)', 'false');
shouldBe('canFind(hiraganaLetterHa, hiraganaLetterBa)', 'false');
shouldBe('canFind(hiraganaLetterHa, hiraganaLetterPa)', 'false');
shouldBe('canFind(hiraganaLetterKa, decomposedHiraganaLetterGa)', 'false');
-shouldBe('canFind(hiraganaLetterKa, decomposedHiraganaLetterGa)', 'false');
+shouldBe('canFind(hiraganaLetterKa, decomposedKatakanaLetterGa)', 'false');
shouldBe('canFind(hiraganaLetterKa, hiraganaLetterGa)', 'false');
shouldBe('canFind(hiraganaLetterPa, decomposedHiraganaLetterBa)', 'false');
shouldBe('canFind(hiraganaLetterPa, hiraganaLetterBa)', 'false');
diff --git a/LayoutTests/platform/mac-leopard/fast/text/find-kana-expected.txt b/LayoutTests/platform/mac-leopard/fast/text/find-kana-expected.txt
index 84edbf5..ea5308d 100644
--- a/LayoutTests/platform/mac-leopard/fast/text/find-kana-expected.txt
+++ b/LayoutTests/platform/mac-leopard/fast/text/find-kana-expected.txt
@@ -5,19 +5,27 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
Exact matches first as a baseline
-FAIL canFind(decomposedHiraganaLetterGa, decomposedHiraganaLetterGa) should be true. Was false.
-FAIL canFind(decomposedKatakanaLetterGa, decomposedKatakanaLetterGa) should be true. Was false.
+PASS canFind(decomposedHalfwidthKatakanaLetterBa, decomposedHalfwidthKatakanaLetterBa) is true
+PASS canFind(decomposedHalfwidthKatakanaLetterPa, decomposedHalfwidthKatakanaLetterPa) is true
+PASS canFind(decomposedHiraganaLetterBa, decomposedHiraganaLetterBa) is true
+PASS canFind(decomposedHiraganaLetterGa, decomposedHiraganaLetterGa) is true
+PASS canFind(decomposedHiraganaLetterPa, decomposedHiraganaLetterPa) is true
+PASS canFind(decomposedKatakanaLetterGa, decomposedKatakanaLetterGa) is true
PASS canFind(decomposedLatinCapitalLetterAWithGrave, decomposedLatinCapitalLetterAWithGrave) is true
PASS canFind(halfwidthKatakanaLetterA, halfwidthKatakanaLetterA) is true
+PASS canFind(halfwidthKatakanaLetterHa, halfwidthKatakanaLetterHa) is true
+PASS canFind(halfwidthKatakanaLetterKa, halfwidthKatakanaLetterKa) is true
PASS canFind(halfwidthKatakanaLetterSmallA, halfwidthKatakanaLetterSmallA) is true
PASS canFind(hiraganaLetterA, hiraganaLetterA) is true
-PASS canFind(hiraganaLetterA, hiraganaLetterA) is true
PASS canFind(hiraganaLetterBa, hiraganaLetterBa) is true
PASS canFind(hiraganaLetterGa, hiraganaLetterGa) is true
PASS canFind(hiraganaLetterHa, hiraganaLetterHa) is true
PASS canFind(hiraganaLetterKa, hiraganaLetterKa) is true
PASS canFind(hiraganaLetterPa, hiraganaLetterPa) is true
+PASS canFind(hiraganaLetterSmallA, hiraganaLetterSmallA) is true
PASS canFind(katakanaLetterA, katakanaLetterA) is true
+PASS canFind(katakanaLetterGa, katakanaLetterGa) is true
+PASS canFind(katakanaLetterKa, katakanaLetterKa) is true
PASS canFind(katakanaLetterSmallA, katakanaLetterSmallA) is true
PASS canFind(latinCapitalLetterAWithGrave, latinCapitalLetterAWithGrave) is true
@@ -55,6 +63,8 @@ PASS canFind(katakanaLetterSmallA, katakanaLetterA) is false
Kana letters where the only difference is in voiced sound marks: Must *not* be treated as equal
+PASS canFind(decomposedHalfwidthKatakanaLetterBa, halfwidthKatakanaLetterHa) is false
+PASS canFind(decomposedHalfwidthKatakanaLetterPa, halfwidthKatakanaLetterHa) is false
PASS canFind(decomposedHiraganaLetterBa, hiraganaLetterHa) is false
PASS canFind(decomposedHiraganaLetterBa, hiraganaLetterPa) is false
PASS canFind(decomposedHiraganaLetterGa, halfwidthKatakanaLetterKa) is false
@@ -62,7 +72,12 @@ PASS canFind(decomposedHiraganaLetterGa, hiraganaLetterKa) is false
PASS canFind(decomposedHiraganaLetterGa, hiraganaLetterKa) is false
PASS canFind(decomposedHiraganaLetterPa, hiraganaLetterBa) is false
PASS canFind(decomposedHiraganaLetterPa, hiraganaLetterHa) is false
+PASS canFind(decomposedKatakanaLetterGa, halfwidthKatakanaLetterKa) is false
+PASS canFind(decomposedKatakanaLetterGa, hiraganaLetterKa) is false
+PASS canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterBa) is false
+PASS canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterPa) is false
FAIL canFind(halfwidthKatakanaLetterKa, decomposedHiraganaLetterGa) should be false. Was true.
+PASS canFind(halfwidthKatakanaLetterKa, decomposedKatakanaLetterGa) is false
PASS canFind(hiraganaLetterBa, decomposedHiraganaLetterPa) is false
PASS canFind(hiraganaLetterBa, hiraganaLetterHa) is false
PASS canFind(hiraganaLetterBa, hiraganaLetterPa) is false
@@ -72,7 +87,7 @@ FAIL canFind(hiraganaLetterHa, decomposedHiraganaLetterPa) should be false. Was
PASS canFind(hiraganaLetterHa, hiraganaLetterBa) is false
PASS canFind(hiraganaLetterHa, hiraganaLetterPa) is false
FAIL canFind(hiraganaLetterKa, decomposedHiraganaLetterGa) should be false. Was true.
-FAIL canFind(hiraganaLetterKa, decomposedHiraganaLetterGa) should be false. Was true.
+PASS canFind(hiraganaLetterKa, decomposedKatakanaLetterGa) is false
PASS canFind(hiraganaLetterKa, hiraganaLetterGa) is false
PASS canFind(hiraganaLetterPa, decomposedHiraganaLetterBa) is false
PASS canFind(hiraganaLetterPa, hiraganaLetterBa) is false
diff --git a/LayoutTests/platform/qt/fast/text/find-kana-expected.txt b/LayoutTests/platform/qt/fast/text/find-kana-expected.txt
index 1c07882..a5d3b85 100644
--- a/LayoutTests/platform/qt/fast/text/find-kana-expected.txt
+++ b/LayoutTests/platform/qt/fast/text/find-kana-expected.txt
@@ -5,19 +5,27 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
Exact matches first as a baseline
+PASS canFind(decomposedHalfwidthKatakanaLetterBa, decomposedHalfwidthKatakanaLetterBa) is true
+PASS canFind(decomposedHalfwidthKatakanaLetterPa, decomposedHalfwidthKatakanaLetterPa) is true
+PASS canFind(decomposedHiraganaLetterBa, decomposedHiraganaLetterBa) is true
PASS canFind(decomposedHiraganaLetterGa, decomposedHiraganaLetterGa) is true
+PASS canFind(decomposedHiraganaLetterPa, decomposedHiraganaLetterPa) is true
PASS canFind(decomposedKatakanaLetterGa, decomposedKatakanaLetterGa) is true
PASS canFind(decomposedLatinCapitalLetterAWithGrave, decomposedLatinCapitalLetterAWithGrave) is true
PASS canFind(halfwidthKatakanaLetterA, halfwidthKatakanaLetterA) is true
+PASS canFind(halfwidthKatakanaLetterHa, halfwidthKatakanaLetterHa) is true
+PASS canFind(halfwidthKatakanaLetterKa, halfwidthKatakanaLetterKa) is true
PASS canFind(halfwidthKatakanaLetterSmallA, halfwidthKatakanaLetterSmallA) is true
PASS canFind(hiraganaLetterA, hiraganaLetterA) is true
-PASS canFind(hiraganaLetterA, hiraganaLetterA) is true
PASS canFind(hiraganaLetterBa, hiraganaLetterBa) is true
PASS canFind(hiraganaLetterGa, hiraganaLetterGa) is true
PASS canFind(hiraganaLetterHa, hiraganaLetterHa) is true
PASS canFind(hiraganaLetterKa, hiraganaLetterKa) is true
PASS canFind(hiraganaLetterPa, hiraganaLetterPa) is true
+PASS canFind(hiraganaLetterSmallA, hiraganaLetterSmallA) is true
PASS canFind(katakanaLetterA, katakanaLetterA) is true
+PASS canFind(katakanaLetterGa, katakanaLetterGa) is true
+PASS canFind(katakanaLetterKa, katakanaLetterKa) is true
PASS canFind(katakanaLetterSmallA, katakanaLetterSmallA) is true
PASS canFind(latinCapitalLetterAWithGrave, latinCapitalLetterAWithGrave) is true
@@ -55,6 +63,8 @@ PASS canFind(katakanaLetterSmallA, katakanaLetterA) is false
Kana letters where the only difference is in voiced sound marks: Must *not* be treated as equal
+PASS canFind(decomposedHalfwidthKatakanaLetterBa, halfwidthKatakanaLetterHa) is false
+PASS canFind(decomposedHalfwidthKatakanaLetterPa, halfwidthKatakanaLetterHa) is false
PASS canFind(decomposedHiraganaLetterBa, hiraganaLetterHa) is false
PASS canFind(decomposedHiraganaLetterBa, hiraganaLetterPa) is false
PASS canFind(decomposedHiraganaLetterGa, halfwidthKatakanaLetterKa) is false
@@ -62,7 +72,12 @@ PASS canFind(decomposedHiraganaLetterGa, hiraganaLetterKa) is false
PASS canFind(decomposedHiraganaLetterGa, hiraganaLetterKa) is false
PASS canFind(decomposedHiraganaLetterPa, hiraganaLetterBa) is false
PASS canFind(decomposedHiraganaLetterPa, hiraganaLetterHa) is false
+PASS canFind(decomposedKatakanaLetterGa, halfwidthKatakanaLetterKa) is false
+PASS canFind(decomposedKatakanaLetterGa, hiraganaLetterKa) is false
+PASS canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterBa) is false
+PASS canFind(halfwidthKatakanaLetterHa, decomposedHalfwidthKatakanaLetterPa) is false
PASS canFind(halfwidthKatakanaLetterKa, decomposedHiraganaLetterGa) is false
+PASS canFind(halfwidthKatakanaLetterKa, decomposedKatakanaLetterGa) is false
PASS canFind(hiraganaLetterBa, decomposedHiraganaLetterPa) is false
PASS canFind(hiraganaLetterBa, hiraganaLetterHa) is false
PASS canFind(hiraganaLetterBa, hiraganaLetterPa) is false
@@ -72,7 +87,7 @@ FAIL canFind(hiraganaLetterHa, decomposedHiraganaLetterPa) should be false. Was
PASS canFind(hiraganaLetterHa, hiraganaLetterBa) is false
PASS canFind(hiraganaLetterHa, hiraganaLetterPa) is false
FAIL canFind(hiraganaLetterKa, decomposedHiraganaLetterGa) should be false. Was true.
-FAIL canFind(hiraganaLetterKa, decomposedHiraganaLetterGa) should be false. Was true.
+PASS canFind(hiraganaLetterKa, decomposedKatakanaLetterGa) is false
PASS canFind(hiraganaLetterKa, hiraganaLetterGa) is false
PASS canFind(hiraganaLetterPa, decomposedHiraganaLetterBa) is false
PASS canFind(hiraganaLetterPa, hiraganaLetterBa) is false
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 9ae4115..d3d23d4 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,17 @@
+2010-01-11 Darin Adler <darin at apple.com>
+
+ Reviewed by Dan Bernstein.
+
+ Fix handling of unusual kana sequences in search
+ https://bugs.webkit.org/show_bug.cgi?id=33506
+
+ * editing/TextIterator.cpp:
+ (WebCore::composedVoicedSoundMark): Removed unnnecessary case for a
+ non-kana-letter character. This function only works for kana letters.
+ (WebCore::SearchBuffer::isBadMatch): Fixed voiced sound mark code to
+ properly handle cases where one character has a shorter list of
+ combining voiced sound marks than the other.
+
2010-01-11 Victor Wang <victorw at chromium.org>
Reviewed by Dimitri Glazkov.
diff --git a/WebCore/editing/TextIterator.cpp b/WebCore/editing/TextIterator.cpp
index b7beefb..44a203f 100644
--- a/WebCore/editing/TextIterator.cpp
+++ b/WebCore/editing/TextIterator.cpp
@@ -1639,7 +1639,6 @@ static inline VoicedSoundMarkType composedVoicedSoundMark(UChar character)
case 0x30F8: // KATAKANA LETTER VI
case 0x30F9: // KATAKANA LETTER VE
case 0x30FA: // KATAKANA LETTER VO
- case 0x30FE: // KATAKANA VOICED ITERATION MARK
return VoicedSoundMark;
case 0x3071: // HIRAGANA LETTER PA
case 0x3074: // HIRAGANA LETTER PI
@@ -1816,7 +1815,14 @@ inline bool SearchBuffer::isBadMatch(const UChar* match, size_t matchLength) con
++b;
// Check for differences in combining voiced sound marks found after the letter.
- while (a != aEnd && b != bEnd && isCombiningVoicedSoundMark(*a) && isCombiningVoicedSoundMark(*b)) {
+ while (1) {
+ if (!(a != aEnd && isCombiningVoicedSoundMark(*a))) {
+ if (b != bEnd && isCombiningVoicedSoundMark(*b))
+ return true;
+ break;
+ }
+ if (!(b != bEnd && isCombiningVoicedSoundMark(*b)))
+ return true;
if (*a != *b)
return true;
++a;
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list