rocketsplash-rt 0.3.0

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.1</VERS>
// <WCTX>Public release refactor audit</WCTX>
// <CLOG>1.0.1: direct sibling imports (F2 cycle-break). Prior: Extract glyph resolution from fnc_render_text</CLOG>

use crate::font::cls_font::{Font, RuntimeGlyph};
use crate::font::render_options::RenderOptions;
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.1</VERS>