| Index: Source/platform/text/BidiResolver.h
|
| diff --git a/Source/platform/text/BidiResolver.h b/Source/platform/text/BidiResolver.h
|
| index ab2211543cb2d3cb82ddf4f8eb1736ba149e30f8..e8cf990f2208ec7d4e9efbf0bc8af06f25f52bdc 100644
|
| --- a/Source/platform/text/BidiResolver.h
|
| +++ b/Source/platform/text/BidiResolver.h
|
| @@ -222,7 +222,7 @@ public:
|
|
|
| Vector<Run*>& isolatedRuns() { return m_isolatedRuns; }
|
|
|
| - bool isEndOfParagraph(const Iterator& end) { return m_current == end || m_current.atEnd(); }
|
| + bool isEndOfLine(const Iterator& end) { return m_current == end || m_current.atEnd(); }
|
|
|
| TextDirection determineParagraphDirectionality(bool* hasStrongDirectionality = 0);
|
|
|
| @@ -243,7 +243,9 @@ protected:
|
| Iterator m_last;
|
| BidiStatus m_status;
|
| WTF::Unicode::Direction m_direction;
|
| - Iterator endOfLine;
|
| + // m_endOfRunAtEndOfLine is "the position last eor in the end of line"
|
| + Iterator m_endOfRunAtEndOfLine;
|
| + Iterator m_endOfLine;
|
| bool m_reachedEndOfLine;
|
| Iterator m_lastBeforeET; // Before a EuropeanNumberTerminator
|
| bool m_emptyRun;
|
| @@ -285,9 +287,9 @@ void BidiResolver<Iterator, Run>::appendRun()
|
| unsigned startOffset = m_sor.offset();
|
| unsigned endOffset = m_eor.offset();
|
|
|
| - if (!endOfLine.atEnd() && endOffset >= endOfLine.offset()) {
|
| + if (!m_endOfRunAtEndOfLine.atEnd() && endOffset >= m_endOfRunAtEndOfLine.offset()) {
|
| m_reachedEndOfLine = true;
|
| - endOffset = endOfLine.offset();
|
| + endOffset = m_endOfRunAtEndOfLine.offset();
|
| }
|
|
|
| if (endOffset >= startOffset)
|
| @@ -587,9 +589,10 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, Vis
|
| m_emptyRun = true;
|
|
|
| m_eor = Iterator();
|
| + m_endOfLine = end;
|
|
|
| m_last = m_current;
|
| - bool lastParagraphEnded = false;
|
| + bool lastLineEnded = false;
|
| BidiResolver<Iterator, Run> stateAtEnd;
|
|
|
| while (true) {
|
| @@ -598,7 +601,7 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, Vis
|
| m_emptyRun = false;
|
| }
|
|
|
| - if (!lastParagraphEnded && isEndOfParagraph(end)) {
|
| + if (!lastLineEnded && isEndOfLine(end)) {
|
| if (m_emptyRun)
|
| break;
|
|
|
| @@ -609,11 +612,11 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, Vis
|
| stateAtEnd.m_reachedEndOfLine = m_reachedEndOfLine;
|
| stateAtEnd.m_lastBeforeET = m_lastBeforeET;
|
| stateAtEnd.m_emptyRun = m_emptyRun;
|
| - endOfLine = m_last;
|
| - lastParagraphEnded = true;
|
| + m_endOfRunAtEndOfLine = m_last;
|
| + lastLineEnded = true;
|
| }
|
| Direction dirCurrent;
|
| - if (lastParagraphEnded && (hardLineBreak || m_current.atEnd())) {
|
| + if (lastLineEnded && (hardLineBreak || m_current.atEnd())) {
|
| BidiContext* c = context();
|
| if (hardLineBreak) {
|
| // A deviation from the Unicode Bidi Algorithm in order to match
|
| @@ -902,9 +905,9 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, Vis
|
| break;
|
| }
|
|
|
| - if (lastParagraphEnded && m_eor == m_current) {
|
| + if (lastLineEnded && m_eor == m_current) {
|
| if (!m_reachedEndOfLine) {
|
| - m_eor = endOfLine;
|
| + m_eor = m_endOfRunAtEndOfLine;
|
| switch (m_status.eor) {
|
| case LeftToRight:
|
| case RightToLeft:
|
| @@ -942,7 +945,7 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, Vis
|
| increment();
|
| if (!m_currentExplicitEmbeddingSequence.isEmpty()) {
|
| bool committed = commitExplicitEmbedding();
|
| - if (committed && lastParagraphEnded) {
|
| + if (committed && lastLineEnded) {
|
| m_current = end;
|
| m_status = stateAtEnd.m_status;
|
| m_sor = stateAtEnd.m_sor;
|
| @@ -959,7 +962,8 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, Vis
|
|
|
| m_runs.setLogicallyLastRun(m_runs.lastRun());
|
| reorderRunsFromLevels();
|
| - endOfLine = Iterator();
|
| + m_endOfRunAtEndOfLine = Iterator();
|
| + m_endOfLine = Iterator();
|
| }
|
|
|
| template <class Iterator, class Run>
|
|
|