Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-core/src/case_conversion.rs')
| -rw-r--r-- | helix-core/src/case_conversion.rs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/helix-core/src/case_conversion.rs b/helix-core/src/case_conversion.rs new file mode 100644 index 00000000..2054a2bb --- /dev/null +++ b/helix-core/src/case_conversion.rs @@ -0,0 +1,69 @@ +use crate::Tendril; + +// todo: should this be grapheme aware? + +pub fn to_pascal_case(text: impl Iterator<Item = char>) -> Tendril { + let mut res = Tendril::new(); + to_pascal_case_with(text, &mut res); + res +} + +pub fn to_pascal_case_with(text: impl Iterator<Item = char>, buf: &mut Tendril) { + let mut at_word_start = true; + for c in text { + // we don't count _ as a word char here so case conversions work well + if !c.is_alphanumeric() { + at_word_start = true; + continue; + } + if at_word_start { + at_word_start = false; + buf.extend(c.to_uppercase()); + } else { + buf.push(c) + } + } +} + +pub fn to_upper_case_with(text: impl Iterator<Item = char>, buf: &mut Tendril) { + for c in text { + for c in c.to_uppercase() { + buf.push(c) + } + } +} + +pub fn to_lower_case_with(text: impl Iterator<Item = char>, buf: &mut Tendril) { + for c in text { + for c in c.to_lowercase() { + buf.push(c) + } + } +} + +pub fn to_camel_case(text: impl Iterator<Item = char>) -> Tendril { + let mut res = Tendril::new(); + to_camel_case_with(text, &mut res); + res +} +pub fn to_camel_case_with(mut text: impl Iterator<Item = char>, buf: &mut Tendril) { + for c in &mut text { + if c.is_alphanumeric() { + buf.extend(c.to_lowercase()) + } + } + let mut at_word_start = false; + for c in text { + // we don't count _ as a word char here so case conversions work well + if !c.is_alphanumeric() { + at_word_start = true; + continue; + } + if at_word_start { + at_word_start = false; + buf.extend(c.to_uppercase()); + } else { + buf.push(c) + } + } +} |