[Myanmar] Fixup handling of joiners and GB characters
authorBehdad Esfahbod <behdad@behdad.org>
Mon, 11 Feb 2013 21:06:02 +0000 (16:06 -0500)
committerBehdad Esfahbod <behdad@behdad.org>
Mon, 11 Feb 2013 21:16:07 +0000 (16:16 -0500)
src/hb-ot-shape-complex-myanmar-machine.rl
src/hb-ot-shape-complex-myanmar.cc

index 5db39bf..949fde6 100644 (file)
@@ -44,8 +44,7 @@ C    = 1;
 D    = 19;
 D0   = 20;
 DB   = 3;
-DOTTEDCIRCLE = 12;
-NBSP = 11;
+GB   = 12;
 H    = 4;
 IV   = 2;
 MH   = 21;
@@ -63,7 +62,6 @@ ZWJ  = 6;
 ZWNJ = 5;
 Ra   = 16;
 
-gb = (DOTTEDCIRCLE | NBSP);    # Generic base characters
 j = ZWJ|ZWNJ;                  # Joiners
 k = (Ra As H);                 # Kinzi
 
@@ -77,7 +75,7 @@ pwo_tone_group = PT A* (DB As?)?;
 complex_syllable_tail = As* medial_group main_vowel_group post_vowel_group* pwo_tone_group* V* j?;
 syllable_tail = (H | complex_syllable_tail);
 
-consonant_syllable =   k? (c|IV|D|gb).VS? (H (c|IV).VS?)* syllable_tail;
+consonant_syllable =   k? (c|IV|D|GB).VS? (H (c|IV).VS?)* syllable_tail;
 broken_cluster =       k? VS? syllable_tail;
 other =                        any;
 
index 2f81e45..8988da9 100644 (file)
@@ -146,7 +146,7 @@ enum myanmar_category_t {
   OT_SM   = 8,
   OT_A    = 10,
   OT_NBSP = 11,
-  OT_DOTTEDCIRCLE = 12, /* Not in the spec, but special in Uniscribe. /Very very/ special! */
+  OT_GB = 12,
 
   OT_Ra = 16, /* Not explicitly listed in the OT spec, but used in the grammar. */
   OT_CM = 17, /* Generic Consonant_Medial; NOT used for Myanmar. */
@@ -210,7 +210,7 @@ is_one_of (const hb_glyph_info_t &info, unsigned int flags)
  * We treat Vowels and placeholders as if they were consonants.  This is safe because Vowels
  * cannot happen in a consonant syllable.  The plus side however is, we can call the
  * consonant syllable logic from the vowel syllable function and get it all right! */
-#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_CM) | FLAG (OT_Ra) | FLAG (OT_V) | FLAG (OT_NBSP) | FLAG (OT_DOTTEDCIRCLE))
+#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_CM) | FLAG (OT_Ra) | FLAG (OT_V) | FLAG (OT_NBSP) | FLAG (OT_GB))
 static inline bool
 is_consonant (const hb_glyph_info_t &info)
 {
@@ -232,6 +232,21 @@ set_myanmar_properties (hb_glyph_info_t &info)
     cat = OT_VS;
   switch (u)
   {
+    case 0x002D: case 0x00A0: case 0x00D7: case 0x2012:
+    case 0x2013: case 0x2014: case 0x2015: case 0x2022:
+    case 0x25CC: case 0x25FB: case 0x25FC: case 0x25FD:
+    case 0x25FE:
+      cat = OT_GB;
+      break;
+
+    case 0x200C:
+      cat = OT_ZWNJ;
+      break;
+
+    case 0x200D:
+      cat = OT_ZWJ;
+      break;
+
     case 0x1004: case 0x101B: case 0x105A:
       cat = OT_Ra;
       break;