use unicode_segmentation::UnicodeSegmentation;
use unicode_width::UnicodeWidthStr;
mod lines_iterator;
mod reader;
pub use self::lines_iterator::{LinesIterator, Row};
pub use self::reader::ProgressReader;
pub fn prefix_length<'a, I>(iter: I, width: usize, delimiter: &str) -> usize
where I: Iterator<Item = &'a str>
{
let delimiter_width = delimiter.width();
let delimiter_len = delimiter.len();
let sum = iter.scan(0, |w, token| {
*w += token.width();
if *w > width {
None
} else {
*w += delimiter_width;
Some(token)
}
})
.map(|token| token.len() + delimiter_len)
.fold(0, |a, b| a + b);
if sum == 0 { sum } else { sum - delimiter_len }
}
pub fn suffix_length<'a, I>(iter: I, width: usize, delimiter: &str) -> usize
where I: DoubleEndedIterator<Item = &'a str>
{
prefix_length(iter.rev(), width, delimiter)
}
pub fn simple_suffix_length(text: &str, width: usize) -> usize {
suffix_length(text.graphemes(true), width, "")
}