| Index: third_party/WebKit/Source/core/layout/BidiRunForLine.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/BidiRunForLine.cpp b/third_party/WebKit/Source/core/layout/BidiRunForLine.cpp
|
| index 8ade9f83e1e5b644137cd5acf5b6874d37fa978e..288d76a0d5f88b769fe8be9bb3b673282e3cca55 100644
|
| --- a/third_party/WebKit/Source/core/layout/BidiRunForLine.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/BidiRunForLine.cpp
|
| @@ -114,17 +114,6 @@ static inline void setupResolverToResumeInIsolate(InlineBidiResolver& resolver,
|
| }
|
| }
|
|
|
| -static void restoreIsolatedMidpointStates(InlineBidiResolver& topResolver,
|
| - InlineBidiResolver& isolatedResolver)
|
| -{
|
| - while (!isolatedResolver.isolatedRuns().isEmpty()) {
|
| - BidiRun* run = isolatedResolver.isolatedRuns().last();
|
| - isolatedResolver.isolatedRuns().removeLast();
|
| - topResolver.setMidpointStateForIsolatedRun(run,
|
| - isolatedResolver.midpointStateForIsolatedRun(run));
|
| - }
|
| -}
|
| -
|
| void constructBidiRunsForLine(InlineBidiResolver& topResolver,
|
| BidiRunList<BidiRun>& bidiRuns, const InlineIterator& endOfLine,
|
| VisualDirectionOverride override, bool previousLineBrokeCleanly,
|
| @@ -137,28 +126,15 @@ void constructBidiRunsForLine(InlineBidiResolver& topResolver,
|
| const LayoutObject* currentRoot = topResolver.position().root();
|
| topResolver.createBidiRunsForLine(endOfLine, override,
|
| previousLineBrokeCleanly);
|
| - struct BidiRunsWithRoot {
|
| - const LayoutObject* root;
|
| - Vector<BidiRun*> isolatedRuns;
|
| - };
|
| - Vector<BidiRunsWithRoot> isolatedRunsStack;
|
| -
|
| - while (true) {
|
| - if (topResolver.isolatedRuns().isEmpty()) {
|
| - if (isolatedRunsStack.isEmpty())
|
| - break;
|
| - topResolver.isolatedRuns().appendVector(isolatedRunsStack.last().isolatedRuns);
|
| - ASSERT(!topResolver.isolatedRuns().isEmpty());
|
| - currentRoot = isolatedRunsStack.last().root;
|
| - isolatedRunsStack.removeLast();
|
| - }
|
|
|
| + while (!topResolver.isolatedRuns().isEmpty()) {
|
| // It does not matter which order we resolve the runs as long as we
|
| // resolve them all.
|
| - BidiRun* isolatedRun = topResolver.isolatedRuns().last();
|
| + BidiIsolatedRun isolatedRun = topResolver.isolatedRuns().last();
|
| topResolver.isolatedRuns().removeLast();
|
| + currentRoot = &isolatedRun.root;
|
|
|
| - LayoutObject* startObj = isolatedRun->object();
|
| + LayoutObject* startObj = &isolatedRun.object;
|
|
|
| // Only inlines make sense with unicode-bidi: isolate (blocks are
|
| // already isolated).
|
| @@ -176,7 +152,7 @@ void constructBidiRunsForLine(InlineBidiResolver& topResolver,
|
| LineMidpointState& isolatedLineMidpointState =
|
| isolatedResolver.midpointState();
|
| isolatedLineMidpointState = topResolver.midpointStateForIsolatedRun(
|
| - isolatedRun);
|
| + isolatedRun.runToReplace);
|
| EUnicodeBidi unicodeBidi = isolatedInline->style()->unicodeBidi();
|
| TextDirection direction;
|
| if (unicodeBidi == Plaintext) {
|
| @@ -197,7 +173,7 @@ void constructBidiRunsForLine(InlineBidiResolver& topResolver,
|
| // createBidiRunsForLine. This can be but is not necessarily the first
|
| // run within the isolate.
|
| InlineIterator iter = InlineIterator(LineLayoutItem(isolatedInline), LineLayoutItem(startObj),
|
| - isolatedRun->m_start);
|
| + isolatedRun.position);
|
| isolatedResolver.setPositionIgnoringNestedIsolates(iter);
|
| // We stop at the next end of line; we may re-enter this isolate in the
|
| // next call to constructBidiRuns().
|
| @@ -209,16 +185,16 @@ void constructBidiRunsForLine(InlineBidiResolver& topResolver,
|
|
|
| ASSERT(isolatedResolver.runs().runCount());
|
| if (isolatedResolver.runs().runCount())
|
| - bidiRuns.replaceRunWithRuns(isolatedRun, isolatedResolver.runs());
|
| + bidiRuns.replaceRunWithRuns(&isolatedRun.runToReplace, isolatedResolver.runs());
|
|
|
| // If we encountered any nested isolate runs, save them for later
|
| // processing.
|
| - if (!isolatedResolver.isolatedRuns().isEmpty()) {
|
| - isolatedRunsStack.resize(isolatedRunsStack.size() + 1);
|
| - isolatedRunsStack.last().isolatedRuns.appendVector(
|
| - isolatedResolver.isolatedRuns());
|
| - isolatedRunsStack.last().root = isolatedInline;
|
| - restoreIsolatedMidpointStates(topResolver, isolatedResolver);
|
| + while (!isolatedResolver.isolatedRuns().isEmpty()) {
|
| + BidiIsolatedRun runWithContext = isolatedResolver.isolatedRuns().last();
|
| + isolatedResolver.isolatedRuns().removeLast();
|
| + topResolver.setMidpointStateForIsolatedRun(runWithContext.runToReplace,
|
| + isolatedResolver.midpointStateForIsolatedRun(runWithContext.runToReplace));
|
| + topResolver.isolatedRuns().append(runWithContext);
|
| }
|
| }
|
| }
|
|
|