SheenFigure
SheenFigure copied to clipboard
An implementation of advanced typographic tables of OpenType specification.
SheenFigure
SheenFigure aims to implement the advanced typographic tables of OpenType specification available at https://www.microsoft.com/en-us/Typography/OpenTypeSpecification.aspx along with script specific shaping engines available at https://www.microsoft.com/en-us/Typography/SpecificationsOverview.aspx. Currently, it only supports Arabic script and a subset of GDEF, GSUB and GPOS tables. The support is intended to increase in each newer versions of the library.
Here are some of the advantages of SheenFigure.
- Object based
- Designed to be thread safe
- Lightweight API for interaction
- Clear differentiation of public and private API
- Thoroughly tested
Dependency
SheenFigure only depends on SheenBidi in order to support UTF-8, UTF-16 and UTF-32 string encodings. Other than that, it only uses standard C library headers stddef.h, stdint.h, stdlib.h and string.h.
Configuration
The configuration options are available in Headers/SFConfig.h.
SF_CONFIG_UNITYbuilds the library as a single module and lets the compiler make decisions to inline functions.
Compiling
SheenFigure can be compiled with any C compiler. The best way for compiling is to add all the files in an IDE and hit build. The only thing to consider however is that if SF_CONFIG_UNITY is enabled then only Source/SheenFigure.c should be compiled.
Public API
Here is a glimpse of public API in the form of UML class diagram.

Conformance
Following are the tables implemented by SheenFigure.
OpenType Layout Common Table Formats
| Table | Supported |
|---|---|
| Script List | ✔️ |
| Feature List | ✔️ |
| Lookup List | ✔️ |
| Coverage | ✔️ |
| Class Definition | ✔️ |
| Device | ✔️ |
| Variation Index | ✔️ |
GDEF (Glyph Definition Table)
| Subtable | Supported |
|---|---|
| Glyph Class Definition | ✔️ |
| Attachment List | ❌ |
| Ligature Caret List | ❌ |
| Mark Attachment Class Definition | ✔️ |
| Mark Glyph Sets | ✔️ |
| Item Variation Store | ✔️ |
GPOS (Glyph Positioning Table)
| Subtable | Format 1 | Format 2 | Format 3 |
|---|---|---|---|
| Single Adjustment | ✔️ | ✔️ | |
| Pair Adjustment | ✔️ | ✔️ | |
| Cursive Attachment | ✔️ | ||
| Mark To Base Attachment | ✔️ | ||
| Mark To Ligature Attachment | ✔️ | ||
| Mark To Mark Attachment | ✔️ | ||
| Context Positioning | ✔️ | ✔️ | ✔️ |
| Chained Context Positioning | ✔️ | ✔️ | ✔️ |
| Extension Positioning | ✔️ |
GSUB (Glyph Substitution Table)
| Subtable | Format 1 | Format 2 | Format 3 |
|---|---|---|---|
| Single | ✔️ | ✔️ | |
| Multiple | ✔️ | ||
| Alternate | ✔️ | ||
| Ligature | ✔️ | ||
| Context | ✔️ | ✔️ | ✔️ |
| Chaining Context | ✔️ | ✔️ | ✔️ |
| Extension | ✔️ | ||
| Reverse Chaining Context | ✔️ |