Tehreer / SheenFigure

An implementation of advanced typographic tables of OpenType specification.
Apache License 2.0
31 stars 6 forks source link
ansi-c arabic-shaping c c-plus-plus c89 library opentype opentype-features opentype-fonts opentype-specification text-shaping typographic-tables unicode variable-fonts

SheenFigure

License Build Status Coverage Status

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.

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.

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. Public API

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