yosina 1.1.2

Japanese text transliteration library
Documentation
use crate::char::{Char, CharPool};
use crate::transliterator::{
    TransliterationError, Transliterator, TransliteratorFactory, TransliteratorFactoryError,
};
use crate::transliterators::SimpleTransliterator;

static ROMAN_NUMERALS_MAPPINGS: phf::Map<&'static str, &'static str> = phf::phf_map! {
    "" => "I",
    "" => "II",
    "" => "III",
    "" => "IV",
    "" => "V",
    "" => "VI",
    "" => "VII",
    "" => "VIII",
    "" => "IX",
    "" => "X",
    "" => "XI",
    "" => "XII",
    "" => "L",
    "" => "C",
    "" => "D",
    "" => "M",
    "" => "i",
    "" => "ii",
    "" => "iii",
    "" => "iv",
    "" => "v",
    "" => "vi",
    "" => "vii",
    "" => "viii",
    "" => "ix",
    "" => "x",
    "" => "xi",
    "" => "xii",
    "" => "l",
    "" => "c",
    "" => "d",
    "" => "m",
};

pub struct RomanNumeralsTransliterator {
    inner: SimpleTransliterator,
}

impl RomanNumeralsTransliterator {
    #[allow(clippy::new_without_default)]
    pub fn new() -> Self {
        Self {
            inner: SimpleTransliterator::new(&ROMAN_NUMERALS_MAPPINGS),
        }
    }
}

impl Transliterator for RomanNumeralsTransliterator {
    fn transliterate<'a, 'b>(
        &self,
        pool: &mut CharPool<'a, 'b>,
        input: &[&'a Char<'a, 'b>],
    ) -> Result<Vec<&'a Char<'a, 'b>>, TransliterationError> {
        self.inner.transliterate(pool, input)
    }
}

pub struct RomanNumeralsTransliteratorFactory;

impl RomanNumeralsTransliteratorFactory {
    #[allow(clippy::new_without_default)]
    pub fn new() -> Self {
        Self
    }
}

impl TransliteratorFactory for RomanNumeralsTransliteratorFactory {
    fn new_transliterator(&self) -> Result<Box<dyn Transliterator>, TransliteratorFactoryError> {
        Ok(Box::new(RomanNumeralsTransliterator::new()))
    }
}