OSDN Git Service

Merge WebKit at Chromium 9.0.597.83: Trivial merge by git.
authorBen Murdoch <benm@google.com>
Tue, 25 Jan 2011 11:33:58 +0000 (11:33 +0000)
committerBen Murdoch <benm@google.com>
Tue, 25 Jan 2011 11:41:01 +0000 (11:41 +0000)
Change-Id: I027931929980a55d4d5e883f659c116c77dbb2a9

WebCore/ChangeLog
WebCore/platform/text/BidiResolver.h

index b56a885..ae5f73f 100644 (file)
@@ -1,3 +1,18 @@
+2011-01-20  Xiaomei Ji  <xji@chromium.org>
+
+        Reviewed by Dan Bernstein.
+
+        Fix regression(r71566): PDF in RTL block might messes up text directionality.
+        https://bugs.webkit.org/show_bug.cgi?id=52776
+
+        Test: fast/dom/52776.html
+
+        * platform/text/BidiResolver.h:
+        (WebCore::::checkDirectionInLowerRaiseEmbeddingLevel):
+        (WebCore::::lowerExplicitEmbeddingLevel):
+        (WebCore::::raiseExplicitEmbeddingLevel):
+        (WebCore::::createBidiRunsForLine):
+
 2011-01-12  Kenichi Ishibashi  <bashi@google.com>
 
         Reviewed by Kent Tamura.
index 1f87115..6018c3f 100644 (file)
@@ -314,23 +314,13 @@ void BidiResolver<Iterator, Run>::checkDirectionInLowerRaiseEmbeddingLevel()
     using namespace WTF::Unicode;
 
     ASSERT(m_status.eor != OtherNeutral || eor.atEnd());
-    // bidi.sor ... bidi.eor ... bidi.last eor; need to append the bidi.sor-bidi.eor run or extend it through bidi.last
-    // Bidi control characters are included into BidiRun, so last direction
-    // could be one of the bidi embeddings when there are nested embeddings.
-    // For example:  "&#x202a;&#x202b;....."
-    ASSERT(m_status.last == EuropeanNumberSeparator
-        || m_status.last == EuropeanNumberTerminator
-        || m_status.last == CommonNumberSeparator
-        || m_status.last == BoundaryNeutral
-        || m_status.last == BlockSeparator
-        || m_status.last == SegmentSeparator
-        || m_status.last == WhiteSpaceNeutral
-        || m_status.last == OtherNeutral
-        || m_status.last == RightToLeftEmbedding
-        || m_status.last == LeftToRightEmbedding
-        || m_status.last == RightToLeftOverride
-        || m_status.last == LeftToRightOverride
-        || m_status.last == PopDirectionalFormat);
+    ASSERT(m_status.last != NonSpacingMark
+        && m_status.last != BoundaryNeutral
+        && m_status.last != RightToLeftEmbedding
+        && m_status.last != LeftToRightEmbedding
+        && m_status.last != RightToLeftOverride 
+        && m_status.last != LeftToRightOverride 
+        && m_status.last != PopDirectionalFormat);
     if (m_direction == OtherNeutral)
         m_direction = m_status.lastStrong == LeftToRight ? LeftToRight : RightToLeft;
 }
@@ -342,6 +332,7 @@ void BidiResolver<Iterator, Run>::lowerExplicitEmbeddingLevel(WTF::Unicode::Dire
 
     if (!emptyRun && eor != last) {
         checkDirectionInLowerRaiseEmbeddingLevel();
+        // bidi.sor ... bidi.eor ... bidi.last eor; need to append the bidi.sor-bidi.eor run or extend it through bidi.last
         if (from == LeftToRight) {
             // bidi.sor ... bidi.eor ... bidi.last L
             if (m_status.eor == EuropeanNumber) {
@@ -377,6 +368,7 @@ void BidiResolver<Iterator, Run>::raiseExplicitEmbeddingLevel(WTF::Unicode::Dire
 
     if (!emptyRun && eor != last) {
         checkDirectionInLowerRaiseEmbeddingLevel();
+        // bidi.sor ... bidi.eor ... bidi.last eor; need to append the bidi.sor-bidi.eor run or extend it through bidi.last
         if (to == LeftToRight) {
             // bidi.sor ... bidi.eor ... bidi.last L
             if (m_status.eor == EuropeanNumber) {
@@ -866,6 +858,11 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, boo
                 break;
             case NonSpacingMark:
             case BoundaryNeutral:
+            case RightToLeftEmbedding: 
+            case LeftToRightEmbedding: 
+            case RightToLeftOverride: 
+            case LeftToRightOverride: 
+            case PopDirectionalFormat:
                 // ignore these
                 break;
             case EuropeanNumber: