xref: /aosp_15_r20/external/harfbuzz_ng/src/hb-ot-shaper-vowel-constraints.cc (revision 2d1272b857b1f7575e6e246373e1cb218663db8a)
1*2d1272b8SAndroid Build Coastguard Worker /* == Start of generated functions == */
2*2d1272b8SAndroid Build Coastguard Worker /*
3*2d1272b8SAndroid Build Coastguard Worker  * The following functions are generated by running:
4*2d1272b8SAndroid Build Coastguard Worker  *
5*2d1272b8SAndroid Build Coastguard Worker  *   ./gen-vowel-constraints.py ms-use/IndicShapingInvalidCluster.txt Scripts.txt
6*2d1272b8SAndroid Build Coastguard Worker  *
7*2d1272b8SAndroid Build Coastguard Worker  * on files with these headers:
8*2d1272b8SAndroid Build Coastguard Worker  *
9*2d1272b8SAndroid Build Coastguard Worker  * # IndicShapingInvalidCluster.txt
10*2d1272b8SAndroid Build Coastguard Worker  * # Date: 2015-03-12, 21:17:00 GMT [AG]
11*2d1272b8SAndroid Build Coastguard Worker  * # Date: 2019-11-08, 23:22:00 GMT [AG]
12*2d1272b8SAndroid Build Coastguard Worker  *
13*2d1272b8SAndroid Build Coastguard Worker  * # Scripts-16.0.0.txt
14*2d1272b8SAndroid Build Coastguard Worker  * # Date: 2024-04-30, 21:48:40 GMT
15*2d1272b8SAndroid Build Coastguard Worker  */
16*2d1272b8SAndroid Build Coastguard Worker 
17*2d1272b8SAndroid Build Coastguard Worker #include "hb.hh"
18*2d1272b8SAndroid Build Coastguard Worker 
19*2d1272b8SAndroid Build Coastguard Worker #ifndef HB_NO_OT_SHAPE
20*2d1272b8SAndroid Build Coastguard Worker 
21*2d1272b8SAndroid Build Coastguard Worker #include "hb-ot-shaper-vowel-constraints.hh"
22*2d1272b8SAndroid Build Coastguard Worker 
23*2d1272b8SAndroid Build Coastguard Worker static void
_output_dotted_circle(hb_buffer_t * buffer)24*2d1272b8SAndroid Build Coastguard Worker _output_dotted_circle (hb_buffer_t *buffer)
25*2d1272b8SAndroid Build Coastguard Worker {
26*2d1272b8SAndroid Build Coastguard Worker   (void) buffer->output_glyph (0x25CCu);
27*2d1272b8SAndroid Build Coastguard Worker   _hb_glyph_info_reset_continuation (&buffer->prev());
28*2d1272b8SAndroid Build Coastguard Worker }
29*2d1272b8SAndroid Build Coastguard Worker 
30*2d1272b8SAndroid Build Coastguard Worker static void
_output_with_dotted_circle(hb_buffer_t * buffer)31*2d1272b8SAndroid Build Coastguard Worker _output_with_dotted_circle (hb_buffer_t *buffer)
32*2d1272b8SAndroid Build Coastguard Worker {
33*2d1272b8SAndroid Build Coastguard Worker   _output_dotted_circle (buffer);
34*2d1272b8SAndroid Build Coastguard Worker   (void) buffer->next_glyph ();
35*2d1272b8SAndroid Build Coastguard Worker }
36*2d1272b8SAndroid Build Coastguard Worker 
37*2d1272b8SAndroid Build Coastguard Worker void
_hb_preprocess_text_vowel_constraints(const hb_ot_shape_plan_t * plan HB_UNUSED,hb_buffer_t * buffer,hb_font_t * font HB_UNUSED)38*2d1272b8SAndroid Build Coastguard Worker _hb_preprocess_text_vowel_constraints (const hb_ot_shape_plan_t *plan HB_UNUSED,
39*2d1272b8SAndroid Build Coastguard Worker 				       hb_buffer_t              *buffer,
40*2d1272b8SAndroid Build Coastguard Worker 				       hb_font_t                *font HB_UNUSED)
41*2d1272b8SAndroid Build Coastguard Worker {
42*2d1272b8SAndroid Build Coastguard Worker #ifdef HB_NO_OT_SHAPER_VOWEL_CONSTRAINTS
43*2d1272b8SAndroid Build Coastguard Worker   return;
44*2d1272b8SAndroid Build Coastguard Worker #endif
45*2d1272b8SAndroid Build Coastguard Worker   if (buffer->flags & HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE)
46*2d1272b8SAndroid Build Coastguard Worker     return;
47*2d1272b8SAndroid Build Coastguard Worker 
48*2d1272b8SAndroid Build Coastguard Worker   /* UGLY UGLY UGLY business of adding dotted-circle in the middle of
49*2d1272b8SAndroid Build Coastguard Worker    * vowel-sequences that look like another vowel.  Data for each script
50*2d1272b8SAndroid Build Coastguard Worker    * collected from the USE script development spec.
51*2d1272b8SAndroid Build Coastguard Worker    *
52*2d1272b8SAndroid Build Coastguard Worker    * https://github.com/harfbuzz/harfbuzz/issues/1019
53*2d1272b8SAndroid Build Coastguard Worker    */
54*2d1272b8SAndroid Build Coastguard Worker   buffer->clear_output ();
55*2d1272b8SAndroid Build Coastguard Worker   unsigned int count = buffer->len;
56*2d1272b8SAndroid Build Coastguard Worker   switch ((unsigned) buffer->props.script)
57*2d1272b8SAndroid Build Coastguard Worker   {
58*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_DEVANAGARI:
59*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
60*2d1272b8SAndroid Build Coastguard Worker       {
61*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
62*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
63*2d1272b8SAndroid Build Coastguard Worker 	{
64*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0905u:
65*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
66*2d1272b8SAndroid Build Coastguard Worker 	    {
67*2d1272b8SAndroid Build Coastguard Worker 	      case 0x093Au: case 0x093Bu: case 0x093Eu: case 0x0945u:
68*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0946u: case 0x0949u: case 0x094Au: case 0x094Bu:
69*2d1272b8SAndroid Build Coastguard Worker 	      case 0x094Cu: case 0x094Fu: case 0x0956u: case 0x0957u:
70*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
71*2d1272b8SAndroid Build Coastguard Worker 		break;
72*2d1272b8SAndroid Build Coastguard Worker 	    }
73*2d1272b8SAndroid Build Coastguard Worker 	    break;
74*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0906u:
75*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
76*2d1272b8SAndroid Build Coastguard Worker 	    {
77*2d1272b8SAndroid Build Coastguard Worker 	      case 0x093Au: case 0x0945u: case 0x0946u: case 0x0947u:
78*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0948u:
79*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
80*2d1272b8SAndroid Build Coastguard Worker 		break;
81*2d1272b8SAndroid Build Coastguard Worker 	    }
82*2d1272b8SAndroid Build Coastguard Worker 	    break;
83*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0909u:
84*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x0941u == buffer->cur (1).codepoint;
85*2d1272b8SAndroid Build Coastguard Worker 	    break;
86*2d1272b8SAndroid Build Coastguard Worker 	  case 0x090Fu:
87*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
88*2d1272b8SAndroid Build Coastguard Worker 	    {
89*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0945u: case 0x0946u: case 0x0947u:
90*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
91*2d1272b8SAndroid Build Coastguard Worker 		break;
92*2d1272b8SAndroid Build Coastguard Worker 	    }
93*2d1272b8SAndroid Build Coastguard Worker 	    break;
94*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0930u:
95*2d1272b8SAndroid Build Coastguard Worker 	    if (0x094Du == buffer->cur (1).codepoint &&
96*2d1272b8SAndroid Build Coastguard Worker 		buffer->idx + 2 < count &&
97*2d1272b8SAndroid Build Coastguard Worker 		0x0907u == buffer->cur (2).codepoint)
98*2d1272b8SAndroid Build Coastguard Worker 	    {
99*2d1272b8SAndroid Build Coastguard Worker 	      (void) buffer->next_glyph ();
100*2d1272b8SAndroid Build Coastguard Worker 	      matched = true;
101*2d1272b8SAndroid Build Coastguard Worker 	    }
102*2d1272b8SAndroid Build Coastguard Worker 	    break;
103*2d1272b8SAndroid Build Coastguard Worker 	}
104*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
105*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
106*2d1272b8SAndroid Build Coastguard Worker       }
107*2d1272b8SAndroid Build Coastguard Worker       break;
108*2d1272b8SAndroid Build Coastguard Worker 
109*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_BENGALI:
110*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
111*2d1272b8SAndroid Build Coastguard Worker       {
112*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
113*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
114*2d1272b8SAndroid Build Coastguard Worker 	{
115*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0985u:
116*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x09BEu == buffer->cur (1).codepoint;
117*2d1272b8SAndroid Build Coastguard Worker 	    break;
118*2d1272b8SAndroid Build Coastguard Worker 	  case 0x098Bu:
119*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x09C3u == buffer->cur (1).codepoint;
120*2d1272b8SAndroid Build Coastguard Worker 	    break;
121*2d1272b8SAndroid Build Coastguard Worker 	  case 0x098Cu:
122*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x09E2u == buffer->cur (1).codepoint;
123*2d1272b8SAndroid Build Coastguard Worker 	    break;
124*2d1272b8SAndroid Build Coastguard Worker 	}
125*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
126*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
127*2d1272b8SAndroid Build Coastguard Worker       }
128*2d1272b8SAndroid Build Coastguard Worker       break;
129*2d1272b8SAndroid Build Coastguard Worker 
130*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_GURMUKHI:
131*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
132*2d1272b8SAndroid Build Coastguard Worker       {
133*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
134*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
135*2d1272b8SAndroid Build Coastguard Worker 	{
136*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0A05u:
137*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
138*2d1272b8SAndroid Build Coastguard Worker 	    {
139*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0A3Eu: case 0x0A48u: case 0x0A4Cu:
140*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
141*2d1272b8SAndroid Build Coastguard Worker 		break;
142*2d1272b8SAndroid Build Coastguard Worker 	    }
143*2d1272b8SAndroid Build Coastguard Worker 	    break;
144*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0A72u:
145*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
146*2d1272b8SAndroid Build Coastguard Worker 	    {
147*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0A3Fu: case 0x0A40u: case 0x0A47u:
148*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
149*2d1272b8SAndroid Build Coastguard Worker 		break;
150*2d1272b8SAndroid Build Coastguard Worker 	    }
151*2d1272b8SAndroid Build Coastguard Worker 	    break;
152*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0A73u:
153*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
154*2d1272b8SAndroid Build Coastguard Worker 	    {
155*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0A41u: case 0x0A42u: case 0x0A4Bu:
156*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
157*2d1272b8SAndroid Build Coastguard Worker 		break;
158*2d1272b8SAndroid Build Coastguard Worker 	    }
159*2d1272b8SAndroid Build Coastguard Worker 	    break;
160*2d1272b8SAndroid Build Coastguard Worker 	}
161*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
162*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
163*2d1272b8SAndroid Build Coastguard Worker       }
164*2d1272b8SAndroid Build Coastguard Worker       break;
165*2d1272b8SAndroid Build Coastguard Worker 
166*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_GUJARATI:
167*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
168*2d1272b8SAndroid Build Coastguard Worker       {
169*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
170*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
171*2d1272b8SAndroid Build Coastguard Worker 	{
172*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0A85u:
173*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
174*2d1272b8SAndroid Build Coastguard Worker 	    {
175*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0ABEu: case 0x0AC5u: case 0x0AC7u: case 0x0AC8u:
176*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0AC9u: case 0x0ACBu: case 0x0ACCu:
177*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
178*2d1272b8SAndroid Build Coastguard Worker 		break;
179*2d1272b8SAndroid Build Coastguard Worker 	    }
180*2d1272b8SAndroid Build Coastguard Worker 	    break;
181*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0AC5u:
182*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x0ABEu == buffer->cur (1).codepoint;
183*2d1272b8SAndroid Build Coastguard Worker 	    break;
184*2d1272b8SAndroid Build Coastguard Worker 	}
185*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
186*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
187*2d1272b8SAndroid Build Coastguard Worker       }
188*2d1272b8SAndroid Build Coastguard Worker       break;
189*2d1272b8SAndroid Build Coastguard Worker 
190*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_ORIYA:
191*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
192*2d1272b8SAndroid Build Coastguard Worker       {
193*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
194*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
195*2d1272b8SAndroid Build Coastguard Worker 	{
196*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0B05u:
197*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x0B3Eu == buffer->cur (1).codepoint;
198*2d1272b8SAndroid Build Coastguard Worker 	    break;
199*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0B0Fu: case 0x0B13u:
200*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x0B57u == buffer->cur (1).codepoint;
201*2d1272b8SAndroid Build Coastguard Worker 	    break;
202*2d1272b8SAndroid Build Coastguard Worker 	}
203*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
204*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
205*2d1272b8SAndroid Build Coastguard Worker       }
206*2d1272b8SAndroid Build Coastguard Worker       break;
207*2d1272b8SAndroid Build Coastguard Worker 
208*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_TAMIL:
209*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
210*2d1272b8SAndroid Build Coastguard Worker       {
211*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
212*2d1272b8SAndroid Build Coastguard Worker 	if (0x0B85u == buffer->cur ().codepoint &&
213*2d1272b8SAndroid Build Coastguard Worker 	    0x0BC2u == buffer->cur (1).codepoint)
214*2d1272b8SAndroid Build Coastguard Worker 	{
215*2d1272b8SAndroid Build Coastguard Worker 	  matched = true;
216*2d1272b8SAndroid Build Coastguard Worker 	}
217*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
218*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
219*2d1272b8SAndroid Build Coastguard Worker       }
220*2d1272b8SAndroid Build Coastguard Worker       break;
221*2d1272b8SAndroid Build Coastguard Worker 
222*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_TELUGU:
223*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
224*2d1272b8SAndroid Build Coastguard Worker       {
225*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
226*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
227*2d1272b8SAndroid Build Coastguard Worker 	{
228*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0C12u:
229*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
230*2d1272b8SAndroid Build Coastguard Worker 	    {
231*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0C4Cu: case 0x0C55u:
232*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
233*2d1272b8SAndroid Build Coastguard Worker 		break;
234*2d1272b8SAndroid Build Coastguard Worker 	    }
235*2d1272b8SAndroid Build Coastguard Worker 	    break;
236*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0C3Fu: case 0x0C46u: case 0x0C4Au:
237*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x0C55u == buffer->cur (1).codepoint;
238*2d1272b8SAndroid Build Coastguard Worker 	    break;
239*2d1272b8SAndroid Build Coastguard Worker 	}
240*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
241*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
242*2d1272b8SAndroid Build Coastguard Worker       }
243*2d1272b8SAndroid Build Coastguard Worker       break;
244*2d1272b8SAndroid Build Coastguard Worker 
245*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_KANNADA:
246*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
247*2d1272b8SAndroid Build Coastguard Worker       {
248*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
249*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
250*2d1272b8SAndroid Build Coastguard Worker 	{
251*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0C89u: case 0x0C8Bu:
252*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x0CBEu == buffer->cur (1).codepoint;
253*2d1272b8SAndroid Build Coastguard Worker 	    break;
254*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0C92u:
255*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x0CCCu == buffer->cur (1).codepoint;
256*2d1272b8SAndroid Build Coastguard Worker 	    break;
257*2d1272b8SAndroid Build Coastguard Worker 	}
258*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
259*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
260*2d1272b8SAndroid Build Coastguard Worker       }
261*2d1272b8SAndroid Build Coastguard Worker       break;
262*2d1272b8SAndroid Build Coastguard Worker 
263*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_MALAYALAM:
264*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
265*2d1272b8SAndroid Build Coastguard Worker       {
266*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
267*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
268*2d1272b8SAndroid Build Coastguard Worker 	{
269*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0D07u: case 0x0D09u:
270*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x0D57u == buffer->cur (1).codepoint;
271*2d1272b8SAndroid Build Coastguard Worker 	    break;
272*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0D0Eu:
273*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x0D46u == buffer->cur (1).codepoint;
274*2d1272b8SAndroid Build Coastguard Worker 	    break;
275*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0D12u:
276*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
277*2d1272b8SAndroid Build Coastguard Worker 	    {
278*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0D3Eu: case 0x0D57u:
279*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
280*2d1272b8SAndroid Build Coastguard Worker 		break;
281*2d1272b8SAndroid Build Coastguard Worker 	    }
282*2d1272b8SAndroid Build Coastguard Worker 	    break;
283*2d1272b8SAndroid Build Coastguard Worker 	}
284*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
285*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
286*2d1272b8SAndroid Build Coastguard Worker       }
287*2d1272b8SAndroid Build Coastguard Worker       break;
288*2d1272b8SAndroid Build Coastguard Worker 
289*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_SINHALA:
290*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
291*2d1272b8SAndroid Build Coastguard Worker       {
292*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
293*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
294*2d1272b8SAndroid Build Coastguard Worker 	{
295*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0D85u:
296*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
297*2d1272b8SAndroid Build Coastguard Worker 	    {
298*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0DCFu: case 0x0DD0u: case 0x0DD1u:
299*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
300*2d1272b8SAndroid Build Coastguard Worker 		break;
301*2d1272b8SAndroid Build Coastguard Worker 	    }
302*2d1272b8SAndroid Build Coastguard Worker 	    break;
303*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0D8Bu: case 0x0D8Fu: case 0x0D94u:
304*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x0DDFu == buffer->cur (1).codepoint;
305*2d1272b8SAndroid Build Coastguard Worker 	    break;
306*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0D8Du:
307*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x0DD8u == buffer->cur (1).codepoint;
308*2d1272b8SAndroid Build Coastguard Worker 	    break;
309*2d1272b8SAndroid Build Coastguard Worker 	  case 0x0D91u:
310*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
311*2d1272b8SAndroid Build Coastguard Worker 	    {
312*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0DCAu: case 0x0DD9u: case 0x0DDAu: case 0x0DDCu:
313*2d1272b8SAndroid Build Coastguard Worker 	      case 0x0DDDu: case 0x0DDEu:
314*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
315*2d1272b8SAndroid Build Coastguard Worker 		break;
316*2d1272b8SAndroid Build Coastguard Worker 	    }
317*2d1272b8SAndroid Build Coastguard Worker 	    break;
318*2d1272b8SAndroid Build Coastguard Worker 	}
319*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
320*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
321*2d1272b8SAndroid Build Coastguard Worker       }
322*2d1272b8SAndroid Build Coastguard Worker       break;
323*2d1272b8SAndroid Build Coastguard Worker 
324*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_BRAHMI:
325*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
326*2d1272b8SAndroid Build Coastguard Worker       {
327*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
328*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
329*2d1272b8SAndroid Build Coastguard Worker 	{
330*2d1272b8SAndroid Build Coastguard Worker 	  case 0x11005u:
331*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x11038u == buffer->cur (1).codepoint;
332*2d1272b8SAndroid Build Coastguard Worker 	    break;
333*2d1272b8SAndroid Build Coastguard Worker 	  case 0x1100Bu:
334*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x1103Eu == buffer->cur (1).codepoint;
335*2d1272b8SAndroid Build Coastguard Worker 	    break;
336*2d1272b8SAndroid Build Coastguard Worker 	  case 0x1100Fu:
337*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x11042u == buffer->cur (1).codepoint;
338*2d1272b8SAndroid Build Coastguard Worker 	    break;
339*2d1272b8SAndroid Build Coastguard Worker 	}
340*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
341*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
342*2d1272b8SAndroid Build Coastguard Worker       }
343*2d1272b8SAndroid Build Coastguard Worker       break;
344*2d1272b8SAndroid Build Coastguard Worker 
345*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_KHOJKI:
346*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
347*2d1272b8SAndroid Build Coastguard Worker       {
348*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
349*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
350*2d1272b8SAndroid Build Coastguard Worker 	{
351*2d1272b8SAndroid Build Coastguard Worker 	  case 0x11200u:
352*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
353*2d1272b8SAndroid Build Coastguard Worker 	    {
354*2d1272b8SAndroid Build Coastguard Worker 	      case 0x1122Cu: case 0x11231u: case 0x11233u:
355*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
356*2d1272b8SAndroid Build Coastguard Worker 		break;
357*2d1272b8SAndroid Build Coastguard Worker 	    }
358*2d1272b8SAndroid Build Coastguard Worker 	    break;
359*2d1272b8SAndroid Build Coastguard Worker 	  case 0x11206u:
360*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x1122Cu == buffer->cur (1).codepoint;
361*2d1272b8SAndroid Build Coastguard Worker 	    break;
362*2d1272b8SAndroid Build Coastguard Worker 	  case 0x1122Cu:
363*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
364*2d1272b8SAndroid Build Coastguard Worker 	    {
365*2d1272b8SAndroid Build Coastguard Worker 	      case 0x11230u: case 0x11231u:
366*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
367*2d1272b8SAndroid Build Coastguard Worker 		break;
368*2d1272b8SAndroid Build Coastguard Worker 	    }
369*2d1272b8SAndroid Build Coastguard Worker 	    break;
370*2d1272b8SAndroid Build Coastguard Worker 	  case 0x11240u:
371*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x1122Eu == buffer->cur (1).codepoint;
372*2d1272b8SAndroid Build Coastguard Worker 	    break;
373*2d1272b8SAndroid Build Coastguard Worker 	}
374*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
375*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
376*2d1272b8SAndroid Build Coastguard Worker       }
377*2d1272b8SAndroid Build Coastguard Worker       break;
378*2d1272b8SAndroid Build Coastguard Worker 
379*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_KHUDAWADI:
380*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
381*2d1272b8SAndroid Build Coastguard Worker       {
382*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
383*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
384*2d1272b8SAndroid Build Coastguard Worker 	{
385*2d1272b8SAndroid Build Coastguard Worker 	  case 0x112B0u:
386*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
387*2d1272b8SAndroid Build Coastguard Worker 	    {
388*2d1272b8SAndroid Build Coastguard Worker 	      case 0x112E0u: case 0x112E5u: case 0x112E6u: case 0x112E7u:
389*2d1272b8SAndroid Build Coastguard Worker 	      case 0x112E8u:
390*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
391*2d1272b8SAndroid Build Coastguard Worker 		break;
392*2d1272b8SAndroid Build Coastguard Worker 	    }
393*2d1272b8SAndroid Build Coastguard Worker 	    break;
394*2d1272b8SAndroid Build Coastguard Worker 	}
395*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
396*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
397*2d1272b8SAndroid Build Coastguard Worker       }
398*2d1272b8SAndroid Build Coastguard Worker       break;
399*2d1272b8SAndroid Build Coastguard Worker 
400*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_TIRHUTA:
401*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
402*2d1272b8SAndroid Build Coastguard Worker       {
403*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
404*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
405*2d1272b8SAndroid Build Coastguard Worker 	{
406*2d1272b8SAndroid Build Coastguard Worker 	  case 0x11481u:
407*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x114B0u == buffer->cur (1).codepoint;
408*2d1272b8SAndroid Build Coastguard Worker 	    break;
409*2d1272b8SAndroid Build Coastguard Worker 	  case 0x1148Bu: case 0x1148Du:
410*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x114BAu == buffer->cur (1).codepoint;
411*2d1272b8SAndroid Build Coastguard Worker 	    break;
412*2d1272b8SAndroid Build Coastguard Worker 	  case 0x114AAu:
413*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
414*2d1272b8SAndroid Build Coastguard Worker 	    {
415*2d1272b8SAndroid Build Coastguard Worker 	      case 0x114B5u: case 0x114B6u:
416*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
417*2d1272b8SAndroid Build Coastguard Worker 		break;
418*2d1272b8SAndroid Build Coastguard Worker 	    }
419*2d1272b8SAndroid Build Coastguard Worker 	    break;
420*2d1272b8SAndroid Build Coastguard Worker 	}
421*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
422*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
423*2d1272b8SAndroid Build Coastguard Worker       }
424*2d1272b8SAndroid Build Coastguard Worker       break;
425*2d1272b8SAndroid Build Coastguard Worker 
426*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_MODI:
427*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
428*2d1272b8SAndroid Build Coastguard Worker       {
429*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
430*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
431*2d1272b8SAndroid Build Coastguard Worker 	{
432*2d1272b8SAndroid Build Coastguard Worker 	  case 0x11600u: case 0x11601u:
433*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
434*2d1272b8SAndroid Build Coastguard Worker 	    {
435*2d1272b8SAndroid Build Coastguard Worker 	      case 0x11639u: case 0x1163Au:
436*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
437*2d1272b8SAndroid Build Coastguard Worker 		break;
438*2d1272b8SAndroid Build Coastguard Worker 	    }
439*2d1272b8SAndroid Build Coastguard Worker 	    break;
440*2d1272b8SAndroid Build Coastguard Worker 	}
441*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
442*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
443*2d1272b8SAndroid Build Coastguard Worker       }
444*2d1272b8SAndroid Build Coastguard Worker       break;
445*2d1272b8SAndroid Build Coastguard Worker 
446*2d1272b8SAndroid Build Coastguard Worker     case HB_SCRIPT_TAKRI:
447*2d1272b8SAndroid Build Coastguard Worker       for (buffer->idx = 0; buffer->idx + 1 < count && buffer->successful;)
448*2d1272b8SAndroid Build Coastguard Worker       {
449*2d1272b8SAndroid Build Coastguard Worker 	bool matched = false;
450*2d1272b8SAndroid Build Coastguard Worker 	switch (buffer->cur ().codepoint)
451*2d1272b8SAndroid Build Coastguard Worker 	{
452*2d1272b8SAndroid Build Coastguard Worker 	  case 0x11680u:
453*2d1272b8SAndroid Build Coastguard Worker 	    switch (buffer->cur (1).codepoint)
454*2d1272b8SAndroid Build Coastguard Worker 	    {
455*2d1272b8SAndroid Build Coastguard Worker 	      case 0x116ADu: case 0x116B4u: case 0x116B5u:
456*2d1272b8SAndroid Build Coastguard Worker 		matched = true;
457*2d1272b8SAndroid Build Coastguard Worker 		break;
458*2d1272b8SAndroid Build Coastguard Worker 	    }
459*2d1272b8SAndroid Build Coastguard Worker 	    break;
460*2d1272b8SAndroid Build Coastguard Worker 	  case 0x11686u:
461*2d1272b8SAndroid Build Coastguard Worker 	    matched = 0x116B2u == buffer->cur (1).codepoint;
462*2d1272b8SAndroid Build Coastguard Worker 	    break;
463*2d1272b8SAndroid Build Coastguard Worker 	}
464*2d1272b8SAndroid Build Coastguard Worker 	(void) buffer->next_glyph ();
465*2d1272b8SAndroid Build Coastguard Worker 	if (matched) _output_with_dotted_circle (buffer);
466*2d1272b8SAndroid Build Coastguard Worker       }
467*2d1272b8SAndroid Build Coastguard Worker       break;
468*2d1272b8SAndroid Build Coastguard Worker 
469*2d1272b8SAndroid Build Coastguard Worker     default:
470*2d1272b8SAndroid Build Coastguard Worker       break;
471*2d1272b8SAndroid Build Coastguard Worker   }
472*2d1272b8SAndroid Build Coastguard Worker   buffer->sync ();
473*2d1272b8SAndroid Build Coastguard Worker }
474*2d1272b8SAndroid Build Coastguard Worker 
475*2d1272b8SAndroid Build Coastguard Worker 
476*2d1272b8SAndroid Build Coastguard Worker #endif
477*2d1272b8SAndroid Build Coastguard Worker /* == End of generated functions == */
478