Imported Upstream version 0.9.35
[platform/upstream/harfbuzz.git] / src / hb-ot-shape-complex-indic-machine.rl
index 11115c9..f6768a5 100644 (file)
@@ -49,15 +49,17 @@ M    = 7;
 SM   = 8;
 VD   = 9;
 A    = 10;
-NBSP = 11;
+PLACEHOLDER = 11;
 DOTTEDCIRCLE = 12;
-RS   = 13;
+RS    = 13;
 Coeng = 14;
 Repha = 15;
 Ra    = 16;
 CM    = 17;
+Symbol= 18;
+CM2   = 31;
 
-c = (C | Ra)CM*;               # is_consonant
+c = (C | Ra);                  # is_consonant
 n = ((ZWNJ?.RS)? (N.N?)?);     # is_consonant_modifier
 z = ZWJ|ZWNJ;                  # is_joiner
 h = H | Coeng;                 # is_halant_or_coeng
@@ -65,24 +67,28 @@ reph = (Ra H | Repha);              # possible reph
 
 cn = c.ZWJ?.n?;
 forced_rakar = ZWJ H ZWJ Ra;
+symbol = Symbol.N?;
 matra_group = z{0,3}.M.N?.(H | forced_rakar)?;
-syllable_tail =  (Coeng (cn|V))? (SM.ZWNJ?)? (VD VD?)?;
-place_holder = NBSP | DOTTEDCIRCLE;
+syllable_tail = (SM.SM?.ZWNJ?)? A{0,3}? VD{0,2};
+place_holder = PLACEHOLDER | DOTTEDCIRCLE;
 halant_group = (z?.h.(ZWJ.N?)?);
 final_halant_group = halant_group | h.ZWNJ;
-halant_or_matra_group = (final_halant_group | (h.ZWJ)? matra_group{0,4});
+medial_group = CM?.CM2?;
+halant_or_matra_group = (final_halant_group | (h.ZWJ)? matra_group{0,4}) (Coeng (cn|V))?;
 
 
-consonant_syllable =   Repha? (cn.halant_group){0,4} cn A? halant_or_matra_group? syllable_tail;
-vowel_syllable =       reph? V.n? (ZWJ | (halant_group.cn){0,4} halant_or_matra_group? syllable_tail);
-standalone_cluster =   reph? place_holder.n? (halant_group.cn){0,4} halant_or_matra_group? syllable_tail;
-broken_cluster =       reph? n? (halant_group.cn){0,4} halant_or_matra_group syllable_tail;
+consonant_syllable =   Repha? (cn.halant_group){0,4} cn medial_group halant_or_matra_group syllable_tail;
+vowel_syllable =       reph? V.n? (ZWJ | (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail);
+standalone_cluster =   (Repha? PLACEHOLDER | reph? DOTTEDCIRCLE).n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail;
+symbol_cluster =       symbol syllable_tail;
+broken_cluster =       reph? n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail;
 other =                        any;
 
 main := |*
        consonant_syllable      => { found_syllable (consonant_syllable); };
        vowel_syllable          => { found_syllable (vowel_syllable); };
        standalone_cluster      => { found_syllable (standalone_cluster); };
+       symbol_cluster          => { found_syllable (symbol_cluster); };
        broken_cluster          => { found_syllable (broken_cluster); };
        other                   => { found_syllable (non_indic_cluster); };
 *|;
@@ -103,7 +109,7 @@ main := |*
 static void
 find_syllables (hb_buffer_t *buffer)
 {
-  unsigned int p, pe, eof, ts HB_UNUSED, te, act;
+  unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED;
   int cs;
   hb_glyph_info_t *info = buffer->info;
   %%{