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