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