Expand description
§rust-fontconfig
Pure-Rust rewrite of the Linux fontconfig library (no system dependencies) - using allsorts as a font parser to support .woff, .woff2, .ttc, .otf and .ttf
NOTE: Also works on Windows, macOS and WASM - without external dependencies!
§Usage
§Basic Font Query
use rust_fontconfig::{FcFontCache, FcPattern};
fn main() {
// Build the font cache
let cache = FcFontCache::build();
// Query a font by name
let results = cache.query(
&FcPattern {
name: Some(String::from("Arial")),
..Default::default()
},
&mut Vec::new() // Trace messages container
);
if let Some(font_match) = results {
println!("Font match ID: {:?}", font_match.id);
println!("Font unicode ranges: {:?}", font_match.unicode_ranges);
} else {
println!("No matching font found");
}
}§Resolve Font Chain and Query for Text
use rust_fontconfig::{FcFontCache, FcWeight, PatternMatch};
fn main() {
let cache = FcFontCache::build();
// Build font fallback chain (without text parameter)
let font_chain = cache.resolve_font_chain(
&["Arial".to_string(), "sans-serif".to_string()],
FcWeight::Normal,
PatternMatch::DontCare,
PatternMatch::DontCare,
&mut Vec::new(),
);
// Query which fonts to use for specific text
let text = "Hello 你好 Здравствуйте";
let font_runs = font_chain.query_for_text(&cache, text);
println!("Text split into {} font runs:", font_runs.len());
for run in font_runs {
println!(" '{}' -> font {:?}", run.text, run.font_id);
}
}Structs§
- CssFallback
Group - A group of fonts that are fallbacks for a single CSS font-family name
- FcFont
- In-memory font data
- FcFont
Cache - Font cache, initialized at startup
- FcFont
Metadata - Font metadata from the OS/2 table
- FcFont
Path - Path to a font file
- FcPattern
- Font pattern for matching
- Font
Fallback Chain - Resolved font fallback chain for a CSS font-family stack This represents the complete chain of fonts to use for rendering text
- FontId
- UUID to identify a font (collections are broken up into separate fonts)
- Font
Match - Font match result with UUID
- Font
Match NoFallback - Font match result with UUID (without fallback)
- Resolved
Font Run - A run of text that uses the same font Returned by FontFallbackChain::query_for_text()
- Trace
Msg - Trace message for debugging font matching
- Unicode
Range - Unicode range representation for font matching
Enums§
- FcStretch
- CSS font-stretch values
- FcWeight
- Font weight values as defined in CSS specification
- Font
Source - Font source enum to represent either disk or memory fonts
- Match
Reason - Reason for font matching failure or success
- Operating
System - Operating system type for generic font family resolution
- Pattern
Match - Whether a field is required to match (yes / no / don’t care)
- Trace
Level - Log levels for trace messages
Functions§
- expand_
font_ families - Expand a CSS font-family stack with generic families resolved to OS-specific fonts Prioritizes fonts based on Unicode range coverage Example: [“Arial”, “sans-serif”] on macOS with CJK ranges -> [“Arial”, “PingFang SC”, “Hiragino Sans”, …]