1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
use crate::With; /// Represents a row of text within a `String`. /// /// A row is made of offsets into a parent `String`. /// The corresponding substring should take `width` cells when printed. #[derive(Debug, Clone, Copy)] pub struct Row { /// Beginning of the row in the parent `String`. pub start: usize, /// End of the row (excluded) pub end: usize, /// Width of the row, in cells. pub width: usize, } impl Row { /// Shift a row start and end by `offset`. pub fn shift(&mut self, offset: usize) { self.start += offset; self.end += offset; } /// Shift a row start and end by `offset`. /// /// Chainable variant; pub fn shifted(self, offset: usize) -> Self { self.with(|s| s.shift(offset)) } /// Shift back a row start and end by `offset`. pub fn rev_shift(&mut self, offset: usize) { self.start -= offset; self.end -= offset; } }