Although HarfBuzz includes its own Unicode-data functions, it also provides integration APIs for using the International Components for Unicode (ICU) library as a source of Unicode data on any supported platform.
The principal integration point with ICU is the hb_unicode_funcs_t Unicode-functions structure attached to a buffer. This structure holds the virtual methods used for retrieving Unicode character properties, such as General Category, Script, Combining Class, decomposition mappings, and mirroring information.
To use ICU in your client program, you need to call
hb_icu_get_unicode_funcs()
, which creates a
Unicode-functions structure populated with the ICU function for
each included method. Subsequently, you can attach the
Unicode-functions structure to your buffer:
hb_unicode_funcs_t *icufunctions; icufunctions = hb_icu_get_unicode_funcs(); hb_buffer_set_unicode_funcs(buf, icufunctions);
and ICU will be used for Unicode-data access.
HarfBuzz also supplies a pair of functions
(hb_icu_script_from_script()
and
hb_icu_script_to_script()
) for converting
between ICU's and HarfBuzz's internal enumerations of Unicode
scripts. The hb_icu_script_from_script()
function converts from a HarfBuzz hb_script_t to an
ICU UScriptCode. The
hb_icu_script_to_script()
function does the
reverse: converting from a UScriptCode identifier
to a hb_script_t.
By default, HarfBuzz's ICU support is built as a separate shared
library (libharfbuzz-icu.so
)
when compiling HarfBuzz from source. This allows client programs
that do not need ICU to link against HarfBuzz without unnecessarily
adding ICU as a dependency. You can also build HarfBuzz with ICU
support built directly into the main HarfBuzz shared library
(libharfbuzz.so
),
by specifying the --with-icu=builtin
compile-time option.