| Index: Source/core/rendering/InlineIterator.h
|
| diff --git a/Source/core/rendering/InlineIterator.h b/Source/core/rendering/InlineIterator.h
|
| index cbd866e3607257d32a8d9c61ec2ba725b8a55740..092bd703e1bc3bef451261a06c83a4e6c11c6d1f 100644
|
| --- a/Source/core/rendering/InlineIterator.h
|
| +++ b/Source/core/rendering/InlineIterator.h
|
| @@ -359,12 +359,28 @@ private:
|
| bool m_atEndOfInline;
|
| };
|
|
|
| +static inline bool endOfLineHasIsolatedObjectAncestor(const InlineIterator& isolatedIterator, const InlineIterator& ancestorItertor)
|
| +{
|
| + if (!isolatedIterator.object() || !isIsolated(isolatedIterator.object()->style()->unicodeBidi()))
|
| + return false;
|
| +
|
| + RenderObject* innerIsolatedObject = isolatedIterator.object();
|
| + while (innerIsolatedObject && innerIsolatedObject != isolatedIterator.root()) {
|
| + if (innerIsolatedObject == ancestorItertor.object())
|
| + return true;
|
| + innerIsolatedObject = innerIsolatedObject->parent();
|
| + }
|
| + return false;
|
| +}
|
| +
|
| inline void InlineIterator::increment(InlineBidiResolver* resolver, IncrementRule rule)
|
| {
|
| if (!m_obj)
|
| return;
|
|
|
| - if (resolver && resolver->inIsolate() && rule == FastIncrementInIsolatedRenderer) {
|
| + if (rule == FastIncrementInIsolatedRenderer
|
| + && resolver && resolver->inIsolate()
|
| + && !endOfLineHasIsolatedObjectAncestor(resolver->endOfLine(), resolver->position())) {
|
| moveTo(bidiNextSkippingEmptyInlines(m_root, m_obj, resolver), 0);
|
| return;
|
| }
|
|
|