[subset] Skip remaining instancing paths for avar2

Add has_avar2 guards to all remaining tables that apply variation
deltas to base values using normalized_coords:
- post: skip MVAR delta application to underline metrics
- OS/2: skip MVAR delta application to typo/win/sub/super metrics
- head: skip updating xMin/xMax/yMin/yMax from instanced bounds
- maxp: skip instancing_update_fields
- glyf-helpers: skip head bounds update from instanced glyphs
- COLR: skip VarStore instancing and paint value delta folding
- BASE: route to non-instancing VarStore subset path

For avar2, base values must remain unchanged because the offset
compensation keeps all variation data in the original coordinate
space.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
7 files changed
tree: 564b8b6e2627cffaff92c51588ce9a838fe8688b
  1. .ci/
  2. .github/
  3. docs/
  4. perf/
  5. src/
  6. subprojects/
  7. test/
  8. util/
  9. .clang-format
  10. .codecov.yml
  11. .editorconfig
  12. AGENTS.md
  13. AUTHORS
  14. AVAR2-INSTANCING.md
  15. BUILD.md
  16. CMakeLists.txt
  17. CODE_OF_AI_CONDUCT.md
  18. CONFIG.md
  19. COPYING
  20. harfbuzz.doap
  21. HarfBuzz.jpg
  22. HarfBuzz.png
  23. meson.build
  24. meson_options.txt
  25. NEWS
  26. README.md
  27. README.mingw.md
  28. README.python.md
  29. RELEASING.md
  30. replace-enum-strings.cmake
  31. SECURITY.md
  32. TESTING.md
  33. THANKS
  34. xkcd.png
README.md

HarfBuzz

Linux CI Status macoOS CI Status Windows CI Status OSS-Fuzz Status Coverity Scan Build Status Packaging status OpenSSF Scorecard

HarfBuzz is a text shaping engine. It primarily supports OpenType, but also Apple Advanced Typography. Check “What is HarfBuzz?” chapter in the user manual for more inforamation on what HarfBuzz do and what it doesn’t do.

The canonical source tree and bug trackers are available on github. Both development and user support discussion around HarfBuzz happen on github as well.

For license information, see COPYING.

API stability

The API that comes with hb.h will not change incompatibly. Other, peripheral, headers are more likely to go through minor modifications, but again, we do our best to never change API in an incompatible way. We will never break the ABI.

The API and ABI are stable even across major version number jumps. In fact, current HarfBuzz is API/ABI compatible all the way back to the 0.9.x series. If one day we need to break the API/ABI, that would be called a new library.

As such, we bump the major version number only when we add major new features, the minor version when there is new API, and the micro version when there are bug fixes.

Documentation

For user manual as well as API documentation, check: https://harfbuzz.github.io

Download

Tarball releases of HarfBuzz are available on github releases page. At the same place you will also find Win32/Win64 binary bundles that include libharfbuzz DLL, hb-view.exe, hb-shape.exe, and all dependencies.

Development

For build information, see BUILD.md.

For custom configurations, see CONFIG.md.

For testing and profiling, see TESTING.md.

For using with Python, see README.python.md. There is also uharfbuzz.

For cross-compiling to Windows from Linux or macOS, see README.mingw.md.

To report bugs or submit patches please use github issues and pull-requests.

Developer documents

To get a better idea of where HarfBuzz stands in the text rendering stack you may want to read State of Text Rendering 2024. Here are a few presentation slides about HarfBuzz at the Internationalization and Unicode Conference over the years:

More presentations and papers are available on behdad's website. In particular, the following studies are relevant to HarfBuzz development:

Name

HarfBuzz (حرف‌باز) is the literal Persian translation of “OpenType”, transliterated using the Latin script. It also means “talkative” or “glib” (also a nod to the GNOME project where HarfBuzz originates from).

Background: Originally there was this font format called TrueType. People and companies started calling their type engines all things ending in Type: FreeType, CoolType, ClearType, etc. And then came OpenType, which is the successor of TrueType. So, for my OpenType implementation, I decided to stick with the concept but use the Persian translation. Which is fitting given that Persian is written in the Arabic script, and OpenType is an extension of TrueType that adds support for complex script rendering, and HarfBuzz is an implementation of OpenType complex text shaping.

Users

HarfBuzz is used in Android, Chrome, ChromeOS, Firefox, GNOME, GTK+, KDE, Qt, LibreOffice, OpenJDK, XeTeX, Scribus, PlayStation, Microsoft Edge, Amazon Kindle, Adobe Photoshop, Illustrator, InDesign, Godot Engine, Unreal Engine, QuarkXPress, Figma, and other places.

Distribution

Packaging status