# skrifa

[![Crates.io](https://img.shields.io/crates/v/skrifa.svg)](https://crates.io/crates/skrifa)
[![Docs](https://docs.rs/skrifa/badge.svg)](https://docs.rs/skrifa)
[![MIT/Apache 2.0](https://img.shields.io/badge/license-MIT%2FApache-blue.svg)](#license)

This crate aims to be a robust, ergonomic, high performance library for reading
OpenType fonts. It is built on top of the
[read-fonts](https://github.com/googlefonts/fontations/tree/main/read-fonts)
low level parsing library and is also part of the
[oxidize](https://github.com/googlefonts/oxidize) project.

## Features

### Metadata

The following information is currently exposed:

* Global font metrics with variation support (units per em, ascender,
descender, etc)
* Glyph metrics with variation support (advance width, left side-bearing, etc)
* Codepoint to nominal glyph identifier mapping
    * Unicode variation sequences
* Localized strings
* Attributes (stretch, style and weight)
* Variation axes and named instances
    * Conversion from user coordinates to normalized design coordinates

Future goals include:

* Color palettes
* Embedded bitmap strikes

### Glyph scaling

Current (✔️), near term (🔜) and planned (⌛) feature matrix:

| Source | Decoding | Variations | Hinting |
|--------|---------|------------|---------|
| glyf   | ✔️     | ✔️         | ⌛*    |
| CFF    | ✔️     | ✔️         | ⌛*    |
| CFF2   | ✔️     | ✔️         | ⌛*    |
| COLRv0 | 🔜     | 🔜         | **      |
| COLRv1 | 🔜     | 🔜         | **      |
| EBDT   | 🔜     | -          | -      |
| CBDT   | 🔜     | -          | -      |
| sbix   | 🔜     | -          | -      |

\* A working implementation exists for hinting but is not yet merged.

\*\* This will be supported but is probably not desirable due the general
affine transforms present in the paint graph.

## Panicking

This library should not panic regardless of API misuse or use of
corrupted/malicious font files. Please file an issue if this occurs.

## The name?

Following along with our theme, *skrifa* is Old Norse for "write" or "it is
written." And so it is named.
