Restructuring, prepare for room, Discord support
This commit is contained in:
parent
1fbb0ede50
commit
ed11799bf5
8 changed files with 492 additions and 239 deletions
47
src/utils.rs
Normal file
47
src/utils.rs
Normal file
|
@ -0,0 +1,47 @@
|
|||
use wana_kana::{ConvertJapanese, IsJapaneseStr};
|
||||
|
||||
pub fn get_starting_mora(word: &str) -> String {
|
||||
if word.is_empty() {
|
||||
return String::from("");
|
||||
}
|
||||
let word = word.to_hiragana();
|
||||
let mut iter = word.chars();
|
||||
let starting_char = iter.next().unwrap();
|
||||
let second_char = iter.next().unwrap();
|
||||
match second_char {
|
||||
'ゃ' | 'ゅ' | 'ょ' => format!("{starting_char}{second_char}"),
|
||||
_ => starting_char.to_string(),
|
||||
}
|
||||
}
|
||||
|
||||
// Trim off lengtheners and non-kana that are irrelevant to shiritori
|
||||
// TODO: Use slices
|
||||
fn trim_irrelevant_chars(word: &str) -> String {
|
||||
let mut iter = word.chars().rev().peekable();
|
||||
while let Some(c) = iter.peek() {
|
||||
if *c == 'ー' || !c.to_string().is_kana() {
|
||||
iter.next();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
iter.rev().collect()
|
||||
}
|
||||
|
||||
// Get final mora, which could be multiple chars e.g. しゃ
|
||||
// TODO: Use slices
|
||||
pub fn get_final_mora(word: &str) -> String {
|
||||
let word = trim_irrelevant_chars(word).to_hiragana();
|
||||
if word.is_empty() {
|
||||
return String::from("");
|
||||
}
|
||||
let mut iter = word.chars().rev();
|
||||
let final_char = iter.next().unwrap();
|
||||
match final_char {
|
||||
'ゃ' | 'ゅ' | 'ょ' => format!("{}{final_char}", match iter.next() {
|
||||
Some(c) => c.to_string(),
|
||||
None => String::from(""),
|
||||
}),
|
||||
_ => final_char.to_string(),
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue