Replace \r and \r\n with \n when indexing text into the rope

Antonio Scandurra created

Change summary

crates/text/src/rope.rs | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)

Detailed changes

crates/text/src/rope.rs 🔗

@@ -58,11 +58,19 @@ impl Rope {
     pub fn push(&mut self, text: &str) {
         let mut new_chunks = SmallVec::<[_; 16]>::new();
         let mut new_chunk = ArrayString::new();
-        for ch in text.chars() {
+        let mut chars = text.chars().peekable();
+        while let Some(mut ch) = chars.next() {
             if new_chunk.len() + ch.len_utf8() > 2 * CHUNK_BASE {
                 new_chunks.push(Chunk(new_chunk));
                 new_chunk = ArrayString::new();
             }
+
+            if ch == '\r' {
+                ch = '\n';
+                if chars.peek().copied() == Some('\n') {
+                    chars.next();
+                }
+            }
             new_chunk.push(ch);
         }
         if !new_chunk.is_empty() {