File: list_all_fonts.rs

package info (click to toggle)
rust-fontconfig-parser 0.5.8-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 564 kB
  • sloc: sh: 5; makefile: 2
file content (39 lines) | stat: -rw-r--r-- 972 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use fontconfig_parser::{FontConfig, Result};
use std::path::PathBuf;

fn visit_dir(dir: PathBuf, fonts: &mut Vec<PathBuf>) -> Result<()> {
    let dir = std::fs::read_dir(dir)?;

    for entry in dir {
        if let Ok(entry) = entry {
            if let Ok(ty) = entry.file_type() {
                if ty.is_dir() {
                    visit_dir(entry.path(), fonts).ok();
                } else if ty.is_file() || ty.is_symlink() {
                    fonts.push(entry.path());
                }
            }
        }
    }

    Ok(())
}

fn main() -> Result<()> {
    let mut config = FontConfig::default();
    config.merge_config("/etc/fonts/fonts.conf").unwrap();

    println!("dirs: {:#?}", config.dirs);

    let mut fonts = Vec::new();

    for dir in config.dirs {
        visit_dir(dir.path, &mut fonts).ok();
    }

    println!("Find all {} fonts!", fonts.len());

    println!("fonts: {:#?}", fonts);

    Ok(())
}