summaryrefslogtreecommitdiff
path: root/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucd.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucd.cc')
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucd.cc248
1 files changed, 0 insertions, 248 deletions
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucd.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucd.cc
deleted file mode 100644
index ad72a26c04c..00000000000
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucd.cc
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (C) 2012 Grigori Goronzy <greg@kinoho.net>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "hb.hh"
-#include "hb-unicode.hh"
-#include "hb-machinery.hh"
-
-#include "hb-ucd-table.hh"
-
-static hb_unicode_combining_class_t
-hb_ucd_combining_class (hb_unicode_funcs_t *ufuncs HB_UNUSED,
- hb_codepoint_t unicode,
- void *user_data HB_UNUSED)
-{
- return (hb_unicode_combining_class_t) _hb_ucd_ccc (unicode);
-}
-
-static hb_unicode_general_category_t
-hb_ucd_general_category (hb_unicode_funcs_t *ufuncs HB_UNUSED,
- hb_codepoint_t unicode,
- void *user_data HB_UNUSED)
-{
- return (hb_unicode_general_category_t) _hb_ucd_gc (unicode);
-}
-
-static hb_codepoint_t
-hb_ucd_mirroring (hb_unicode_funcs_t *ufuncs HB_UNUSED,
- hb_codepoint_t unicode,
- void *user_data HB_UNUSED)
-{
- return unicode + _hb_ucd_bmg (unicode);
-}
-
-static hb_script_t
-hb_ucd_script (hb_unicode_funcs_t *ufuncs HB_UNUSED,
- hb_codepoint_t unicode,
- void *user_data HB_UNUSED)
-{
- return _hb_ucd_sc_map[_hb_ucd_sc (unicode)];
-}
-
-
-#define SBASE 0xAC00u
-#define LBASE 0x1100u
-#define VBASE 0x1161u
-#define TBASE 0x11A7u
-#define SCOUNT 11172u
-#define LCOUNT 19u
-#define VCOUNT 21u
-#define TCOUNT 28u
-#define NCOUNT (VCOUNT * TCOUNT)
-
-static inline bool
-_hb_ucd_decompose_hangul (hb_codepoint_t ab, hb_codepoint_t *a, hb_codepoint_t *b)
-{
- unsigned si = ab - SBASE;
-
- if (si >= SCOUNT)
- return false;
-
- if (si % TCOUNT)
- {
- /* LV,T */
- *a = SBASE + (si / TCOUNT) * TCOUNT;
- *b = TBASE + (si % TCOUNT);
- return true;
- } else {
- /* L,V */
- *a = LBASE + (si / NCOUNT);
- *b = VBASE + (si % NCOUNT) / TCOUNT;
- return true;
- }
-}
-
-static inline bool
-_hb_ucd_compose_hangul (hb_codepoint_t a, hb_codepoint_t b, hb_codepoint_t *ab)
-{
- if (a >= SBASE && a < (SBASE + SCOUNT) && b > TBASE && b < (TBASE + TCOUNT) &&
- !((a - SBASE) % TCOUNT))
- {
- /* LV,T */
- *ab = a + (b - TBASE);
- return true;
- }
- else if (a >= LBASE && a < (LBASE + LCOUNT) && b >= VBASE && b < (VBASE + VCOUNT))
- {
- /* L,V */
- int li = a - LBASE;
- int vi = b - VBASE;
- *ab = SBASE + li * NCOUNT + vi * TCOUNT;
- return true;
- }
- else
- return false;
-}
-
-static int
-_cmp_pair (const void *_key, const void *_item)
-{
- uint64_t& a = * (uint64_t*) _key;
- uint64_t b = (* (uint64_t*) _item) & HB_CODEPOINT_ENCODE3(0x1FFFFFu, 0x1FFFFFu, 0);
-
- return a < b ? -1 : a > b ? +1 : 0;
-}
-static int
-_cmp_pair_11_7_14 (const void *_key, const void *_item)
-{
- uint32_t& a = * (uint32_t*) _key;
- uint32_t b = (* (uint32_t*) _item) & HB_CODEPOINT_ENCODE3_11_7_14(0x1FFFFFu, 0x1FFFFFu, 0);
-
- return a < b ? -1 : a > b ? +1 : 0;
-}
-
-static hb_bool_t
-hb_ucd_compose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
- hb_codepoint_t a, hb_codepoint_t b, hb_codepoint_t *ab,
- void *user_data HB_UNUSED)
-{
- if (_hb_ucd_compose_hangul (a, b, ab)) return true;
-
- hb_codepoint_t u = 0;
-
- if ((a & 0xFFFFF800u) == 0x0000u && (b & 0xFFFFFF80) == 0x0300u)
- {
- uint32_t k = HB_CODEPOINT_ENCODE3_11_7_14 (a, b, 0);
- const uint32_t *v = hb_bsearch (k,
- _hb_ucd_dm2_u32_map,
- ARRAY_LENGTH (_hb_ucd_dm2_u32_map),
- sizeof (*_hb_ucd_dm2_u32_map),
- _cmp_pair_11_7_14);
- if (likely (!v)) return false;
- u = HB_CODEPOINT_DECODE3_11_7_14_3 (*v);
- }
- else
- {
- uint64_t k = HB_CODEPOINT_ENCODE3 (a, b, 0);
- const uint64_t *v = hb_bsearch (k,
- _hb_ucd_dm2_u64_map,
- ARRAY_LENGTH (_hb_ucd_dm2_u64_map),
- sizeof (*_hb_ucd_dm2_u64_map),
- _cmp_pair);
- if (likely (!v)) return false;
- u = HB_CODEPOINT_DECODE3_3 (*v);
- }
-
- if (unlikely (!u)) return false;
- *ab = u;
- return true;
-}
-
-static hb_bool_t
-hb_ucd_decompose (hb_unicode_funcs_t *ufuncs HB_UNUSED,
- hb_codepoint_t ab, hb_codepoint_t *a, hb_codepoint_t *b,
- void *user_data HB_UNUSED)
-{
- if (_hb_ucd_decompose_hangul (ab, a, b)) return true;
-
- unsigned i = _hb_ucd_dm (ab);
-
- if (likely (!i)) return false;
- i--;
-
- if (i < ARRAY_LENGTH (_hb_ucd_dm1_p0_map) + ARRAY_LENGTH (_hb_ucd_dm1_p2_map))
- {
- if (i < ARRAY_LENGTH (_hb_ucd_dm1_p0_map))
- *a = _hb_ucd_dm1_p0_map[i];
- else
- {
- i -= ARRAY_LENGTH (_hb_ucd_dm1_p0_map);
- *a = 0x20000 | _hb_ucd_dm1_p2_map[i];
- }
- *b = 0;
- return true;
- }
- i -= ARRAY_LENGTH (_hb_ucd_dm1_p0_map) + ARRAY_LENGTH (_hb_ucd_dm1_p2_map);
-
- if (i < ARRAY_LENGTH (_hb_ucd_dm2_u32_map))
- {
- uint32_t v = _hb_ucd_dm2_u32_map[i];
- *a = HB_CODEPOINT_DECODE3_11_7_14_1 (v);
- *b = HB_CODEPOINT_DECODE3_11_7_14_2 (v);
- return true;
- }
- i -= ARRAY_LENGTH (_hb_ucd_dm2_u32_map);
-
- uint64_t v = _hb_ucd_dm2_u64_map[i];
- *a = HB_CODEPOINT_DECODE3_1 (v);
- *b = HB_CODEPOINT_DECODE3_2 (v);
- return true;
-}
-
-
-#if HB_USE_ATEXIT
-static void free_static_ucd_funcs ();
-#endif
-
-static struct hb_ucd_unicode_funcs_lazy_loader_t : hb_unicode_funcs_lazy_loader_t<hb_ucd_unicode_funcs_lazy_loader_t>
-{
- static hb_unicode_funcs_t *create ()
- {
- hb_unicode_funcs_t *funcs = hb_unicode_funcs_create (nullptr);
-
- hb_unicode_funcs_set_combining_class_func (funcs, hb_ucd_combining_class, nullptr, nullptr);
- hb_unicode_funcs_set_general_category_func (funcs, hb_ucd_general_category, nullptr, nullptr);
- hb_unicode_funcs_set_mirroring_func (funcs, hb_ucd_mirroring, nullptr, nullptr);
- hb_unicode_funcs_set_script_func (funcs, hb_ucd_script, nullptr, nullptr);
- hb_unicode_funcs_set_compose_func (funcs, hb_ucd_compose, nullptr, nullptr);
- hb_unicode_funcs_set_decompose_func (funcs, hb_ucd_decompose, nullptr, nullptr);
-
- hb_unicode_funcs_make_immutable (funcs);
-
-#if HB_USE_ATEXIT
- atexit (free_static_ucd_funcs);
-#endif
-
- return funcs;
- }
-} static_ucd_funcs;
-
-#if HB_USE_ATEXIT
-static
-void free_static_ucd_funcs ()
-{
- static_ucd_funcs.free_instance ();
-}
-#endif
-
-hb_unicode_funcs_t *
-hb_ucd_get_unicode_funcs ()
-{
-#ifdef HB_NO_UCD
- return hb_unicode_funcs_get_empty ();
-#endif
- return static_ucd_funcs.get_unconst ();
-}