| Index: third_party/harfbuzz-ng/src/hb-unicode.c
 | 
| diff --git a/third_party/harfbuzz-ng/src/hb-unicode.c b/third_party/harfbuzz-ng/src/hb-unicode.c
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..2ab308b69004ac8a12518c94cdcbf79f6c77fb50
 | 
| --- /dev/null
 | 
| +++ b/third_party/harfbuzz-ng/src/hb-unicode.c
 | 
| @@ -0,0 +1,364 @@
 | 
| +/*
 | 
| + * Copyright (C) 2009  Red Hat, Inc.
 | 
| + *
 | 
| + *  This is part of HarfBuzz, a text shaping library.
 | 
| + *
 | 
| + * Permission is hereby granted, without written agreement and without
 | 
| + * license or royalty fees, to use, copy, modify, and distribute this
 | 
| + * software and its documentation for any purpose, provided that the
 | 
| + * above copyright notice and the following two paragraphs appear in
 | 
| + * all copies of this software.
 | 
| + *
 | 
| + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
 | 
| + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
 | 
| + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
 | 
| + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 | 
| + * DAMAGE.
 | 
| + *
 | 
| + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
 | 
| + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 | 
| + * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 | 
| + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
 | 
| + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 | 
| + *
 | 
| + * Red Hat Author(s): Behdad Esfahbod
 | 
| + */
 | 
| +
 | 
| +#include "hb-private.h"
 | 
| +
 | 
| +#include "hb-unicode-private.h"
 | 
| +
 | 
| +HB_BEGIN_DECLS
 | 
| +
 | 
| +
 | 
| +/*
 | 
| + * hb_unicode_funcs_t
 | 
| + */
 | 
| +
 | 
| +static hb_codepoint_t hb_unicode_get_mirroring_nil (hb_codepoint_t unicode) { return unicode; }
 | 
| +static hb_category_t hb_unicode_get_general_category_nil (hb_codepoint_t unicode HB_UNUSED) { return HB_CATEGORY_OTHER_LETTER; }
 | 
| +static hb_script_t hb_unicode_get_script_nil (hb_codepoint_t unicode HB_UNUSED) { return HB_SCRIPT_UNKNOWN; }
 | 
| +static unsigned int hb_unicode_get_combining_class_nil (hb_codepoint_t unicode HB_UNUSED) { return 0; }
 | 
| +static unsigned int hb_unicode_get_eastasian_width_nil (hb_codepoint_t unicode HB_UNUSED) { return 1; }
 | 
| +
 | 
| +hb_unicode_funcs_t _hb_unicode_funcs_nil = {
 | 
| +  HB_REFERENCE_COUNT_INVALID, /* ref_count */
 | 
| +  TRUE, /* immutable */
 | 
| +  {
 | 
| +    hb_unicode_get_general_category_nil,
 | 
| +    hb_unicode_get_combining_class_nil,
 | 
| +    hb_unicode_get_mirroring_nil,
 | 
| +    hb_unicode_get_script_nil,
 | 
| +    hb_unicode_get_eastasian_width_nil
 | 
| +  }
 | 
| +};
 | 
| +
 | 
| +hb_unicode_funcs_t *
 | 
| +hb_unicode_funcs_create (void)
 | 
| +{
 | 
| +  hb_unicode_funcs_t *ufuncs;
 | 
| +
 | 
| +  if (!HB_OBJECT_DO_CREATE (hb_unicode_funcs_t, ufuncs))
 | 
| +    return &_hb_unicode_funcs_nil;
 | 
| +
 | 
| +  ufuncs->v = _hb_unicode_funcs_nil.v;
 | 
| +
 | 
| +  return ufuncs;
 | 
| +}
 | 
| +
 | 
| +hb_unicode_funcs_t *
 | 
| +hb_unicode_funcs_reference (hb_unicode_funcs_t *ufuncs)
 | 
| +{
 | 
| +  HB_OBJECT_DO_REFERENCE (ufuncs);
 | 
| +}
 | 
| +
 | 
| +unsigned int
 | 
| +hb_unicode_funcs_get_reference_count (hb_unicode_funcs_t *ufuncs)
 | 
| +{
 | 
| +  HB_OBJECT_DO_GET_REFERENCE_COUNT (ufuncs);
 | 
| +}
 | 
| +
 | 
| +void
 | 
| +hb_unicode_funcs_destroy (hb_unicode_funcs_t *ufuncs)
 | 
| +{
 | 
| +  HB_OBJECT_DO_DESTROY (ufuncs);
 | 
| +
 | 
| +  free (ufuncs);
 | 
| +}
 | 
| +
 | 
| +hb_unicode_funcs_t *
 | 
| +hb_unicode_funcs_copy (hb_unicode_funcs_t *other_ufuncs)
 | 
| +{
 | 
| +  hb_unicode_funcs_t *ufuncs;
 | 
| +
 | 
| +  if (!HB_OBJECT_DO_CREATE (hb_unicode_funcs_t, ufuncs))
 | 
| +    return &_hb_unicode_funcs_nil;
 | 
| +
 | 
| +  ufuncs->v = other_ufuncs->v;
 | 
| +
 | 
| +  return ufuncs;
 | 
| +}
 | 
| +
 | 
| +void
 | 
| +hb_unicode_funcs_make_immutable (hb_unicode_funcs_t *ufuncs)
 | 
| +{
 | 
| +  if (HB_OBJECT_IS_INERT (ufuncs))
 | 
| +    return;
 | 
| +
 | 
| +  ufuncs->immutable = TRUE;
 | 
| +}
 | 
| +
 | 
| +hb_bool_t
 | 
| +hb_unicode_funcs_is_immutable (hb_unicode_funcs_t *ufuncs)
 | 
| +{
 | 
| +  return ufuncs->immutable;
 | 
| +}
 | 
| +
 | 
| +
 | 
| +void
 | 
| +hb_unicode_funcs_set_mirroring_func (hb_unicode_funcs_t *ufuncs,
 | 
| +				     hb_unicode_get_mirroring_func_t mirroring_func)
 | 
| +{
 | 
| +  if (ufuncs->immutable)
 | 
| +    return;
 | 
| +
 | 
| +  ufuncs->v.get_mirroring = mirroring_func ? mirroring_func : hb_unicode_get_mirroring_nil;
 | 
| +}
 | 
| +
 | 
| +void
 | 
| +hb_unicode_funcs_set_general_category_func (hb_unicode_funcs_t *ufuncs,
 | 
| +					    hb_unicode_get_general_category_func_t general_category_func)
 | 
| +{
 | 
| +  if (ufuncs->immutable)
 | 
| +    return;
 | 
| +
 | 
| +  ufuncs->v.get_general_category = general_category_func ? general_category_func : hb_unicode_get_general_category_nil;
 | 
| +}
 | 
| +
 | 
| +void
 | 
| +hb_unicode_funcs_set_script_func (hb_unicode_funcs_t *ufuncs,
 | 
| +				  hb_unicode_get_script_func_t script_func)
 | 
| +{
 | 
| +  if (ufuncs->immutable)
 | 
| +    return;
 | 
| +
 | 
| +  ufuncs->v.get_script = script_func ? script_func : hb_unicode_get_script_nil;
 | 
| +}
 | 
| +
 | 
| +void
 | 
| +hb_unicode_funcs_set_combining_class_func (hb_unicode_funcs_t *ufuncs,
 | 
| +					   hb_unicode_get_combining_class_func_t combining_class_func)
 | 
| +{
 | 
| +  if (ufuncs->immutable)
 | 
| +    return;
 | 
| +
 | 
| +  ufuncs->v.get_combining_class = combining_class_func ? combining_class_func : hb_unicode_get_combining_class_nil;
 | 
| +}
 | 
| +
 | 
| +void
 | 
| +hb_unicode_funcs_set_eastasian_width_func (hb_unicode_funcs_t *ufuncs,
 | 
| +					   hb_unicode_get_eastasian_width_func_t eastasian_width_func)
 | 
| +{
 | 
| +  if (ufuncs->immutable)
 | 
| +    return;
 | 
| +
 | 
| +  ufuncs->v.get_eastasian_width = eastasian_width_func ? eastasian_width_func : hb_unicode_get_eastasian_width_nil;
 | 
| +}
 | 
| +
 | 
| +
 | 
| +hb_unicode_get_mirroring_func_t
 | 
| +hb_unicode_funcs_get_mirroring_func (hb_unicode_funcs_t *ufuncs)
 | 
| +{
 | 
| +  return ufuncs->v.get_mirroring;
 | 
| +}
 | 
| +
 | 
| +hb_unicode_get_general_category_func_t
 | 
| +hb_unicode_funcs_get_general_category_func (hb_unicode_funcs_t *ufuncs)
 | 
| +{
 | 
| +  return ufuncs->v.get_general_category;
 | 
| +}
 | 
| +
 | 
| +hb_unicode_get_script_func_t
 | 
| +hb_unicode_funcs_get_script_func (hb_unicode_funcs_t *ufuncs)
 | 
| +{
 | 
| +  return ufuncs->v.get_script;
 | 
| +}
 | 
| +
 | 
| +hb_unicode_get_combining_class_func_t
 | 
| +hb_unicode_funcs_get_combining_class_func (hb_unicode_funcs_t *ufuncs)
 | 
| +{
 | 
| +  return ufuncs->v.get_combining_class;
 | 
| +}
 | 
| +
 | 
| +hb_unicode_get_eastasian_width_func_t
 | 
| +hb_unicode_funcs_get_eastasian_width_func (hb_unicode_funcs_t *ufuncs)
 | 
| +{
 | 
| +  return ufuncs->v.get_eastasian_width;
 | 
| +}
 | 
| +
 | 
| +
 | 
| +
 | 
| +hb_codepoint_t
 | 
| +hb_unicode_get_mirroring (hb_unicode_funcs_t *ufuncs,
 | 
| +			  hb_codepoint_t unicode)
 | 
| +{
 | 
| +  return ufuncs->v.get_mirroring (unicode);
 | 
| +}
 | 
| +
 | 
| +hb_category_t
 | 
| +hb_unicode_get_general_category (hb_unicode_funcs_t *ufuncs,
 | 
| +				 hb_codepoint_t unicode)
 | 
| +{
 | 
| +  return ufuncs->v.get_general_category (unicode);
 | 
| +}
 | 
| +
 | 
| +hb_script_t
 | 
| +hb_unicode_get_script (hb_unicode_funcs_t *ufuncs,
 | 
| +		       hb_codepoint_t unicode)
 | 
| +{
 | 
| +  return ufuncs->v.get_script (unicode);
 | 
| +}
 | 
| +
 | 
| +unsigned int
 | 
| +hb_unicode_get_combining_class (hb_unicode_funcs_t *ufuncs,
 | 
| +				hb_codepoint_t unicode)
 | 
| +{
 | 
| +  return ufuncs->v.get_combining_class (unicode);
 | 
| +}
 | 
| +
 | 
| +unsigned int
 | 
| +hb_unicode_get_eastasian_width (hb_unicode_funcs_t *ufuncs,
 | 
| +				hb_codepoint_t unicode)
 | 
| +{
 | 
| +  return ufuncs->v.get_eastasian_width (unicode);
 | 
| +}
 | 
| +
 | 
| +
 | 
| +
 | 
| +#define LTR HB_DIRECTION_LTR
 | 
| +#define RTL HB_DIRECTION_RTL
 | 
| +const hb_direction_t horiz_dir[] =
 | 
| +{
 | 
| +  LTR,	/* Zyyy */
 | 
| +  LTR,	/* Qaai */
 | 
| +  RTL,	/* Arab */
 | 
| +  LTR,	/* Armn */
 | 
| +  LTR,	/* Beng */
 | 
| +  LTR,	/* Bopo */
 | 
| +  LTR,	/* Cher */
 | 
| +  LTR,	/* Qaac */
 | 
| +  LTR,	/* Cyrl (Cyrs) */
 | 
| +  LTR,	/* Dsrt */
 | 
| +  LTR,	/* Deva */
 | 
| +  LTR,	/* Ethi */
 | 
| +  LTR,	/* Geor (Geon, Geoa) */
 | 
| +  LTR,	/* Goth */
 | 
| +  LTR,	/* Grek */
 | 
| +  LTR,	/* Gujr */
 | 
| +  LTR,	/* Guru */
 | 
| +  LTR,	/* Hani */
 | 
| +  LTR,	/* Hang */
 | 
| +  RTL,	/* Hebr */
 | 
| +  LTR,	/* Hira */
 | 
| +  LTR,	/* Knda */
 | 
| +  LTR,	/* Kana */
 | 
| +  LTR,	/* Khmr */
 | 
| +  LTR,	/* Laoo */
 | 
| +  LTR,	/* Latn (Latf, Latg) */
 | 
| +  LTR,	/* Mlym */
 | 
| +  LTR,	/* Mong */
 | 
| +  LTR,	/* Mymr */
 | 
| +  LTR,	/* Ogam */
 | 
| +  LTR,	/* Ital */
 | 
| +  LTR,	/* Orya */
 | 
| +  LTR,	/* Runr */
 | 
| +  LTR,	/* Sinh */
 | 
| +  RTL,	/* Syrc (Syrj, Syrn, Syre) */
 | 
| +  LTR,	/* Taml */
 | 
| +  LTR,	/* Telu */
 | 
| +  RTL,	/* Thaa */
 | 
| +  LTR,	/* Thai */
 | 
| +  LTR,	/* Tibt */
 | 
| +  LTR,	/* Cans */
 | 
| +  LTR,	/* Yiii */
 | 
| +  LTR,	/* Tglg */
 | 
| +  LTR,	/* Hano */
 | 
| +  LTR,	/* Buhd */
 | 
| +  LTR,	/* Tagb */
 | 
| +
 | 
| +  /* Unicode-4.0 additions */
 | 
| +  LTR,	/* Brai */
 | 
| +  RTL,	/* Cprt */
 | 
| +  LTR,	/* Limb */
 | 
| +  LTR,	/* Osma */
 | 
| +  LTR,	/* Shaw */
 | 
| +  LTR,	/* Linb */
 | 
| +  LTR,	/* Tale */
 | 
| +  LTR,	/* Ugar */
 | 
| +
 | 
| +  /* Unicode-4.1 additions */
 | 
| +  LTR,	/* Talu */
 | 
| +  LTR,	/* Bugi */
 | 
| +  LTR,	/* Glag */
 | 
| +  LTR,	/* Tfng */
 | 
| +  LTR,	/* Sylo */
 | 
| +  LTR,	/* Xpeo */
 | 
| +  LTR,	/* Khar */
 | 
| +
 | 
| +  /* Unicode-5.0 additions */
 | 
| +  LTR,	/* Zzzz */
 | 
| +  LTR,	/* Bali */
 | 
| +  LTR,	/* Xsux */
 | 
| +  RTL,	/* Phnx */
 | 
| +  LTR,	/* Phag */
 | 
| +  RTL,	/* Nkoo */
 | 
| +
 | 
| +  /* Unicode-5.1 additions */
 | 
| +  LTR,	/* Kali */
 | 
| +  LTR,	/* Lepc */
 | 
| +  LTR,	/* Rjng */
 | 
| +  LTR,	/* Sund */
 | 
| +  LTR,	/* Saur */
 | 
| +  LTR,	/* Cham */
 | 
| +  LTR,	/* Olck */
 | 
| +  LTR,	/* Vaii */
 | 
| +  LTR,	/* Cari */
 | 
| +  LTR,	/* Lyci */
 | 
| +  LTR,	/* Lydi */
 | 
| +
 | 
| +  /* Unicode-5.2 additions */
 | 
| +  RTL,	/* Avst */
 | 
| +  LTR,	/* Bamu */
 | 
| +  LTR,	/* Egyp */
 | 
| +  RTL,	/* Armi */
 | 
| +  RTL,	/* Phli */
 | 
| +  RTL,	/* Prti */
 | 
| +  LTR,	/* Java */
 | 
| +  LTR,	/* Kthi */
 | 
| +  LTR,	/* Lisu */
 | 
| +  LTR,	/* Mtei */
 | 
| +  RTL,	/* Sarb */
 | 
| +  RTL,	/* Orkh */
 | 
| +  RTL,	/* Samr */
 | 
| +  LTR,	/* Lana */
 | 
| +  LTR,	/* Tavt */
 | 
| +
 | 
| +  /* Unicode-6.0 additions */
 | 
| +  LTR,	/* Batk */
 | 
| +  LTR,	/* Brah */
 | 
| +  RTL 	/* Mand */
 | 
| +};
 | 
| +#undef LTR
 | 
| +#undef RTL
 | 
| +
 | 
| +hb_direction_t
 | 
| +_hb_script_get_horizontal_direction (hb_script_t script)
 | 
| +{
 | 
| +  if (unlikely ((unsigned int) script >= ARRAY_LENGTH (horiz_dir)))
 | 
| +    return HB_DIRECTION_LTR;
 | 
| +
 | 
| +  return horiz_dir[script];
 | 
| +}
 | 
| +
 | 
| +
 | 
| +HB_END_DECLS
 | 
| 
 |