readsight 1.0.1

Multilingual readability library — 86 languages, 17 formulas, TeX-based syllable counting via the Frank M. Liang algorithm.
Documentation
//! Composite syllable counter: heuristic-with-rules first, else TeX.

use super::counter::SyllableCounter;
use super::heuristic::HeuristicSyllableCounter;
use super::tex::TexSyllableCounter;

/// Chains a [`HeuristicSyllableCounter`] and a [`TexSyllableCounter`].
///
/// If the heuristic has rules it is used; otherwise the TeX counter is used.
pub struct CompositeSyllableCounter {
    heuristic: HeuristicSyllableCounter,
    tex: TexSyllableCounter,
}

impl CompositeSyllableCounter {
    /// Build a composite counter from its two members (in `[heuristic, tex]`
    /// order).
    pub fn new(heuristic: HeuristicSyllableCounter, tex: TexSyllableCounter) -> Self {
        CompositeSyllableCounter { heuristic, tex }
    }
}

impl SyllableCounter for CompositeSyllableCounter {
    fn count_syllables(&self, word: &str) -> i64 {
        if self.heuristic.has_rules() {
            self.heuristic.count_syllables(word)
        } else {
            self.tex.count_syllables(word)
        }
    }

    fn split_syllables(&self, word: &str) -> Vec<String> {
        if self.heuristic.has_rules() {
            self.heuristic.split_syllables(word)
        } else {
            self.tex.split_syllables(word)
        }
    }
}