src/hb-ot-shape-complex-indic-machine.rl | 13 ++++++------- src/hb-ot-shape-complex-indic-private.hh | 4 ++-- src/hb-ot-shape-complex-indic.cc | 27 ++++++++++++++++++++------- 3 files changed, 28 insertions(+), 16 deletions(-)
New commits: commit e9b2a4cfe593bdbe9288571635ba26ac42ede987 Author: Behdad Esfahbod <beh...@behdad.org> Date: Fri May 23 15:49:10 2014 -0400 [indic] Support U+1CED diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc index 230c8e4..f17cf41 100644 --- a/src/hb-ot-shape-complex-indic.cc +++ b/src/hb-ot-shape-complex-indic.cc @@ -215,6 +215,11 @@ set_indic_properties (hb_glyph_info_t &info) * For now, just treat them like regular tone marks. */ else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1CE2, 0x1CE8))) cat = OT_A; + /* TODO: The following should only be allowed after some of + * the nasalization marks, maybe only for U+1CE9..U+1CF1. + * For now, just treat them like tone marks. */ + else if (unlikely (u == 0x1CED)) + cat = OT_A; /* The following are Visarga variants. */ else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1CF2, 0x1CF3))) { commit d19f8e85702a1e473efe2f02027984dcc127602a Author: Behdad Esfahbod <beh...@behdad.org> Date: Fri May 23 15:45:50 2014 -0400 [indic] Support U+A8F2..A8F7,1CE9..1CEC,1CEE..1CF1 diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc index 89fc46c..230c8e4 100644 --- a/src/hb-ot-shape-complex-indic.cc +++ b/src/hb-ot-shape-complex-indic.cc @@ -221,6 +221,14 @@ set_indic_properties (hb_glyph_info_t &info) cat = OT_SM; ASSERT_STATIC ((int) INDIC_SYLLABIC_CATEGORY_VISARGA == OT_SM); } + /* The following take marks in standalone clusters, similar to Avagraha. */ + else if (unlikely (hb_in_ranges<hb_codepoint_t> (u, 0xA8F2, 0xA8F7, + 0x1CE9, 0x1CEC, + 0x1CEE, 0x1CF1))) + { + cat = OT_Symbol; + ASSERT_STATIC ((int) INDIC_SYLLABIC_CATEGORY_AVAGRAHA == OT_Symbol); + } if (unlikely (u == 0x17D1)) cat = OT_X; commit ddbdfcbf1c10eed0a7b81b29fee99f1bd22113e5 Author: Behdad Esfahbod <beh...@behdad.org> Date: Fri May 23 15:39:55 2014 -0400 [indic] Simplify grammar No functional change. diff --git a/src/hb-ot-shape-complex-indic-machine.rl b/src/hb-ot-shape-complex-indic-machine.rl index 926c2eb..8332348 100644 --- a/src/hb-ot-shape-complex-indic-machine.rl +++ b/src/hb-ot-shape-complex-indic-machine.rl @@ -69,19 +69,18 @@ cn = c.ZWJ?.n?; forced_rakar = ZWJ H ZWJ Ra; symbol = Symbol.N?; matra_group = z{0,3}.M.N?.(H | forced_rakar)?; -syllable_tail2 = (SM.SM?.ZWNJ?)? A{0,3}? VD{0,2}; -syllable_tail = (Coeng (cn|V))? syllable_tail2; +syllable_tail = (SM.SM?.ZWNJ?)? A{0,3}? VD{0,2}; place_holder = NBSP | DOTTEDCIRCLE; halant_group = (z?.h.(ZWJ.N?)?); final_halant_group = halant_group | h.ZWNJ; medial_group = CM?.CM2?; -halant_or_matra_group = (final_halant_group | (h.ZWJ)? matra_group{0,4}); +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 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 = reph? place_holder.n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail; -symbol_cluster = symbol syllable_tail2; +symbol_cluster = symbol syllable_tail; broken_cluster = reph? n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail; other = any; commit 4e9b1f662b23966e67c548b86afeff2bec9b0eb7 Author: Behdad Esfahbod <beh...@behdad.org> Date: Fri May 23 15:38:42 2014 -0400 [indic] Always start new syllable for Avagraha In fact, the previous grammar was ambigious. No functional change. diff --git a/src/hb-ot-shape-complex-indic-machine.rl b/src/hb-ot-shape-complex-indic-machine.rl index c64c03e..926c2eb 100644 --- a/src/hb-ot-shape-complex-indic-machine.rl +++ b/src/hb-ot-shape-complex-indic-machine.rl @@ -70,7 +70,7 @@ forced_rakar = ZWJ H ZWJ Ra; symbol = Symbol.N?; matra_group = z{0,3}.M.N?.(H | forced_rakar)?; syllable_tail2 = (SM.SM?.ZWNJ?)? A{0,3}? VD{0,2}; -syllable_tail = (Coeng (cn|V))? symbol? syllable_tail2; +syllable_tail = (Coeng (cn|V))? syllable_tail2; place_holder = NBSP | DOTTEDCIRCLE; halant_group = (z?.h.(ZWJ.N?)?); final_halant_group = halant_group | h.ZWNJ; commit 9f9bd9bf31161660214b8b39a78cdafbb79db1be Author: Behdad Esfahbod <beh...@behdad.org> Date: Fri May 23 15:33:13 2014 -0400 [indic] Rename avagraha cluster to symbol cluster In anticipation of adding more characters to that class of clusters. diff --git a/src/hb-ot-shape-complex-indic-machine.rl b/src/hb-ot-shape-complex-indic-machine.rl index 5e28843..c64c03e 100644 --- a/src/hb-ot-shape-complex-indic-machine.rl +++ b/src/hb-ot-shape-complex-indic-machine.rl @@ -56,7 +56,7 @@ Coeng = 14; Repha = 15; Ra = 16; CM = 17; -Avag = 18; +Symbol= 18; CM2 = 31; c = (C | Ra); # is_consonant @@ -67,10 +67,10 @@ reph = (Ra H | Repha); # possible reph cn = c.ZWJ?.n?; forced_rakar = ZWJ H ZWJ Ra; -avagraha = Avag.N?; +symbol = Symbol.N?; matra_group = z{0,3}.M.N?.(H | forced_rakar)?; syllable_tail2 = (SM.SM?.ZWNJ?)? A{0,3}? VD{0,2}; -syllable_tail = (Coeng (cn|V))? avagraha? syllable_tail2; +syllable_tail = (Coeng (cn|V))? symbol? syllable_tail2; place_holder = NBSP | DOTTEDCIRCLE; halant_group = (z?.h.(ZWJ.N?)?); final_halant_group = halant_group | h.ZWNJ; @@ -81,7 +81,7 @@ halant_or_matra_group = (final_halant_group | (h.ZWJ)? matra_group{0,4}); 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 = reph? place_holder.n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail; -avagraha_cluster = avagraha syllable_tail2; +symbol_cluster = symbol syllable_tail2; broken_cluster = reph? n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail; other = any; @@ -89,7 +89,7 @@ main := |* consonant_syllable => { found_syllable (consonant_syllable); }; vowel_syllable => { found_syllable (vowel_syllable); }; standalone_cluster => { found_syllable (standalone_cluster); }; - avagraha_cluster => { found_syllable (avagraha_cluster); }; + symbol_cluster => { found_syllable (symbol_cluster); }; broken_cluster => { found_syllable (broken_cluster); }; other => { found_syllable (non_indic_cluster); }; *|; diff --git a/src/hb-ot-shape-complex-indic-private.hh b/src/hb-ot-shape-complex-indic-private.hh index 3de5c20..fe8b207 100644 --- a/src/hb-ot-shape-complex-indic-private.hh +++ b/src/hb-ot-shape-complex-indic-private.hh @@ -60,7 +60,7 @@ enum indic_category_t { OT_Repha = 15, /* Atomically-encoded logical or visual repha. */ OT_Ra = 16, OT_CM = 17, /* Consonant-Medial. */ - OT_Avag = 18, /* Avagraha. */ + OT_Symbol = 18, /* Avagraha, etc that take marks (SM,A,VD). */ OT_CM2 = 31 /* Consonant-Medial, second slot. */ }; @@ -95,7 +95,7 @@ enum indic_position_t { enum indic_syllabic_category_t { INDIC_SYLLABIC_CATEGORY_OTHER = OT_X, - INDIC_SYLLABIC_CATEGORY_AVAGRAHA = OT_Avag, + INDIC_SYLLABIC_CATEGORY_AVAGRAHA = OT_Symbol, INDIC_SYLLABIC_CATEGORY_BINDU = OT_SM, INDIC_SYLLABIC_CATEGORY_CONSONANT = OT_C, INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD = OT_C, diff --git a/src/hb-ot-shape-complex-indic.cc b/src/hb-ot-shape-complex-indic.cc index c20ffd0..89fc46c 100644 --- a/src/hb-ot-shape-complex-indic.cc +++ b/src/hb-ot-shape-complex-indic.cc @@ -271,7 +271,7 @@ set_indic_properties (hb_glyph_info_t &info) { pos = matra_position (u, pos); } - else if ((FLAG (cat) & (FLAG (OT_SM) | FLAG (OT_VD) | FLAG (OT_A) | FLAG (OT_Avag)))) + else if ((FLAG (cat) & (FLAG (OT_SM) | FLAG (OT_VD) | FLAG (OT_A) | FLAG (OT_Symbol)))) { pos = POS_SMVD; } @@ -639,7 +639,7 @@ enum syllable_type_t { consonant_syllable, vowel_syllable, standalone_cluster, - avagraha_cluster, + symbol_cluster, broken_cluster, non_indic_cluster, }; @@ -1207,10 +1207,10 @@ initial_reordering_broken_cluster (const hb_ot_shape_plan_t *plan, } static void -initial_reordering_avagraha_cluster (const hb_ot_shape_plan_t *plan HB_UNUSED, - hb_face_t *face HB_UNUSED, - hb_buffer_t *buffer HB_UNUSED, - unsigned int start HB_UNUSED, unsigned int end HB_UNUSED) +initial_reordering_symbol_cluster (const hb_ot_shape_plan_t *plan HB_UNUSED, + hb_face_t *face HB_UNUSED, + hb_buffer_t *buffer HB_UNUSED, + unsigned int start HB_UNUSED, unsigned int end HB_UNUSED) { /* Nothing to do right now. If we ever switch to using the output * buffer in the reordering process, we'd need to next_glyph() here. */ @@ -1238,7 +1238,7 @@ initial_reordering_syllable (const hb_ot_shape_plan_t *plan, case consonant_syllable: initial_reordering_consonant_syllable (plan, face, buffer, start, end); return; case vowel_syllable: initial_reordering_vowel_syllable (plan, face, buffer, start, end); return; case standalone_cluster: initial_reordering_standalone_cluster (plan, face, buffer, start, end); return; - case avagraha_cluster: initial_reordering_avagraha_cluster (plan, face, buffer, start, end); return; + case symbol_cluster: initial_reordering_symbol_cluster (plan, face, buffer, start, end); return; case broken_cluster: initial_reordering_broken_cluster (plan, face, buffer, start, end); return; case non_indic_cluster: initial_reordering_non_indic_cluster (plan, face, buffer, start, end); return; } _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/harfbuzz