| Index: Source/WebCore/rendering/InlineIterator.h
|
| ===================================================================
|
| --- Source/WebCore/rendering/InlineIterator.h (revision 103964)
|
| +++ Source/WebCore/rendering/InlineIterator.h (working copy)
|
| @@ -422,10 +422,10 @@
|
|
|
| // FIXME: This belongs on InlineBidiResolver, except it's a template specialization
|
| // of BidiResolver which knows nothing about RenderObjects.
|
| -static inline void addPlaceholderRunForIsolatedInline(InlineBidiResolver& resolver, RenderObject* isolatedInline)
|
| +static inline void addPlaceholderRunForIsolatedInline(InlineBidiResolver& resolver, RenderObject* obj, unsigned pos)
|
| {
|
| - ASSERT(isolatedInline);
|
| - BidiRun* isolatedRun = new (isolatedInline->renderArena()) BidiRun(0, 0, isolatedInline, resolver.context(), resolver.dir());
|
| + ASSERT(obj);
|
| + BidiRun* isolatedRun = new (obj->renderArena()) BidiRun(pos, 0, obj, resolver.context(), resolver.dir());
|
| resolver.runs().addRun(isolatedRun);
|
| // FIXME: isolatedRuns() could be a hash of object->run and then we could cheaply
|
| // ASSERT here that we didn't create multiple objects for the same inline.
|
| @@ -453,23 +453,17 @@
|
| // We don't care if we encounter bidi directional overrides.
|
| void embed(WTF::Unicode::Direction, BidiEmbeddingSource) { }
|
|
|
| - void addFakeRunIfNecessary(RenderObject* obj, InlineBidiResolver& resolver)
|
| + void addFakeRunIfNecessary(RenderObject* obj, unsigned pos, InlineBidiResolver& resolver)
|
| {
|
| - // We only need to lookup the root isolated span and add a fake run
|
| - // for it once, but we'll be called for every span inside the isolated span
|
| - // so we just ignore the call.
|
| + // We only need to add a fake run for a given isolated span once during each call to createBidiRunsForLine.
|
| + // We'll be called for every span inside the isolated span so we just ignore subsequent calls.
|
| if (m_haveAddedFakeRunForRootIsolate)
|
| return;
|
| m_haveAddedFakeRunForRootIsolate = true;
|
| -
|
| - // FIXME: position() could be outside the run and may be the wrong call here.
|
| - // If we were passed an InlineIterator instead that would have the right root().
|
| - RenderObject* isolatedInline = containingIsolate(obj, resolver.position().root());
|
| - // FIXME: Because enterIsolate is not passed a RenderObject, we have to crawl up the
|
| - // tree to see which parent inline is the isolate. We could change enterIsolate
|
| - // to take a RenderObject and do this logic there, but that would be a layering
|
| - // violation for BidiResolver (which knows nothing about RenderObject).
|
| - addPlaceholderRunForIsolatedInline(resolver, isolatedInline);
|
| + // obj and pos together denote a single position in the inline, from which the parsing of the isolate will start.
|
| + // We don't need to mark the end of the run because this is implicit: it is either endOfLine or the end of the
|
| + // isolate, when we call createBidiRunsForLine it will stop at whichever comes first.
|
| + addPlaceholderRunForIsolatedInline(resolver, obj, pos);
|
| }
|
|
|
| private:
|
| @@ -489,7 +483,7 @@
|
| RenderObject* obj = m_sor.m_obj;
|
| while (obj && obj != m_eor.m_obj && obj != endOfLine.m_obj) {
|
| if (isolateTracker.inIsolate())
|
| - isolateTracker.addFakeRunIfNecessary(obj, *this);
|
| + isolateTracker.addFakeRunIfNecessary(obj, start, *this);
|
| else
|
| RenderBlock::appendRunsForObject(m_runs, start, obj->length(), obj, *this);
|
| // FIXME: start/obj should be an InlineIterator instead of two separate variables.
|
| @@ -505,7 +499,7 @@
|
| // It's OK to add runs for zero-length RenderObjects, just don't make the run larger than it should be
|
| int end = obj->length() ? pos + 1 : 0;
|
| if (isolateTracker.inIsolate())
|
| - isolateTracker.addFakeRunIfNecessary(obj, *this);
|
| + isolateTracker.addFakeRunIfNecessary(obj, start, *this);
|
| else
|
| RenderBlock::appendRunsForObject(m_runs, start, end, obj, *this);
|
| }
|
|
|
| Property changes on: Source\WebCore\rendering\InlineIterator.h
|
| ___________________________________________________________________
|
| Added: svn:executable
|
| + *
|
|
|
|
|