use std::str::FromStr;
use itertools::Itertools;
use console_error_panic_hook;
use wasm_bindgen::prelude::*;
use crate::{get_builtin_converter, Variant, ZhConverterBuilder, ENABLED_TARGET_VARIANTS};
#[wasm_bindgen]
pub fn get_build_timestamp() -> Option<String> {
option_env!("VERGEN_BUILD_TIMESTAMP").map(|s| s.into())
}
#[wasm_bindgen]
pub fn get_commit() -> Option<String> {
option_env!("VERGEN_GIT_SHA").map(|s| s.into())
}
#[wasm_bindgen]
pub fn get_mediawiki_commit() -> Option<String> {
option_env!("MEDIAWIKI_COMMIT_HASH").map(|s| s.into())
}
#[wasm_bindgen]
pub fn get_opencc_commit() -> Option<String> {
option_env!("OPENCC_COMMIT_HASH").map(|s| s.into())
}
#[wasm_bindgen]
pub fn get_enabled_target_variants() -> Option<String> {
use itertools::Itertools;
Some(format!(
"[{}]",
ENABLED_TARGET_VARIANTS
.iter()
.format_with(",", |v, f| f(&format_args!("\"{v}\"")))
))
}
#[wasm_bindgen]
pub fn zhconv(text: &str, target: &str, wikitext: Option<bool>, rules: Option<String>) -> String {
console_error_panic_hook::set_once();
let wikitext = wikitext.unwrap_or(false);
let target = Variant::from_str(target).expect("Unsupported target variant");
let converter = get_builtin_converter(target);
let mut builder = rules.map(|rs| ZhConverterBuilder::new().conv_lines(rs.lines()));
if wikitext {
converter.convert_as_wikitext(text, &mut builder, true, true)
} else {
match builder {
Some(builder) => converter.convert_with_secondary_converter(text, &builder.build()),
None => converter.convert(text),
}
}
}
#[wasm_bindgen]
pub fn is_hans(text: &str) -> bool {
console_error_panic_hook::set_once();
crate::is_hans(text)
}
#[wasm_bindgen]
pub fn is_hans_confidence(text: &str) -> f32 {
console_error_panic_hook::set_once();
crate::is_hans_confidence(text)
}
#[wasm_bindgen]
pub fn infer_variant(text: &str) -> String {
console_error_panic_hook::set_once();
crate::infer_variant(text).to_string()
}
#[wasm_bindgen]
pub fn infer_variant_confidence(text: &str) -> String {
console_error_panic_hook::set_once();
crate::infer_variant_confidence(text)
.into_iter()
.map(|(v, c)| format!("{};q={:.3}", v, c))
.join(", ")
}