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
Complex scripts
Shaping operations
Unicode character categories
Text runs
OpenType shaping models
Graphite shaping
AAT shaping
Buffers, language, script and direction
Creating and destroying buffers
Adding text to the buffer
Setting buffer properties
What about the other scripts?
Customizing Unicode functions
Fonts and faces
Using FreeType
Using HarfBuzz's native OpenType implementation
Using your own font functions
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
Shaping and shape plans
OpenType features
Plans and caching
Glyph information
Names and numbers