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.
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 | ✔️ |