use std::ops::Range;
use crate::{
layout_input::LayoutInput,
line_breaker::{hard_break, starts_paragraph},
};
pub(crate) struct LineText {
pub(crate) range: Range<usize>,
pub(crate) visible: usize,
pub(crate) drawn: usize,
pub(crate) indent: f32,
pub(crate) room: f32,
}
#[derive(Clone, Copy)]
pub(crate) struct LineEdges {
pub(crate) top: f32,
pub(crate) first: bool,
pub(crate) last: bool,
pub(crate) ellipsized: bool,
}
pub(crate) fn before_hard_break(text: &str, start: usize, end: usize) -> usize {
text.get(start..end)
.map_or(end, |part| start + part.trim_end_matches(hard_break).len())
}
pub(crate) fn indent(input: &LayoutInput<'_>, offset: usize) -> f32 {
if starts_paragraph(input.text, offset) {
input.lengths.first_line_indent
} else {
input.lengths.rest_line_indent
}
}