<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="HarfBuzz Manual">
<link rel="up" href="buffers-language-script-and-direction.html" title="Buffers, language, script and direction">
-<link rel="prev" href="what-about-the-other-scripts.html" title="What about the other scripts?">
-<link rel="next" href="fonts-and-faces.html" title="Fonts and faces">
-<meta name="generator" content="GTK-Doc V1.29 (XML mode)">
+<link rel="prev" href="setting-buffer-properties.html" title="Setting buffer properties">
+<link rel="next" href="fonts-and-faces.html" title="Fonts, faces, and output">
+<meta name="generator" content="GTK-Doc V1.32.1 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<td width="100%" align="left" class="shortcuts"></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="buffers-language-script-and-direction.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
-<td><a accesskey="p" href="what-about-the-other-scripts.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
+<td><a accesskey="p" href="setting-buffer-properties.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="fonts-and-faces.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="customizing-unicode-functions"></a>Customizing Unicode functions</h2></div></div></div>
<p>
+ HarfBuzz requires some simple functions for accessing
+ information from the Unicode Character Database (such as the
+ <code class="literal">General_Category</code> (gc) and
+ <code class="literal">Script</code> (sc) properties) that is useful
+ for shaping, as well as some useful operations like composing and
+ decomposing code points.
+ </p>
+<p>
+ HarfBuzz includes its own internal, lightweight set of Unicode
+ functions. At build time, it is also possible to compile support
+ for some other options, such as the Unicode functions provided
+ by GLib or the International Components for Unicode (ICU)
+ library. Generally, this option is only of interest for client
+ programs that have specific integration requirements or that do
+ a significant amount of customization.
+ </p>
+<p>
+ If your program has access to other Unicode functions, however,
+ such as through a system library or application framework, you
+ might prefer to use those instead of the built-in
+ options. HarfBuzz supports this by implementing its Unicode
+ functions as a set of virtual methods that you can replace —
+ without otherwise affecting HarfBuzz's functionality.
+ </p>
+<p>
+ The Unicode functions are specified in a structure called
+ <code class="literal">unicode_funcs</code> which is attached to each
+ buffer. But even though <code class="literal">unicode_funcs</code> is
+ associated with a <span class="type">hb_buffer_t</span>, the functions
+ themselves are called by other HarfBuzz APIs that access
+ buffers, so it would be unwise for you to hook different
+ functions into different buffers.
+ </p>
+<p>
+ In addition, you can mark your <code class="literal">unicode_funcs</code>
+ as immutable by calling
+ <code class="function">hb_unicode_funcs_make_immutable (ufuncs)</code>.
+ This is especially useful if your code is a
+ library or framework that will have its own client programs. By
+ marking your Unicode function choices as immutable, you prevent
+ your own client programs from changing the
+ <code class="literal">unicode_funcs</code> configuration and introducing
+ inconsistencies and errors downstream.
+ </p>
+<p>
+ You can retrieve the Unicode-functions configuration for
+ your buffer by calling <code class="function">hb_buffer_get_unicode_funcs()</code>:
+ </p>
+<pre class="programlisting">
+ hb_unicode_funcs_t *ufunctions;
+ ufunctions = hb_buffer_get_unicode_funcs(buf);
+ </pre>
+<p>
+ The current version of <code class="literal">unicode_funcs</code> uses six functions:
+ </p>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem"><p>
+ <code class="function">hb_unicode_combining_class_func_t</code>:
+ returns the Canonical Combining Class of a code point.
+ </p></li>
+<li class="listitem"><p>
+ <code class="function">hb_unicode_general_category_func_t</code>:
+ returns the General Category (gc) of a code point.
+ </p></li>
+<li class="listitem"><p>
+ <code class="function">hb_unicode_mirroring_func_t</code>: returns
+ the Mirroring Glyph code point (for bi-directional
+ replacement) of a code point.
+ </p></li>
+<li class="listitem"><p>
+ <code class="function">hb_unicode_script_func_t</code>: returns the
+ Script (sc) property of a code point.
+ </p></li>
+<li class="listitem"><p>
+ <code class="function">hb_unicode_compose_func_t</code>: returns the
+ canonical composition of a sequence of two code points.
+ </p></li>
+<li class="listitem"><p>
+ <code class="function">hb_unicode_decompose_func_t</code>: returns
+ the canonical decomposition of a code point.
+ </p></li>
+</ul></div>
+<p>
+ Note, however, that future HarfBuzz releases may alter this set.
+ </p>
+<p>
+ Each Unicode function has a corresponding setter, with which you
+ can assign a callback to your replacement function. For example,
+ to replace
+ <code class="function">hb_unicode_general_category_func_t</code>, you can call
+ </p>
+<pre class="programlisting">
+ hb_unicode_funcs_set_general_category_func (*ufuncs, func, *user_data, destroy)
+ </pre>
+<p>
+ Virtualizing this set of Unicode functions is primarily intended
+ to improve portability. There is no need for every client
+ program to make the effort to replace the default options, so if
+ you are unsure, do not feel any pressure to customize
+ <code class="literal">unicode_funcs</code>.
</p>
</div>
<div class="footer">
-<hr>Generated by GTK-Doc V1.29</div>
+<hr>Generated by GTK-Doc V1.32.1</div>
</body>
</html>
\ No newline at end of file