1use std::{env, ffi::CString};
2
3use fontconfig::{self, FontSet, Fontconfig, FontconfigError};
4
5fn main() -> Result<(), FontconfigError> {
6 let fc = Fontconfig::new().expect("unable to init Fontconfig");
7
8 let Some(family) = env::args().nth(1) else {
9 eprintln!("Error: font family not specified");
10 eprintln!(
11 "Usage: {}: family",
12 env::args().next().as_deref().unwrap_or("fc-list")
13 );
14 return Ok(());
15 };
16 let family = CString::new(family)?;
17
18 let mut pattern = fontconfig::Pattern::new(&fc)?;
19 pattern.add_string(fontconfig::FC_FAMILY, &family)?;
20
21 let matched = pattern.font_match()?;
22 let mut fontset = FontSet::new(&fc)?;
23 fontset.add_pattern(matched)?;
24
25 for pattern in fontset.iter() {
26 println!(
27 "{}[{}] ({}): {}, weight = {}, width = {}, slant = {}",
28 pattern.filename()?,
29 pattern.face_index()?,
30 pattern
31 .format()
32 .map(|f| f.to_string())
33 .unwrap_or_else(|_| String::from("Unknown")),
34 pattern.name()?,
35 pattern.weight()?,
36 pattern.width()?,
37 pattern.slant()?
38 )
39 }
40 Ok(())
41}