rocketsplash-rt 0.2.2

Runtime library for loading and rendering Rocketsplash assets (.rst, .rsf)
Documentation
// <FILE>crates/rocketsplash-rt/src/font/fnc_resolve_glyph.rs</FILE>
// <DESC>Resolve a glyph with fallback behavior.</DESC>
// <VERS>VERSION: 1.0.0</VERS>
// <WCTX>Public release refactor audit</WCTX>
// <CLOG>Extract glyph resolution from fnc_render_text</CLOG>

use crate::font::{Font, RenderOptions, RuntimeGlyph};
use crate::{Error, FallbackMode};

pub(super) fn resolve_glyph<'a>(
    font: &'a Font,
    ch: char,
    options: &RenderOptions,
) -> Result<Option<&'a RuntimeGlyph>, Error> {
    if let Some(variants) = font.glyphs.get(&ch) {
        return Ok(Some(variants.select(options.style)));
    }
    match options.fallback {
        FallbackMode::Error => Err(Error::MissingGlyph(ch)),
        FallbackMode::Skip => Ok(None),
        FallbackMode::Replace(replacement) => {
            if let Some(variants) = font.glyphs.get(&replacement) {
                Ok(Some(variants.select(options.style)))
            } else {
                Err(Error::MissingGlyph(replacement))
            }
        }
    }
}

// <FILE>crates/rocketsplash-rt/src/font/fnc_resolve_glyph.rs</FILE>
// <VERS>END OF VERSION: 1.0.0</VERS>