[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373
mitz at apple.com
mitz at apple.com
Thu Apr 8 01:24:30 UTC 2010
The following commit has been merged in the webkit-1.2 branch:
commit 81358929e68694571cff4332a54d55bd8f02ad81
Author: mitz at apple.com <mitz at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Tue Jan 26 06:00:47 2010 +0000
<rdar://problem/7573493> Error with line break inside ?» pair of characters.
https://bugs.webkit.org/show_bug.cgi?id=17475
Reviewed by Darin Adler.
WebCore:
Test: fast/text/line-break-after-question-mark.html
Instead of unconditionally allowing lines to break after a question mark, which was intended
to mimic Internet Explorer, apply the Unicode line breaking behavior after a question mark,
with one exception in the ASCII range to match IE, namely not allowing a line break between
a question mark and a vertical line.
* rendering/break_lines.cpp:
(WebCore::shouldBreakAfter): Added a next character parameter. Changed to consult a table
for the question mark case in order to keep it fast and not require a text break iterator in
the ASCII case.
(WebCore::nextBreakablePosition): Pass the next character to shouldBreakAfter.
LayoutTests:
* fast/text/line-break-after-question-mark-expected.txt: Added.
* fast/text/line-break-after-question-mark.html: Added.
* fast/text/script-tests/line-break-after-question-mark.js: Added.
():
* platform/mac/tables/mozilla/bugs/bug6674-expected.checksum: Updated.
* platform/mac/tables/mozilla/bugs/bug6674-expected.png: Updated.
* platform/mac/tables/mozilla/bugs/bug6674-expected.txt: Updated.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53839 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 52e8a16..1c8dfd5 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,18 @@
+2010-01-25 Dan Bernstein <mitz at apple.com>
+
+ Reviewed by Darin Adler.
+
+ <rdar://problem/7573493> Error with line break inside ?» pair of characters.
+ https://bugs.webkit.org/show_bug.cgi?id=17475
+
+ * fast/text/line-break-after-question-mark-expected.txt: Added.
+ * fast/text/line-break-after-question-mark.html: Added.
+ * fast/text/script-tests/line-break-after-question-mark.js: Added.
+ ():
+ * platform/mac/tables/mozilla/bugs/bug6674-expected.checksum: Updated.
+ * platform/mac/tables/mozilla/bugs/bug6674-expected.png: Updated.
+ * platform/mac/tables/mozilla/bugs/bug6674-expected.txt: Updated.
+
2010-01-25 Peter Kasting <pkasting at google.com>
Reviewed by Dan Bernstein.
diff --git a/LayoutTests/fast/text/line-break-after-question-mark-expected.txt b/LayoutTests/fast/text/line-break-after-question-mark-expected.txt
new file mode 100644
index 0000000..d8fa6d8
--- /dev/null
+++ b/LayoutTests/fast/text/line-break-after-question-mark-expected.txt
@@ -0,0 +1,104 @@
+Tests when line breaking is allowed after a question mark character.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS allowsBreakBefore(33) is false
+PASS allowsBreakBefore(34) is false
+PASS allowsBreakBefore(35) is true
+PASS allowsBreakBefore(36) is true
+PASS allowsBreakBefore(37) is true
+PASS allowsBreakBefore(38) is true
+PASS allowsBreakBefore(39) is false
+PASS allowsBreakBefore(40) is true
+PASS allowsBreakBefore(41) is false
+PASS allowsBreakBefore(42) is true
+PASS allowsBreakBefore(43) is true
+PASS allowsBreakBefore(44) is false
+PASS allowsBreakBefore(45) is true
+PASS allowsBreakBefore(46) is false
+PASS allowsBreakBefore(47) is false
+PASS allowsBreakBefore(48) is true
+PASS allowsBreakBefore(49) is true
+PASS allowsBreakBefore(50) is true
+PASS allowsBreakBefore(51) is true
+PASS allowsBreakBefore(52) is true
+PASS allowsBreakBefore(53) is true
+PASS allowsBreakBefore(54) is true
+PASS allowsBreakBefore(55) is true
+PASS allowsBreakBefore(56) is true
+PASS allowsBreakBefore(57) is true
+PASS allowsBreakBefore(58) is false
+PASS allowsBreakBefore(59) is false
+PASS allowsBreakBefore(60) is true
+PASS allowsBreakBefore(61) is true
+PASS allowsBreakBefore(62) is true
+PASS allowsBreakBefore(63) is false
+PASS allowsBreakBefore(64) is true
+PASS allowsBreakBefore(65) is true
+PASS allowsBreakBefore(66) is true
+PASS allowsBreakBefore(67) is true
+PASS allowsBreakBefore(68) is true
+PASS allowsBreakBefore(69) is true
+PASS allowsBreakBefore(70) is true
+PASS allowsBreakBefore(71) is true
+PASS allowsBreakBefore(72) is true
+PASS allowsBreakBefore(73) is true
+PASS allowsBreakBefore(74) is true
+PASS allowsBreakBefore(75) is true
+PASS allowsBreakBefore(76) is true
+PASS allowsBreakBefore(77) is true
+PASS allowsBreakBefore(78) is true
+PASS allowsBreakBefore(79) is true
+PASS allowsBreakBefore(80) is true
+PASS allowsBreakBefore(81) is true
+PASS allowsBreakBefore(82) is true
+PASS allowsBreakBefore(83) is true
+PASS allowsBreakBefore(84) is true
+PASS allowsBreakBefore(85) is true
+PASS allowsBreakBefore(86) is true
+PASS allowsBreakBefore(87) is true
+PASS allowsBreakBefore(88) is true
+PASS allowsBreakBefore(89) is true
+PASS allowsBreakBefore(90) is true
+PASS allowsBreakBefore(91) is true
+PASS allowsBreakBefore(92) is true
+PASS allowsBreakBefore(93) is false
+PASS allowsBreakBefore(94) is true
+PASS allowsBreakBefore(95) is true
+PASS allowsBreakBefore(96) is true
+PASS allowsBreakBefore(97) is true
+PASS allowsBreakBefore(98) is true
+PASS allowsBreakBefore(99) is true
+PASS allowsBreakBefore(100) is true
+PASS allowsBreakBefore(101) is true
+PASS allowsBreakBefore(102) is true
+PASS allowsBreakBefore(103) is true
+PASS allowsBreakBefore(104) is true
+PASS allowsBreakBefore(105) is true
+PASS allowsBreakBefore(106) is true
+PASS allowsBreakBefore(107) is true
+PASS allowsBreakBefore(108) is true
+PASS allowsBreakBefore(109) is true
+PASS allowsBreakBefore(110) is true
+PASS allowsBreakBefore(111) is true
+PASS allowsBreakBefore(112) is true
+PASS allowsBreakBefore(113) is true
+PASS allowsBreakBefore(114) is true
+PASS allowsBreakBefore(115) is true
+PASS allowsBreakBefore(116) is true
+PASS allowsBreakBefore(117) is true
+PASS allowsBreakBefore(118) is true
+PASS allowsBreakBefore(119) is true
+PASS allowsBreakBefore(120) is true
+PASS allowsBreakBefore(121) is true
+PASS allowsBreakBefore(122) is true
+PASS allowsBreakBefore(123) is true
+PASS allowsBreakBefore(124) is true
+PASS allowsBreakBefore(125) is false
+PASS allowsBreakBefore(126) is true
+PASS allowsBreakBefore(127) is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/text/line-break-after-question-mark.html b/LayoutTests/fast/text/line-break-after-question-mark.html
new file mode 100644
index 0000000..cdfb010
--- /dev/null
+++ b/LayoutTests/fast/text/line-break-after-question-mark.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="../js/resources/js-test-style.css">
+<script src="../js/resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/line-break-after-question-mark.js"></script>
+<script src="../js/resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/text/script-tests/line-break-after-question-mark.js b/LayoutTests/fast/text/script-tests/line-break-after-question-mark.js
new file mode 100644
index 0000000..de94d95
--- /dev/null
+++ b/LayoutTests/fast/text/script-tests/line-break-after-question-mark.js
@@ -0,0 +1,21 @@
+description("Tests when line breaking is allowed after a question mark character.");
+
+var div = document.body.appendChild(document.createElement("div"));
+div.style.width = "1px";
+div.style.fontFamily = "ahem";
+div.style.fontSize = "25px";
+
+function allowsBreakBefore(i)
+{
+ div.innerText = "A?" + String.fromCharCode(i);
+ return div.offsetHeight > 25;
+}
+
+var unallowedBreaks = [0x21, 0x22, 0x27, 0x29, 0x2c, 0x2e, 0x2f, 0x3a, 0x3b, 0x3f, 0x5d, 0x7d];
+
+for (var i = 33; i < 128; ++i)
+ shouldBe("allowsBreakBefore(" + i + ")", unallowedBreaks.indexOf(i) >= 0 ? "false" : "true");
+
+document.body.removeChild(div);
+
+var successfullyParsed = true;
diff --git a/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.checksum b/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.checksum
index 203d7db..a136e20 100644
--- a/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.checksum
+++ b/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.checksum
@@ -1 +1 @@
-3f34db6f20f905bc879d38c647d510d9
\ No newline at end of file
+22929675c6aaf2593671667a807689e9
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.png b/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.png
index e9a47b9..37350bd 100644
Binary files a/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.png and b/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.png differ
diff --git a/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.txt b/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.txt
index 7da8bac..b362aa2 100644
--- a/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.txt
+++ b/LayoutTests/platform/mac/tables/mozilla/bugs/bug6674-expected.txt
@@ -1,21 +1,19 @@
layer at (0,0) size 800x600
RenderView at (0,0) size 800x600
-layer at (0,0) size 800x160
- RenderBlock {HTML} at (0,0) size 800x160
- RenderBody {BODY} at (8,8) size 784x144
- RenderTable {TABLE} at (0,0) size 96x52 [border: (1px outset #808080)]
- RenderTableSection {TBODY} at (1,1) size 94x50
- RenderTableRow {TR} at (0,2) size 94x46
- RenderTableCell {TD} at (2,2) size 90x46 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
- RenderBlock {DIV} at (2,2) size 86x42 [border: (3px dotted #00FF00)]
- RenderText {#text} at (3,3) size 107x36
- text run at (3,3) width 71: "Truncated?"
- text run at (3,21) width 107: " It should not be!"
- RenderBlock {P} at (0,68) size 784x18
+layer at (0,0) size 800x124
+ RenderBlock {HTML} at (0,0) size 800x124
+ RenderBody {BODY} at (8,8) size 784x108
+ RenderTable {TABLE} at (0,0) size 96x34 [border: (1px outset #808080)]
+ RenderTableSection {TBODY} at (1,1) size 94x32
+ RenderTableRow {TR} at (0,2) size 94x28
+ RenderTableCell {TD} at (2,2) size 90x28 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
+ RenderBlock {DIV} at (2,2) size 86x24 [border: (3px dotted #00FF00)]
+ RenderText {#text} at (3,3) size 178x18
+ text run at (3,3) width 178: "Truncated? It should not be!"
+ RenderBlock {P} at (0,50) size 784x18
RenderText {#text} at (0,0) size 738x18
text run at (0,0) width 463: "According to the rules of CSS, the text above should spill right out of the "
text run at (463,0) width 275: "table, as it does in the table-less case below:"
- RenderBlock {DIV} at (0,102) size 86x42 [border: (3px dotted #00FF00)]
- RenderText {#text} at (3,3) size 107x36
- text run at (3,3) width 71: "Truncated?"
- text run at (3,21) width 107: " It should not be!"
+ RenderBlock {DIV} at (0,84) size 86x24 [border: (3px dotted #00FF00)]
+ RenderText {#text} at (3,3) size 178x18
+ text run at (3,3) width 178: "Truncated? It should not be!"
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 8e972d4..c059568 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,23 @@
+2010-01-25 Dan Bernstein <mitz at apple.com>
+
+ Reviewed by Darin Adler.
+
+ <rdar://problem/7573493> Error with line break inside ?» pair of characters.
+ https://bugs.webkit.org/show_bug.cgi?id=17475
+
+ Test: fast/text/line-break-after-question-mark.html
+
+ Instead of unconditionally allowing lines to break after a question mark, which was intended
+ to mimic Internet Explorer, apply the Unicode line breaking behavior after a question mark,
+ with one exception in the ASCII range to match IE, namely not allowing a line break between
+ a question mark and a vertical line.
+
+ * rendering/break_lines.cpp:
+ (WebCore::shouldBreakAfter): Added a next character parameter. Changed to consult a table
+ for the question mark case in order to keep it fast and not require a text break iterator in
+ the ASCII case.
+ (WebCore::nextBreakablePosition): Pass the next character to shouldBreakAfter.
+
2010-01-25 Peter Kasting <pkasting at google.com>
Reviewed by Dan Bernstein.
diff --git a/WebCore/rendering/break_lines.cpp b/WebCore/rendering/break_lines.cpp
index 9b46cd2..3a545e4 100644
--- a/WebCore/rendering/break_lines.cpp
+++ b/WebCore/rendering/break_lines.cpp
@@ -1,21 +1,26 @@
/*
- * Copyright (C) 2005, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2005, 2007, 2010 Apple Inc. All rights reserved.
*
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "config.h"
@@ -44,13 +49,30 @@ static inline bool isBreakableSpace(UChar ch, bool treatNoBreakSpaceAsBreak)
}
}
-static inline bool shouldBreakAfter(UChar ch)
+// This differs from the Unicode algorithm only in that Unicode does not break
+// between a question mark and a vertical line (U+007C).
+static const unsigned char internetExplorerLineBreaksAfterQuestionMarkTable[0x80] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, // \t
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, // ! " ' ) , . /
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, // : ; ?
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, // ]
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1 // }
+};
+
+static const size_t internetExplorerLineBreaksAfterQuestionMarkTableSize = sizeof(internetExplorerLineBreaksAfterQuestionMarkTable) / sizeof(*internetExplorerLineBreaksAfterQuestionMarkTable);
+
+static inline bool shouldBreakAfter(UChar ch, UChar nextCh)
{
- // Match WinIE's breaking strategy, which is to always allow breaks after hyphens and question marks.
- // FIXME: it appears that IE behavior is more complex, see <http://bugs.webkit.org/show_bug.cgi?id=17475>.
switch (ch) {
- case '-':
+ // For a question mark preceding a non-ASCII characters, defer to the Unicode algorithm by returning false.
+ // For ASCII characters, use a lookup table for enhanced speed and for compatibility with Internet Explorer.
case '?':
+ return nextCh <= internetExplorerLineBreaksAfterQuestionMarkTableSize && internetExplorerLineBreaksAfterQuestionMarkTable[nextCh];
+ // Internet Explorer always allows breaking after a hyphen.
+ case '-':
case softHyphen:
// FIXME: cases for ideographicComma and ideographicFullStop are a workaround for an issue in Unicode 5.0
// which is likely to be resolved in Unicode 5.1 <http://bugs.webkit.org/show_bug.cgi?id=17411>.
@@ -88,7 +110,7 @@ int nextBreakablePosition(const UChar* str, int pos, int len, bool treatNoBreakS
for (int i = pos; i < len; i++) {
UChar ch = str[i];
- if (isBreakableSpace(ch, treatNoBreakSpaceAsBreak) || shouldBreakAfter(lastCh))
+ if (isBreakableSpace(ch, treatNoBreakSpaceAsBreak) || shouldBreakAfter(lastCh, ch))
return i;
if (needsLineBreakIterator(ch) || needsLineBreakIterator(lastCh)) {
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list