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); |
} |
} |
} |