static IntRect ellipsisRectForBox(const InlineTextBox& box, unsigned start, unsigned end) { unsigned truncation = box.truncation(); if (truncation == cNoTruncation) return IntRect(); auto ellipsis = box.root().ellipsisBox(); if (!ellipsis) return IntRect(); IntRect rect; unsigned ellipsisStartPosition = start > box.start() ? start - box.start() : 0; ASSERT(end >= box.start()); unsigned ellipsisEndPosition = std::min(end - box.start(), box.len()); // The ellipsis should be considered to be selected if the end of // the selection is past the beginning of the truncation and the // beginning of the selection is before or at the beginning of the truncation. if (ellipsisEndPosition < truncation && ellipsisStartPosition > truncation) return IntRect(); return ellipsis->selectionRect(); }