Skip to content

An implementation of advanced typographic tables of OpenType specification.

License

Notifications You must be signed in to change notification settings

Tehreer/SheenFigure

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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