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
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
.
The configuration options are available in Headers/SFConfig.h
.
SF_CONFIG_UNITY
builds the library as a single module and lets the compiler make decisions to inline functions.
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.
Here is a glimpse of public API in the form of UML class diagram.
Following are the tables implemented by SheenFigure.
Table | Supported |
---|---|
Script List | ✔️ |
Feature List | ✔️ |
Lookup List | ✔️ |
Coverage | ✔️ |
Class Definition | ✔️ |
Device | ✔️ |
Variation Index | ✔️ |
Subtable | Supported |
---|---|
Glyph Class Definition | ✔️ |
Attachment List | ❌ |
Ligature Caret List | ❌ |
Mark Attachment Class Definition | ✔️ |
Mark Glyph Sets | ✔️ |
Item Variation Store | ✔️ |
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 | ✔️ |
Subtable | Format 1 | Format 2 | Format 3 |
---|---|---|---|
Single | ✔️ | ✔️ | |
Multiple | ✔️ | ||
Alternate | ✔️ | ||
Ligature | ✔️ | ||
Context | ✔️ | ✔️ | ✔️ |
Chaining Context | ✔️ | ✔️ | ✔️ |
Extension | ✔️ | ||
Reverse Chaining Context | ✔️ |