firstindent: usize,
laterindent: usize,
wrap: bool,
+ centred: bool,
}
impl ColouredString {
firstindent: 0,
laterindent: 0,
wrap: true,
+ centred: false,
}
}
self
}
+ pub fn set_centred(mut self, centred: bool) -> Self {
+ self.centred = centred;
+ self
+ }
+
pub fn set_indent(
mut self,
firstindent: usize,
words: Vec::new(),
firstindent: 0,
laterindent: 0,
+ centred: false,
wrap: true,
}
);
words: Vec::new(),
firstindent: 0,
laterindent: 0,
+ centred: false,
wrap: false,
}
);
words: Vec::new(),
firstindent: 3,
laterindent: 4,
+ centred: false,
wrap: true,
}
);
},
firstindent: 0,
laterindent: 0,
+ centred: false,
wrap: true,
}
);
},
firstindent: 0,
laterindent: 0,
+ centred: false,
wrap: true,
}
);
},
firstindent: 0,
laterindent: 0,
+ centred: false,
wrap: true,
}
);
let mut break_width = 0;
let mut curr_indent = self.firstindent;
+ let twidth = width.saturating_sub(1);
+ let mut push_line = |line: ColouredString| {
+ let line = if self.centred {
+ let tspace = twidth.saturating_sub(line.width());
+ let tleft = tspace / 2;
+ ColouredString::plain(" ").repeat(tleft) + line
+ } else {
+ let indent = if lines.len() > 0 {
+ self.laterindent
+ } else {
+ self.firstindent
+ };
+ ColouredString::plain(" ").repeat(indent) + line
+ };
+ lines.push(line);
+ };
+
for (i, word) in self.words.iter().enumerate() {
curr_width += word.width();
curr_pos = i + 1;
&& break_pos > start_pos
&& curr_width - start_width + curr_indent >= width
{
- let mut line =
- ColouredString::plain(" ").repeat(curr_indent);
+ let mut line = ColouredString::plain("");
for i in start_pos..break_pos {
line.push_str(&self.words[i]);
}
- lines.push(line);
+ push_line(line);
start_pos = break_pos;
start_width = break_width;
if self.words[start_pos].is_space() {
}
}
- let mut line = ColouredString::plain(" ").repeat(curr_indent);
+ let mut line = ColouredString::plain("");
for i in start_pos..break_pos {
line.push_str(&self.words[i]);
}
- lines.push(line);
+ push_line(line);
lines
}