SheenFigure

January 1, 2019 · View on GitHub

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.

  • 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_UNITY builds 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. Public API

Conformance

Following are the tables implemented by SheenFigure.

OpenType Layout Common Table Formats

TableSupported
Script List✔️
Feature List✔️
Lookup List✔️
Coverage✔️
Class Definition✔️
Device✔️
Variation Index✔️

GDEF (Glyph Definition Table)

SubtableSupported
Glyph Class Definition✔️
Attachment List
Ligature Caret List
Mark Attachment Class Definition✔️
Mark Glyph Sets✔️
Item Variation Store✔️

GPOS (Glyph Positioning Table)

SubtableFormat 1Format 2Format 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)

SubtableFormat 1Format 2Format 3
Single✔️✔️
Multiple✔️
Alternate✔️
Ligature✔️
Context✔️✔️✔️
Chaining Context✔️✔️✔️
Extension✔️
Reverse Chaining Context✔️