use crate::config::Config;
use crate::paths::Paths;
use anyhow::{bail, Context, Result};
use clap::Args as ClapArgs;
use furigana::{RomajiStyle, TtsOptions};
#[derive(ClapArgs, Debug)]
pub struct Args {
text: String,
#[arg(short, long, default_value = "tts")]
mode: String,
#[arg(long, default_value = " ")]
short_pause: String,
#[arg(long, default_value = " ")]
long_pause: String,
#[arg(long)]
drop_period: bool,
}
pub fn run(args: Args, paths: &Paths, _cfg: &Config) -> Result<()> {
let f = super::build_furigana(paths)?;
let result = match args.mode.as_str() {
"kanji" => args.text.clone(),
"ruby" => f.to_ruby(&args.text),
"hiragana" | "hira" => f.to_hiragana(&args.text),
"romaji" => f.to_romaji(&args.text, RomajiStyle::Hepburn),
"romaji-kunrei" | "kunrei" => f.to_romaji(&args.text, RomajiStyle::Kunrei),
"tts" => {
let opts = TtsOptions {
short_pause: args.short_pause,
long_pause: args.long_pause,
keep_period: !args.drop_period,
};
f.to_tts(&args.text, &opts)
}
"analyze" => {
let result = f.analyze(&args.text);
serde_json::to_string_pretty(&result).context("serialize AnalyzeResult to JSON")?
}
other => bail!(
"未知の mode: {other} (使用可能: tts | hiragana | ruby | kanji | romaji | romaji-kunrei | analyze)"
),
};
println!("{result}");
Ok(())
}