7 releases
new 0.2.4 | Feb 4, 2025 |
---|---|
0.2.3 | Feb 4, 2025 |
0.1.1 | Jan 29, 2025 |
#2053 in Text processing
248 downloads per month
Used in 3 crates
100KB
2K
SLoC
font-map
Font parser / enumerator with support for code generation
This crate provides functionality for parsing font files and enumerating the glyphs they contain.
The base usecase for this crate is to create an enum of all the glyphs in a font file,
for use in fontend projects, where you want to refer to glyphs by name rather than by codepoint:
use font_map::font;
font!(Icon, "google_material_symbols/font.ttf");
const DELETE: Icon = Icon::Delete;
The generated code includes information for each glyph, such as:
- codepoint, and postfix-name
- Plus a generated SVG preview image visible on hover
You can also access Icon::FONT_FAMILY
to simplify font usage in your frontend.
Another use is to use it for introspection of font files:
use font_map::font::Font;
let font = Font::from_file("google_material_symbols/font.ttf")?;
if let Some(glyph) = font.glyph_named("delete") {
let codepoint = glyph.codepoint();
let svg = glyph.svg_outline();
}
Features
macros
- Enables thefont!
macro for code generationcodegen
- Enables theFontCodegenExt
trait for runtime code generationextended-svg
- Enables compressed and base64 encoded SVG data in the generated code (Needed for image previews)
Known Limitations
This crate was made for a very specific use-case, and as such currently has a few limitations:
- Only supports TTF fonts
- And even then, only a subset of the spec, namely:
- Only formats 0 and 4 of the
cmap
table - Only Unicode, or MS encoding 1 and 10, and
Macintosh::0
of thename
table - Only formats 2.5 or below of the
post
table
lib.rs
:
Core functionality for font-map
Dependencies
~3.5MB
~127K SLoC