Imported Upstream version 2.6.7
[platform/upstream/harfbuzz.git] / docs / html / customizing-unicode-functions.html
index 5528b53..8160f4f 100644 (file)
@@ -6,9 +6,9 @@
 <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