Coverage Report

Created: 2026-03-31 11:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/workdir/UnpackedTarball/harfbuzz/src/hb-ot-shaper-khmer-machine.hh
Line
Count
Source
1
2
#line 1 "hb-ot-shaper-khmer-machine.rl"
3
/*
4
 * Copyright © 2011,2012  Google, Inc.
5
 *
6
 *  This is part of HarfBuzz, a text shaping library.
7
 *
8
 * Permission is hereby granted, without written agreement and without
9
 * license or royalty fees, to use, copy, modify, and distribute this
10
 * software and its documentation for any purpose, provided that the
11
 * above copyright notice and the following two paragraphs appear in
12
 * all copies of this software.
13
 *
14
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
15
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
16
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
17
 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
18
 * DAMAGE.
19
 *
20
 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
21
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
22
 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
23
 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
24
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
25
 *
26
 * Google Author(s): Behdad Esfahbod
27
 */
28
29
#ifndef HB_OT_SHAPER_KHMER_MACHINE_HH
30
#define HB_OT_SHAPER_KHMER_MACHINE_HH
31
32
#include "hb.hh"
33
34
#include "hb-ot-layout.hh"
35
#include "hb-ot-shaper-indic.hh"
36
37
/* buffer var allocations */
38
11.3M
#define khmer_category() ot_shaper_var_u8_category() /* khmer_category_t */
39
40
using khmer_category_t = unsigned;
41
42
325k
#define K_Cat(Cat) khmer_syllable_machine_ex_##Cat
43
44
enum khmer_syllable_type_t {
45
  khmer_consonant_syllable,
46
  khmer_broken_cluster,
47
  khmer_non_khmer_cluster,
48
};
49
50
51
#line 52 "hb-ot-shaper-khmer-machine.hh"
52
#define khmer_syllable_machine_ex_C 1u
53
165k
#define khmer_syllable_machine_ex_DOTTEDCIRCLE 11u
54
160k
#define khmer_syllable_machine_ex_H 4u
55
#define khmer_syllable_machine_ex_PLACEHOLDER 10u
56
0
#define khmer_syllable_machine_ex_Ra 15u
57
#define khmer_syllable_machine_ex_Robatic 25u
58
#define khmer_syllable_machine_ex_V 2u
59
#define khmer_syllable_machine_ex_VAbv 20u
60
#define khmer_syllable_machine_ex_VBlw 21u
61
80.0k
#define khmer_syllable_machine_ex_VPre 22u
62
#define khmer_syllable_machine_ex_VPst 23u
63
#define khmer_syllable_machine_ex_Xgroup 26u
64
#define khmer_syllable_machine_ex_Ygroup 27u
65
#define khmer_syllable_machine_ex_ZWJ 6u
66
#define khmer_syllable_machine_ex_ZWNJ 5u
67
68
69
#line 70 "hb-ot-shaper-khmer-machine.hh"
70
static const unsigned char _khmer_syllable_machine_trans_keys[] = {
71
  5u, 26u, 5u, 26u, 1u, 15u, 5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 
72
  5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 1u, 15u, 5u, 26u, 5u, 26u, 
73
  5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 5u, 26u, 1u, 27u, 4u, 27u, 1u, 15u, 
74
  4u, 27u, 4u, 27u, 27u, 27u, 4u, 27u, 4u, 27u, 4u, 27u, 4u, 27u, 4u, 27u, 
75
  4u, 27u, 1u, 15u, 4u, 27u, 4u, 27u, 27u, 27u, 4u, 27u, 4u, 27u, 4u, 27u, 
76
  4u, 27u, 4u, 27u, 5u, 26u, 0
77
};
78
79
static const char _khmer_syllable_machine_key_spans[] = {
80
  22, 22, 15, 22, 22, 22, 22, 22, 
81
  22, 22, 22, 22, 22, 15, 22, 22, 
82
  22, 22, 22, 22, 22, 27, 24, 15, 
83
  24, 24, 1, 24, 24, 24, 24, 24, 
84
  24, 15, 24, 24, 1, 24, 24, 24, 
85
  24, 24, 22
86
};
87
88
static const short _khmer_syllable_machine_index_offsets[] = {
89
  0, 23, 46, 62, 85, 108, 131, 154, 
90
  177, 200, 223, 246, 269, 292, 308, 331, 
91
  354, 377, 400, 423, 446, 469, 497, 522, 
92
  538, 563, 588, 590, 615, 640, 665, 690, 
93
  715, 740, 756, 781, 806, 808, 833, 858, 
94
  883, 908, 933
95
};
96
97
static const char _khmer_syllable_machine_indicies[] = {
98
  1, 1, 0, 0, 0, 0, 0, 0, 
99
  0, 0, 0, 0, 0, 0, 0, 2, 
100
  0, 0, 0, 0, 3, 4, 0, 1, 
101
  1, 0, 0, 0, 0, 0, 0, 0, 
102
  0, 0, 0, 0, 0, 0, 0, 0, 
103
  0, 0, 0, 0, 4, 0, 5, 5, 
104
  0, 0, 0, 0, 0, 0, 0, 0, 
105
  0, 0, 0, 0, 5, 0, 1, 1, 
106
  0, 0, 0, 0, 0, 0, 0, 0, 
107
  0, 0, 0, 0, 0, 2, 0, 0, 
108
  0, 0, 0, 4, 0, 6, 6, 0, 
109
  0, 0, 0, 0, 0, 0, 0, 0, 
110
  0, 0, 0, 0, 0, 0, 0, 0, 
111
  0, 0, 2, 0, 7, 7, 0, 0, 
112
  0, 0, 0, 0, 0, 0, 0, 0, 
113
  0, 0, 0, 0, 0, 0, 0, 0, 
114
  0, 8, 0, 9, 9, 0, 0, 0, 
115
  0, 0, 0, 0, 0, 0, 0, 0, 
116
  0, 0, 2, 0, 0, 0, 0, 0, 
117
  10, 0, 9, 9, 0, 0, 0, 0, 
118
  0, 0, 0, 0, 0, 0, 0, 0, 
119
  0, 0, 0, 0, 0, 0, 0, 10, 
120
  0, 11, 11, 0, 0, 0, 0, 0, 
121
  0, 0, 0, 0, 0, 0, 0, 0, 
122
  2, 0, 0, 0, 0, 0, 12, 0, 
123
  11, 11, 0, 0, 0, 0, 0, 0, 
124
  0, 0, 0, 0, 0, 0, 0, 0, 
125
  0, 0, 0, 0, 0, 12, 0, 1, 
126
  1, 0, 0, 0, 0, 0, 0, 0, 
127
  0, 0, 0, 0, 0, 0, 2, 0, 
128
  0, 0, 0, 13, 4, 0, 15, 15, 
129
  14, 14, 14, 14, 14, 14, 14, 14, 
130
  14, 14, 14, 14, 14, 16, 14, 14, 
131
  14, 14, 17, 18, 14, 15, 15, 19, 
132
  19, 19, 19, 19, 19, 19, 19, 19, 
133
  19, 19, 19, 19, 19, 19, 19, 19, 
134
  19, 19, 18, 19, 20, 20, 14, 14, 
135
  14, 14, 14, 14, 14, 14, 14, 14, 
136
  14, 14, 20, 14, 15, 15, 14, 14, 
137
  14, 14, 14, 14, 14, 14, 14, 14, 
138
  14, 14, 14, 16, 14, 14, 14, 14, 
139
  14, 18, 14, 21, 21, 14, 14, 14, 
140
  14, 14, 14, 14, 14, 14, 14, 14, 
141
  14, 14, 14, 14, 14, 14, 14, 14, 
142
  16, 14, 22, 22, 14, 14, 14, 14, 
143
  14, 14, 14, 14, 14, 14, 14, 14, 
144
  14, 14, 14, 14, 14, 14, 14, 23, 
145
  14, 24, 24, 14, 14, 14, 14, 14, 
146
  14, 14, 14, 14, 14, 14, 14, 14, 
147
  16, 14, 14, 14, 14, 14, 25, 14, 
148
  24, 24, 14, 14, 14, 14, 14, 14, 
149
  14, 14, 14, 14, 14, 14, 14, 14, 
150
  14, 14, 14, 14, 14, 25, 14, 26, 
151
  26, 14, 14, 14, 14, 14, 14, 14, 
152
  14, 14, 14, 14, 14, 14, 16, 14, 
153
  14, 14, 14, 14, 27, 14, 26, 26, 
154
  14, 14, 14, 14, 14, 14, 14, 14, 
155
  14, 14, 14, 14, 14, 14, 14, 14, 
156
  14, 14, 14, 27, 14, 29, 29, 28, 
157
  30, 31, 31, 28, 28, 28, 13, 13, 
158
  28, 28, 28, 29, 28, 28, 28, 28, 
159
  16, 25, 27, 23, 28, 17, 18, 20, 
160
  28, 33, 34, 34, 32, 32, 32, 32, 
161
  32, 32, 32, 32, 32, 32, 32, 32, 
162
  32, 2, 10, 12, 8, 32, 13, 4, 
163
  5, 32, 35, 35, 32, 32, 32, 32, 
164
  32, 32, 32, 32, 32, 32, 32, 32, 
165
  35, 32, 33, 36, 36, 32, 32, 32, 
166
  32, 32, 32, 32, 32, 32, 32, 32, 
167
  32, 32, 2, 10, 12, 8, 32, 3, 
168
  4, 5, 32, 37, 38, 38, 32, 32, 
169
  32, 32, 32, 32, 32, 32, 32, 32, 
170
  32, 32, 32, 2, 10, 12, 8, 32, 
171
  32, 4, 5, 32, 5, 32, 37, 6, 
172
  6, 32, 32, 32, 32, 32, 32, 32, 
173
  32, 32, 32, 32, 32, 32, 32, 32, 
174
  32, 8, 32, 32, 2, 5, 32, 37, 
175
  7, 7, 32, 32, 32, 32, 32, 32, 
176
  32, 32, 32, 32, 32, 32, 32, 32, 
177
  32, 32, 32, 32, 32, 8, 5, 32, 
178
  37, 39, 39, 32, 32, 32, 32, 32, 
179
  32, 32, 32, 32, 32, 32, 32, 32, 
180
  2, 32, 32, 8, 32, 32, 10, 5, 
181
  32, 37, 40, 40, 32, 32, 32, 32, 
182
  32, 32, 32, 32, 32, 32, 32, 32, 
183
  32, 2, 10, 32, 8, 32, 32, 12, 
184
  5, 32, 33, 38, 38, 32, 32, 32, 
185
  32, 32, 32, 32, 32, 32, 32, 32, 
186
  32, 32, 2, 10, 12, 8, 32, 32, 
187
  4, 5, 32, 33, 38, 38, 32, 32, 
188
  32, 32, 32, 32, 32, 32, 32, 32, 
189
  32, 32, 32, 2, 10, 12, 8, 32, 
190
  3, 4, 5, 32, 42, 42, 41, 41, 
191
  41, 41, 41, 41, 41, 41, 41, 41, 
192
  41, 41, 42, 41, 30, 43, 43, 41, 
193
  41, 41, 41, 41, 41, 41, 41, 41, 
194
  41, 41, 41, 41, 16, 25, 27, 23, 
195
  41, 17, 18, 20, 41, 44, 45, 45, 
196
  41, 41, 41, 41, 41, 41, 41, 41, 
197
  41, 41, 41, 41, 41, 16, 25, 27, 
198
  23, 41, 41, 18, 20, 41, 20, 41, 
199
  44, 21, 21, 41, 41, 41, 41, 41, 
200
  41, 41, 41, 41, 41, 41, 41, 41, 
201
  41, 41, 41, 23, 41, 41, 16, 20, 
202
  41, 44, 22, 22, 41, 41, 41, 41, 
203
  41, 41, 41, 41, 41, 41, 41, 41, 
204
  41, 41, 41, 41, 41, 41, 41, 23, 
205
  20, 41, 44, 46, 46, 41, 41, 41, 
206
  41, 41, 41, 41, 41, 41, 41, 41, 
207
  41, 41, 16, 41, 41, 23, 41, 41, 
208
  25, 20, 41, 44, 47, 47, 41, 41, 
209
  41, 41, 41, 41, 41, 41, 41, 41, 
210
  41, 41, 41, 16, 25, 41, 23, 41, 
211
  41, 27, 20, 41, 30, 45, 45, 41, 
212
  41, 41, 41, 41, 41, 41, 41, 41, 
213
  41, 41, 41, 41, 16, 25, 27, 23, 
214
  41, 41, 18, 20, 41, 15, 15, 48, 
215
  48, 48, 48, 48, 48, 48, 48, 48, 
216
  48, 48, 48, 48, 16, 48, 48, 48, 
217
  48, 48, 18, 48, 0
218
};
219
220
static const char _khmer_syllable_machine_trans_targs[] = {
221
  21, 1, 27, 31, 25, 26, 4, 5, 
222
  28, 7, 29, 9, 30, 32, 21, 12, 
223
  37, 41, 35, 21, 36, 15, 16, 38, 
224
  18, 39, 20, 40, 21, 22, 33, 42, 
225
  21, 23, 10, 24, 0, 2, 3, 6, 
226
  8, 21, 34, 11, 13, 14, 17, 19, 
227
  21
228
};
229
230
static const char _khmer_syllable_machine_trans_actions[] = {
231
  1, 0, 2, 2, 2, 0, 0, 0, 
232
  2, 0, 2, 0, 2, 2, 3, 0, 
233
  2, 4, 4, 5, 0, 0, 0, 2, 
234
  0, 2, 0, 2, 8, 2, 0, 9, 
235
  10, 0, 0, 2, 0, 0, 0, 0, 
236
  0, 11, 4, 0, 0, 0, 0, 0, 
237
  12
238
};
239
240
static const char _khmer_syllable_machine_to_state_actions[] = {
241
  0, 0, 0, 0, 0, 0, 0, 0, 
242
  0, 0, 0, 0, 0, 0, 0, 0, 
243
  0, 0, 0, 0, 0, 6, 0, 0, 
244
  0, 0, 0, 0, 0, 0, 0, 0, 
245
  0, 0, 0, 0, 0, 0, 0, 0, 
246
  0, 0, 0
247
};
248
249
static const char _khmer_syllable_machine_from_state_actions[] = {
250
  0, 0, 0, 0, 0, 0, 0, 0, 
251
  0, 0, 0, 0, 0, 0, 0, 0, 
252
  0, 0, 0, 0, 0, 7, 0, 0, 
253
  0, 0, 0, 0, 0, 0, 0, 0, 
254
  0, 0, 0, 0, 0, 0, 0, 0, 
255
  0, 0, 0
256
};
257
258
static const short _khmer_syllable_machine_eof_trans[] = {
259
  1, 1, 1, 1, 1, 1, 1, 1, 
260
  1, 1, 1, 15, 20, 15, 15, 15, 
261
  15, 15, 15, 15, 15, 0, 33, 33, 
262
  33, 33, 33, 33, 33, 33, 33, 33, 
263
  33, 42, 42, 42, 42, 42, 42, 42, 
264
  42, 42, 49
265
};
266
267
static const int khmer_syllable_machine_start = 21;
268
static const int khmer_syllable_machine_first_final = 21;
269
static const int khmer_syllable_machine_error = -1;
270
271
static const int khmer_syllable_machine_en_main = 21;
272
273
274
#line 53 "hb-ot-shaper-khmer-machine.rl"
275
276
277
278
#line 102 "hb-ot-shaper-khmer-machine.rl"
279
280
281
#define found_syllable(syllable_type) \
282
2.11M
  HB_STMT_START { \
283
2.11M
    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
284
4.24M
    for (unsigned int i = ts; i < te; i++) \
285
2.12M
      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
286
2.11M
    syllable_serial++; \
287
2.11M
    if (syllable_serial == 16) syllable_serial = 1; \
288
2.11M
  } HB_STMT_END
289
290
inline void
291
find_syllables_khmer (hb_buffer_t *buffer)
292
165k
{
293
165k
  unsigned int p, pe, eof, ts, te, act HB_UNUSED;
294
165k
  int cs;
295
165k
  hb_glyph_info_t *info = buffer->info;
296
  
297
165k
#line 298 "hb-ot-shaper-khmer-machine.hh"
298
165k
  {
299
165k
  cs = khmer_syllable_machine_start;
300
165k
  ts = 0;
301
165k
  te = 0;
302
165k
  act = 0;
303
165k
  }
304
305
165k
#line 122 "hb-ot-shaper-khmer-machine.rl"
306
307
308
165k
  p = 0;
309
165k
  pe = eof = buffer->len;
310
311
165k
  unsigned int syllable_serial = 1;
312
  
313
165k
#line 314 "hb-ot-shaper-khmer-machine.hh"
314
165k
  {
315
165k
  int _slen;
316
165k
  int _trans;
317
165k
  const unsigned char *_keys;
318
165k
  const char *_inds;
319
165k
  if ( p == pe )
320
0
    goto _test_eof;
321
3.51M
_resume:
322
3.51M
  switch ( _khmer_syllable_machine_from_state_actions[cs] ) {
323
2.11M
  case 7:
324
2.11M
#line 1 "NONE"
325
2.11M
  {ts = p;}
326
2.11M
  break;
327
3.51M
#line 328 "hb-ot-shaper-khmer-machine.hh"
328
3.51M
  }
329
330
3.51M
  _keys = _khmer_syllable_machine_trans_keys + (cs<<1);
331
3.51M
  _inds = _khmer_syllable_machine_indicies + _khmer_syllable_machine_index_offsets[cs];
332
333
3.51M
  _slen = _khmer_syllable_machine_key_spans[cs];
334
3.51M
  _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].khmer_category()) &&
335
2.79M
    ( info[p].khmer_category()) <= _keys[1] ?
336
2.79M
    ( info[p].khmer_category()) - _keys[0] : _slen ];
337
338
3.60M
_eof_trans:
339
3.60M
  cs = _khmer_syllable_machine_trans_targs[_trans];
340
341
3.60M
  if ( _khmer_syllable_machine_trans_actions[_trans] == 0 )
342
5.74k
    goto _again;
343
344
3.60M
  switch ( _khmer_syllable_machine_trans_actions[_trans] ) {
345
1.48M
  case 2:
346
1.48M
#line 1 "NONE"
347
1.48M
  {te = p+1;}
348
1.48M
  break;
349
635k
  case 8:
350
635k
#line 98 "hb-ot-shaper-khmer-machine.rl"
351
635k
  {te = p+1;{ found_syllable (khmer_non_khmer_cluster); }}
352
635k
  break;
353
1.40M
  case 10:
354
1.40M
#line 96 "hb-ot-shaper-khmer-machine.rl"
355
1.40M
  {te = p;p--;{ found_syllable (khmer_consonant_syllable); }}
356
1.40M
  break;
357
71.1k
  case 11:
358
71.1k
#line 97 "hb-ot-shaper-khmer-machine.rl"
359
71.1k
  {te = p;p--;{ found_syllable (khmer_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
360
71.1k
  break;
361
407
  case 12:
362
407
#line 98 "hb-ot-shaper-khmer-machine.rl"
363
407
  {te = p;p--;{ found_syllable (khmer_non_khmer_cluster); }}
364
407
  break;
365
407
  case 1:
366
407
#line 96 "hb-ot-shaper-khmer-machine.rl"
367
407
  {{p = ((te))-1;}{ found_syllable (khmer_consonant_syllable); }}
368
407
  break;
369
0
  case 3:
370
0
#line 97 "hb-ot-shaper-khmer-machine.rl"
371
0
  {{p = ((te))-1;}{ found_syllable (khmer_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
372
0
  break;
373
0
  case 5:
374
0
#line 1 "NONE"
375
0
  { switch( act ) {
376
0
  case 2:
377
0
  {{p = ((te))-1;} found_syllable (khmer_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }
378
0
  break;
379
0
  case 3:
380
0
  {{p = ((te))-1;} found_syllable (khmer_non_khmer_cluster); }
381
0
  break;
382
0
  }
383
0
  }
384
0
  break;
385
106
  case 4:
386
106
#line 1 "NONE"
387
106
  {te = p+1;}
388
106
#line 97 "hb-ot-shaper-khmer-machine.rl"
389
106
  {act = 2;}
390
106
  break;
391
407
  case 9:
392
407
#line 1 "NONE"
393
407
  {te = p+1;}
394
407
#line 98 "hb-ot-shaper-khmer-machine.rl"
395
407
  {act = 3;}
396
407
  break;
397
3.60M
#line 398 "hb-ot-shaper-khmer-machine.hh"
398
3.60M
  }
399
400
3.60M
_again:
401
3.60M
  switch ( _khmer_syllable_machine_to_state_actions[cs] ) {
402
2.11M
  case 6:
403
2.11M
#line 1 "NONE"
404
2.11M
  {ts = 0;}
405
2.11M
  break;
406
3.60M
#line 407 "hb-ot-shaper-khmer-machine.hh"
407
3.60M
  }
408
409
3.60M
  if ( ++p != pe )
410
3.34M
    goto _resume;
411
262k
  _test_eof: {}
412
262k
  if ( p == eof )
413
262k
  {
414
262k
  if ( _khmer_syllable_machine_eof_trans[cs] > 0 ) {
415
96.3k
    _trans = _khmer_syllable_machine_eof_trans[cs] - 1;
416
96.3k
    goto _eof_trans;
417
96.3k
  }
418
262k
  }
419
420
262k
  }
421
422
262k
#line 130 "hb-ot-shaper-khmer-machine.rl"
423
424
262k
}
425
426
#undef found_syllable
427
428
#endif /* HB_OT_SHAPER_KHMER_MACHINE_HH */