Blame src/hb-unicode.cc

Packit 874993
/*
Packit 874993
 * Copyright © 2009  Red Hat, Inc.
Packit 874993
 * Copyright © 2011  Codethink Limited
Packit 874993
 * Copyright © 2010,2011,2012  Google, Inc.
Packit 874993
 *
Packit 874993
 *  This is part of HarfBuzz, a text shaping library.
Packit 874993
 *
Packit 874993
 * Permission is hereby granted, without written agreement and without
Packit 874993
 * license or royalty fees, to use, copy, modify, and distribute this
Packit 874993
 * software and its documentation for any purpose, provided that the
Packit 874993
 * above copyright notice and the following two paragraphs appear in
Packit 874993
 * all copies of this software.
Packit 874993
 *
Packit 874993
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
Packit 874993
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
Packit 874993
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
Packit 874993
 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
Packit 874993
 * DAMAGE.
Packit 874993
 *
Packit 874993
 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
Packit 874993
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
Packit 874993
 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
Packit 874993
 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
Packit 874993
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
Packit 874993
 *
Packit 874993
 * Red Hat Author(s): Behdad Esfahbod
Packit 874993
 * Codethink Author(s): Ryan Lortie
Packit 874993
 * Google Author(s): Behdad Esfahbod
Packit 874993
 */
Packit 874993
Packit 874993
#include "hb-private.hh"
Packit 874993
Packit 874993
#include "hb-unicode-private.hh"
Packit 874993
Packit 874993
Packit 874993
Packit 874993
/*
Packit 874993
 * hb_unicode_funcs_t
Packit 874993
 */
Packit 874993
Packit 874993
static hb_unicode_combining_class_t
Packit 874993
hb_unicode_combining_class_nil (hb_unicode_funcs_t *ufuncs    HB_UNUSED,
Packit 874993
				hb_codepoint_t      unicode   HB_UNUSED,
Packit 874993
				void               *user_data HB_UNUSED)
Packit 874993
{
Packit 874993
  return HB_UNICODE_COMBINING_CLASS_NOT_REORDERED;
Packit 874993
}
Packit 874993
Packit 874993
static unsigned int
Packit 874993
hb_unicode_eastasian_width_nil (hb_unicode_funcs_t *ufuncs    HB_UNUSED,
Packit 874993
				hb_codepoint_t      unicode   HB_UNUSED,
Packit 874993
				void               *user_data HB_UNUSED)
Packit 874993
{
Packit 874993
  return 1;
Packit 874993
}
Packit 874993
Packit 874993
static hb_unicode_general_category_t
Packit 874993
hb_unicode_general_category_nil (hb_unicode_funcs_t *ufuncs    HB_UNUSED,
Packit 874993
				 hb_codepoint_t      unicode   HB_UNUSED,
Packit 874993
				 void               *user_data HB_UNUSED)
Packit 874993
{
Packit 874993
  return HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER;
Packit 874993
}
Packit 874993
Packit 874993
static hb_codepoint_t
Packit 874993
hb_unicode_mirroring_nil (hb_unicode_funcs_t *ufuncs    HB_UNUSED,
Packit 874993
			  hb_codepoint_t      unicode   HB_UNUSED,
Packit 874993
			  void               *user_data HB_UNUSED)
Packit 874993
{
Packit 874993
  return unicode;
Packit 874993
}
Packit 874993
Packit 874993
static hb_script_t
Packit 874993
hb_unicode_script_nil (hb_unicode_funcs_t *ufuncs    HB_UNUSED,
Packit 874993
		       hb_codepoint_t      unicode   HB_UNUSED,
Packit 874993
		       void               *user_data HB_UNUSED)
Packit 874993
{
Packit 874993
  return HB_SCRIPT_UNKNOWN;
Packit 874993
}
Packit 874993
Packit 874993
static hb_bool_t
Packit 874993
hb_unicode_compose_nil (hb_unicode_funcs_t *ufuncs    HB_UNUSED,
Packit 874993
			hb_codepoint_t      a         HB_UNUSED,
Packit 874993
			hb_codepoint_t      b         HB_UNUSED,
Packit 874993
			hb_codepoint_t     *ab        HB_UNUSED,
Packit 874993
			void               *user_data HB_UNUSED)
Packit 874993
{
Packit 874993
  return false;
Packit 874993
}
Packit 874993
Packit 874993
static hb_bool_t
Packit 874993
hb_unicode_decompose_nil (hb_unicode_funcs_t *ufuncs    HB_UNUSED,
Packit 874993
			  hb_codepoint_t      ab        HB_UNUSED,
Packit 874993
			  hb_codepoint_t     *a         HB_UNUSED,
Packit 874993
			  hb_codepoint_t     *b         HB_UNUSED,
Packit 874993
			  void               *user_data HB_UNUSED)
Packit 874993
{
Packit 874993
  return false;
Packit 874993
}
Packit 874993
Packit 874993
Packit 874993
static unsigned int
Packit 874993
hb_unicode_decompose_compatibility_nil (hb_unicode_funcs_t *ufuncs     HB_UNUSED,
Packit 874993
					hb_codepoint_t      u          HB_UNUSED,
Packit 874993
					hb_codepoint_t     *decomposed HB_UNUSED,
Packit 874993
					void               *user_data  HB_UNUSED)
Packit 874993
{
Packit 874993
  return 0;
Packit 874993
}
Packit 874993
Packit 874993
Packit 874993
#define HB_UNICODE_FUNCS_IMPLEMENT_SET \
Packit 874993
  HB_UNICODE_FUNCS_IMPLEMENT (glib) \
Packit 874993
  HB_UNICODE_FUNCS_IMPLEMENT (icu) \
Packit 874993
  HB_UNICODE_FUNCS_IMPLEMENT (ucdn) \
Packit 874993
  HB_UNICODE_FUNCS_IMPLEMENT (nil) \
Packit 874993
  /* ^--- Add new callbacks before nil */
Packit 874993
Packit 874993
#define hb_nil_get_unicode_funcs hb_unicode_funcs_get_empty
Packit 874993
Packit 874993
/* Prototype them all */
Packit 874993
#define HB_UNICODE_FUNCS_IMPLEMENT(set) \
Packit 874993
extern "C" hb_unicode_funcs_t *hb_##set##_get_unicode_funcs (void);
Packit 874993
HB_UNICODE_FUNCS_IMPLEMENT_SET
Packit 874993
#undef HB_UNICODE_FUNCS_IMPLEMENT
Packit 874993
Packit 874993
Packit 874993
hb_unicode_funcs_t *
Packit 874993
hb_unicode_funcs_get_default (void)
Packit 874993
{
Packit 874993
#define HB_UNICODE_FUNCS_IMPLEMENT(set) \
Packit 874993
  return hb_##set##_get_unicode_funcs ();
Packit 874993
Packit 874993
#if defined(HAVE_UCDN)
Packit 874993
  HB_UNICODE_FUNCS_IMPLEMENT(ucdn)
Packit 874993
#elif defined(HAVE_GLIB)
Packit 874993
  HB_UNICODE_FUNCS_IMPLEMENT(glib)
Packit 874993
#elif defined(HAVE_ICU) && defined(HAVE_ICU_BUILTIN)
Packit 874993
  HB_UNICODE_FUNCS_IMPLEMENT(icu)
Packit 874993
#else
Packit 874993
#define HB_UNICODE_FUNCS_NIL 1
Packit 874993
  HB_UNICODE_FUNCS_IMPLEMENT(nil)
Packit 874993
#endif
Packit 874993
Packit 874993
#undef HB_UNICODE_FUNCS_IMPLEMENT
Packit 874993
}
Packit 874993
Packit 874993
#if !defined(HB_NO_UNICODE_FUNCS) && defined(HB_UNICODE_FUNCS_NIL)
Packit 874993
#error "Could not find any Unicode functions implementation, you have to provide your own"
Packit 874993
#error "Consider building hb-ucdn.c.  If you absolutely want to build without any, check the code."
Packit 874993
#endif
Packit 874993
Packit 874993
/**
Packit 874993
 * hb_unicode_funcs_create: (Xconstructor)
Packit 874993
 * @parent: (nullable):
Packit 874993
 *
Packit 874993
 * 
Packit 874993
 *
Packit 874993
 * Return value: (transfer full):
Packit 874993
 *
Packit 874993
 * Since: 0.9.2
Packit 874993
 **/
Packit 874993
hb_unicode_funcs_t *
Packit 874993
hb_unicode_funcs_create (hb_unicode_funcs_t *parent)
Packit 874993
{
Packit 874993
  hb_unicode_funcs_t *ufuncs;
Packit 874993
Packit 874993
  if (!(ufuncs = hb_object_create<hb_unicode_funcs_t> ()))
Packit 874993
    return hb_unicode_funcs_get_empty ();
Packit 874993
Packit 874993
  if (!parent)
Packit 874993
    parent = hb_unicode_funcs_get_empty ();
Packit 874993
Packit 874993
  hb_unicode_funcs_make_immutable (parent);
Packit 874993
  ufuncs->parent = hb_unicode_funcs_reference (parent);
Packit 874993
Packit 874993
  ufuncs->func = parent->func;
Packit 874993
Packit 874993
  /* We can safely copy user_data from parent since we hold a reference
Packit 874993
   * onto it and it's immutable.  We should not copy the destroy notifiers
Packit 874993
   * though. */
Packit 874993
  ufuncs->user_data = parent->user_data;
Packit 874993
Packit 874993
  return ufuncs;
Packit 874993
}
Packit 874993
Packit 874993
Packit 874993
const hb_unicode_funcs_t _hb_unicode_funcs_nil = {
Packit 874993
  HB_OBJECT_HEADER_STATIC,
Packit 874993
Packit 874993
  NULL, /* parent */
Packit 874993
  true, /* immutable */
Packit 874993
  {
Packit 874993
#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_unicode_##name##_nil,
Packit 874993
    HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
Packit 874993
#undef HB_UNICODE_FUNC_IMPLEMENT
Packit 874993
  }
Packit 874993
};
Packit 874993
Packit 874993
/**
Packit 874993
 * hb_unicode_funcs_get_empty:
Packit 874993
 *
Packit 874993
 * 
Packit 874993
 *
Packit 874993
 * Return value: (transfer full):
Packit 874993
 *
Packit 874993
 * Since: 0.9.2
Packit 874993
 **/
Packit 874993
hb_unicode_funcs_t *
Packit 874993
hb_unicode_funcs_get_empty (void)
Packit 874993
{
Packit 874993
  return const_cast<hb_unicode_funcs_t *> (&_hb_unicode_funcs_nil);
Packit 874993
}
Packit 874993
Packit 874993
/**
Packit 874993
 * hb_unicode_funcs_reference: (skip)
Packit 874993
 * @ufuncs: Unicode functions.
Packit 874993
 *
Packit 874993
 * 
Packit 874993
 *
Packit 874993
 * Return value: (transfer full):
Packit 874993
 *
Packit 874993
 * Since: 0.9.2
Packit 874993
 **/
Packit 874993
hb_unicode_funcs_t *
Packit 874993
hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs)
Packit 874993
{
Packit 874993
  return hb_object_reference (ufuncs);
Packit 874993
}
Packit 874993
Packit 874993
/**
Packit 874993
 * hb_unicode_funcs_destroy: (skip)
Packit 874993
 * @ufuncs: Unicode functions.
Packit 874993
 *
Packit 874993
 * 
Packit 874993
 *
Packit 874993
 * Since: 0.9.2
Packit 874993
 **/
Packit 874993
void
Packit 874993
hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs)
Packit 874993
{
Packit 874993
  if (!hb_object_destroy (ufuncs)) return;
Packit 874993
Packit 874993
#define HB_UNICODE_FUNC_IMPLEMENT(name) \
Packit 874993
  if (ufuncs->destroy.name) ufuncs->destroy.name (ufuncs->user_data.name);
Packit 874993
    HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
Packit 874993
#undef HB_UNICODE_FUNC_IMPLEMENT
Packit 874993
Packit 874993
  hb_unicode_funcs_destroy (ufuncs->parent);
Packit 874993
Packit 874993
  free (ufuncs);
Packit 874993
}
Packit 874993
Packit 874993
/**
Packit 874993
 * hb_unicode_funcs_set_user_data: (skip)
Packit 874993
 * @ufuncs: Unicode functions.
Packit 874993
 * @key: 
Packit 874993
 * @data: 
Packit 874993
 * @destroy: 
Packit 874993
 * @replace: 
Packit 874993
 *
Packit 874993
 * 
Packit 874993
 *
Packit 874993
 * Return value: 
Packit 874993
 *
Packit 874993
 * Since: 0.9.2
Packit 874993
 **/
Packit 874993
hb_bool_t
Packit 874993
hb_unicode_funcs_set_user_data (hb_unicode_funcs_t *ufuncs,
Packit 874993
			        hb_user_data_key_t *key,
Packit 874993
			        void *              data,
Packit 874993
			        hb_destroy_func_t   destroy,
Packit 874993
				hb_bool_t           replace)
Packit 874993
{
Packit 874993
  return hb_object_set_user_data (ufuncs, key, data, destroy, replace);
Packit 874993
}
Packit 874993
Packit 874993
/**
Packit 874993
 * hb_unicode_funcs_get_user_data: (skip)
Packit 874993
 * @ufuncs: Unicode functions.
Packit 874993
 * @key: 
Packit 874993
 *
Packit 874993
 * 
Packit 874993
 *
Packit 874993
 * Return value: (transfer none):
Packit 874993
 *
Packit 874993
 * Since: 0.9.2
Packit 874993
 **/
Packit 874993
void *
Packit 874993
hb_unicode_funcs_get_user_data (hb_unicode_funcs_t *ufuncs,
Packit 874993
			        hb_user_data_key_t *key)
Packit 874993
{
Packit 874993
  return hb_object_get_user_data (ufuncs, key);
Packit 874993
}
Packit 874993
Packit 874993
Packit 874993
/**
Packit 874993
 * hb_unicode_funcs_make_immutable:
Packit 874993
 * @ufuncs: Unicode functions.
Packit 874993
 *
Packit 874993
 * 
Packit 874993
 *
Packit 874993
 * Since: 0.9.2
Packit 874993
 **/
Packit 874993
void
Packit 874993
hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs)
Packit 874993
{
Packit 874993
  if (unlikely (hb_object_is_inert (ufuncs)))
Packit 874993
    return;
Packit 874993
Packit 874993
  ufuncs->immutable = true;
Packit 874993
}
Packit 874993
Packit 874993
/**
Packit 874993
 * hb_unicode_funcs_is_immutable:
Packit 874993
 * @ufuncs: Unicode functions.
Packit 874993
 *
Packit 874993
 * 
Packit 874993
 *
Packit 874993
 * Return value: 
Packit 874993
 *
Packit 874993
 * Since: 0.9.2
Packit 874993
 **/
Packit 874993
hb_bool_t
Packit 874993
hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs)
Packit 874993
{
Packit 874993
  return ufuncs->immutable;
Packit 874993
}
Packit 874993
Packit 874993
/**
Packit 874993
 * hb_unicode_funcs_get_parent:
Packit 874993
 * @ufuncs: Unicode functions.
Packit 874993
 *
Packit 874993
 * 
Packit 874993
 *
Packit 874993
 * Return value: 
Packit 874993
 *
Packit 874993
 * Since: 0.9.2
Packit 874993
 **/
Packit 874993
hb_unicode_funcs_t *
Packit 874993
hb_unicode_funcs_get_parent (hb_unicode_funcs_t *ufuncs)
Packit 874993
{
Packit 874993
  return ufuncs->parent ? ufuncs->parent : hb_unicode_funcs_get_empty ();
Packit 874993
}
Packit 874993
Packit 874993
Packit 874993
#define HB_UNICODE_FUNC_IMPLEMENT(name)						\
Packit 874993
										\
Packit 874993
void										\
Packit 874993
hb_unicode_funcs_set_##name##_func (hb_unicode_funcs_t		   *ufuncs,	\
Packit 874993
				    hb_unicode_##name##_func_t	    func,	\
Packit 874993
				    void			   *user_data,	\
Packit 874993
				    hb_destroy_func_t		    destroy)	\
Packit 874993
{										\
Packit 874993
  if (ufuncs->immutable)							\
Packit 874993
    return;									\
Packit 874993
										\
Packit 874993
  if (ufuncs->destroy.name)							\
Packit 874993
    ufuncs->destroy.name (ufuncs->user_data.name);				\
Packit 874993
										\
Packit 874993
  if (func) {									\
Packit 874993
    ufuncs->func.name = func;							\
Packit 874993
    ufuncs->user_data.name = user_data;						\
Packit 874993
    ufuncs->destroy.name = destroy;						\
Packit 874993
  } else {									\
Packit 874993
    ufuncs->func.name = ufuncs->parent->func.name;				\
Packit 874993
    ufuncs->user_data.name = ufuncs->parent->user_data.name;			\
Packit 874993
    ufuncs->destroy.name = NULL;						\
Packit 874993
  }										\
Packit 874993
}
Packit 874993
Packit 874993
HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
Packit 874993
#undef HB_UNICODE_FUNC_IMPLEMENT
Packit 874993
Packit 874993
Packit 874993
#define HB_UNICODE_FUNC_IMPLEMENT(return_type, name)				\
Packit 874993
										\
Packit 874993
return_type									\
Packit 874993
hb_unicode_##name (hb_unicode_funcs_t *ufuncs,					\
Packit 874993
		   hb_codepoint_t      unicode)					\
Packit 874993
{										\
Packit 874993
  return ufuncs->name (unicode);						\
Packit 874993
}
Packit 874993
HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
Packit 874993
#undef HB_UNICODE_FUNC_IMPLEMENT
Packit 874993
Packit 874993
/**
Packit 874993
 * hb_unicode_compose:
Packit 874993
 * @ufuncs: Unicode functions.
Packit 874993
 * @a: 
Packit 874993
 * @b: 
Packit 874993
 * @ab: (out):
Packit 874993
 *
Packit 874993
 * 
Packit 874993
 *
Packit 874993
 * Return value: 
Packit 874993
 *
Packit 874993
 * Since: 0.9.2
Packit 874993
 **/
Packit 874993
hb_bool_t
Packit 874993
hb_unicode_compose (hb_unicode_funcs_t *ufuncs,
Packit 874993
		    hb_codepoint_t      a,
Packit 874993
		    hb_codepoint_t      b,
Packit 874993
		    hb_codepoint_t     *ab)
Packit 874993
{
Packit 874993
  return ufuncs->compose (a, b, ab);
Packit 874993
}
Packit 874993
Packit 874993
/**
Packit 874993
 * hb_unicode_decompose:
Packit 874993
 * @ufuncs: Unicode functions.
Packit 874993
 * @ab: 
Packit 874993
 * @a: (out):
Packit 874993
 * @b: (out):
Packit 874993
 *
Packit 874993
 * 
Packit 874993
 *
Packit 874993
 * Return value: 
Packit 874993
 *
Packit 874993
 * Since: 0.9.2
Packit 874993
 **/
Packit 874993
hb_bool_t
Packit 874993
hb_unicode_decompose (hb_unicode_funcs_t *ufuncs,
Packit 874993
		      hb_codepoint_t      ab,
Packit 874993
		      hb_codepoint_t     *a,
Packit 874993
		      hb_codepoint_t     *b)
Packit 874993
{
Packit 874993
  return ufuncs->decompose (ab, a, b);
Packit 874993
}
Packit 874993
Packit 874993
/**
Packit 874993
 * hb_unicode_decompose_compatibility:
Packit 874993
 * @ufuncs: Unicode functions.
Packit 874993
 * @u: 
Packit 874993
 * @decomposed: (out):
Packit 874993
 *
Packit 874993
 * 
Packit 874993
 *
Packit 874993
 * Return value: 
Packit 874993
 *
Packit 874993
 * Since: 0.9.2
Packit 874993
 **/
Packit 874993
unsigned int
Packit 874993
hb_unicode_decompose_compatibility (hb_unicode_funcs_t *ufuncs,
Packit 874993
				    hb_codepoint_t      u,
Packit 874993
				    hb_codepoint_t     *decomposed)
Packit 874993
{
Packit 874993
  return ufuncs->decompose_compatibility (u, decomposed);
Packit 874993
}
Packit 874993
Packit 874993
Packit 874993
/* See hb-unicode-private.hh for details. */
Packit 874993
const uint8_t
Packit 874993
_hb_modified_combining_class[256] =
Packit 874993
{
Packit 874993
  0, /* HB_UNICODE_COMBINING_CLASS_NOT_REORDERED */
Packit 874993
  1, /* HB_UNICODE_COMBINING_CLASS_OVERLAY */
Packit 874993
  2, 3, 4, 5, 6,
Packit 874993
  7, /* HB_UNICODE_COMBINING_CLASS_NUKTA */
Packit 874993
  8, /* HB_UNICODE_COMBINING_CLASS_KANA_VOICING */
Packit 874993
  9, /* HB_UNICODE_COMBINING_CLASS_VIRAMA */
Packit 874993
Packit 874993
  /* Hebrew */
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC10,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC11,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC12,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC13,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC14,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC15,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC16,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC17,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC18,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC19,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC20,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC21,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC22,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC23,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC24,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC25,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC26,
Packit 874993
Packit 874993
  /* Arabic */
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC27,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC28,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC29,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC30,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC31,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC32,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC33,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC34,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC35,
Packit 874993
Packit 874993
  /* Syriac */
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC36,
Packit 874993
Packit 874993
  37, 38, 39,
Packit 874993
  40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
Packit 874993
  60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
Packit 874993
  80, 81, 82, 83,
Packit 874993
Packit 874993
  /* Telugu */
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC84,
Packit 874993
  85, 86, 87, 88, 89, 90,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC91,
Packit 874993
  92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
Packit 874993
Packit 874993
  /* Thai */
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC103,
Packit 874993
  104, 105, 106,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC107,
Packit 874993
  108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
Packit 874993
Packit 874993
  /* Lao */
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC118,
Packit 874993
  119, 120, 121,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC122,
Packit 874993
  123, 124, 125, 126, 127, 128,
Packit 874993
Packit 874993
  /* Tibetan */
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC129,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC130,
Packit 874993
  131,
Packit 874993
  HB_MODIFIED_COMBINING_CLASS_CCC132,
Packit 874993
  133, 134, 135, 136, 137, 138, 139,
Packit 874993
Packit 874993
Packit 874993
  140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
Packit 874993
  150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
Packit 874993
  160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
Packit 874993
  170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
Packit 874993
  180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
Packit 874993
  190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
Packit 874993
Packit 874993
  200, /* HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT */
Packit 874993
  201,
Packit 874993
  202, /* HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW */
Packit 874993
  203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
Packit 874993
  214, /* HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE */
Packit 874993
  215,
Packit 874993
  216, /* HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT */
Packit 874993
  217,
Packit 874993
  218, /* HB_UNICODE_COMBINING_CLASS_BELOW_LEFT */
Packit 874993
  219,
Packit 874993
  220, /* HB_UNICODE_COMBINING_CLASS_BELOW */
Packit 874993
  221,
Packit 874993
  222, /* HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT */
Packit 874993
  223,
Packit 874993
  224, /* HB_UNICODE_COMBINING_CLASS_LEFT */
Packit 874993
  225,
Packit 874993
  226, /* HB_UNICODE_COMBINING_CLASS_RIGHT */
Packit 874993
  227,
Packit 874993
  228, /* HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT */
Packit 874993
  229,
Packit 874993
  230, /* HB_UNICODE_COMBINING_CLASS_ABOVE */
Packit 874993
  231,
Packit 874993
  232, /* HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT */
Packit 874993
  233, /* HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW */
Packit 874993
  234, /* HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE */
Packit 874993
  235, 236, 237, 238, 239,
Packit 874993
  240, /* HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT */
Packit 874993
  241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
Packit 874993
  255, /* HB_UNICODE_COMBINING_CLASS_INVALID */
Packit 874993
};