add katakana support
This commit is contained in:
parent
8e830d03cb
commit
2bd66c5fa0
4 changed files with 136 additions and 4 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -235,7 +235,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "weeblib"
|
name = "weeblib"
|
||||||
version = "0.1.2"
|
version = "0.2.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console_error_panic_hook",
|
"console_error_panic_hook",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "weeblib"
|
name = "weeblib"
|
||||||
version = "0.1.2"
|
version = "0.2.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["Hamcha <hamcha@crunchy.rocks>"]
|
authors = ["Hamcha <hamcha@crunchy.rocks>"]
|
||||||
|
|
||||||
|
|
18
src/lib.rs
18
src/lib.rs
|
@ -1,5 +1,5 @@
|
||||||
use crate::romanization::romanize;
|
use crate::romanization::romanize;
|
||||||
use crate::syllable::to_hiragana;
|
use crate::syllable::{to_hiragana, to_katakana};
|
||||||
|
|
||||||
use wasm_bindgen::prelude::wasm_bindgen;
|
use wasm_bindgen::prelude::wasm_bindgen;
|
||||||
|
|
||||||
|
@ -13,6 +13,12 @@ pub fn convert_to_hiragana(text: &str) -> String {
|
||||||
romanize(text).iter().map(|r| to_hiragana(r)).collect()
|
romanize(text).iter().map(|r| to_hiragana(r)).collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Converts italian text to katakana trying to keep the phonemes the same
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub fn convert_to_katakana(text: &str) -> String {
|
||||||
|
romanize(text).iter().map(|r| to_katakana(r)).collect()
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
@ -26,4 +32,14 @@ mod tests {
|
||||||
fn test_convert_to_hiragana_symbols() {
|
fn test_convert_to_hiragana_symbols() {
|
||||||
assert_eq!(convert_to_hiragana("asso-lutamente no!1"), "あっそ-るためんて の!1");
|
assert_eq!(convert_to_hiragana("asso-lutamente no!1"), "あっそ-るためんて の!1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_convert_to_katakana_words() {
|
||||||
|
assert_eq!(convert_to_katakana("assolutamente"), "アッソルタメンテ");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_convert_to_katakana_symbols() {
|
||||||
|
assert_eq!(convert_to_katakana("asso-lutamente no!1"), "アッソ-ルタメンテ ノ!1");
|
||||||
|
}
|
||||||
}
|
}
|
122
src/syllable.rs
122
src/syllable.rs
|
@ -236,8 +236,124 @@ pub(crate) fn to_hiragana(syllable: &Syllable) -> String {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Display for Syllable {
|
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
pub(crate) fn to_katakana(syllable: &Syllable) -> String {
|
||||||
write!(f, "{}", to_hiragana(self))
|
match syllable {
|
||||||
|
A => "ア".to_string(),
|
||||||
|
I => "イ".to_string(),
|
||||||
|
U => "ウ".to_string(),
|
||||||
|
E => "エ".to_string(),
|
||||||
|
O => "オ".to_string(),
|
||||||
|
Ka => "カ".to_string(),
|
||||||
|
Ki => "キ".to_string(),
|
||||||
|
Ku => "ク".to_string(),
|
||||||
|
Ke => "ケ".to_string(),
|
||||||
|
Ko => "コ".to_string(),
|
||||||
|
Sa => "サ".to_string(),
|
||||||
|
Shi => "シ".to_string(),
|
||||||
|
Su => "ス".to_string(),
|
||||||
|
Se => "セ".to_string(),
|
||||||
|
So => "ソ".to_string(),
|
||||||
|
Ta => "タ".to_string(),
|
||||||
|
Chi => "チ".to_string(),
|
||||||
|
Tsu => "ツ".to_string(),
|
||||||
|
Te => "テ".to_string(),
|
||||||
|
To => "ト".to_string(),
|
||||||
|
Na => "ナ".to_string(),
|
||||||
|
Ni => "ニ".to_string(),
|
||||||
|
Nu => "ヌ".to_string(),
|
||||||
|
Ne => "ネ".to_string(),
|
||||||
|
No => "ノ".to_string(),
|
||||||
|
Ha => "ハ".to_string(),
|
||||||
|
Hi => "ヒ".to_string(),
|
||||||
|
Fu => "フ".to_string(),
|
||||||
|
He => "ヘ".to_string(),
|
||||||
|
Ho => "ホ".to_string(),
|
||||||
|
Ma => "マ".to_string(),
|
||||||
|
Mi => "ミ".to_string(),
|
||||||
|
Mu => "ム".to_string(),
|
||||||
|
Me => "メ".to_string(),
|
||||||
|
Mo => "モ".to_string(),
|
||||||
|
Ya => "ヤ".to_string(),
|
||||||
|
Yu => "ユ".to_string(),
|
||||||
|
Yo => "ヨ".to_string(),
|
||||||
|
Ra => "ラ".to_string(),
|
||||||
|
Ri => "リ".to_string(),
|
||||||
|
Ru => "ル".to_string(),
|
||||||
|
Re => "レ".to_string(),
|
||||||
|
Ro => "ロ".to_string(),
|
||||||
|
Wa => "ワ".to_string(),
|
||||||
|
N => "ン".to_string(),
|
||||||
|
Ga => "ガ".to_string(),
|
||||||
|
Gi => "ギ".to_string(),
|
||||||
|
Gu => "グ".to_string(),
|
||||||
|
Ge => "ゲ".to_string(),
|
||||||
|
Go => "ゴ".to_string(),
|
||||||
|
Za => "ザ".to_string(),
|
||||||
|
Ji => "ジ".to_string(),
|
||||||
|
Zu => "ズ".to_string(),
|
||||||
|
Ze => "ゼ".to_string(),
|
||||||
|
Zo => "ゾ".to_string(),
|
||||||
|
Da => "ダ".to_string(),
|
||||||
|
De => "デ".to_string(),
|
||||||
|
Do => "ド".to_string(),
|
||||||
|
Ba => "バ".to_string(),
|
||||||
|
Bi => "ビ".to_string(),
|
||||||
|
Bu => "ブ".to_string(),
|
||||||
|
Be => "ベ".to_string(),
|
||||||
|
Bo => "ボ".to_string(),
|
||||||
|
Pa => "パ".to_string(),
|
||||||
|
Pi => "ピ".to_string(),
|
||||||
|
Pu => "プ".to_string(),
|
||||||
|
Pe => "ペ".to_string(),
|
||||||
|
Po => "ポ".to_string(),
|
||||||
|
Kya => "キャ".to_string(),
|
||||||
|
Kyu => "キュ".to_string(),
|
||||||
|
Kyo => "キョ".to_string(),
|
||||||
|
Sha => "シャ".to_string(),
|
||||||
|
Shu => "シュ".to_string(),
|
||||||
|
Sho => "ショ".to_string(),
|
||||||
|
Cha => "チャ".to_string(),
|
||||||
|
Chu => "チュ".to_string(),
|
||||||
|
Cho => "チョ".to_string(),
|
||||||
|
Rya => "リャ".to_string(),
|
||||||
|
Ryu => "リュ".to_string(),
|
||||||
|
Ryo => "リョ".to_string(),
|
||||||
|
LittleTsu => "ッ".to_string(),
|
||||||
|
LongVowel => "ー".to_string(),
|
||||||
|
ChiE => "チェ".to_string(),
|
||||||
|
ToU => "トゥ".to_string(),
|
||||||
|
TeI => "トィ".to_string(),
|
||||||
|
VuA => "ヴァ".to_string(),
|
||||||
|
VuI => "ヴィ".to_string(),
|
||||||
|
Vu => "ヴ".to_string(),
|
||||||
|
VuE => "ヴェ".to_string(),
|
||||||
|
VuO => "ヴォ".to_string(),
|
||||||
|
Ja => "ジャ".to_string(),
|
||||||
|
Ju => "ジュ".to_string(),
|
||||||
|
Jo => "ジョ".to_string(),
|
||||||
|
Je => "ジェ".to_string(),
|
||||||
|
Zi => "ヂィ".to_string(),
|
||||||
|
Gya => "ギャ".to_string(),
|
||||||
|
Gyu => "ギュ".to_string(),
|
||||||
|
Gyo => "ギョ".to_string(),
|
||||||
|
Bya => "ビャ".to_string(),
|
||||||
|
Byu => "ビュ".to_string(),
|
||||||
|
Byo => "ビョ".to_string(),
|
||||||
|
Pya => "ピャ".to_string(),
|
||||||
|
Pyu => "ピュ".to_string(),
|
||||||
|
Pyo => "ピョ".to_string(),
|
||||||
|
Zyo => "ずょ".to_string(),
|
||||||
|
Zya => "ズャ".to_string(),
|
||||||
|
Zyu => "ズュ".to_string(),
|
||||||
|
Zye => "ズョ".to_string(),
|
||||||
|
NonAlpha(char) => char.to_string()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
impl Display for Syllable {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
write!(f, "{}", to_katakana(self))
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue