pub use half_width::HalfWidth;
pub use hiragana::hira;
pub use katakana::kata;
pub use small_kana::SmallKana;
pub use to_kana_trait::ToKana;
pub mod fmt;
mod half_width;
mod hiragana;
mod katakana;
#[macro_use]
mod macros;
mod small_kana;
mod to_kana_trait;
pub type Error = String;
pub type Result = std::result::Result<String, Error>;
const KATAKANA_SOFTENED_DIACRITICS: [char; 21] = [
'ガ', 'ギ', 'グ', 'ゲ', 'ゴ', 'ザ', 'ジ', 'ズ', 'ゼ', 'ゾ', 'ダ', 'ヂ', 'ヅ',
'デ', 'ド', 'バ', 'ビ', 'ブ', 'ベ', 'ボ', 'ヴ',
];
const KATAKANA_HARDENED_DIACRITICS: [char; 5] = ['パ', 'ピ', 'プ', 'ペ', 'ポ'];
fn has_softened_diacritic(c: char) -> bool {
KATAKANA_SOFTENED_DIACRITICS.contains(&c)
}
fn has_hardened_diacritic(c: char) -> bool {
KATAKANA_HARDENED_DIACRITICS.contains(&c)
}
fn unexpected_char_error(i: usize, c: char) -> Error {
format!("Unexpected char at {}: {}", i, c)
}
fn unexpected_end_of_string() -> Error {
String::from("Unexpected end of string")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn comma() {
assert_eq!(Ok(String::from("、")), hira(","));
assert_eq!(Ok(String::from("、")), kata(","));
}
#[test]
fn period() {
assert_eq!(Ok(String::from("。")), hira("."));
assert_eq!(Ok(String::from("。")), kata("."));
}
#[test]
fn exclamation_point() {
assert_eq!(Ok(String::from("!")), hira("!"));
assert_eq!(Ok(String::from("!")), kata("!"));
}
#[test]
fn question_mark() {
assert_eq!(Ok(String::from("?")), hira("?"));
assert_eq!(Ok(String::from("?")), kata("?"));
}
}