Skip to content

Commit bbe51e9

Browse files
committed
Add support for inputs with line breaks
1 parent e90bf00 commit bbe51e9

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

src/lib.rs

+41-1
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,27 @@ impl<'a> WrapIterImpl<'a> {
601601
while let Some((idx, ch)) = self.char_indices.next() {
602602
let char_width = ch.width().unwrap_or(0);
603603
let char_len = ch.len_utf8();
604-
if is_whitespace(ch) {
604+
605+
if ch == '\n' {
606+
self.split = idx;
607+
self.split_len = char_len;
608+
self.line_width_at_split = self.line_width;
609+
self.in_whitespace = false;
610+
611+
// If this is not the final line, return the current line. Otherwise,
612+
// we will return the line with its line break after exiting the loop
613+
if self.split + self.split_len < self.source.len() {
614+
let mut line = self.create_result_line(wrapper);
615+
cow_add_assign(&mut line, &self.source[self.start..self.split]);
616+
617+
self.start = self.split + self.split_len;
618+
self.line_width += wrapper.subsequent_indent.width();
619+
self.line_width -= self.line_width_at_split;
620+
621+
return Some(line);
622+
}
623+
}
624+
else if is_whitespace(ch) {
605625
// Extend the previous split or create a new one.
606626
if self.in_whitespace {
607627
self.split_len += char_len;
@@ -1215,4 +1235,24 @@ mod tests {
12151235
" bar"];
12161236
assert_eq!(dedent(&add_nl(&x)), add_nl(&y));
12171237
}
1238+
1239+
#[test]
1240+
fn multiline() {
1241+
assert_eq!(fill("1 3 5 7\n1 3 5 7",11),"1 3 5 7\n1 3 5 7");
1242+
assert_eq!(fill("1 3 5 7\n1 3 5 7",5),"1 3 5\n7\n1 3 5\n7");
1243+
assert_eq!(fill("1 3 5 7\n1 3 5 7",6),"1 3 5\n7\n1 3 5\n7");
1244+
assert_eq!(fill("1 3 5 7\nabcdefghi k",5),"1 3 5\n7\nabcde\nfghi\nk");
1245+
assert_eq!(fill("abcdefgh\ni k",5),"abcde\nfgh\ni k");
1246+
assert_eq!(fill("abcdefgh\nijklmnop",5),"abcde\nfgh\nijklm\nnop");
1247+
1248+
assert_eq!(fill("test\n",11),"test\n");
1249+
assert_eq!(fill("test\na",11),"test\na");
1250+
assert_eq!(fill("test\na\n",11),"test\na\n");
1251+
assert_eq!(fill("test\n\na\n\n",11),"test\n\na\n\n");
1252+
assert_eq!(fill("test\n\nabcdefghijk\n\nabcdefghijkm",11),"test\n\nabcdefghijk\n\nabcdefghijk\nm");
1253+
assert_eq!(fill("test\nabcdefghi\n",11),"test\nabcdefghi\n");
1254+
assert_eq!(fill("test\nabcdefghi\n\n",11),"test\nabcdefghi\n\n");
1255+
assert_eq!(fill("test\nabcdefghijklmnopq\n\n",11),"test\nabcdefghijk\nlmnopq\n\n");
1256+
assert_eq!(fill("test\nabcdefghijklmnopq abcdefghijk\n\n",11),"test\nabcdefghijk\nlmnopq\nabcdefghijk\n\n");
1257+
}
12181258
}

0 commit comments

Comments
 (0)