Part I. User's manual
Table of Contents
What is HarfBuzz?
What is text shaping?
Why do I need a shaping engine?
What does HarfBuzz do?
What HarfBuzz doesn't do
Why is it called HarfBuzz?
Installing HarfBuzz
Downloading HarfBuzz
Building HarfBuzz
Building on Linux
Building on Windows
Building on macOS
Configuration options
Getting started with HarfBuzz
An overview of the HarfBuzz shaping API
Terminology
A simple shaping example
Shaping concepts
Text shaping
Script-specific shaping
Shaping operations
Unicode character categories
Text runs
OpenType shaping models
Graphite shaping
AAT shaping
The HarfBuzz object model
An overview of data types in HarfBuzz
Objects in HarfBuzz
Object lifecycle management
User data
Blobs
Buffers, language, script and direction
Creating and destroying buffers
Adding text to the buffer
Setting buffer properties
Customizing Unicode functions
Fonts, faces, and output
Font and face objects
Customizing font functions
Font objects and HarfBuzz's native OpenType implementation
Working with OpenType Variable Fonts
Glyphs and rendering
Shaping and shape plans
Shaping and buffer output
OpenType features
Shaper selection
Plans and caching
Clusters
Clusters and shaping
Working with HarfBuzz clusters
A clustering example for levels 0 and 1
Reordering in levels 0 and 1
The distinction between levels 0 and 1
Level 2
Ligatures with combining marks in level 2
Reordering in level 2
Other considerations in level 2
Utilities
Command-line tools
hb-shape
hb-view
hb-subset
Common data types and APIs
Platform Integration Guide
GNOME integration, GLib, and GObject
FreeType integration
Cairo integration
Uniscribe integration
Core Text integration
ICU integration
Python bindings