sudachi/plugin/input_text/
mod.rspub mod default_input_text;
mod ignore_yomigana;
mod prolonged_sound_mark;
use serde_json::Value;
use crate::config::Config;
use crate::dic::grammar::Grammar;
use crate::input_text::{InputBuffer, InputEditor};
use crate::plugin::input_text::default_input_text::DefaultInputTextPlugin;
use crate::plugin::input_text::ignore_yomigana::IgnoreYomiganaPlugin;
use crate::plugin::input_text::prolonged_sound_mark::ProlongedSoundMarkPlugin;
use crate::plugin::loader::PluginCategory;
use crate::prelude::*;
pub trait InputTextPlugin: Sync + Send {
fn set_up(&mut self, settings: &Value, config: &Config, grammar: &Grammar)
-> SudachiResult<()>;
fn uses_chars(&self) -> bool {
false
}
fn rewrite(&self, input: &mut InputBuffer) -> SudachiResult<()> {
if self.uses_chars() {
input.refresh_chars()
}
input.with_editor(|b, r| {
#[allow(deprecated)]
self.rewrite_impl(b, r)
})
}
#[deprecated(note = "call rewrite instead")]
fn rewrite_impl<'a>(
&'a self,
input: &InputBuffer,
edit: InputEditor<'a>,
) -> SudachiResult<InputEditor<'a>>;
}
impl PluginCategory for dyn InputTextPlugin {
type BoxType = Box<dyn InputTextPlugin + Sync + Send>;
type InitFnType = unsafe fn() -> SudachiResult<Self::BoxType>;
fn configurations(cfg: &Config) -> &[Value] {
&cfg.input_text_plugins
}
fn bundled_impl(name: &str) -> Option<Self::BoxType> {
match name {
"IgnoreYomiganaPlugin" => Some(Box::<IgnoreYomiganaPlugin>::default()),
"DefaultInputTextPlugin" => Some(Box::<DefaultInputTextPlugin>::default()),
"ProlongedSoundMarkPlugin" => Some(Box::<ProlongedSoundMarkPlugin>::default()),
_ => None,
}
}
fn do_setup(
ptr: &mut Self::BoxType,
settings: &Value,
config: &Config,
grammar: &mut Grammar,
) -> SudachiResult<()> {
ptr.set_up(settings, config, grammar)
}
}