use crate::models::{LineInfo, SyllableItem};
use super::syllable_word_merger;
pub fn standardize_musixmatch_lyrics(lines: &mut [LineInfo]) {
for line in lines.iter_mut() {
standardize_musixmatch_line(line);
}
}
pub fn standardize_musixmatch_line(line: &mut LineInfo) {
let Some(syllables) = line.syllables_mut() else {
return;
};
if syllables.is_empty() || syllables.iter().any(SyllableItem::is_full) {
return;
}
let mut index = 1;
while index < syllables.len() {
let is_whitespace = syllables[index]
.parts()
.iter()
.flat_map(|part| part.text.chars())
.all(char::is_whitespace);
if is_whitespace {
let whitespace = syllables.remove(index).text();
if let Some(previous) = syllables[index - 1].as_syllable_mut() {
previous.text.push_str(&whitespace);
}
} else {
index += 1;
}
}
syllable_word_merger::merge(line);
}