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))
}
}
}
}