gfx/harfbuzz/src/hb-ucdn.cc

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/gfx/harfbuzz/src/hb-ucdn.cc	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,208 @@
     1.4 +/*
     1.5 + * Copyright (C) 2012 Grigori Goronzy <greg@kinoho.net>
     1.6 + *
     1.7 + * Permission to use, copy, modify, and/or distribute this software for any
     1.8 + * purpose with or without fee is hereby granted, provided that the above
     1.9 + * copyright notice and this permission notice appear in all copies.
    1.10 + *
    1.11 + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    1.12 + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    1.13 + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    1.14 + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    1.15 + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    1.16 + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    1.17 + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    1.18 + */
    1.19 +
    1.20 +#include "hb-private.hh"
    1.21 +
    1.22 +#include "hb-unicode-private.hh"
    1.23 +
    1.24 +#include "ucdn.h"
    1.25 +
    1.26 +static const hb_script_t ucdn_script_translate[] =
    1.27 +{
    1.28 +    HB_SCRIPT_COMMON,
    1.29 +    HB_SCRIPT_LATIN,
    1.30 +    HB_SCRIPT_GREEK,
    1.31 +    HB_SCRIPT_CYRILLIC,
    1.32 +    HB_SCRIPT_ARMENIAN,
    1.33 +    HB_SCRIPT_HEBREW,
    1.34 +    HB_SCRIPT_ARABIC,
    1.35 +    HB_SCRIPT_SYRIAC,
    1.36 +    HB_SCRIPT_THAANA,
    1.37 +    HB_SCRIPT_DEVANAGARI,
    1.38 +    HB_SCRIPT_BENGALI,
    1.39 +    HB_SCRIPT_GURMUKHI,
    1.40 +    HB_SCRIPT_GUJARATI,
    1.41 +    HB_SCRIPT_ORIYA,
    1.42 +    HB_SCRIPT_TAMIL,
    1.43 +    HB_SCRIPT_TELUGU,
    1.44 +    HB_SCRIPT_KANNADA,
    1.45 +    HB_SCRIPT_MALAYALAM,
    1.46 +    HB_SCRIPT_SINHALA,
    1.47 +    HB_SCRIPT_THAI,
    1.48 +    HB_SCRIPT_LAO,
    1.49 +    HB_SCRIPT_TIBETAN,
    1.50 +    HB_SCRIPT_MYANMAR,
    1.51 +    HB_SCRIPT_GEORGIAN,
    1.52 +    HB_SCRIPT_HANGUL,
    1.53 +    HB_SCRIPT_ETHIOPIC,
    1.54 +    HB_SCRIPT_CHEROKEE,
    1.55 +    HB_SCRIPT_CANADIAN_SYLLABICS,
    1.56 +    HB_SCRIPT_OGHAM,
    1.57 +    HB_SCRIPT_RUNIC,
    1.58 +    HB_SCRIPT_KHMER,
    1.59 +    HB_SCRIPT_MONGOLIAN,
    1.60 +    HB_SCRIPT_HIRAGANA,
    1.61 +    HB_SCRIPT_KATAKANA,
    1.62 +    HB_SCRIPT_BOPOMOFO,
    1.63 +    HB_SCRIPT_HAN,
    1.64 +    HB_SCRIPT_YI,
    1.65 +    HB_SCRIPT_OLD_ITALIC,
    1.66 +    HB_SCRIPT_GOTHIC,
    1.67 +    HB_SCRIPT_DESERET,
    1.68 +    HB_SCRIPT_INHERITED,
    1.69 +    HB_SCRIPT_TAGALOG,
    1.70 +    HB_SCRIPT_HANUNOO,
    1.71 +    HB_SCRIPT_BUHID,
    1.72 +    HB_SCRIPT_TAGBANWA,
    1.73 +    HB_SCRIPT_LIMBU,
    1.74 +    HB_SCRIPT_TAI_LE,
    1.75 +    HB_SCRIPT_LINEAR_B,
    1.76 +    HB_SCRIPT_UGARITIC,
    1.77 +    HB_SCRIPT_SHAVIAN,
    1.78 +    HB_SCRIPT_OSMANYA,
    1.79 +    HB_SCRIPT_CYPRIOT,
    1.80 +    HB_SCRIPT_BRAILLE,
    1.81 +    HB_SCRIPT_BUGINESE,
    1.82 +    HB_SCRIPT_COPTIC,
    1.83 +    HB_SCRIPT_NEW_TAI_LUE,
    1.84 +    HB_SCRIPT_GLAGOLITIC,
    1.85 +    HB_SCRIPT_TIFINAGH,
    1.86 +    HB_SCRIPT_SYLOTI_NAGRI,
    1.87 +    HB_SCRIPT_OLD_PERSIAN,
    1.88 +    HB_SCRIPT_KHAROSHTHI,
    1.89 +    HB_SCRIPT_BALINESE,
    1.90 +    HB_SCRIPT_CUNEIFORM,
    1.91 +    HB_SCRIPT_PHOENICIAN,
    1.92 +    HB_SCRIPT_PHAGS_PA,
    1.93 +    HB_SCRIPT_NKO,
    1.94 +    HB_SCRIPT_SUNDANESE,
    1.95 +    HB_SCRIPT_LEPCHA,
    1.96 +    HB_SCRIPT_OL_CHIKI,
    1.97 +    HB_SCRIPT_VAI,
    1.98 +    HB_SCRIPT_SAURASHTRA,
    1.99 +    HB_SCRIPT_KAYAH_LI,
   1.100 +    HB_SCRIPT_REJANG,
   1.101 +    HB_SCRIPT_LYCIAN,
   1.102 +    HB_SCRIPT_CARIAN,
   1.103 +    HB_SCRIPT_LYDIAN,
   1.104 +    HB_SCRIPT_CHAM,
   1.105 +    HB_SCRIPT_TAI_THAM,
   1.106 +    HB_SCRIPT_TAI_VIET,
   1.107 +    HB_SCRIPT_AVESTAN,
   1.108 +    HB_SCRIPT_EGYPTIAN_HIEROGLYPHS,
   1.109 +    HB_SCRIPT_SAMARITAN,
   1.110 +    HB_SCRIPT_LISU,
   1.111 +    HB_SCRIPT_BAMUM,
   1.112 +    HB_SCRIPT_JAVANESE,
   1.113 +    HB_SCRIPT_MEETEI_MAYEK,
   1.114 +    HB_SCRIPT_IMPERIAL_ARAMAIC,
   1.115 +    HB_SCRIPT_OLD_SOUTH_ARABIAN,
   1.116 +    HB_SCRIPT_INSCRIPTIONAL_PARTHIAN,
   1.117 +    HB_SCRIPT_INSCRIPTIONAL_PAHLAVI,
   1.118 +    HB_SCRIPT_OLD_TURKIC,
   1.119 +    HB_SCRIPT_KAITHI,
   1.120 +    HB_SCRIPT_BATAK,
   1.121 +    HB_SCRIPT_BRAHMI,
   1.122 +    HB_SCRIPT_MANDAIC,
   1.123 +    HB_SCRIPT_CHAKMA,
   1.124 +    HB_SCRIPT_MEROITIC_CURSIVE,
   1.125 +    HB_SCRIPT_MEROITIC_HIEROGLYPHS,
   1.126 +    HB_SCRIPT_MIAO,
   1.127 +    HB_SCRIPT_SHARADA,
   1.128 +    HB_SCRIPT_SORA_SOMPENG,
   1.129 +    HB_SCRIPT_TAKRI,
   1.130 +    HB_SCRIPT_UNKNOWN,
   1.131 +};
   1.132 +
   1.133 +static hb_unicode_combining_class_t
   1.134 +hb_ucdn_combining_class(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
   1.135 +			void *user_data HB_UNUSED)
   1.136 +{
   1.137 +    return (hb_unicode_combining_class_t) ucdn_get_combining_class(unicode);
   1.138 +}
   1.139 +
   1.140 +static unsigned int
   1.141 +hb_ucdn_eastasian_width(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
   1.142 +			void *user_data HB_UNUSED)
   1.143 +{
   1.144 +    int w = ucdn_get_east_asian_width(unicode);
   1.145 +    return (w == UCDN_EAST_ASIAN_F || w == UCDN_EAST_ASIAN_W) ? 2 : 1;
   1.146 +}
   1.147 +
   1.148 +static hb_unicode_general_category_t
   1.149 +hb_ucdn_general_category(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
   1.150 +			 void *user_data HB_UNUSED)
   1.151 +{
   1.152 +    return (hb_unicode_general_category_t)ucdn_get_general_category(unicode);
   1.153 +}
   1.154 +
   1.155 +static hb_codepoint_t
   1.156 +hb_ucdn_mirroring(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
   1.157 +		  void *user_data HB_UNUSED)
   1.158 +{
   1.159 +    return ucdn_mirror(unicode);
   1.160 +}
   1.161 +
   1.162 +static hb_script_t
   1.163 +hb_ucdn_script(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
   1.164 +	       void *user_data HB_UNUSED)
   1.165 +{
   1.166 +    return ucdn_script_translate[ucdn_get_script(unicode)];
   1.167 +}
   1.168 +
   1.169 +static hb_bool_t
   1.170 +hb_ucdn_compose(hb_unicode_funcs_t *ufuncs,
   1.171 +		hb_codepoint_t a, hb_codepoint_t b, hb_codepoint_t *ab,
   1.172 +		void *user_data HB_UNUSED)
   1.173 +{
   1.174 +    return ucdn_compose(ab, a, b);
   1.175 +}
   1.176 +
   1.177 +static hb_bool_t
   1.178 +hb_ucdn_decompose(hb_unicode_funcs_t *ufuncs,
   1.179 +		  hb_codepoint_t ab, hb_codepoint_t *a, hb_codepoint_t *b,
   1.180 +		  void *user_data HB_UNUSED)
   1.181 +{
   1.182 +    return ucdn_decompose(ab, a, b);
   1.183 +}
   1.184 +
   1.185 +static unsigned int
   1.186 +hb_ucdn_decompose_compatibility(hb_unicode_funcs_t *ufuncs,
   1.187 +				hb_codepoint_t u, hb_codepoint_t *decomposed,
   1.188 +				void *user_data HB_UNUSED)
   1.189 +{
   1.190 +    return ucdn_compat_decompose(u, decomposed);
   1.191 +}
   1.192 +
   1.193 +extern "C" HB_INTERNAL
   1.194 +hb_unicode_funcs_t *
   1.195 +hb_ucdn_get_unicode_funcs (void)
   1.196 +{
   1.197 +  static const hb_unicode_funcs_t _hb_ucdn_unicode_funcs = {
   1.198 +    HB_OBJECT_HEADER_STATIC,
   1.199 +
   1.200 +    NULL, /* parent */
   1.201 +    true, /* immutable */
   1.202 +    {
   1.203 +#define HB_UNICODE_FUNC_IMPLEMENT(name) hb_ucdn_##name,
   1.204 +      HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS
   1.205 +#undef HB_UNICODE_FUNC_IMPLEMENT
   1.206 +    }
   1.207 +  };
   1.208 +
   1.209 +  return const_cast<hb_unicode_funcs_t *> (&_hb_ucdn_unicode_funcs);
   1.210 +}
   1.211 +

mercurial