kitmd 0.2.0

A terminal-based markdown and mermaid renderer/viewer using the Kitty graphics protocol
use std::sync::Arc;

use fontdb::{Database, Source};
#[cfg(test)]
use fontdb::{Family, Query};

pub const PROSE_FONT_FAMILY: &str = "Mona Sans";
pub const CODE_FONT_FAMILY: &str = "Monaspace Neon";

const MONA_SANS: &[u8] = include_bytes!("../../assets/fonts/MonaSans.ttf");
const MONASPACE_NEON: &[u8] = include_bytes!("../../assets/fonts/MonaspaceNeon.otf");

pub fn bundled_font_sources() -> Vec<Source> {
    vec![
        Source::Binary(Arc::new(MONA_SANS.to_vec())),
        Source::Binary(Arc::new(MONASPACE_NEON.to_vec())),
    ]
}

pub fn load_bundled_fonts(database: &mut Database) {
    database.load_font_data(MONA_SANS.to_vec());
    database.load_font_data(MONASPACE_NEON.to_vec());
}

#[cfg(test)]
fn has_family(database: &Database, family: &str) -> bool {
    database
        .query(&Query {
            families: &[Family::Name(family)],
            ..Query::default()
        })
        .is_some()
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn bundled_fonts_expose_expected_families() {
        let mut database = Database::new();
        load_bundled_fonts(&mut database);

        assert!(has_family(&database, PROSE_FONT_FAMILY));
        assert!(has_family(&database, CODE_FONT_FAMILY));
    }
}