An implementation of advanced typographic tables of OpenType specification.
C C++ Other
Switch branches/tags
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.ci
Headers
Source
Tools
.gitattributes
.gitignore
.travis.yml
LICENSE
Makefile
README.md

README.md

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.

  • 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

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