braillify 2.0.0

Rust 기반 크로스플랫폼 한국어 점역 라이브러리
Documentation
//! Space character encoding.
//!
//! Spaces → 0, newlines → 255.

use crate::char_struct::CharType;
use crate::rules::RuleMeta;
use crate::rules::context::RuleContext;
use crate::rules::traits::{BrailleRule, Phase, RuleResult};

pub static META: RuleMeta = RuleMeta {
    section: "space",
    subsection: None,
    name: "space_encoding",
    standard_ref: "N/A",
    description: "Encode space (0) and newline (255)",
};

pub struct RuleSpace;

impl BrailleRule for RuleSpace {
    fn meta(&self) -> &'static RuleMeta {
        &META
    }

    fn phase(&self) -> Phase {
        Phase::CoreEncoding
    }

    fn matches(&self, ctx: &RuleContext) -> bool {
        matches!(ctx.char_type, CharType::Space(_))
    }

    fn apply(&self, ctx: &mut RuleContext) -> Result<RuleResult, String> {
        let CharType::Space(c) = ctx.char_type else {
            return Ok(RuleResult::Skip);
        };
        ctx.emit(if *c == '\n' { 255 } else { 0 });
        Ok(RuleResult::Consumed)
    }
}