Position RenderedPosition::positionAtRightBoundaryOfBiDiRun() const { ASSERT(atRightBoundaryOfBidiRun()); if (atRightmostOffsetInBox()) return Position::editingPositionOf(m_layoutObject->node(), m_offset); return Position::editingPositionOf(prevLeafChild()->layoutObject().node(), prevLeafChild()->caretRightmostOffset()); }
Position RenderedPosition::positionAtRightBoundaryOfBiDiRun() const { ASSERT(atRightBoundaryOfBidiRun()); if (atRightmostOffsetInBox()) return createLegacyEditingPosition(m_renderer->node(), m_offset); return createLegacyEditingPosition(prevLeafChild()->renderer().node(), prevLeafChild()->caretRightmostOffset()); }
bool RenderedPosition::atRightBoundaryOfBidiRun(ShouldMatchBidiLevel shouldMatchBidiLevel, unsigned char bidiLevelOfRun) const { if (!m_inlineBox) return false; if (atRightmostOffsetInBox()) { if (shouldMatchBidiLevel == IgnoreBidiLevel) return !nextLeafChild() || nextLeafChild()->bidiLevel() < m_inlineBox->bidiLevel(); return m_inlineBox->bidiLevel() >= bidiLevelOfRun && (!nextLeafChild() || nextLeafChild()->bidiLevel() < bidiLevelOfRun); } if (atLeftmostOffsetInBox()) { if (shouldMatchBidiLevel == IgnoreBidiLevel) return prevLeafChild() && m_inlineBox->bidiLevel() < prevLeafChild()->bidiLevel(); return prevLeafChild() && m_inlineBox->bidiLevel() < bidiLevelOfRun && prevLeafChild()->bidiLevel() >= bidiLevelOfRun; } return false; }
unsigned char RenderedPosition::bidiLevelOnRight() const { InlineBox* box = atRightmostOffsetInBox() ? nextLeafChild() : m_inlineBox; return box ? box->bidiLevel() : 0; }
bool RenderedPosition::isEquivalent(const RenderedPosition& other) const { return (m_layoutObject == other.m_layoutObject && m_inlineBox == other.m_inlineBox && m_offset == other.m_offset) || (atLeftmostOffsetInBox() && other.atRightmostOffsetInBox() && prevLeafChild() == other.m_inlineBox) || (atRightmostOffsetInBox() && other.atLeftmostOffsetInBox() && nextLeafChild() == other.m_inlineBox); }