2011-04-20 Eric Seidel <eric@webkit.org>
authoreric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 21 Apr 2011 01:55:09 +0000 (01:55 +0000)
committereric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 21 Apr 2011 01:55:09 +0000 (01:55 +0000)
        Reviewed by Adam Barth.

        Split out isIteratorTarget from bidiNext and bidiFirst
        https://bugs.webkit.org/show_bug.cgi?id=59033

        This is the first (tiny) step of many.  When I tried to
        make larger changes to this function I broke stuff, so
        doing this in tiny pieces so we know it's right.

        * rendering/InlineIterator.h:
        (WebCore::isIteratorTarget):
        (WebCore::bidiNext):
        (WebCore::bidiFirstSkippingInlines):
        (WebCore::bidiFirstNotSkippingInlines):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@84450 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/rendering/InlineIterator.h

index ecb95b6..776d6b0 100644 (file)
@@ -1,3 +1,20 @@
+2011-04-20  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Adam Barth.
+
+        Split out isIteratorTarget from bidiNext and bidiFirst
+        https://bugs.webkit.org/show_bug.cgi?id=59033
+
+        This is the first (tiny) step of many.  When I tried to
+        make larger changes to this function I broke stuff, so
+        doing this in tiny pieces so we know it's right.
+
+        * rendering/InlineIterator.h:
+        (WebCore::isIteratorTarget):
+        (WebCore::bidiNext):
+        (WebCore::bidiFirstSkippingInlines):
+        (WebCore::bidiFirstNotSkippingInlines):
+
 2011-04-20  Alexey Marinichev  <amarinichev@chromium.org>
 
         Reviewed by Kenneth Russell.
index 33a981d..33412fe 100644 (file)
@@ -131,6 +131,12 @@ static inline void notifyResolverWillExitObject(InlineBidiResolver* resolver, Re
     resolver->embed(WTF::Unicode::PopDirectionalFormat, FromStyleOrDOM);
 }
 
+static inline bool isIteratorTarget(RenderObject* object)
+{
+    ASSERT(object); // The iterator will of course return 0, but its not an expected argument to this function.
+    return object->isText() || object->isFloating() || object->isPositioned() || object->isReplaced();
+}
+
 // FIXME: This function is misleadingly named. It has little to do with bidi.
 // This function will iterate over inlines within a block, optionally notifying
 // a bidi resolver as it enters/exits inlines (so it can push/pop embedding levels).
@@ -143,7 +149,7 @@ static inline RenderObject* bidiNext(RenderObject* root, RenderObject* current,
 
     while (current) {
         next = 0;
-        if (!oldEndOfInline && !current->isFloating() && !current->isReplaced() && !current->isPositioned() && !current->isText()) {
+        if (!oldEndOfInline && !isIteratorTarget(current)) {
             next = current->firstChild();
             notifyResolverEnteredObject(resolver, next);
         }
@@ -178,7 +184,7 @@ static inline RenderObject* bidiNext(RenderObject* root, RenderObject* current,
         if (!next)
             break;
 
-        if (next->isText() || next->isFloating() || next->isReplaced() || next->isPositioned()
+        if (isIteratorTarget(next)
             || ((!skipInlines || !next->firstChild()) // Always return EMPTY inlines.
                 && next->isRenderInline()))
             break;
@@ -211,7 +217,7 @@ static inline RenderObject* bidiFirstSkippingInlines(RenderObject* root, InlineB
     }
 
     // FIXME: Unify this with the bidiNext call above.
-    if (o && !o->isText() && !o->isReplaced() && !o->isFloating() && !o->isPositioned())
+    if (o && !isIteratorTarget(o))
         o = bidiNext(root, o, resolver, true);
 
     resolver->commitExplicitEmbedding();
@@ -224,7 +230,7 @@ static inline RenderObject* bidiFirstNotSkippingInlines(RenderObject* root)
     RenderObject* o = root->firstChild();
     // If either there are no children to walk, or the first one is correct
     // then just return it.
-    if (!o || o->isRenderInline() || o->isText() || o->isReplaced() || o->isFloating() || o->isPositioned())
+    if (!o || o->isRenderInline() || isIteratorTarget(o))
         return o;
 
     return bidiNext(root, o, 0, false);