From 820963cb9008ca491b5e071e6911520a3c8b05fa Mon Sep 17 00:00:00 2001 From: Nikita Revenco <154856872+NikitaRevenco@users.noreply.github.com> Date: Fri, 20 Dec 2024 10:41:02 +0000 Subject: [PATCH] fix: failing test is now fixed --- helix-core/src/case_conversion.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/helix-core/src/case_conversion.rs b/helix-core/src/case_conversion.rs index 58c6f8ecb..734a40b39 100644 --- a/helix-core/src/case_conversion.rs +++ b/helix-core/src/case_conversion.rs @@ -73,22 +73,24 @@ pub fn to_alternate_case_with(text: impl Iterator, buf: &mut Tendri pub fn to_title_case_with(text: impl Iterator, buf: &mut Tendril) { let mut capitalize_next = true; - let mut prev_is_lowercase = false; + let mut prev: Option = None; for c in text.skip_while(|ch| ch.is_whitespace()) { if c.is_alphanumeric() { - if capitalize_next || (prev_is_lowercase && c.is_uppercase()) { + if capitalize_next || (prev.is_some_and(|p| p.is_lowercase()) && c.is_uppercase()) { buf.extend(c.to_uppercase()); capitalize_next = false; } else { buf.extend(c.to_lowercase()); } - prev_is_lowercase = c.is_lowercase(); } else { capitalize_next = true; - prev_is_lowercase = false; - buf.push(' '); + // only if the previous char is not already space + if prev.is_some_and(|p| p != ' ') { + buf.push(' '); + } } + prev = Some(c); } *buf = buf.trim().into(); @@ -274,7 +276,9 @@ mod tests { title_test("hello_world", "Hello World"); title_test("HELLO_WORLD", "Hello World"); title_test("hello-world", "Hello World"); - // title_test("hello world", "Hello World"); + + title_test("hello world", "Hello World"); + title_test(" hello world", "Hello World"); title_test("hello\tworld", "Hello World"); // title_test("HELLO WORLD", "Hello World");