1use rust_fontconfig::{FcFontCache, FcPattern, FcWeight, PatternMatch};
10
11fn main() {
12 println!("Building font cache...");
13 let cache = FcFontCache::build();
14 println!("Font cache built with {} fonts\n", cache.list().len());
15
16 println!("=== Query by Family Name ===");
18 let mut trace = Vec::new();
19 let pattern = FcPattern {
20 family: Some("Arial".to_string()),
21 ..Default::default()
22 };
23
24 if let Some(result) = cache.query(&pattern, &mut trace) {
25 println!("Found Arial:");
26 println!(" Font ID: {:?}", result.id);
27 if let Some(meta) = cache.get_metadata_by_id(&result.id) {
28 println!(" Family: {:?}", meta.family);
29 println!(" Weight: {:?}", meta.weight);
30 println!(" Italic: {:?}", meta.italic);
31 }
32 if let Some(source) = cache.get_font_by_id(&result.id) {
33 match source {
34 rust_fontconfig::FontSource::Disk(path) => println!(" Path: {}", path.path),
35 rust_fontconfig::FontSource::Memory(font) => {
36 println!(" Memory font: {}", font.id)
37 }
38 }
39 }
40 } else {
41 println!("Arial not found");
42 }
43
44 println!("\n=== Query Generic 'serif' ===");
46 trace.clear();
47 if let Some(result) = cache.query(
48 &FcPattern {
49 family: Some("serif".to_string()),
50 ..Default::default()
51 },
52 &mut trace,
53 ) {
54 if let Some(meta) = cache.get_metadata_by_id(&result.id) {
55 println!(
56 "Found: {:?}",
57 meta.name.as_ref().or(meta.family.as_ref())
58 );
59 }
60 }
61
62 println!("\n=== Query Bold Italic ===");
64 trace.clear();
65 if let Some(result) = cache.query(
66 &FcPattern {
67 family: Some("sans-serif".to_string()),
68 weight: FcWeight::Bold,
69 italic: PatternMatch::True,
70 ..Default::default()
71 },
72 &mut trace,
73 ) {
74 if let Some(meta) = cache.get_metadata_by_id(&result.id) {
75 println!(
76 "Found: {:?} weight={:?} italic={:?}",
77 meta.name.as_ref().or(meta.family.as_ref()),
78 meta.weight,
79 meta.italic
80 );
81 }
82 }
83
84 println!("\n=== First 5 Bold Fonts ===");
86 for (meta, id) in cache
87 .list()
88 .into_iter()
89 .filter(|(m, _)| matches!(m.weight, FcWeight::Bold | FcWeight::ExtraBold | FcWeight::Black))
90 .take(5)
91 {
92 println!(
93 " {:?}: {:?}",
94 id,
95 meta.name.as_ref().or(meta.family.as_ref())
96 );
97 }
98
99 println!("\n=== Fonts with 'Mono' in name ===");
101 for (meta, _id) in cache.list().into_iter().filter(|(m, _)| {
102 m.name
103 .as_ref()
104 .map(|n| n.contains("Mono"))
105 .unwrap_or(false)
106 || m.family
107 .as_ref()
108 .map(|f| f.contains("Mono"))
109 .unwrap_or(false)
110 }).take(10) {
111 println!(
112 " {:?}",
113 meta.name.as_ref().or(meta.family.as_ref())
114 );
115 }
116}