sudachi/plugin/path_rewrite/
mod.rspub mod join_katakana_oov;
pub mod join_numeric;
use serde_json::Value;
use crate::analysis::lattice::Lattice;
use crate::analysis::node::ResultNode;
use crate::config::Config;
use crate::dic::grammar::Grammar;
use crate::input_text::InputBuffer;
use crate::plugin::path_rewrite::join_katakana_oov::JoinKatakanaOovPlugin;
use crate::plugin::path_rewrite::join_numeric::JoinNumericPlugin;
use crate::plugin::PluginCategory;
use crate::prelude::*;
pub trait PathRewritePlugin: Sync + Send {
fn set_up(&mut self, settings: &Value, config: &Config, grammar: &Grammar)
-> SudachiResult<()>;
fn rewrite(
&self,
text: &InputBuffer,
path: Vec<ResultNode>,
lattice: &Lattice,
) -> SudachiResult<Vec<ResultNode>>;
}
impl PluginCategory for dyn PathRewritePlugin {
type BoxType = Box<dyn PathRewritePlugin + Sync + Send>;
type InitFnType = unsafe fn() -> SudachiResult<Self::BoxType>;
fn configurations(cfg: &Config) -> &[Value] {
&cfg.path_rewrite_plugins
}
fn bundled_impl(name: &str) -> Option<Self::BoxType> {
match name {
"JoinNumericPlugin" => Some(Box::<JoinNumericPlugin>::default()),
"JoinKatakanaOovPlugin" => Some(Box::<JoinKatakanaOovPlugin>::default()),
_ => None,
}
}
fn do_setup(
ptr: &mut Self::BoxType,
settings: &Value,
config: &Config,
grammar: &mut Grammar,
) -> SudachiResult<()> {
ptr.set_up(settings, config, grammar)
}
}