use bpmf_py::bpmf::*;
fn main() {
let shuai4 = Syllable::new(Init::Shi, Med::Wu, Rime::Ai, Tone::Fall);
println!("Constructed: '{shuai4}'");
assert_eq!(char::from(Init::Shi), 'ㄕ');
assert_eq!(char::from(Med::Yu), 'ㄩ');
assert_eq!(char::from(Rime::Er), 'ㄦ');
assert_eq!(char::from(Tone::Fall), 'ˋ');
assert_eq!(char::from(Init::NoInit), '\0');
use Init::*;
use Med::*;
use Rime::*;
use Tone::*;
let qiang2 = Syllable::new(Qi, Yi, Ang, Rise);
println!("Constructed '{}'", qiang2);
let mut txt = "\t ㄎㄨㄟˋ 'ㄖㄣˊ";
let (mut syl, mut remainder) = Syllable::parse_bopomofo(txt).unwrap();
assert_eq!(syl, Syllable::new(Ke, Wu, Ei, Fall));
assert_eq!(remainder, " 'ㄖㄣˊ");
(syl, remainder) = Syllable::parse_bopomofo(remainder).unwrap();
assert_eq!(syl, Syllable::new(Ri, NoMed, En, Rise));
assert_eq!(remainder, "");
txt = "万X尢";
if let Err(ParseBopomofoError) = Syllable::parse_bopomofo(txt) {
println!("Failed to parse '{}'", txt)
}
txt = "ráo";
(syl, _) = Syllable::parse_pinyin(txt).unwrap();
println!("Pinyin '{txt}' parsed to '{}'", syl.to_pinyin());
txt = "lve4";
(syl, _) = Syllable::parse_ascii_pinyin(txt).unwrap();
println!("Ascii pinyin '{txt}' parsed to '{}'", syl.to_pinyin());
txt = "qiou2";
(syl, _) = Syllable::parse_ascii_pinyin(txt).unwrap();
println!(
"Long form ascii pinyin '{txt}' parsed to '{}'",
syl.to_pinyin()
);
txt = "ㄑㄧㄠˇ";
syl = txt.parse().unwrap();
println!("Bopomofo '{txt}' recognized as '{}'", syl);
txt = "qiǎo";
syl = txt.parse().unwrap();
println!("Pinyin {txt} recognized as '{}'", syl);
syl = Syllable::new(Ri, Wu, Ang, Dip); let (syl2, _) = Syllable::parse_ascii_pinyin("ruang3").unwrap();
assert_eq!(syl, syl2);
let orig_syllables = ["zhuan4", "an3", "an1", "bo2", "qi3"];
let mut sorted_syllables: Vec<Syllable> = orig_syllables
.into_iter()
.map(Syllable::parse_ascii_pinyin)
.map(|res| res.unwrap().0)
.collect();
sorted_syllables.sort();
println!(
"{:?} sorted: {:?}",
orig_syllables,
sorted_syllables
.iter()
.map(Syllable::to_ascii_pinyin)
.collect::<Vec<String>>()
);
println!("\n- - -\nCalling convenient functions performing direct conversion");
println!("{}", pinyin_to_ascii_pinyin("ráo").unwrap()); println!("{}", ascii_pinyin_to_pinyin("rao2").unwrap()); println!("{}", bopomofo_to_pinyin("ㄑㄩㄥ").unwrap()); println!("{}", pinyin_to_bopomofo("qiōng").unwrap()); println!("{}", ascii_pinyin_to_bopomofo("qiong1").unwrap()); println!("{}", bopomofo_to_ascii_pinyin("ㄑㄩㄥ").unwrap()); }