xref: /aosp_15_r20/external/harfbuzz_ng/docs/usermanual-utilities.xml (revision 2d1272b857b1f7575e6e246373e1cb218663db8a)
1*2d1272b8SAndroid Build Coastguard Worker<?xml version="1.0"?>
2*2d1272b8SAndroid Build Coastguard Worker<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
3*2d1272b8SAndroid Build Coastguard Worker               "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [
4*2d1272b8SAndroid Build Coastguard Worker  <!ENTITY % local.common.attrib "xmlns:xi  CDATA  #FIXED 'http://www.w3.org/2003/XInclude'">
5*2d1272b8SAndroid Build Coastguard Worker  <!ENTITY version SYSTEM "version.xml">
6*2d1272b8SAndroid Build Coastguard Worker]>
7*2d1272b8SAndroid Build Coastguard Worker<chapter id="utilities">
8*2d1272b8SAndroid Build Coastguard Worker  <title>Utilities</title>
9*2d1272b8SAndroid Build Coastguard Worker  <para>
10*2d1272b8SAndroid Build Coastguard Worker    HarfBuzz includes several auxiliary components in addition to the
11*2d1272b8SAndroid Build Coastguard Worker    main APIs. These include a set of command-line tools, a set of
12*2d1272b8SAndroid Build Coastguard Worker    lower-level APIs for common data types that may be of interest to
13*2d1272b8SAndroid Build Coastguard Worker    client programs.
14*2d1272b8SAndroid Build Coastguard Worker  </para>
15*2d1272b8SAndroid Build Coastguard Worker
16*2d1272b8SAndroid Build Coastguard Worker  <section id="utilities-command-line-tools">
17*2d1272b8SAndroid Build Coastguard Worker    <title>Command-line tools</title>
18*2d1272b8SAndroid Build Coastguard Worker    <para>
19*2d1272b8SAndroid Build Coastguard Worker      HarfBuzz include three command-line tools:
20*2d1272b8SAndroid Build Coastguard Worker      <command>hb-shape</command>, <command>hb-view</command>, and
21*2d1272b8SAndroid Build Coastguard Worker      <command>hb-subset</command>. They can be used to examine
22*2d1272b8SAndroid Build Coastguard Worker      HarfBuzz's functionality, debug font binaries, or explore the
23*2d1272b8SAndroid Build Coastguard Worker      various shaping models and features from a terminal.
24*2d1272b8SAndroid Build Coastguard Worker    </para>
25*2d1272b8SAndroid Build Coastguard Worker
26*2d1272b8SAndroid Build Coastguard Worker    <section id="utilities-command-line-hbshape">
27*2d1272b8SAndroid Build Coastguard Worker      <title>hb-shape</title>
28*2d1272b8SAndroid Build Coastguard Worker      <para>
29*2d1272b8SAndroid Build Coastguard Worker	<emphasis><command>hb-shape</command></emphasis> allows you to run HarfBuzz's
30*2d1272b8SAndroid Build Coastguard Worker	<function>hb_shape()</function> function on an input string and
31*2d1272b8SAndroid Build Coastguard Worker	to examine the outcome, in human-readable form, as terminal
32*2d1272b8SAndroid Build Coastguard Worker	output. <command>hb-shape</command> does
33*2d1272b8SAndroid Build Coastguard Worker	<emphasis>not</emphasis> render the results of the shaping call
34*2d1272b8SAndroid Build Coastguard Worker	into rendered text (you can use <command>hb-view</command>, below, for
35*2d1272b8SAndroid Build Coastguard Worker	that). Instead, it prints out the final glyph indices and
36*2d1272b8SAndroid Build Coastguard Worker	positions, taking all shaping operations into account, as if the
37*2d1272b8SAndroid Build Coastguard Worker	input string were a HarfBuzz input buffer.
38*2d1272b8SAndroid Build Coastguard Worker      </para>
39*2d1272b8SAndroid Build Coastguard Worker      <para>
40*2d1272b8SAndroid Build Coastguard Worker	You can specify the font to be used for shaping and, with
41*2d1272b8SAndroid Build Coastguard Worker	command-line options, you can add various aspects of the
42*2d1272b8SAndroid Build Coastguard Worker	internal state to the output that is sent to the terminal. The
43*2d1272b8SAndroid Build Coastguard Worker	general format is
44*2d1272b8SAndroid Build Coastguard Worker      </para>
45*2d1272b8SAndroid Build Coastguard Worker      <programlisting>
46*2d1272b8SAndroid Build Coastguard Worker	<command>hb-shape</command> <optional>[OPTIONS]</optional>
47*2d1272b8SAndroid Build Coastguard Worker      <parameter>path/to/font/file.ttf</parameter>
48*2d1272b8SAndroid Build Coastguard Worker      <parameter>yourinputtext</parameter>
49*2d1272b8SAndroid Build Coastguard Worker      </programlisting>
50*2d1272b8SAndroid Build Coastguard Worker      <para>
51*2d1272b8SAndroid Build Coastguard Worker	The default output format is plain text (although JSON output
52*2d1272b8SAndroid Build Coastguard Worker	can be selected instead by specifying the option
53*2d1272b8SAndroid Build Coastguard Worker	<optional>--output-format=json</optional>). The default output
54*2d1272b8SAndroid Build Coastguard Worker	syntax reports each glyph name (or glyph index if there is no
55*2d1272b8SAndroid Build Coastguard Worker	name) followed by its cluster value, its horizontal and vertical
56*2d1272b8SAndroid Build Coastguard Worker	position displacement, and its horizontal and vertical advances.
57*2d1272b8SAndroid Build Coastguard Worker      </para>
58*2d1272b8SAndroid Build Coastguard Worker      <para>
59*2d1272b8SAndroid Build Coastguard Worker	Output options exist to skip any of these elements in the
60*2d1272b8SAndroid Build Coastguard Worker	output, and to include additional data, such as Unicode
61*2d1272b8SAndroid Build Coastguard Worker	code-point values, glyph extents, glyph flags, or interim
62*2d1272b8SAndroid Build Coastguard Worker	shaping results.
63*2d1272b8SAndroid Build Coastguard Worker      </para>
64*2d1272b8SAndroid Build Coastguard Worker      <para>
65*2d1272b8SAndroid Build Coastguard Worker	Output can also be redirected to a file, or input read from a
66*2d1272b8SAndroid Build Coastguard Worker	file. Additional options enable you to enable or disable
67*2d1272b8SAndroid Build Coastguard Worker	specific font features, to set variation-font axis values, to
68*2d1272b8SAndroid Build Coastguard Worker	alter the language, script, direction, and clustering settings
69*2d1272b8SAndroid Build Coastguard Worker	used, to enable sanity checks, or to change which shaping engine is used.
70*2d1272b8SAndroid Build Coastguard Worker      </para>
71*2d1272b8SAndroid Build Coastguard Worker      <para>
72*2d1272b8SAndroid Build Coastguard Worker	For a complete explanation of the options available, run
73*2d1272b8SAndroid Build Coastguard Worker      </para>
74*2d1272b8SAndroid Build Coastguard Worker      <programlisting>
75*2d1272b8SAndroid Build Coastguard Worker	<command>hb-shape</command> <parameter>--help</parameter>
76*2d1272b8SAndroid Build Coastguard Worker      </programlisting>
77*2d1272b8SAndroid Build Coastguard Worker    </section>
78*2d1272b8SAndroid Build Coastguard Worker
79*2d1272b8SAndroid Build Coastguard Worker    <section id="utilities-command-line-hbview">
80*2d1272b8SAndroid Build Coastguard Worker      <title>hb-view</title>
81*2d1272b8SAndroid Build Coastguard Worker      <para>
82*2d1272b8SAndroid Build Coastguard Worker	<emphasis><command>hb-view</command></emphasis> allows you to
83*2d1272b8SAndroid Build Coastguard Worker	see the shaped output of an input string in rendered
84*2d1272b8SAndroid Build Coastguard Worker	form. Like <command>hb-shape</command>,
85*2d1272b8SAndroid Build Coastguard Worker	<command>hb-view</command> takes a font file and a text string
86*2d1272b8SAndroid Build Coastguard Worker	as its arguments:
87*2d1272b8SAndroid Build Coastguard Worker      </para>
88*2d1272b8SAndroid Build Coastguard Worker      <programlisting>
89*2d1272b8SAndroid Build Coastguard Worker	<command>hb-view</command> <optional>[OPTIONS]</optional>
90*2d1272b8SAndroid Build Coastguard Worker	<parameter>path/to/font/file.ttf</parameter>
91*2d1272b8SAndroid Build Coastguard Worker	<parameter>yourinputtext</parameter>
92*2d1272b8SAndroid Build Coastguard Worker      </programlisting>
93*2d1272b8SAndroid Build Coastguard Worker      <para>
94*2d1272b8SAndroid Build Coastguard Worker	By default, <command>hb-view</command> renders the shaped
95*2d1272b8SAndroid Build Coastguard Worker	text in ASCII block-character images as terminal output. By
96*2d1272b8SAndroid Build Coastguard Worker	appending the
97*2d1272b8SAndroid Build Coastguard Worker	<command>--output-file=<optional>filename</optional></command>
98*2d1272b8SAndroid Build Coastguard Worker	switch, you can write the output to a PNG, SVG, or PDF file
99*2d1272b8SAndroid Build Coastguard Worker	(among other formats).
100*2d1272b8SAndroid Build Coastguard Worker      </para>
101*2d1272b8SAndroid Build Coastguard Worker      <para>
102*2d1272b8SAndroid Build Coastguard Worker	As with <command>hb-shape</command>, a lengthy set of options
103*2d1272b8SAndroid Build Coastguard Worker	is available, with which you can  enable or disable
104*2d1272b8SAndroid Build Coastguard Worker	specific font features, set variation-font axis values,
105*2d1272b8SAndroid Build Coastguard Worker	alter the language, script, direction, and clustering settings
106*2d1272b8SAndroid Build Coastguard Worker	used, enable sanity checks, or change which shaping engine is
107*2d1272b8SAndroid Build Coastguard Worker	used.
108*2d1272b8SAndroid Build Coastguard Worker      </para>
109*2d1272b8SAndroid Build Coastguard Worker      <para>
110*2d1272b8SAndroid Build Coastguard Worker	You can also set the foreground and background colors used for
111*2d1272b8SAndroid Build Coastguard Worker	the output, independently control the width of all four
112*2d1272b8SAndroid Build Coastguard Worker	margins, alter the line spacing, and annotate the output image
113*2d1272b8SAndroid Build Coastguard Worker	with
114*2d1272b8SAndroid Build Coastguard Worker      </para>
115*2d1272b8SAndroid Build Coastguard Worker      <para>
116*2d1272b8SAndroid Build Coastguard Worker	In general, <command>hb-view</command> is a quick way to
117*2d1272b8SAndroid Build Coastguard Worker	verify that the output of HarfBuzz's shaping operation looks
118*2d1272b8SAndroid Build Coastguard Worker	correct for a given text-and-font combination, but you may
119*2d1272b8SAndroid Build Coastguard Worker	want to use <command>hb-shape</command> to figure out exactly
120*2d1272b8SAndroid Build Coastguard Worker	why something does not appear as expected.
121*2d1272b8SAndroid Build Coastguard Worker      </para>
122*2d1272b8SAndroid Build Coastguard Worker    </section>
123*2d1272b8SAndroid Build Coastguard Worker
124*2d1272b8SAndroid Build Coastguard Worker    <section id="utilities-command-line-hbsubset">
125*2d1272b8SAndroid Build Coastguard Worker      <title>hb-subset</title>
126*2d1272b8SAndroid Build Coastguard Worker      <para>
127*2d1272b8SAndroid Build Coastguard Worker	<emphasis><command>hb-subset</command></emphasis> allows you
128*2d1272b8SAndroid Build Coastguard Worker	to generate a subset of a given font, with a limited set of
129*2d1272b8SAndroid Build Coastguard Worker	supported characters, features, and variation settings.
130*2d1272b8SAndroid Build Coastguard Worker      </para>
131*2d1272b8SAndroid Build Coastguard Worker      <para>
132*2d1272b8SAndroid Build Coastguard Worker	By default, you provide an input font and an input text string
133*2d1272b8SAndroid Build Coastguard Worker	as the arguments to <command>hb-subset</command>, and it will
134*2d1272b8SAndroid Build Coastguard Worker	generate a font that covers the input text exactly like the
135*2d1272b8SAndroid Build Coastguard Worker	input font does, but includes no other characters or features.
136*2d1272b8SAndroid Build Coastguard Worker      </para>
137*2d1272b8SAndroid Build Coastguard Worker      <programlisting>
138*2d1272b8SAndroid Build Coastguard Worker	<command>hb-subset</command> <optional>[OPTIONS]</optional>
139*2d1272b8SAndroid Build Coastguard Worker	<parameter>path/to/font/file.ttf</parameter>
140*2d1272b8SAndroid Build Coastguard Worker	<parameter>yourinputtext</parameter>
141*2d1272b8SAndroid Build Coastguard Worker      </programlisting>
142*2d1272b8SAndroid Build Coastguard Worker      <para>
143*2d1272b8SAndroid Build Coastguard Worker	For example, to create a subset of Noto Serif that just includes the
144*2d1272b8SAndroid Build Coastguard Worker	numerals and the lowercase Latin alphabet, you could run
145*2d1272b8SAndroid Build Coastguard Worker      </para>
146*2d1272b8SAndroid Build Coastguard Worker      <programlisting>
147*2d1272b8SAndroid Build Coastguard Worker	<command>hb-subset</command> <optional>[OPTIONS]</optional>
148*2d1272b8SAndroid Build Coastguard Worker	<parameter>NotoSerif-Regular.ttf</parameter>
149*2d1272b8SAndroid Build Coastguard Worker	<parameter>0123456789abcdefghijklmnopqrstuvwxyz</parameter>
150*2d1272b8SAndroid Build Coastguard Worker      </programlisting>
151*2d1272b8SAndroid Build Coastguard Worker      <para>
152*2d1272b8SAndroid Build Coastguard Worker	There are options available to remove hinting from the
153*2d1272b8SAndroid Build Coastguard Worker	subsetted font and to specify a list of variation-axis settings.
154*2d1272b8SAndroid Build Coastguard Worker      </para>
155*2d1272b8SAndroid Build Coastguard Worker    </section>
156*2d1272b8SAndroid Build Coastguard Worker
157*2d1272b8SAndroid Build Coastguard Worker  </section>
158*2d1272b8SAndroid Build Coastguard Worker
159*2d1272b8SAndroid Build Coastguard Worker  <section id="utilities-common-types-apis">
160*2d1272b8SAndroid Build Coastguard Worker    <title>Common data types and APIs</title>
161*2d1272b8SAndroid Build Coastguard Worker    <para>
162*2d1272b8SAndroid Build Coastguard Worker      HarfBuzz includes several APIs for working with general-purpose
163*2d1272b8SAndroid Build Coastguard Worker      data that you may find convenient to leverage in your own
164*2d1272b8SAndroid Build Coastguard Worker      software. They include set operations and integer-to-integer
165*2d1272b8SAndroid Build Coastguard Worker      mapping operations.
166*2d1272b8SAndroid Build Coastguard Worker    </para>
167*2d1272b8SAndroid Build Coastguard Worker    <para>
168*2d1272b8SAndroid Build Coastguard Worker      HarfBuzz uses set operations for internal bookkeeping, such as
169*2d1272b8SAndroid Build Coastguard Worker      when it collects all of the glyph IDs covered by a particular
170*2d1272b8SAndroid Build Coastguard Worker      font feature. You can also use the set API to build sets, add
171*2d1272b8SAndroid Build Coastguard Worker      and remove elements, test whether or not sets contain particular
172*2d1272b8SAndroid Build Coastguard Worker      elements, or compute the unions, intersections, or differences
173*2d1272b8SAndroid Build Coastguard Worker      between sets.
174*2d1272b8SAndroid Build Coastguard Worker    </para>
175*2d1272b8SAndroid Build Coastguard Worker    <para>
176*2d1272b8SAndroid Build Coastguard Worker      All set elements are integers (specifically,
177*2d1272b8SAndroid Build Coastguard Worker      <type>hb_codepoint_t</type> 32-bit unsigned ints), and there are
178*2d1272b8SAndroid Build Coastguard Worker      functions for fetching the minimum and maximum element from a
179*2d1272b8SAndroid Build Coastguard Worker      set. The set API also includes some functions that might not
180*2d1272b8SAndroid Build Coastguard Worker      be part of a generic set facility, such as the ability to add a
181*2d1272b8SAndroid Build Coastguard Worker      contiguous range of integer elements to a set in bulk, and the
182*2d1272b8SAndroid Build Coastguard Worker      ability to fetch the next-smallest or next-largest element.
183*2d1272b8SAndroid Build Coastguard Worker    </para>
184*2d1272b8SAndroid Build Coastguard Worker    <para>
185*2d1272b8SAndroid Build Coastguard Worker      The HarfBuzz set API includes some conveniences as well. All
186*2d1272b8SAndroid Build Coastguard Worker      sets are lifecycle-managed, just like other HarfBuzz
187*2d1272b8SAndroid Build Coastguard Worker      objects. You increase the reference count on a set with
188*2d1272b8SAndroid Build Coastguard Worker      <function>hb_set_reference()</function> and decrease it with
189*2d1272b8SAndroid Build Coastguard Worker      <function>hb_set_destroy()</function>. You can also attach
190*2d1272b8SAndroid Build Coastguard Worker      user data to a set, just like you can to blobs, buffers, faces,
191*2d1272b8SAndroid Build Coastguard Worker      fonts, and other objects, and set destroy callbacks.
192*2d1272b8SAndroid Build Coastguard Worker    </para>
193*2d1272b8SAndroid Build Coastguard Worker    <para>
194*2d1272b8SAndroid Build Coastguard Worker      HarfBuzz also provides an API for keeping track of
195*2d1272b8SAndroid Build Coastguard Worker      integer-to-integer mappings. As with the set API, each integer is
196*2d1272b8SAndroid Build Coastguard Worker      stored as an unsigned 32-bit <type>hb_codepoint_t</type>
197*2d1272b8SAndroid Build Coastguard Worker      element. Maps, like other objects, are reference counted with
198*2d1272b8SAndroid Build Coastguard Worker      reference and destroy functions, and you can attach user data to
199*2d1272b8SAndroid Build Coastguard Worker      them. The mapping operations include adding and deleting
200*2d1272b8SAndroid Build Coastguard Worker      integer-to-integer key:value pairs to the map, testing for the
201*2d1272b8SAndroid Build Coastguard Worker      presence of a key, fetching the population of the map, and so on.
202*2d1272b8SAndroid Build Coastguard Worker    </para>
203*2d1272b8SAndroid Build Coastguard Worker    <para>
204*2d1272b8SAndroid Build Coastguard Worker      There are several other internal HarfBuzz facilities that are
205*2d1272b8SAndroid Build Coastguard Worker      exposed publicly and which you may want to take advantage of
206*2d1272b8SAndroid Build Coastguard Worker      while processing text. HarfBuzz uses a common
207*2d1272b8SAndroid Build Coastguard Worker      <type>hb_tag_t</type> for a variety of OpenType tag identifiers (for
208*2d1272b8SAndroid Build Coastguard Worker      scripts, languages, font features, table names, variation-axis
209*2d1272b8SAndroid Build Coastguard Worker      names, and more), and provides functions for converting strings
210*2d1272b8SAndroid Build Coastguard Worker      to tags and vice-versa.
211*2d1272b8SAndroid Build Coastguard Worker    </para>
212*2d1272b8SAndroid Build Coastguard Worker    <para>
213*2d1272b8SAndroid Build Coastguard Worker      Finally, HarfBuzz also includes data type for Booleans, bit
214*2d1272b8SAndroid Build Coastguard Worker      masks, and other simple types.
215*2d1272b8SAndroid Build Coastguard Worker    </para>
216*2d1272b8SAndroid Build Coastguard Worker  </section>
217*2d1272b8SAndroid Build Coastguard Worker
218*2d1272b8SAndroid Build Coastguard Worker</chapter>
219