src/gen-use-table.py                       |    7 ++++---
 src/hb-ot-shape-complex-indic-machine.rl   |    5 +++--
 src/hb-ot-shape-complex-indic-private.hh   |    7 ++++---
 src/hb-ot-shape-complex-myanmar-machine.rl |    5 +++--
 src/hb-ot-shape-complex-myanmar.cc         |    6 +++---
 src/hb-ot-shape-complex-use-machine.rl     |    5 +++--
 src/hb-ot-shape-complex-use-private.hh     |    3 ++-
 src/hb-ot-shape-complex-use-table.cc       |    6 ++++--
 8 files changed, 26 insertions(+), 18 deletions(-)

New commits:
commit f559c633073f63b9d87cb2440048b4413cfa1c05
Author: Behdad Esfahbod <[email protected]>
Date:   Tue Oct 3 15:20:07 2017 +0200

    [indic] Implement Consonent_With_Stacker
    
    Fixes https://github.com/behdad/harfbuzz/issues/528

diff --git a/src/hb-ot-shape-complex-indic-machine.rl 
b/src/hb-ot-shape-complex-indic-machine.rl
index 86a7ceb2..58d35c00 100644
--- a/src/hb-ot-shape-complex-indic-machine.rl
+++ b/src/hb-ot-shape-complex-indic-machine.rl
@@ -57,6 +57,7 @@ Repha = 15;
 Ra    = 16;
 CM    = 17;
 Symbol= 18;
+CS    = 19;
 
 c = (C | Ra);                  # is_consonant
 n = ((ZWNJ?.RS)? (N.N?)?);     # is_consonant_modifier
@@ -76,9 +77,9 @@ medial_group = CM?;
 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;
+consonant_syllable =   (Repha|CS)? (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;
+standalone_cluster =   ((Repha|CS)? 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;
diff --git a/src/hb-ot-shape-complex-indic-private.hh 
b/src/hb-ot-shape-complex-indic-private.hh
index c880311e..8263bc80 100644
--- a/src/hb-ot-shape-complex-indic-private.hh
+++ b/src/hb-ot-shape-complex-indic-private.hh
@@ -60,7 +60,8 @@ enum indic_category_t {
   OT_Repha = 15, /* Atomically-encoded logical or visual repha. */
   OT_Ra = 16,
   OT_CM = 17,  /* Consonant-Medial. */
-  OT_Symbol = 18 /* Avagraha, etc that take marks (SM,A,VD). */
+  OT_Symbol = 18, /* Avagraha, etc that take marks (SM,A,VD). */
+  OT_CS = 19
 };
 
 #define MEDIAL_FLAGS (FLAG (OT_CM))
@@ -70,7 +71,7 @@ enum indic_category_t {
  * 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_Ra) | MEDIAL_FLAGS | FLAG 
(OT_V) | FLAG (OT_PLACEHOLDER) | FLAG (OT_DOTTEDCIRCLE))
+#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_CS) | FLAG (OT_Ra) | 
MEDIAL_FLAGS | FLAG (OT_V) | FLAG (OT_PLACEHOLDER) | FLAG (OT_DOTTEDCIRCLE))
 #define JOINER_FLAGS (FLAG (OT_ZWJ) | FLAG (OT_ZWNJ))
 #define HALANT_OR_COENG_FLAGS (FLAG (OT_H) | FLAG (OT_Coeng))
 
@@ -121,7 +122,7 @@ enum indic_syllabic_category_t {
   INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED           = OT_X, /* Don't care. 
*/
   INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED          = OT_CM,
   INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA   = OT_N,
-  INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER       = OT_C,
+  INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER       = OT_CS,
   INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK              = OT_SM,
   INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER            = OT_Coeng,
   INDIC_SYLLABIC_CATEGORY_JOINER                       = OT_ZWJ,
diff --git a/src/hb-ot-shape-complex-myanmar-machine.rl 
b/src/hb-ot-shape-complex-myanmar-machine.rl
index 9649a916..45733ac7 100644
--- a/src/hb-ot-shape-complex-myanmar-machine.rl
+++ b/src/hb-ot-shape-complex-myanmar-machine.rl
@@ -41,7 +41,7 @@
 A    = 10;
 As   = 18;
 C    = 1;
-D    = 19;
+D    = 32;
 D0   = 20;
 DB   = 3;
 GB   = 11;
@@ -62,6 +62,7 @@ ZWJ  = 6;
 ZWNJ = 5;
 Ra   = 16;
 P    = 31;
+CS   = 19;
 
 j = ZWJ|ZWNJ;                  # Joiners
 k = (Ra As H);                 # Kinzi
@@ -76,7 +77,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|CS)? (c|IV|D|GB).VS? (H (c|IV).VS?)* syllable_tail;
 punctuation_cluster =  P V;
 broken_cluster =       k? VS? syllable_tail;
 other =                        any;
diff --git a/src/hb-ot-shape-complex-myanmar.cc 
b/src/hb-ot-shape-complex-myanmar.cc
index ebd2b409..676d4948 100644
--- a/src/hb-ot-shape-complex-myanmar.cc
+++ b/src/hb-ot-shape-complex-myanmar.cc
@@ -130,8 +130,7 @@ enum syllable_type_t {
 /* Note: This enum is duplicated in the -machine.rl source file.
  * Not sure how to avoid duplication. */
 enum myanmar_category_t {
-  OT_As  = 18, /* Asat */
-  OT_D   = 19, /* Digits except zero */
+  OT_As  = 18,  /* Asat */
   OT_D0  = 20, /* Digit zero */
   OT_DB  = OT_N, /* Dot below */
   OT_GB  = OT_PLACEHOLDER,
@@ -145,7 +144,8 @@ enum myanmar_category_t {
   OT_VPre = 28,
   OT_VPst = 29,
   OT_VS   = 30, /* Variation selectors */
-  OT_P    = 31  /* Punctuation */
+  OT_P    = 31, /* Punctuation */
+  OT_D    = 32, /* Digits except zero */
 };
 
 
commit e07669fc43c0e23d337ad984aa128c3a08c9c1bb
Author: Behdad Esfahbod <[email protected]>
Date:   Tue Oct 3 14:57:14 2017 +0200

    [use] Implement Consonant_With_Stacker
    
    Related to https://github.com/behdad/harfbuzz/issues/528

diff --git a/src/gen-use-table.py b/src/gen-use-table.py
index 4f482612..09cc64fa 100755
--- a/src/gen-use-table.py
+++ b/src/gen-use-table.py
@@ -178,6 +178,8 @@ def is_CONS_MOD(U, UISC, UGC):
 def is_CONS_SUB(U, UISC, UGC):
        #SPEC-DRAFT return UISC == Consonant_Subjoined
        return UISC == Consonant_Subjoined and UGC != Lo
+def is_CONS_WITH_STACKER(U, UISC, UGC):
+       return UISC == Consonant_With_Stacker
 def is_HALANT(U, UISC, UGC):
        return UISC in [Virama, Invisible_Stacker]
 def is_HALANT_NUM(U, UISC, UGC):
@@ -199,9 +201,7 @@ def is_OTHER(U, UISC, UGC):
 def is_Reserved(U, UISC, UGC):
        return UGC == 'Cn'
 def is_REPHA(U, UISC, UGC):
-       #return UISC == Consonant_Preceding_Repha
-       #SPEC-OUTDATED hack to categorize Consonant_With_Stacker and 
Consonant_Prefixed
-       return UISC in [Consonant_Preceding_Repha, Consonant_With_Stacker, 
Consonant_Prefixed]
+       return UISC in [Consonant_Preceding_Repha, Consonant_Prefixed]
 def is_SYM(U, UISC, UGC):
        if U == 0x25CC: return False #SPEC-DRAFT
        #SPEC-DRAFT return UGC in [So, Sc] or UISC == Symbol_Letter
@@ -230,6 +230,7 @@ use_mapping = {
        'M':    is_CONS_MED,
        'CM':   is_CONS_MOD,
        'SUB':  is_CONS_SUB,
+       'CS':   is_CONS_WITH_STACKER,
        'H':    is_HALANT,
        'HN':   is_HALANT_NUM,
        'ZWNJ': is_ZWNJ,
diff --git a/src/hb-ot-shape-complex-use-machine.rl 
b/src/hb-ot-shape-complex-use-machine.rl
index 2a7f7511..7bd8fce1 100644
--- a/src/hb-ot-shape-complex-use-machine.rl
+++ b/src/hb-ot-shape-complex-use-machine.rl
@@ -86,6 +86,7 @@ VMPst = 39; # VOWEL_MOD_POST
 VMPre  = 23; # VOWEL_MOD_PRE
 SMAbv  = 41; # SYM_MOD_ABOVE
 SMBlw  = 42; # SYM_MOD_BELOW
+CS     = 43; # CONS_WITH_STACKER
 
 
 consonant_modifiers = CMAbv* CMBlw* ((H B | SUB) VS? CMAbv? CMBlw*)*;
@@ -96,12 +97,12 @@ vowel_modifiers = VMPre* VMAbv* VMBlw* VMPst*;
 final_consonants = FAbv* FBlw* FPst* FM?;
 
 virama_terminated_cluster =
-       R? (B | GB) VS?
+       (R|CS)? (B | GB) VS?
        consonant_modifiers
        H
 ;
 standard_cluster =
-       R? (B | GB) VS?
+       (R|CS)? (B | GB) VS?
        consonant_modifiers
        medial_consonants
        dependent_vowels
diff --git a/src/hb-ot-shape-complex-use-private.hh 
b/src/hb-ot-shape-complex-use-private.hh
index ae428cb5..3e763ae3 100644
--- a/src/hb-ot-shape-complex-use-private.hh
+++ b/src/hb-ot-shape-complex-use-private.hh
@@ -87,7 +87,8 @@ enum use_category_t {
   USE_VMPst    = 39,   /* VOWEL_MOD_POST */
   USE_VMPre    = 23,   /* VOWEL_MOD_PRE */
   USE_SMAbv    = 41,   /* SYM_MOD_ABOVE */
-  USE_SMBlw    = 42    /* SYM_MOD_BELOW */
+  USE_SMBlw    = 42,   /* SYM_MOD_BELOW */
+  USE_CS       = 43    /* CONS_WITH_STACKER */
 };
 
 HB_INTERNAL USE_TABLE_ELEMENT_TYPE
diff --git a/src/hb-ot-shape-complex-use-table.cc 
b/src/hb-ot-shape-complex-use-table.cc
index daae04ed..1f90fc85 100644
--- a/src/hb-ot-shape-complex-use-table.cc
+++ b/src/hb-ot-shape-complex-use-table.cc
@@ -19,6 +19,7 @@
 
 #define B      USE_B   /* BASE */
 #define CGJ    USE_CGJ /* CGJ */
+#define CS     USE_CS  /* CONS_WITH_STACKER */
 #define FM     USE_FM  /* CONS_FINAL_MOD */
 #define GB     USE_GB  /* BASE_OTHER */
 #define H      USE_H   /* HALANT */
@@ -163,7 +164,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
   /* 0CC0 */  VAbv,  VPst,  VPst,  VPst,  VPst,     O,  VAbv,  VAbv,  VAbv,    
 O,  VAbv,  VAbv,  VAbv,     H,     O,     O,
   /* 0CD0 */     O,     O,     O,     O,     O,  VPst,  VPst,     O,     O,    
 O,     O,     O,     O,     O,     B,     O,
   /* 0CE0 */     B,     B,  VBlw,  VBlw,     O,     O,     B,     B,     B,    
 B,     B,     B,     B,     B,     B,     B,
-  /* 0CF0 */     O,     R,     R,     O,     O,     O,     O,     O,     O,    
 O,     O,     O,     O,     O,     O,     O,
+  /* 0CF0 */     O,    CS,    CS,     O,     O,     O,     O,     O,     O,    
 O,     O,     O,     O,     O,     O,     O,
 
   /* Malayalam */
 
@@ -467,7 +468,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
 
   /* Brahmi */
 
-  /* 11000 */ VMPst, VMAbv, VMPst,     R,     R,     B,     B,     B,     B,   
  B,     B,     B,     B,     B,     B,     B,
+  /* 11000 */ VMPst, VMAbv, VMPst,    CS,    CS,     B,     B,     B,     B,   
  B,     B,     B,     B,     B,     B,     B,
   /* 11010 */     B,     B,     B,     B,     B,     B,     B,     B,     B,   
  B,     B,     B,     B,     B,     B,     B,
   /* 11020 */     B,     B,     B,     B,     B,     B,     B,     B,     B,   
  B,     B,     B,     B,     B,     B,     B,
   /* 11030 */     B,     B,     B,     B,     B,     B,     B,     B,  VAbv,  
VAbv,  VAbv,  VAbv,  VBlw,  VBlw,  VBlw,  VBlw,
@@ -729,6 +730,7 @@ hb_use_get_categories (hb_codepoint_t u)
 
 #undef B
 #undef CGJ
+#undef CS
 #undef FM
 #undef GB
 #undef H
_______________________________________________
HarfBuzz mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to