< prev index next >
src/java.desktop/share/native/libfontmanager/harfbuzz/hb-shape.cc
Print this page
*** 24,67 ****
*
* Red Hat Author(s): Behdad Esfahbod
* Google Author(s): Behdad Esfahbod
*/
! #include "hb-private.hh"
- #include "hb-shaper-private.hh"
- #include "hb-shape-plan-private.hh"
- #include "hb-buffer-private.hh"
- #include "hb-font-private.hh"
/**
* SECTION:hb-shape
! * @title: Shaping
* @short_description: Conversion of text strings into positioned glyphs
* @include: hb.h
*
* Shaping is the central operation of HarfBuzz. Shaping operates on buffers,
* which are sequences of Unicode characters that use the same font and have
! * the same text direction, script and language. After shaping the buffer
* contains the output glyphs and their positions.
**/
- static const char **static_shaper_list;
! #ifdef HB_USE_ATEXIT
! static
! void free_static_shaper_list (void)
{
! retry:
! const char **shaper_list = (const char **) hb_atomic_ptr_get (&static_shaper_list);
! if (!hb_atomic_ptr_cmpexch (&static_shaper_list, shaper_list, nullptr))
! goto retry;
! free (shaper_list);
}
#endif
/**
* hb_shape_list_shapers:
*
* Retrieves the list of shapers supported by HarfBuzz.
*
--- 24,97 ----
*
* Red Hat Author(s): Behdad Esfahbod
* Google Author(s): Behdad Esfahbod
*/
! #include "hb.hh"
!
! #include "hb-shaper.hh"
! #include "hb-shape-plan.hh"
! #include "hb-buffer.hh"
! #include "hb-font.hh"
! #include "hb-machinery.hh"
/**
* SECTION:hb-shape
! * @title: hb-shape
* @short_description: Conversion of text strings into positioned glyphs
* @include: hb.h
*
* Shaping is the central operation of HarfBuzz. Shaping operates on buffers,
* which are sequences of Unicode characters that use the same font and have
! * the same text direction, script, and language. After shaping the buffer
* contains the output glyphs and their positions.
**/
! #if HB_USE_ATEXIT
! static void free_static_shaper_list ();
! #endif
!
! static const char *nil_shaper_list[] = {nullptr};
!
! static struct hb_shaper_list_lazy_loader_t : hb_lazy_loader_t<const char *,
! hb_shaper_list_lazy_loader_t>
{
! static const char ** create ()
! {
! const char **shaper_list = (const char **) calloc (1 + HB_SHAPERS_COUNT, sizeof (const char *));
! if (unlikely (!shaper_list))
! return nullptr;
!
! const hb_shaper_entry_t *shapers = _hb_shapers_get ();
! unsigned int i;
! for (i = 0; i < HB_SHAPERS_COUNT; i++)
! shaper_list[i] = shapers[i].name;
! shaper_list[i] = nullptr;
!
! #if HB_USE_ATEXIT
! atexit (free_static_shaper_list);
! #endif
! return shaper_list;
! }
! static void destroy (const char **l)
! { free (l); }
! static const char ** get_null ()
! { return nil_shaper_list; }
! } static_shaper_list;
!
! #if HB_USE_ATEXIT
! static
! void free_static_shaper_list ()
! {
! static_shaper_list.free_instance ();
}
#endif
+
/**
* hb_shape_list_shapers:
*
* Retrieves the list of shapers supported by HarfBuzz.
*
*** 69,109 ****
* constant strings
*
* Since: 0.9.2
**/
const char **
! hb_shape_list_shapers (void)
{
! retry:
! const char **shaper_list = (const char **) hb_atomic_ptr_get (&static_shaper_list);
!
! if (unlikely (!shaper_list))
! {
! /* Not found; allocate one. */
! shaper_list = (const char **) calloc (1 + HB_SHAPERS_COUNT, sizeof (const char *));
! if (unlikely (!shaper_list)) {
! static const char *nil_shaper_list[] = {nullptr};
! return nil_shaper_list;
! }
!
! const hb_shaper_pair_t *shapers = _hb_shapers_get ();
! unsigned int i;
! for (i = 0; i < HB_SHAPERS_COUNT; i++)
! shaper_list[i] = shapers[i].name;
! shaper_list[i] = nullptr;
!
! if (!hb_atomic_ptr_cmpexch (&static_shaper_list, nullptr, shaper_list)) {
! free (shaper_list);
! goto retry;
! }
!
! #ifdef HB_USE_ATEXIT
! atexit (free_static_shaper_list); /* First person registers atexit() callback. */
! #endif
! }
!
! return shaper_list;
}
/**
* hb_shape_full:
--- 99,111 ----
* constant strings
*
* Since: 0.9.2
**/
const char **
! hb_shape_list_shapers ()
{
! return static_shaper_list.get_unconst ();
}
/**
* hb_shape_full:
< prev index next >