Coverage Report

Created: 2026-04-09 11:41

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
10.6M
#define khmer_category() ot_shaper_var_u8_category() /* khmer_category_t */
39
40
using khmer_category_t = unsigned;
41
42
307k
#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 49 "hb-ot-shaper-khmer-machine.hh"
52
#define khmer_syllable_machine_ex_C 1u
53
158k
#define khmer_syllable_machine_ex_DOTTEDCIRCLE 11u
54
149k
#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
74.6k
#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 65 "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.02M
  HB_STMT_START { \
283
2.02M
    if (0) fprintf (stderr, "syllable %u..%u %s\n", ts, te, #syllable_type); \
284
4.06M
    for (unsigned int i = ts; i < te; i++) \
285
2.04M
      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
286
2.02M
    syllable_serial++; \
287
2.02M
    if (syllable_serial == 16) syllable_serial = 1; \
288
2.02M
  } HB_STMT_END
289
290
inline void
291
find_syllables_khmer (hb_buffer_t *buffer)
292
158k
{
293
158k
  unsigned int p, pe, eof, ts, te, act HB_UNUSED;
294
158k
  int cs;
295
158k
  hb_glyph_info_t *info = buffer->info;
296
  
297
158k
#line 287 "hb-ot-shaper-khmer-machine.hh"
298
158k
  {
299
158k
  cs = khmer_syllable_machine_start;
300
158k
  ts = 0;
301
158k
  te = 0;
302
158k
  act = 0;
303
158k
  }
304
305
158k
#line 122 "hb-ot-shaper-khmer-machine.rl"
306
307
308
158k
  p = 0;
309
158k
  pe = eof = buffer->len;
310
311
158k
  unsigned int syllable_serial = 1;
312
  
313
158k
#line 299 "hb-ot-shaper-khmer-machine.hh"
314
158k
  {
315
158k
  int _slen;
316
158k
  int _trans;
317
158k
  const unsigned char *_keys;
318
158k
  const char *_inds;
319
158k
  if ( p == pe )
320
0
    goto _test_eof;
321
3.31M
_resume:
322
3.31M
  switch ( _khmer_syllable_machine_from_state_actions[cs] ) {
323
2.02M
  case 7:
324
2.02M
#line 1 "NONE"
325
2.02M
  {ts = p;}
326
2.02M
  break;
327
3.31M
#line 311 "hb-ot-shaper-khmer-machine.hh"
328
3.31M
  }
329
330
3.31M
  _keys = _khmer_syllable_machine_trans_keys + (cs<<1);
331
3.31M
  _inds = _khmer_syllable_machine_indicies + _khmer_syllable_machine_index_offsets[cs];
332
333
3.31M
  _slen = _khmer_syllable_machine_key_spans[cs];
334
3.31M
  _trans = _inds[ _slen > 0 && _keys[0] <=( info[p].khmer_category()) &&
335
2.58M
    ( info[p].khmer_category()) <= _keys[1] ?
336
2.58M
    ( info[p].khmer_category()) - _keys[0] : _slen ];
337
338
3.40M
_eof_trans:
339
3.40M
  cs = _khmer_syllable_machine_trans_targs[_trans];
340
341
3.40M
  if ( _khmer_syllable_machine_trans_actions[_trans] == 0 )
342
5.51k
    goto _again;
343
344
3.40M
  switch ( _khmer_syllable_machine_trans_actions[_trans] ) {
345
1.37M
  case 2:
346
1.37M
#line 1 "NONE"
347
1.37M
  {te = p+1;}
348
1.37M
  break;
349
661k
  case 8:
350
661k
#line 98 "hb-ot-shaper-khmer-machine.rl"
351
661k
  {te = p+1;{ found_syllable (khmer_non_khmer_cluster); }}
352
661k
  break;
353
1.30M
  case 10:
354
1.30M
#line 96 "hb-ot-shaper-khmer-machine.rl"
355
1.30M
  {te = p;p--;{ found_syllable (khmer_consonant_syllable); }}
356
1.30M
  break;
357
62.8k
  case 11:
358
62.8k
#line 97 "hb-ot-shaper-khmer-machine.rl"
359
62.8k
  {te = p;p--;{ found_syllable (khmer_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
360
62.8k
  break;
361
481
  case 12:
362
481
#line 98 "hb-ot-shaper-khmer-machine.rl"
363
481
  {te = p;p--;{ found_syllable (khmer_non_khmer_cluster); }}
364
481
  break;
365
481
  case 1:
366
481
#line 96 "hb-ot-shaper-khmer-machine.rl"
367
481
  {{p = ((te))-1;}{ found_syllable (khmer_consonant_syllable); }}
368
481
  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
108
  case 4:
386
108
#line 1 "NONE"
387
108
  {te = p+1;}
388
108
#line 97 "hb-ot-shaper-khmer-machine.rl"
389
108
  {act = 2;}
390
108
  break;
391
481
  case 9:
392
481
#line 1 "NONE"
393
481
  {te = p+1;}
394
481
#line 98 "hb-ot-shaper-khmer-machine.rl"
395
481
  {act = 3;}
396
481
  break;
397
3.40M
#line 368 "hb-ot-shaper-khmer-machine.hh"
398
3.40M
  }
399
400
3.40M
_again:
401
3.40M
  switch ( _khmer_syllable_machine_to_state_actions[cs] ) {
402
2.02M
  case 6:
403
2.02M
#line 1 "NONE"
404
2.02M
  {ts = 0;}
405
2.02M
  break;
406
3.40M
#line 375 "hb-ot-shaper-khmer-machine.hh"
407
3.40M
  }
408
409
3.40M
  if ( ++p != pe )
410
3.15M
    goto _resume;
411
248k
  _test_eof: {}
412
248k
  if ( p == eof )
413
248k
  {
414
248k
  if ( _khmer_syllable_machine_eof_trans[cs] > 0 ) {
415
90.6k
    _trans = _khmer_syllable_machine_eof_trans[cs] - 1;
416
90.6k
    goto _eof_trans;
417
90.6k
  }
418
248k
  }
419
420
248k
  }
421
422
248k
#line 130 "hb-ot-shaper-khmer-machine.rl"
423
424
248k
}
425
426
#undef found_syllable
427
428
#endif /* HB_OT_SHAPER_KHMER_MACHINE_HH */