diff options
Diffstat (limited to 'WebCore/platform/text/BidiResolver.h')
-rw-r--r-- | WebCore/platform/text/BidiResolver.h | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/WebCore/platform/text/BidiResolver.h b/WebCore/platform/text/BidiResolver.h index ffd3d51..8288be4 100644 --- a/WebCore/platform/text/BidiResolver.h +++ b/WebCore/platform/text/BidiResolver.h @@ -254,7 +254,16 @@ template <class Iterator, class Run> void BidiResolver<Iterator, Run>::appendRun() { if (!emptyRun && !eor.atEnd()) { - addRun(new Run(sor.offset(), eor.offset() + 1, context(), m_direction)); + unsigned startOffset = sor.offset(); + unsigned endOffset = eor.offset(); + + if (!endOfLine.atEnd() && endOffset >= endOfLine.offset()) { + reachedEndOfLine = true; + endOffset = endOfLine.offset(); + } + + if (endOffset >= startOffset) + addRun(new Run(startOffset, endOffset + 1, context(), m_direction)); eor.increment(); sor = eor; @@ -352,8 +361,8 @@ void BidiResolver<Iterator, Run>::raiseExplicitEmbeddingLevel(WTF::Unicode::Dire m_direction = LeftToRight; } } else if (m_status.eor == ArabicNumber - || m_status.eor == EuropeanNumber && (m_status.lastStrong != LeftToRight || from == RightToLeft) - || m_status.eor != EuropeanNumber && m_status.lastStrong == LeftToRight && from == RightToLeft) { + || (m_status.eor == EuropeanNumber && (m_status.lastStrong != LeftToRight || from == RightToLeft)) + || (m_status.eor != EuropeanNumber && m_status.lastStrong == LeftToRight && from == RightToLeft)) { appendRun(); m_direction = RightToLeft; } @@ -722,8 +731,8 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, boo case WhiteSpaceNeutral: case OtherNeutral: if (m_status.eor == ArabicNumber - || m_status.eor == EuropeanNumber && (m_status.lastStrong == RightToLeft || context()->dir() == RightToLeft) - || m_status.eor != EuropeanNumber && m_status.lastStrong == LeftToRight && context()->dir() == RightToLeft) { + || (m_status.eor == EuropeanNumber && (m_status.lastStrong == RightToLeft || context()->dir() == RightToLeft)) + || (m_status.eor != EuropeanNumber && m_status.lastStrong == LeftToRight && context()->dir() == RightToLeft)) { // Terminate the run before the neutrals. appendRun(); // Begin an R run for the neutrals. |