xref: /aosp_15_r20/external/harfbuzz_ng/README.md (revision 2d1272b857b1f7575e6e246373e1cb218663db8a)
1*2d1272b8SAndroid Build Coastguard Worker[![Linux CI Status](https://github.com/harfbuzz/harfbuzz/workflows/linux-ci/badge.svg)](https://github.com/harfbuzz/harfbuzz/workflows/linux-ci/badge.svg)
2*2d1272b8SAndroid Build Coastguard Worker[![CircleCI Build Status](https://circleci.com/gh/harfbuzz/harfbuzz/tree/main.svg?style=svg)](https://circleci.com/gh/harfbuzz/harfbuzz/tree/main)
3*2d1272b8SAndroid Build Coastguard Worker[![OSS-Fuzz Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/harfbuzz.svg)](https://oss-fuzz-build-logs.storage.googleapis.com/index.html)
4*2d1272b8SAndroid Build Coastguard Worker[![Coverity Scan Build Status](https://scan.coverity.com/projects/15166/badge.svg)](https://scan.coverity.com/projects/harfbuzz)
5*2d1272b8SAndroid Build Coastguard Worker[![Codacy Badge](https://app.codacy.com/project/badge/Grade/89c872f5ce1c42af802602bfcd15d90a)](https://app.codacy.com/gh/harfbuzz/harfbuzz/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
6*2d1272b8SAndroid Build Coastguard Worker[![Codecov Code Coverage](https://codecov.io/gh/harfbuzz/harfbuzz/branch/main/graph/badge.svg)](https://codecov.io/gh/harfbuzz/harfbuzz)
7*2d1272b8SAndroid Build Coastguard Worker[![Packaging status](https://repology.org/badge/tiny-repos/harfbuzz.svg)](https://repology.org/project/harfbuzz/versions)
8*2d1272b8SAndroid Build Coastguard Worker[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/harfbuzz/harfbuzz/badge)](https://securityscorecards.dev/viewer/?uri=github.com/harfbuzz/harfbuzz)
9*2d1272b8SAndroid Build Coastguard Worker
10*2d1272b8SAndroid Build Coastguard Worker
11*2d1272b8SAndroid Build Coastguard Worker# HarfBuzz
12*2d1272b8SAndroid Build Coastguard Worker
13*2d1272b8SAndroid Build Coastguard WorkerHarfBuzz is a text shaping engine. It primarily supports [OpenType][1], but also
14*2d1272b8SAndroid Build Coastguard Worker[Apple Advanced Typography][2]. HarfBuzz is used in Android, Chrome,
15*2d1272b8SAndroid Build Coastguard WorkerChromeOS, Firefox, GNOME, GTK+, KDE, Qt, LibreOffice, OpenJDK, XeTeX,
16*2d1272b8SAndroid Build Coastguard WorkerPlayStation, Microsoft Edge, Adobe Photoshop, Illustrator, InDesign,
17*2d1272b8SAndroid Build Coastguard WorkerGodot Engine, Unreal Engine, and other places.
18*2d1272b8SAndroid Build Coastguard Worker
19*2d1272b8SAndroid Build Coastguard Worker[![xkcd-derived image](xkcd.png)](https://xkcd.com/2347/)
20*2d1272b8SAndroid Build Coastguard Worker
21*2d1272b8SAndroid Build Coastguard WorkerFor bug reports, mailing list, and other information please visit:
22*2d1272b8SAndroid Build Coastguard Worker
23*2d1272b8SAndroid Build Coastguard Worker  http://harfbuzz.org/
24*2d1272b8SAndroid Build Coastguard Worker
25*2d1272b8SAndroid Build Coastguard WorkerFor license information, see [COPYING](COPYING).
26*2d1272b8SAndroid Build Coastguard Worker
27*2d1272b8SAndroid Build Coastguard Worker## Documentation
28*2d1272b8SAndroid Build Coastguard Worker
29*2d1272b8SAndroid Build Coastguard WorkerFor user manual as well as API documentation, check: https://harfbuzz.github.io
30*2d1272b8SAndroid Build Coastguard Worker
31*2d1272b8SAndroid Build Coastguard Worker## Download
32*2d1272b8SAndroid Build Coastguard Worker
33*2d1272b8SAndroid Build Coastguard WorkerFor tarball releases of HarfBuzz, look [here][3]. At the same place you
34*2d1272b8SAndroid Build Coastguard Workerwill also find Win32/Win64 binary bundles that include `libharfbuzz` DLL,
35*2d1272b8SAndroid Build Coastguard Worker`hb-view.exe`, `hb-shape.exe`, and all dependencies.
36*2d1272b8SAndroid Build Coastguard Worker
37*2d1272b8SAndroid Build Coastguard WorkerThe canonical source tree is available on [github][4].
38*2d1272b8SAndroid Build Coastguard Worker
39*2d1272b8SAndroid Build Coastguard WorkerThe API that comes with `hb.h` will not change incompatibly. Other, peripheral,
40*2d1272b8SAndroid Build Coastguard Workerheaders are more likely to go through minor modifications, but again, we do our
41*2d1272b8SAndroid Build Coastguard Workerbest to never change API in an incompatible way. We will never break the ABI.
42*2d1272b8SAndroid Build Coastguard Worker
43*2d1272b8SAndroid Build Coastguard WorkerIf you are not sure whether Pango or HarfBuzz is right for you, read [Pango vs
44*2d1272b8SAndroid Build Coastguard WorkerHarfBuzz][5].
45*2d1272b8SAndroid Build Coastguard Worker
46*2d1272b8SAndroid Build Coastguard Worker## Development
47*2d1272b8SAndroid Build Coastguard Worker
48*2d1272b8SAndroid Build Coastguard WorkerFor build information, see [BUILD.md](BUILD.md).
49*2d1272b8SAndroid Build Coastguard Worker
50*2d1272b8SAndroid Build Coastguard WorkerFor custom configurations, see [CONFIG.md](CONFIG.md).
51*2d1272b8SAndroid Build Coastguard Worker
52*2d1272b8SAndroid Build Coastguard WorkerFor testing and profiling, see [TESTING.md](TESTING.md).
53*2d1272b8SAndroid Build Coastguard Worker
54*2d1272b8SAndroid Build Coastguard WorkerTo get a better idea of where HarfBuzz stands in the text rendering stack you
55*2d1272b8SAndroid Build Coastguard Workermay want to read [State of Text Rendering 2024][6].
56*2d1272b8SAndroid Build Coastguard WorkerHere are a few presentation slides about HarfBuzz at the
57*2d1272b8SAndroid Build Coastguard WorkerInternationalization and Unicode Conference over the years:
58*2d1272b8SAndroid Build Coastguard Worker
59*2d1272b8SAndroid Build Coastguard Worker*   November 2014, [Unicode, OpenType, and HarfBuzz: Closing the Circle][7],
60*2d1272b8SAndroid Build Coastguard Worker*   October 2012, [HarfBuzz, The Free and Open Text Shaping Engine][8],
61*2d1272b8SAndroid Build Coastguard Worker*   October 2009, [HarfBuzz: the Free and Open Shaping Engine][9].
62*2d1272b8SAndroid Build Coastguard Worker
63*2d1272b8SAndroid Build Coastguard WorkerBoth development and user support discussion around HarfBuzz happens on the
64*2d1272b8SAndroid Build Coastguard Worker[github][4].
65*2d1272b8SAndroid Build Coastguard Worker
66*2d1272b8SAndroid Build Coastguard WorkerTo report bugs or submit patches please use [github][4] issues and
67*2d1272b8SAndroid Build Coastguard Workerpull-requests.
68*2d1272b8SAndroid Build Coastguard Worker
69*2d1272b8SAndroid Build Coastguard WorkerFor a comparison of old vs new HarfBuzz memory consumption see [this][10].
70*2d1272b8SAndroid Build Coastguard Worker
71*2d1272b8SAndroid Build Coastguard Worker<!--See past and upcoming [HarfBuzz Hackfests](https://freedesktop.org/wiki/Software/HarfBuzz/Hackfests/)!-->
72*2d1272b8SAndroid Build Coastguard Worker
73*2d1272b8SAndroid Build Coastguard Worker## Name
74*2d1272b8SAndroid Build Coastguard Worker
75*2d1272b8SAndroid Build Coastguard WorkerHarfBuzz (حرف‌باز) is the literal Persian translation of “[OpenType][1]”,
76*2d1272b8SAndroid Build Coastguard Workertransliterated using the Latin script. It also means "talkative" or
77*2d1272b8SAndroid Build Coastguard Worker"glib" (also a nod to the GNOME project where HarfBuzz originates from).
78*2d1272b8SAndroid Build Coastguard Worker
79*2d1272b8SAndroid Build Coastguard Worker> Background: Originally there was this font format called TrueType. People and
80*2d1272b8SAndroid Build Coastguard Worker> companies started calling their type engines all things ending in Type:
81*2d1272b8SAndroid Build Coastguard Worker> FreeType, CoolType, ClearType, etc. And then came OpenType, which is the
82*2d1272b8SAndroid Build Coastguard Worker> successor of TrueType. So, for my OpenType implementation, I decided to stick
83*2d1272b8SAndroid Build Coastguard Worker> with the concept but use the Persian translation. Which is fitting given that
84*2d1272b8SAndroid Build Coastguard Worker> Persian is written in the Arabic script, and OpenType is an extension of
85*2d1272b8SAndroid Build Coastguard Worker> TrueType that adds support for complex script rendering, and HarfBuzz is an
86*2d1272b8SAndroid Build Coastguard Worker> implementation of OpenType complex text shaping.
87*2d1272b8SAndroid Build Coastguard Worker
88*2d1272b8SAndroid Build Coastguard Worker<details>
89*2d1272b8SAndroid Build Coastguard Worker  <summary>Packaging status of HarfBuzz</summary>
90*2d1272b8SAndroid Build Coastguard Worker
91*2d1272b8SAndroid Build Coastguard Worker[![Packaging status](https://repology.org/badge/vertical-allrepos/harfbuzz.svg?header=harfbuzz)](https://repology.org/project/harfbuzz/versions)
92*2d1272b8SAndroid Build Coastguard Worker
93*2d1272b8SAndroid Build Coastguard Worker</details>
94*2d1272b8SAndroid Build Coastguard Worker
95*2d1272b8SAndroid Build Coastguard Worker[1]: https://docs.microsoft.com/en-us/typography/opentype/spec/
96*2d1272b8SAndroid Build Coastguard Worker[2]: https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6AATIntro.html
97*2d1272b8SAndroid Build Coastguard Worker[3]: https://github.com/harfbuzz/harfbuzz/releases
98*2d1272b8SAndroid Build Coastguard Worker[4]: https://github.com/harfbuzz/harfbuzz
99*2d1272b8SAndroid Build Coastguard Worker[5]: http://mces.blogspot.com/2009/11/pango-vs-harfbuzz.html
100*2d1272b8SAndroid Build Coastguard Worker[6]: http://behdad.org/text2024
101*2d1272b8SAndroid Build Coastguard Worker[7]: https://goo.gl/FSIQuC
102*2d1272b8SAndroid Build Coastguard Worker[8]: https://goo.gl/2wSRu
103*2d1272b8SAndroid Build Coastguard Worker[9]: http://behdad.org/download/Presentations/slippy/harfbuzz_slides.pdf
104*2d1272b8SAndroid Build Coastguard Worker[10]: https://goo.gl/woyty
105