Coverage Report

Created: 2025-10-28 06:53

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/harfbuzz/src/hb-ot-shape-normalize.hh
Line
Count
Source
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
1.21M
#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
27.1k
  {
62
27.1k
    return (bool) c->unicode->decompose (ab, a, b);
63
27.1k
  }
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
0
  {
71
0
    return (bool) c->unicode->compose (a, b, ab);
72
0
  }
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
118k
  {
84
118k
    this->decompose = decompose ? decompose : decompose_unicode;
85
118k
    this->compose = compose ? compose : compose_unicode;
86
118k
  }
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 */