use crate::{
layout_options::{TextLayoutOptions, TextOverflow},
line_breaker::{BrokenLine, starts_paragraph},
};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(crate) enum EllipsisAt {
Start,
Middle,
End,
}
pub(crate) const ELLIPSIS: &str = "\u{2026}";
pub(crate) fn ellipsis_at(options: &TextLayoutOptions) -> Option<EllipsisAt> {
match options.overflow {
TextOverflow::Ellipsis => Some(EllipsisAt::End),
TextOverflow::StartEllipsis if options.max_lines == 1 => Some(EllipsisAt::Start),
TextOverflow::MiddleEllipsis if options.max_lines == 1 => Some(EllipsisAt::Middle),
_ => None,
}
}
pub(crate) fn take_rest_of_paragraph(lines: &mut [BrokenLine], text: &str, last: usize) {
let end = lines[last + 1..]
.iter()
.take_while(|line| !starts_paragraph(text, line.text.start))
.last()
.map_or(lines[last].text.end, |line| line.text.end);
lines[last] = BrokenLine::plain(lines[last].text.start..end);
}