Coverage Report

Created: 2025-11-15 06:39

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/dovecot/src/lib/unicode-data.h
Line
Count
Source
1
#ifndef UNICODE_DATA_H
2
#define UNICODE_DATA_H
3
4
#include "unicode-data-tables.h"
5
6
static inline bool
7
unicode_general_category_is_group(enum unicode_general_category gencat)
8
0
{
9
0
  return ((gencat & 0x0f) == 0x00);
10
0
}
Unexecuted instantiation: unichar.c:unicode_general_category_is_group
Unexecuted instantiation: unicode-transform.c:unicode_general_category_is_group
11
12
static inline const struct unicode_code_point_data *
13
unicode_code_point_get_data(uint32_t cp)
14
0
{
15
0
  unsigned int idx8 = cp >> 24;
16
0
  unsigned int blk16 = unicode_code_points_index8[idx8];
17
0
  unsigned int idx16 = (blk16 << 8) + ((cp >> 16) & 0xFF);
18
0
  unsigned int blk24 = unicode_code_points_index16[idx16];
19
0
  unsigned int idx24 = (blk24 << 8) + ((cp >> 8) & 0xFF);
20
0
  unsigned int blk32 = unicode_code_points_index24[idx24];
21
0
  unsigned int idx32 = (blk32 << 8) + (cp & 0xFF);
22
0
  unsigned int idxcp = unicode_code_points_index32[idx32];
23
24
0
  return &unicode_code_points[idxcp];
25
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_get_data
Unexecuted instantiation: unicode-transform.c:unicode_code_point_get_data
26
27
static inline size_t
28
unicode_code_point_data_get_first_decomposition(
29
  const struct unicode_code_point_data *cp_data,
30
  uint8_t *type_r, const uint32_t **decomp_r)
31
0
{
32
0
  uint32_t offset;
33
0
34
0
  if (type_r != NULL)
35
0
    *type_r = cp_data->decomposition_type;
36
0
  offset = cp_data->decomposition_first_offset;
37
0
  *decomp_r = &unicode_decompositions[offset];
38
0
  return cp_data->decomposition_first_length;
39
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_get_first_decomposition
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_get_first_decomposition
40
41
static inline size_t
42
unicode_code_point_data_get_full_decomposition(
43
  const struct unicode_code_point_data *cp_data, bool canonical,
44
  const uint32_t **decomp_r)
45
0
{
46
0
  uint32_t offset;
47
48
0
  if (canonical) {
49
0
    offset = cp_data->decomposition_full_offset;
50
0
    *decomp_r = &unicode_decompositions[offset];
51
0
    return cp_data->decomposition_full_length;
52
0
  }
53
0
  offset = cp_data->decomposition_full_k_offset;
54
0
  *decomp_r = &unicode_decompositions[offset];
55
0
  return cp_data->decomposition_full_k_length;
56
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_get_full_decomposition
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_get_full_decomposition
57
58
static inline uint32_t
59
unicode_code_point_data_find_composition(
60
  const struct unicode_code_point_data *cp_data, uint32_t second)
61
0
{
62
0
  const uint32_t *compositions =
63
0
    &unicode_compositions[cp_data->composition_offset];
64
0
  size_t left_idx, right_idx;
65
66
0
  left_idx = 0; right_idx = cp_data->composition_count;
67
0
  while (left_idx < right_idx) {
68
0
    unsigned int idx = (left_idx + right_idx) / 2;
69
70
0
    if (second > compositions[idx])
71
0
      left_idx = idx + 1;
72
0
    else if (second < compositions[idx])
73
0
      right_idx = idx;
74
0
    else {
75
0
      return unicode_composition_primaries[
76
0
        cp_data->composition_offset + idx];
77
0
    }
78
0
  }
79
80
0
  return 0x0000;
81
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_find_composition
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_find_composition
82
83
static inline size_t
84
unicode_code_point_get_full_decomposition(uint32_t cp, bool canonical,
85
            const uint32_t **decomp_r)
86
0
{
87
0
  const struct unicode_code_point_data *cp_data =
88
0
    unicode_code_point_get_data(cp);
89
90
0
  return unicode_code_point_data_get_full_decomposition(
91
0
    cp_data, canonical, decomp_r);
92
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_get_full_decomposition
Unexecuted instantiation: unicode-transform.c:unicode_code_point_get_full_decomposition
93
94
static inline size_t
95
unicode_code_point_data_get_uppercase_mapping(
96
  const struct unicode_code_point_data *cp_data,
97
  const uint32_t **map_r)
98
0
{
99
0
  uint32_t offset;
100
101
0
  offset = cp_data->uppercase_mapping_offset;
102
0
  *map_r = &unicode_case_mappings[offset];
103
0
  return cp_data->uppercase_mapping_length;
104
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_get_uppercase_mapping
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_get_uppercase_mapping
105
106
static inline size_t
107
unicode_code_point_data_get_lowercase_mapping(
108
  const struct unicode_code_point_data *cp_data,
109
  const uint32_t **map_r)
110
0
{
111
0
  uint32_t offset;
112
113
0
  offset = cp_data->lowercase_mapping_offset;
114
0
  *map_r = &unicode_case_mappings[offset];
115
0
  return cp_data->lowercase_mapping_length;
116
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_get_lowercase_mapping
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_get_lowercase_mapping
117
118
static inline size_t
119
unicode_code_point_data_get_casefold_mapping(
120
  const struct unicode_code_point_data *cp_data,
121
  const uint32_t **map_r)
122
0
{
123
0
  uint32_t offset;
124
125
0
  offset = cp_data->casefold_mapping_offset;
126
0
  *map_r = &unicode_case_mappings[offset];
127
0
  return cp_data->casefold_mapping_length;
128
0
}
Unexecuted instantiation: unichar.c:unicode_code_point_data_get_casefold_mapping
Unexecuted instantiation: unicode-transform.c:unicode_code_point_data_get_casefold_mapping
129
130
uint8_t unicode_general_category_from_string(const char *str);
131
132
#endif