pub const INTER_REGULAR: &[u8] = include_bytes!("../fonts/inter-regular.ttf");
pub const NOTO_SANS_SC_SUBSET: &[u8] = include_bytes!("../fonts/noto-sans-sc-subset.ttf");
pub fn pick_font_for_codepoint(cp: u32) -> &'static [u8] {
match cp {
0x3000..=0x303F | 0x3400..=0x4DBF | 0x4E00..=0x9FFF | 0xFF00..=0xFFEF => {
NOTO_SANS_SC_SUBSET
}
_ => INTER_REGULAR,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn inter_font_nonempty() {
assert!(INTER_REGULAR.len() > 10_000, "Inter font missing / empty");
}
#[test]
fn cjk_font_nonempty() {
assert!(
NOTO_SANS_SC_SUBSET.len() > 10_000,
"Noto Sans SC subset missing / empty"
);
}
#[test]
fn routing_latin_uses_inter() {
assert_eq!(pick_font_for_codepoint('a' as u32), INTER_REGULAR);
assert_eq!(pick_font_for_codepoint(' ' as u32), INTER_REGULAR);
}
#[test]
fn routing_cjk_uses_noto_sc() {
assert_eq!(pick_font_for_codepoint('中' as u32), NOTO_SANS_SC_SUBSET);
assert_eq!(pick_font_for_codepoint('登' as u32), NOTO_SANS_SC_SUBSET);
}
#[test]
fn routing_cjk_punctuation() {
assert_eq!(pick_font_for_codepoint('、' as u32), NOTO_SANS_SC_SUBSET);
}
#[test]
fn routing_unknown_falls_back_to_inter() {
assert_eq!(pick_font_for_codepoint(0x1F600), INTER_REGULAR);
}
#[test]
fn both_fonts_load_via_ab_glyph() {
use ab_glyph::FontRef;
FontRef::try_from_slice(INTER_REGULAR).expect("Inter loads");
FontRef::try_from_slice(NOTO_SANS_SC_SUBSET).expect("Noto SC loads");
}
}