Fix lowercase/uppercase normalization

Since each character being lowercased or uppercased can actually
generate one or more characters, we need to keep track of the offsets
being updated in the process.
This commit is contained in:
Anthony MOI
2019-12-29 00:19:49 -05:00
parent 22ffa716a1
commit 79b96dccd0

View File

@ -182,13 +182,25 @@ impl NormalizedString {
/// Lowercase /// Lowercase
pub fn lowercase(&mut self) -> &mut Self { pub fn lowercase(&mut self) -> &mut Self {
self.normalized.to_lowercase(); let mut new_chars: Vec<(char, isize)> = vec![];
self.for_each(|c| {
c.to_lowercase().enumerate().for_each(|(index, c)| {
new_chars.push((c, if index > 0 { 1 } else { 0 }));
})
});
self.transform(new_chars.into_iter());
self self
} }
/// Uppercase /// Uppercase
pub fn uppercase(&mut self) -> &mut Self { pub fn uppercase(&mut self) -> &mut Self {
self.normalized.to_uppercase(); let mut new_chars: Vec<(char, isize)> = vec![];
self.for_each(|c| {
c.to_uppercase().enumerate().for_each(|(index, c)| {
new_chars.push((c, if index > 0 { 1 } else { 0 }));
})
});
self.transform(new_chars.into_iter());
self self
} }
@ -226,6 +238,11 @@ impl NormalizedString {
pub fn len(&self) -> usize { pub fn len(&self) -> usize {
self.normalized.len() self.normalized.len()
} }
/// Whether empty
pub fn is_empty(&self) -> bool {
self.normalized.len() == 0
}
} }
#[cfg(test)] #[cfg(test)]