pub struct EmbeddedFont {
pub path: &'static str,
pub css_family: &'static str,
}
pub static EMBEDDED_FONTS: &[EmbeddedFont] = &[
EmbeddedFont {
path: "assets/fonts/PxPlus_IBM_VGA_8x16.ttf",
css_family: "PxPlus IBM VGA8", },
EmbeddedFont {
path: "assets/fonts/JetBrainsMono-Regular.ttf",
css_family: "JetBrains Mono", },
EmbeddedFont {
path: "assets/fonts/FiraCode-Regular.ttf",
css_family: "Fira Code", },
EmbeddedFont {
path: "assets/fonts/SourceCodePro-Regular.ttf",
css_family: "Source Code Pro", },
EmbeddedFont {
path: "assets/fonts/CascadiaMono-Regular.ttf",
css_family: "Cascadia Mono", },
];
pub fn resolve_embedded_font(user_input: &str) -> Option<&'static EmbeddedFont> {
let trimmed = user_input.trim();
EMBEDDED_FONTS
.iter()
.find(|font| font.css_family == trimmed)
}
pub fn list_embeddable_font_families() -> Vec<&'static str> {
EMBEDDED_FONTS.iter().map(|f| f.css_family).collect()
}
pub fn list_builtin_system_fonts() -> Vec<(&'static str, Option<&'static str>)> {
vec![
(
"Monospace",
Some("Generic fallback: macOS → Menlo, Windows → Consolas, Linux → DejaVu Sans Mono"),
),
("Courier New", None), ("Menlo", None), ("Consolas", None), ("Lucida Console", None), ("DejaVu Sans Mono", None), ("Ubuntu Mono", None), ]
}
pub fn recommended_fonts_for_current_os() -> Vec<&'static str> {
match std::env::consts::OS {
"macos" => vec!["Menlo", "Courier New", "JetBrains Mono"],
"windows" => vec!["Consolas", "Courier New", "JetBrains Mono"],
"linux" => vec!["DejaVu Sans Mono", "Ubuntu Mono", "JetBrains Mono"],
_ => vec!["Monospace", "JetBrains Mono"],
}
}