query/
query.rs

1use std::collections::HashMap;
2
3use dafont::{get_font_name, FcFontCache, FcPattern, PatternMatch};
4
5fn main() {
6    let cache = FcFontCache::build();
7    let fonts = cache.query_all(&FcPattern {
8        monospace: PatternMatch::True,
9        ..Default::default()
10    });
11
12    println!("total fonts: {}", fonts.len());
13
14    let mut font_by_family = HashMap::new();
15    for font in fonts {
16        let Some((family, name)) = get_font_name(font) else {
17            eprintln!("failed to get font name for {}", font.path);
18            continue;
19        };
20
21        font_by_family
22            .entry(family)
23            .or_insert_with(Vec::new)
24            .push(name);
25    }
26
27    let mut families: Vec<_> = font_by_family.keys().collect();
28    families.sort();
29
30    for family in families {
31        println!("{family}");
32
33        let names = &font_by_family[family];
34        for name in names {
35            println!("  {name}");
36        }
37
38        println!();
39    }
40}