Mercurial > hgrepos > Python2 > PyMuPDF
diff mupdf-source/thirdparty/harfbuzz/docs/usermanual-utilities.xml @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mupdf-source/thirdparty/harfbuzz/docs/usermanual-utilities.xml Mon Sep 15 11:43:07 2025 +0200 @@ -0,0 +1,218 @@ +<?xml version="1.0"?> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" + "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd" [ + <!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'"> + <!ENTITY version SYSTEM "version.xml"> +]> +<chapter id="utilities"> + <title>Utilities</title> + <para> + HarfBuzz includes several auxiliary components in addition to the + main APIs. These include a set of command-line tools, a set of + lower-level APIs for common data types that may be of interest to + client programs. + </para> + + <section id="utilities-command-line-tools"> + <title>Command-line tools</title> + <para> + HarfBuzz include three command-line tools: + <command>hb-shape</command>, <command>hb-view</command>, and + <command>hb-subset</command>. They can be used to examine + HarfBuzz's functionality, debug font binaries, or explore the + various shaping models and features from a terminal. + </para> + + <section id="utilities-command-line-hbshape"> + <title>hb-shape</title> + <para> + <emphasis><command>hb-shape</command></emphasis> allows you to run HarfBuzz's + <function>hb_shape()</function> function on an input string and + to examine the outcome, in human-readable form, as terminal + output. <command>hb-shape</command> does + <emphasis>not</emphasis> render the results of the shaping call + into rendered text (you can use <command>hb-view</command>, below, for + that). Instead, it prints out the final glyph indices and + positions, taking all shaping operations into account, as if the + input string were a HarfBuzz input buffer. + </para> + <para> + You can specify the font to be used for shaping and, with + command-line options, you can add various aspects of the + internal state to the output that is sent to the terminal. The + general format is + </para> + <programlisting> + <command>hb-shape</command> <optional>[OPTIONS]</optional> + <parameter>path/to/font/file.ttf</parameter> + <parameter>yourinputtext</parameter> + </programlisting> + <para> + The default output format is plain text (although JSON output + can be selected instead by specifying the option + <optional>--output-format=json</optional>). The default output + syntax reports each glyph name (or glyph index if there is no + name) followed by its cluster value, its horizontal and vertical + position displacement, and its horizontal and vertical advances. + </para> + <para> + Output options exist to skip any of these elements in the + output, and to include additional data, such as Unicode + code-point values, glyph extents, glyph flags, or interim + shaping results. + </para> + <para> + Output can also be redirected to a file, or input read from a + file. Additional options enable you to enable or disable + specific font features, to set variation-font axis values, to + alter the language, script, direction, and clustering settings + used, to enable sanity checks, or to change which shaping engine is used. + </para> + <para> + For a complete explanation of the options available, run + </para> + <programlisting> + <command>hb-shape</command> <parameter>--help</parameter> + </programlisting> + </section> + + <section id="utilities-command-line-hbview"> + <title>hb-view</title> + <para> + <emphasis><command>hb-view</command></emphasis> allows you to + see the shaped output of an input string in rendered + form. Like <command>hb-shape</command>, + <command>hb-view</command> takes a font file and a text string + as its arguments: + </para> + <programlisting> + <command>hb-view</command> <optional>[OPTIONS]</optional> + <parameter>path/to/font/file.ttf</parameter> + <parameter>yourinputtext</parameter> + </programlisting> + <para> + By default, <command>hb-view</command> renders the shaped + text in ASCII block-character images as terminal output. By + appending the + <command>--output-file=<optional>filename</optional></command> + switch, you can write the output to a PNG, SVG, or PDF file + (among other formats). + </para> + <para> + As with <command>hb-shape</command>, a lengthy set of options + is available, with which you can enable or disable + specific font features, set variation-font axis values, + alter the language, script, direction, and clustering settings + used, enable sanity checks, or change which shaping engine is + used. + </para> + <para> + You can also set the foreground and background colors used for + the output, independently control the width of all four + margins, alter the line spacing, and annotate the output image + with + </para> + <para> + In general, <command>hb-view</command> is a quick way to + verify that the output of HarfBuzz's shaping operation looks + correct for a given text-and-font combination, but you may + want to use <command>hb-shape</command> to figure out exactly + why something does not appear as expected. + </para> + </section> + + <section id="utilities-command-line-hbsubset"> + <title>hb-subset</title> + <para> + <emphasis><command>hb-subset</command></emphasis> allows you + to generate a subset of a given font, with a limited set of + supported characters, features, and variation settings. + </para> + <para> + By default, you provide an input font and an input text string + as the arguments to <command>hb-subset</command>, and it will + generate a font that covers the input text exactly like the + input font does, but includes no other characters or features. + </para> + <programlisting> + <command>hb-subset</command> <optional>[OPTIONS]</optional> + <parameter>path/to/font/file.ttf</parameter> + <parameter>yourinputtext</parameter> + </programlisting> + <para> + For example, to create a subset of Noto Serif that just includes the + numerals and the lowercase Latin alphabet, you could run + </para> + <programlisting> + <command>hb-subset</command> <optional>[OPTIONS]</optional> + <parameter>NotoSerif-Regular.ttf</parameter> + <parameter>0123456789abcdefghijklmnopqrstuvwxyz</parameter> + </programlisting> + <para> + There are options available to remove hinting from the + subsetted font and to specify a list of variation-axis settings. + </para> + </section> + + </section> + + <section id="utilities-common-types-apis"> + <title>Common data types and APIs</title> + <para> + HarfBuzz includes several APIs for working with general-purpose + data that you may find convenient to leverage in your own + software. They include set operations and integer-to-integer + mapping operations. + </para> + <para> + HarfBuzz uses set operations for internal bookkeeping, such as + when it collects all of the glyph IDs covered by a particular + font feature. You can also use the set API to build sets, add + and remove elements, test whether or not sets contain particular + elements, or compute the unions, intersections, or differences + between sets. + </para> + <para> + All set elements are integers (specifically, + <type>hb_codepoint_t</type> 32-bit unsigned ints), and there are + functions for fetching the minimum and maximum element from a + set. The set API also includes some functions that might not + be part of a generic set facility, such as the ability to add a + contiguous range of integer elements to a set in bulk, and the + ability to fetch the next-smallest or next-largest element. + </para> + <para> + The HarfBuzz set API includes some conveniences as well. All + sets are lifecycle-managed, just like other HarfBuzz + objects. You increase the reference count on a set with + <function>hb_set_reference()</function> and decrease it with + <function>hb_set_destroy()</function>. You can also attach + user data to a set, just like you can to blobs, buffers, faces, + fonts, and other objects, and set destroy callbacks. + </para> + <para> + HarfBuzz also provides an API for keeping track of + integer-to-integer mappings. As with the set API, each integer is + stored as an unsigned 32-bit <type>hb_codepoint_t</type> + element. Maps, like other objects, are reference counted with + reference and destroy functions, and you can attach user data to + them. The mapping operations include adding and deleting + integer-to-integer key:value pairs to the map, testing for the + presence of a key, fetching the population of the map, and so on. + </para> + <para> + There are several other internal HarfBuzz facilities that are + exposed publicly and which you may want to take advantage of + while processing text. HarfBuzz uses a common + <type>hb_tag_t</type> for a variety of OpenType tag identifiers (for + scripts, languages, font features, table names, variation-axis + names, and more), and provides functions for converting strings + to tags and vice-versa. + </para> + <para> + Finally, HarfBuzz also includes data type for Booleans, bit + masks, and other simple types. + </para> + </section> + +</chapter>
