tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

hb-ot-shape-normalize.hh (3365B)


      1 /*
      2 * Copyright © 2012  Google, Inc.
      3 *
      4 *  This is part of HarfBuzz, a text shaping library.
      5 *
      6 * Permission is hereby granted, without written agreement and without
      7 * license or royalty fees, to use, copy, modify, and distribute this
      8 * software and its documentation for any purpose, provided that the
      9 * above copyright notice and the following two paragraphs appear in
     10 * all copies of this software.
     11 *
     12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
     13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
     14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
     15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
     16 * DAMAGE.
     17 *
     18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
     19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
     20 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
     21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
     22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
     23 *
     24 * Google Author(s): Behdad Esfahbod
     25 */
     26 
     27 #ifndef HB_OT_SHAPE_NORMALIZE_HH
     28 #define HB_OT_SHAPE_NORMALIZE_HH
     29 
     30 #include "hb.hh"
     31 #include "hb-unicode.hh"
     32 
     33 
     34 /* buffer var allocations, used during the normalization process */
     35 #define normalizer_glyph_index()	var1.u32
     36 
     37 struct hb_ot_shape_plan_t;
     38 
     39 enum hb_ot_shape_normalization_mode_t {
     40  HB_OT_SHAPE_NORMALIZATION_MODE_NONE,
     41  HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED,
     42  HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS, /* Never composes base-to-base */
     43  HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT, /* Always fully decomposes and then recompose back */
     44 
     45  HB_OT_SHAPE_NORMALIZATION_MODE_AUTO, /* See hb-ot-shape-normalize.cc for logic. */
     46  HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT = HB_OT_SHAPE_NORMALIZATION_MODE_AUTO
     47 };
     48 
     49 HB_INTERNAL void _hb_ot_shape_normalize (const hb_ot_shape_plan_t *shaper,
     50 				 hb_buffer_t *buffer,
     51 				 hb_font_t *font);
     52 
     53 
     54 struct hb_ot_shape_normalize_context_t
     55 {
     56  static bool
     57  decompose_unicode (const hb_ot_shape_normalize_context_t *c,
     58 	     hb_codepoint_t  ab,
     59 	     hb_codepoint_t *a,
     60 	     hb_codepoint_t *b)
     61  {
     62    return (bool) c->unicode->decompose (ab, a, b);
     63  }
     64 
     65  static bool
     66  compose_unicode (const hb_ot_shape_normalize_context_t *c,
     67 	   hb_codepoint_t  a,
     68 	   hb_codepoint_t  b,
     69 	   hb_codepoint_t *ab)
     70  {
     71    return (bool) c->unicode->compose (a, b, ab);
     72  }
     73 
     74  void
     75  override_decompose_and_compose (bool (*decompose) (const hb_ot_shape_normalize_context_t *c,
     76 					      hb_codepoint_t  ab,
     77 					      hb_codepoint_t *a,
     78 					      hb_codepoint_t *b),
     79 			  bool (*compose) (const hb_ot_shape_normalize_context_t *c,
     80 					   hb_codepoint_t  a,
     81 					   hb_codepoint_t  b,
     82 					   hb_codepoint_t *ab))
     83  {
     84    this->decompose = decompose ? decompose : decompose_unicode;
     85    this->compose = compose ? compose : compose_unicode;
     86  }
     87 
     88  const hb_ot_shape_plan_t *plan;
     89  hb_buffer_t *buffer;
     90  hb_font_t *font;
     91  hb_unicode_funcs_t *unicode;
     92  bool (*decompose) (const hb_ot_shape_normalize_context_t *c,
     93 	     hb_codepoint_t  ab,
     94 	     hb_codepoint_t *a,
     95 	     hb_codepoint_t *b);
     96  bool (*compose) (const hb_ot_shape_normalize_context_t *c,
     97 	   hb_codepoint_t  a,
     98 	   hb_codepoint_t  b,
     99 	   hb_codepoint_t *ab);
    100 };
    101 
    102 
    103 #endif /* HB_OT_SHAPE_NORMALIZE_HH */