readsight 1.0.0

Multilingual readability library — 86 languages, 17 formulas, TeX-based syllable counting via the Frank M. Liang algorithm.
Documentation
//! Syllable layer: TeX, heuristic, and composite counters.

pub mod composite;
pub mod counter;
pub mod heuristic;
pub mod tex;

pub use composite::CompositeSyllableCounter;
pub use counter::SyllableCounter;
pub use heuristic::HeuristicSyllableCounter;
pub use tex::TexSyllableCounter;

/// A concrete syllable counter, chosen per language (see engine wiring).
pub enum SyllableCounterKind {
    /// TeX-based counting.
    Tex(TexSyllableCounter),
    /// Heuristic (rule-based) counting.
    Heuristic(HeuristicSyllableCounter),
    /// Composite (heuristic-with-rules, else TeX).
    Composite(CompositeSyllableCounter),
}

impl SyllableCounter for SyllableCounterKind {
    fn count_syllables(&self, word: &str) -> i64 {
        match self {
            SyllableCounterKind::Tex(c) => c.count_syllables(word),
            SyllableCounterKind::Heuristic(c) => c.count_syllables(word),
            SyllableCounterKind::Composite(c) => c.count_syllables(word),
        }
    }

    fn split_syllables(&self, word: &str) -> Vec<String> {
        match self {
            SyllableCounterKind::Tex(c) => c.split_syllables(word),
            SyllableCounterKind::Heuristic(c) => c.split_syllables(word),
            SyllableCounterKind::Composite(c) => c.split_syllables(word),
        }
    }
}