[USE] Fix-up variation selectors and word joiner in table
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 21 Jul 2015 15:46:37 +0000 (16:46 +0100)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 21 Jul 2015 15:46:37 +0000 (16:46 +0100)
src/gen-use-table.py
src/hb-ot-shape-complex-use-table.cc

index c4ec62c..be04e4b 100755 (executable)
@@ -41,8 +41,11 @@ for i, f in enumerate (files):
 
 defaults = ('Other', 'Not_Applicable', 'Cn', 'No_Block')
 
-# TODO CGJ is not in Unicode Indic files, but used in USE
+# TODO Characters that are not in Unicode Indic files, but used in USE
 data[0][0x034F] = defaults[0]
+data[0][0x2060] = defaults[0]
+for u in range (0xFE00, 0xFE0F + 1):
+       data[0][u] = defaults[0]
 
 # Merge data into one dict:
 for i,v in enumerate (defaults):
@@ -187,6 +190,8 @@ def is_OTHER(U, UISC, UGC):
        return (UISC == Other
                and not is_SYM_MOD(U, UISC, UGC)
                and not is_CGJ(U, UISC, UGC)
+               and not is_Word_Joiner(U, UISC, UGC)
+               and not is_VARIATION_SELECTOR(U, UISC, UGC)
        )
 def is_Reserved(U, UISC, UGC):
        return UGC == 'Cn'
index 17b4084..6cd1c5d 100644 (file)
@@ -333,15 +333,16 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
                                                                          O,     O,     O,     O,  ZWNJ,   ZWJ,     O,     O,
   /* 2010 */    GB,    GB,    GB,    GB,    GB,     O,     O,     O,
 
-#define use_offset_0x2070u 2568
+#define use_offset_0x2060u 2568
 
+  /* 2060 */    WJ,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Superscripts and Subscripts */
 
   /* 2070 */     O,     O,     O,     O,    FM,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
   /* 2080 */     O,     O,    FM,    FM,    FM,     O,     O,     O,
 
-#define use_offset_0xa800u 2592
+#define use_offset_0xa800u 2608
 
 
   /* Syloti Nagri */
@@ -428,7 +429,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
   /* AAE0 */    IV,    IV,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPre,  VBlw,  VAbv,  VPre,  VPst,
   /* AAF0 */     O,     O,     O,     O,     O, VMPst,     H,     O,
 
-#define use_offset_0xabc0u 3352
+#define use_offset_0xabc0u 3368
 
 
   /* Meetei Mayek */
@@ -438,7 +439,14 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
   /* ABE0 */     B,     B,     B,  VPst,  VPst,  VAbv,  VPst,  VPst,  VBlw,  VPst,  VPst,     O, VMPst,  VBlw,     O,     O,
   /* ABF0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
 
-#define use_offset_0x10a00u 3416
+#define use_offset_0xfe00u 3432
+
+
+  /* Variation Selectors */
+
+  /* FE00 */    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,    VS,
+
+#define use_offset_0x10a00u 3448
 
 
   /* Kharoshthi */
@@ -449,7 +457,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
   /* 10A30 */     B,     B,     B,     B,     O,     O,     O,     O, CMAbv, CMBlw, CMBlw,     O,     O,     O,     O,     H,
   /* 10A40 */     B,     B,     B,     B,     B,     B,     B,     B,
 
-#define use_offset_0x11000u 3488
+#define use_offset_0x11000u 3520
 
 
   /* Brahmi */
@@ -470,7 +478,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
   /* 110A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 110B0 */  VPst,  VPre,  VPst,  VBlw,  VBlw,  VAbv,  VAbv,  VPst,  VPst,     H, CMBlw,     O,     O,     O,     O,     O,
 
-#define use_offset_0x11100u 3680
+#define use_offset_0x11100u 3712
 
 
   /* Chakma */
@@ -508,7 +516,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
   /* 11220 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VPst,  VPst,  VPst,  VBlw,
   /* 11230 */  VAbv,  VAbv,  VAbv,  VAbv, VMAbv,     H, CMAbv, CMAbv,
 
-#define use_offset_0x11280u 3992
+#define use_offset_0x11280u 4024
 
 
   /* Multani */
@@ -536,7 +544,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
   /* 11360 */    IV,    IV,  VPst,  VPst,     O,     O, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,     O,     O,     O,
   /* 11370 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,     O,     O,     O,
 
-#define use_offset_0x11480u 4240
+#define use_offset_0x11480u 4272
 
 
   /* Tirhuta */
@@ -548,7 +556,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
   /* 114C0 */ VMAbv, VMPst,     H, CMBlw,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
   /* 114D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
 
-#define use_offset_0x11580u 4336
+#define use_offset_0x11580u 4368
 
 
   /* Siddham */
@@ -591,7 +599,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
   /* 11720 */  VPst,  VPst,  VAbv,  VAbv,  VBlw,  VBlw,  VPre,  VAbv,  VBlw,  VAbv,  VAbv,  VAbv,     O,     O,     O,     O,
   /* 11730 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,
 
-}; /* Table items: 4784; occupancy: 72% */
+}; /* Table items: 4816; occupancy: 72% */
 
 USE_TABLE_ELEMENT_TYPE
 hb_use_get_categories (hb_codepoint_t u)
@@ -615,7 +623,7 @@ hb_use_get_categories (hb_codepoint_t u)
 
     case 0x2u:
       if (hb_in_range (u, 0x2008u, 0x2017u)) return use_table[u - 0x2008u + use_offset_0x2008u];
-      if (hb_in_range (u, 0x2070u, 0x2087u)) return use_table[u - 0x2070u + use_offset_0x2070u];
+      if (hb_in_range (u, 0x2060u, 0x2087u)) return use_table[u - 0x2060u + use_offset_0x2060u];
       if (unlikely (u == 0x25CCu)) return GB;
       break;
 
@@ -624,6 +632,10 @@ hb_use_get_categories (hb_codepoint_t u)
       if (hb_in_range (u, 0xABC0u, 0xABFFu)) return use_table[u - 0xABC0u + use_offset_0xabc0u];
       break;
 
+    case 0xFu:
+      if (hb_in_range (u, 0xFE00u, 0xFE0Fu)) return use_table[u - 0xFE00u + use_offset_0xfe00u];
+      break;
+
     case 0x10u:
       if (hb_in_range (u, 0x10A00u, 0x10A47u)) return use_table[u - 0x10A00u + use_offset_0x10a00u];
       break;