src/hb-aat-layout.cc |   93 +++++++++++++++++++++++++
 src/hb-aat-layout.hh |   22 ++++++
 src/hb-coretext.cc   |  186 ---------------------------------------------------
 3 files changed, 117 insertions(+), 184 deletions(-)

New commits:
commit 56b8dd17f677ffe97e4d917c47924e1ac7632c71
Author: Behdad Esfahbod <beh...@behdad.org>
Date:   Sat Oct 13 19:03:33 2018 -0400

    [aat] Finish off massaging table

diff --git a/src/hb-aat-layout.cc b/src/hb-aat-layout.cc
index e15531cc..e9da850b 100644
--- a/src/hb-aat-layout.cc
+++ b/src/hb-aat-layout.cc
@@ -38,95 +38,94 @@
 
 
 /* Table data courtesy of Apple.  Converted from mnemonics to integers
- * when moving to this file.  See hb-coretext.cc before 2018-10-13 for
- * more verbose version. */
+ * when moving to this file. */
 static const hb_aat_feature_mapping_t feature_mappings[] =
 {
-    { 'c2pc',   kUpperCaseType,             kUpperCasePetiteCapsSelector,      
     kDefaultUpperCaseSelector },
-    { 'c2sc',   kUpperCaseType,             kUpperCaseSmallCapsSelector,       
     kDefaultUpperCaseSelector },
-    { 'calt',   kContextualAlternatesType,  kContextualAlternatesOnSelector,   
     kContextualAlternatesOffSelector },
-    { 'case',   kCaseSensitiveLayoutType,   kCaseSensitiveLayoutOnSelector,    
     kCaseSensitiveLayoutOffSelector },
-    { 'clig',   kLigaturesType,             kContextualLigaturesOnSelector,    
     kContextualLigaturesOffSelector },
-    { 'cpsp',   kCaseSensitiveLayoutType,   kCaseSensitiveSpacingOnSelector,   
     kCaseSensitiveSpacingOffSelector },
-    { 'cswh',   kContextualAlternatesType,  
kContextualSwashAlternatesOnSelector,   kContextualSwashAlternatesOffSelector },
-    { 'dlig',   kLigaturesType,             kRareLigaturesOnSelector,          
     kRareLigaturesOffSelector },
-    { 'expt',   kCharacterShapeType,        kExpertCharactersSelector,         
     16 },
-    { 'frac',   kFractionsType,             kDiagonalFractionsSelector,        
     kNoFractionsSelector },
-    { 'fwid',   kTextSpacingType,           kMonospacedTextSelector,           
     7 },
-    { 'halt',   kTextSpacingType,           kAltHalfWidthTextSelector,         
     7 },
-    { 'hist',   kLigaturesType,             kHistoricalLigaturesOnSelector,    
     kHistoricalLigaturesOffSelector },
-    { 'hkna',   kAlternateKanaType,         kAlternateHorizKanaOnSelector,     
     kAlternateHorizKanaOffSelector, },
-    { 'hlig',   kLigaturesType,             kHistoricalLigaturesOnSelector,    
     kHistoricalLigaturesOffSelector },
-    { 'hngl',   kTransliterationType,       kHanjaToHangulSelector,            
     kNoTransliterationSelector },
-    { 'hojo',   kCharacterShapeType,        kHojoCharactersSelector,           
     16 },
-    { 'hwid',   kTextSpacingType,           kHalfWidthTextSelector,            
     7 },
-    { 'ital',   kItalicCJKRomanType,        kCJKItalicRomanOnSelector,         
     kCJKItalicRomanOffSelector },
-    { 'jp04',   kCharacterShapeType,        kJIS2004CharactersSelector,        
     16 },
-    { 'jp78',   kCharacterShapeType,        kJIS1978CharactersSelector,        
     16 },
-    { 'jp83',   kCharacterShapeType,        kJIS1983CharactersSelector,        
     16 },
-    { 'jp90',   kCharacterShapeType,        kJIS1990CharactersSelector,        
     16 },
-    { 'liga',   kLigaturesType,             kCommonLigaturesOnSelector,        
     kCommonLigaturesOffSelector },
-    { 'lnum',   kNumberCaseType,            kUpperCaseNumbersSelector,         
     2 },
-    { 'mgrk',   kMathematicalExtrasType,    kMathematicalGreekOnSelector,      
     kMathematicalGreekOffSelector },
-    { 'nlck',   kCharacterShapeType,        kNLCCharactersSelector,            
     16 },
-    { 'onum',   kNumberCaseType,            kLowerCaseNumbersSelector,         
     2 },
-    { 'ordn',   kVerticalPositionType,      kOrdinalsSelector,                 
     kNormalPositionSelector },
-    { 'palt',   kTextSpacingType,           kAltProportionalTextSelector,      
     7 },
-    { 'pcap',   kLowerCaseType,             kLowerCasePetiteCapsSelector,      
     kDefaultLowerCaseSelector },
-    { 'pkna',   kTextSpacingType,           kProportionalTextSelector,         
     7 },
-    { 'pnum',   kNumberSpacingType,         kProportionalNumbersSelector,      
     4 },
-    { 'pwid',   kTextSpacingType,           kProportionalTextSelector,         
     7 },
-    { 'qwid',   kTextSpacingType,           kQuarterWidthTextSelector,         
     7 },
-    { 'ruby',   kRubyKanaType,              kRubyKanaOnSelector,               
     kRubyKanaOffSelector },
-    { 'sinf',   kVerticalPositionType,      kScientificInferiorsSelector,      
     kNormalPositionSelector },
-    { 'smcp',   kLowerCaseType,             kLowerCaseSmallCapsSelector,       
     kDefaultLowerCaseSelector },
-    { 'smpl',   kCharacterShapeType,        kSimplifiedCharactersSelector,     
     16 },
-    { 'ss01',   kStylisticAlternativesType, kStylisticAltOneOnSelector,        
     kStylisticAltOneOffSelector },
-    { 'ss02',   kStylisticAlternativesType, kStylisticAltTwoOnSelector,        
     kStylisticAltTwoOffSelector },
-    { 'ss03',   kStylisticAlternativesType, kStylisticAltThreeOnSelector,      
     kStylisticAltThreeOffSelector },
-    { 'ss04',   kStylisticAlternativesType, kStylisticAltFourOnSelector,       
     kStylisticAltFourOffSelector },
-    { 'ss05',   kStylisticAlternativesType, kStylisticAltFiveOnSelector,       
     kStylisticAltFiveOffSelector },
-    { 'ss06',   kStylisticAlternativesType, kStylisticAltSixOnSelector,        
     kStylisticAltSixOffSelector },
-    { 'ss07',   kStylisticAlternativesType, kStylisticAltSevenOnSelector,      
     kStylisticAltSevenOffSelector },
-    { 'ss08',   kStylisticAlternativesType, kStylisticAltEightOnSelector,      
     kStylisticAltEightOffSelector },
-    { 'ss09',   kStylisticAlternativesType, kStylisticAltNineOnSelector,       
     kStylisticAltNineOffSelector },
-    { 'ss10',   kStylisticAlternativesType, kStylisticAltTenOnSelector,        
     kStylisticAltTenOffSelector },
-    { 'ss11',   kStylisticAlternativesType, kStylisticAltElevenOnSelector,     
     kStylisticAltElevenOffSelector },
-    { 'ss12',   kStylisticAlternativesType, kStylisticAltTwelveOnSelector,     
     kStylisticAltTwelveOffSelector },
-    { 'ss13',   kStylisticAlternativesType, kStylisticAltThirteenOnSelector,   
     kStylisticAltThirteenOffSelector },
-    { 'ss14',   kStylisticAlternativesType, kStylisticAltFourteenOnSelector,   
     kStylisticAltFourteenOffSelector },
-    { 'ss15',   kStylisticAlternativesType, kStylisticAltFifteenOnSelector,    
     kStylisticAltFifteenOffSelector },
-    { 'ss16',   kStylisticAlternativesType, kStylisticAltSixteenOnSelector,    
     kStylisticAltSixteenOffSelector },
-    { 'ss17',   kStylisticAlternativesType, kStylisticAltSeventeenOnSelector,  
     kStylisticAltSeventeenOffSelector },
-    { 'ss18',   kStylisticAlternativesType, kStylisticAltEighteenOnSelector,   
     kStylisticAltEighteenOffSelector },
-    { 'ss19',   kStylisticAlternativesType, kStylisticAltNineteenOnSelector,   
     kStylisticAltNineteenOffSelector },
-    { 'ss20',   kStylisticAlternativesType, kStylisticAltTwentyOnSelector,     
     kStylisticAltTwentyOffSelector },
-    { 'subs',   kVerticalPositionType,      kInferiorsSelector,                
     kNormalPositionSelector },
-    { 'sups',   kVerticalPositionType,      kSuperiorsSelector,                
     kNormalPositionSelector },
-    { 'swsh',   kContextualAlternatesType,  kSwashAlternatesOnSelector,        
     kSwashAlternatesOffSelector },
-    { 'titl',   kStyleOptionsType,          kTitlingCapsSelector,              
     kNoStyleOptionsSelector },
-    { 'tnam',   kCharacterShapeType,        
kTraditionalNamesCharactersSelector,    16 },
-    { 'tnum',   kNumberSpacingType,         kMonospacedNumbersSelector,        
     4 },
-    { 'trad',   kCharacterShapeType,        kTraditionalCharactersSelector,    
     16 },
-    { 'twid',   kTextSpacingType,           kThirdWidthTextSelector,           
     7 },
-    { 'unic',   kLetterCaseType,            14,                                
     15 },
-    { 'valt',   kTextSpacingType,           kAltProportionalTextSelector,      
     7 },
-    { 'vert',   kVerticalSubstitutionType,  
kSubstituteVerticalFormsOnSelector,     kSubstituteVerticalFormsOffSelector },
-    { 'vhal',   kTextSpacingType,           kAltHalfWidthTextSelector,         
     7 },
-    { 'vkna',   kAlternateKanaType,         kAlternateVertKanaOnSelector,      
     kAlternateVertKanaOffSelector },
-    { 'vpal',   kTextSpacingType,           kAltProportionalTextSelector,      
     7 },
-    { 'vrt2',   kVerticalSubstitutionType,  
kSubstituteVerticalFormsOnSelector,     kSubstituteVerticalFormsOffSelector },
-    { 'zero',   kTypographicExtrasType,     kSlashedZeroOnSelector,            
     kSlashedZeroOffSelector },
+  {HB_TAG ('c','2','p','c'),   38/*kUpperCaseType*/,                   
2/*kUpperCasePetiteCapsSelector*/,              0/*kDefaultUpperCaseSelector*/},
+  {HB_TAG ('c','2','s','c'),   38/*kUpperCaseType*/,                   
1/*kUpperCaseSmallCapsSelector*/,               0/*kDefaultUpperCaseSelector*/},
+  {HB_TAG ('c','a','l','t'),   36/*kContextualAlternatesType*/,        
0/*kContextualAlternatesOnSelector*/,           
1/*kContextualAlternatesOffSelector*/},
+  {HB_TAG ('c','a','s','e'),   33/*kCaseSensitiveLayoutType*/,         
0/*kCaseSensitiveLayoutOnSelector*/,            
1/*kCaseSensitiveLayoutOffSelector*/},
+  {HB_TAG ('c','l','i','g'),   1/*kLigaturesType*/,                    
18/*kContextualLigaturesOnSelector*/,           
19/*kContextualLigaturesOffSelector*/},
+  {HB_TAG ('c','p','s','p'),   33/*kCaseSensitiveLayoutType*/,         
2/*kCaseSensitiveSpacingOnSelector*/,           
3/*kCaseSensitiveSpacingOffSelector*/},
+  {HB_TAG ('c','s','w','h'),   36/*kContextualAlternatesType*/,        
4/*kContextualSwashAlternatesOnSelector*/,      
5/*kContextualSwashAlternatesOffSelector*/},
+  {HB_TAG ('d','l','i','g'),   1/*kLigaturesType*/,                    
4/*kRareLigaturesOnSelector*/,                  5/*kRareLigaturesOffSelector*/},
+  {HB_TAG ('e','x','p','t'),   20/*kCharacterShapeType*/,              
10/*kExpertCharactersSelector*/,                16},
+  {HB_TAG ('f','r','a','c'),   11/*kFractionsType*/,                   
2/*kDiagonalFractionsSelector*/,                0/*kNoFractionsSelector*/},
+  {HB_TAG ('f','w','i','d'),   22/*kTextSpacingType*/,                 
1/*kMonospacedTextSelector*/,                   7},
+  {HB_TAG ('h','a','l','t'),   22/*kTextSpacingType*/,                 
6/*kAltHalfWidthTextSelector*/,                 7},
+  {HB_TAG ('h','i','s','t'),   1/*kLigaturesType*/,                    
20/*kHistoricalLigaturesOnSelector*/,           
21/*kHistoricalLigaturesOffSelector*/},
+  {HB_TAG ('h','k','n','a'),   34/*kAlternateKanaType*/,               
0/*kAlternateHorizKanaOnSelector*/,             
1/*kAlternateHorizKanaOffSelector*/,    },
+  {HB_TAG ('h','l','i','g'),   1/*kLigaturesType*/,                    
20/*kHistoricalLigaturesOnSelector*/,           
21/*kHistoricalLigaturesOffSelector*/},
+  {HB_TAG ('h','n','g','l'),   23/*kTransliterationType*/,             
1/*kHanjaToHangulSelector*/,                    
0/*kNoTransliterationSelector*/},
+  {HB_TAG ('h','o','j','o'),   20/*kCharacterShapeType*/,              
12/*kHojoCharactersSelector*/,                  16},
+  {HB_TAG ('h','w','i','d'),   22/*kTextSpacingType*/,                 
2/*kHalfWidthTextSelector*/,                    7},
+  {HB_TAG ('i','t','a','l'),   32/*kItalicCJKRomanType*/,              
2/*kCJKItalicRomanOnSelector*/,                 
3/*kCJKItalicRomanOffSelector*/},
+  {HB_TAG ('j','p','0','4'),   20/*kCharacterShapeType*/,              
11/*kJIS2004CharactersSelector*/,               16},
+  {HB_TAG ('j','p','7','8'),   20/*kCharacterShapeType*/,              
2/*kJIS1978CharactersSelector*/,                16},
+  {HB_TAG ('j','p','8','3'),   20/*kCharacterShapeType*/,              
3/*kJIS1983CharactersSelector*/,                16},
+  {HB_TAG ('j','p','9','0'),   20/*kCharacterShapeType*/,              
4/*kJIS1990CharactersSelector*/,                16},
+  {HB_TAG ('l','i','g','a'),   1/*kLigaturesType*/,                    
2/*kCommonLigaturesOnSelector*/,                
3/*kCommonLigaturesOffSelector*/},
+  {HB_TAG ('l','n','u','m'),   21/*kNumberCaseType*/,                  
1/*kUpperCaseNumbersSelector*/,                 2},
+  {HB_TAG ('m','g','r','k'),   15/*kMathematicalExtrasType*/,          
10/*kMathematicalGreekOnSelector*/,             
11/*kMathematicalGreekOffSelector*/},
+  {HB_TAG ('n','l','c','k'),   20/*kCharacterShapeType*/,              
13/*kNLCCharactersSelector*/,                   16},
+  {HB_TAG ('o','n','u','m'),   21/*kNumberCaseType*/,                  
0/*kLowerCaseNumbersSelector*/,                 2},
+  {HB_TAG ('o','r','d','n'),   10/*kVerticalPositionType*/,            
3/*kOrdinalsSelector*/,                         0/*kNormalPositionSelector*/},
+  {HB_TAG ('p','a','l','t'),   22/*kTextSpacingType*/,                 
5/*kAltProportionalTextSelector*/,              7},
+  {HB_TAG ('p','c','a','p'),   37/*kLowerCaseType*/,                   
2/*kLowerCasePetiteCapsSelector*/,              0/*kDefaultLowerCaseSelector*/},
+  {HB_TAG ('p','k','n','a'),   22/*kTextSpacingType*/,                 
0/*kProportionalTextSelector*/,                 7},
+  {HB_TAG ('p','n','u','m'),   6/*kNumberSpacingType*/,                
1/*kProportionalNumbersSelector*/,              4},
+  {HB_TAG ('p','w','i','d'),   22/*kTextSpacingType*/,                 
0/*kProportionalTextSelector*/,                 7},
+  {HB_TAG ('q','w','i','d'),   22/*kTextSpacingType*/,                 
4/*kQuarterWidthTextSelector*/,                 7},
+  {HB_TAG ('r','u','b','y'),   28/*kRubyKanaType*/,                    
2/*kRubyKanaOnSelector*/,                       3/*kRubyKanaOffSelector*/},
+  {HB_TAG ('s','i','n','f'),   10/*kVerticalPositionType*/,            
4/*kScientificInferiorsSelector*/,              0/*kNormalPositionSelector*/},
+  {HB_TAG ('s','m','c','p'),   37/*kLowerCaseType*/,                   
1/*kLowerCaseSmallCapsSelector*/,               0/*kDefaultLowerCaseSelector*/},
+  {HB_TAG ('s','m','p','l'),   20/*kCharacterShapeType*/,              
1/*kSimplifiedCharactersSelector*/,             16},
+  {HB_TAG ('s','s','0','1'),   35/*kStylisticAlternativesType*/,       
2/*kStylisticAltOneOnSelector*/,                
3/*kStylisticAltOneOffSelector*/},
+  {HB_TAG ('s','s','0','2'),   35/*kStylisticAlternativesType*/,       
4/*kStylisticAltTwoOnSelector*/,                
5/*kStylisticAltTwoOffSelector*/},
+  {HB_TAG ('s','s','0','3'),   35/*kStylisticAlternativesType*/,       
6/*kStylisticAltThreeOnSelector*/,              
7/*kStylisticAltThreeOffSelector*/},
+  {HB_TAG ('s','s','0','4'),   35/*kStylisticAlternativesType*/,       
8/*kStylisticAltFourOnSelector*/,               
9/*kStylisticAltFourOffSelector*/},
+  {HB_TAG ('s','s','0','5'),   35/*kStylisticAlternativesType*/,       
10/*kStylisticAltFiveOnSelector*/,              
11/*kStylisticAltFiveOffSelector*/},
+  {HB_TAG ('s','s','0','6'),   35/*kStylisticAlternativesType*/,       
12/*kStylisticAltSixOnSelector*/,               
13/*kStylisticAltSixOffSelector*/},
+  {HB_TAG ('s','s','0','7'),   35/*kStylisticAlternativesType*/,       
14/*kStylisticAltSevenOnSelector*/,             
15/*kStylisticAltSevenOffSelector*/},
+  {HB_TAG ('s','s','0','8'),   35/*kStylisticAlternativesType*/,       
16/*kStylisticAltEightOnSelector*/,             
17/*kStylisticAltEightOffSelector*/},
+  {HB_TAG ('s','s','0','9'),   35/*kStylisticAlternativesType*/,       
18/*kStylisticAltNineOnSelector*/,              
19/*kStylisticAltNineOffSelector*/},
+  {HB_TAG ('s','s','1','0'),   35/*kStylisticAlternativesType*/,       
20/*kStylisticAltTenOnSelector*/,               
21/*kStylisticAltTenOffSelector*/},
+  {HB_TAG ('s','s','1','1'),   35/*kStylisticAlternativesType*/,       
22/*kStylisticAltElevenOnSelector*/,            
23/*kStylisticAltElevenOffSelector*/},
+  {HB_TAG ('s','s','1','2'),   35/*kStylisticAlternativesType*/,       
24/*kStylisticAltTwelveOnSelector*/,            
25/*kStylisticAltTwelveOffSelector*/},
+  {HB_TAG ('s','s','1','3'),   35/*kStylisticAlternativesType*/,       
26/*kStylisticAltThirteenOnSelector*/,          
27/*kStylisticAltThirteenOffSelector*/},
+  {HB_TAG ('s','s','1','4'),   35/*kStylisticAlternativesType*/,       
28/*kStylisticAltFourteenOnSelector*/,          
29/*kStylisticAltFourteenOffSelector*/},
+  {HB_TAG ('s','s','1','5'),   35/*kStylisticAlternativesType*/,       
30/*kStylisticAltFifteenOnSelector*/,           
31/*kStylisticAltFifteenOffSelector*/},
+  {HB_TAG ('s','s','1','6'),   35/*kStylisticAlternativesType*/,       
32/*kStylisticAltSixteenOnSelector*/,           
33/*kStylisticAltSixteenOffSelector*/},
+  {HB_TAG ('s','s','1','7'),   35/*kStylisticAlternativesType*/,       
34/*kStylisticAltSeventeenOnSelector*/,         
35/*kStylisticAltSeventeenOffSelector*/},
+  {HB_TAG ('s','s','1','8'),   35/*kStylisticAlternativesType*/,       
36/*kStylisticAltEighteenOnSelector*/,          
37/*kStylisticAltEighteenOffSelector*/},
+  {HB_TAG ('s','s','1','9'),   35/*kStylisticAlternativesType*/,       
38/*kStylisticAltNineteenOnSelector*/,          
39/*kStylisticAltNineteenOffSelector*/},
+  {HB_TAG ('s','s','2','0'),   35/*kStylisticAlternativesType*/,       
40/*kStylisticAltTwentyOnSelector*/,            
41/*kStylisticAltTwentyOffSelector*/},
+  {HB_TAG ('s','u','b','s'),   10/*kVerticalPositionType*/,            
2/*kInferiorsSelector*/,                        0/*kNormalPositionSelector*/},
+  {HB_TAG ('s','u','p','s'),   10/*kVerticalPositionType*/,            
1/*kSuperiorsSelector*/,                        0/*kNormalPositionSelector*/},
+  {HB_TAG ('s','w','s','h'),   36/*kContextualAlternatesType*/,        
2/*kSwashAlternatesOnSelector*/,                
3/*kSwashAlternatesOffSelector*/},
+  {HB_TAG ('t','i','t','l'),   19/*kStyleOptionsType*/,                
4/*kTitlingCapsSelector*/,                      0/*kNoStyleOptionsSelector*/},
+  {HB_TAG ('t','n','a','m'),   20/*kCharacterShapeType*/,              
14/*kTraditionalNamesCharactersSelector*/,      16},
+  {HB_TAG ('t','n','u','m'),   6/*kNumberSpacingType*/,                
0/*kMonospacedNumbersSelector*/,                4},
+  {HB_TAG ('t','r','a','d'),   20/*kCharacterShapeType*/,              
0/*kTraditionalCharactersSelector*/,            16},
+  {HB_TAG ('t','w','i','d'),   22/*kTextSpacingType*/,                 
3/*kThirdWidthTextSelector*/,                   7},
+  {HB_TAG ('u','n','i','c'),   3/*kLetterCaseType*/,                   14,     
                                        15},
+  {HB_TAG ('v','a','l','t'),   22/*kTextSpacingType*/,                 
5/*kAltProportionalTextSelector*/,              7},
+  {HB_TAG ('v','e','r','t'),   4/*kVerticalSubstitutionType*/,         
0/*kSubstituteVerticalFormsOnSelector*/,        
1/*kSubstituteVerticalFormsOffSelector*/},
+  {HB_TAG ('v','h','a','l'),   22/*kTextSpacingType*/,                 
6/*kAltHalfWidthTextSelector*/,                 7},
+  {HB_TAG ('v','k','n','a'),   34/*kAlternateKanaType*/,               
2/*kAlternateVertKanaOnSelector*/,              
3/*kAlternateVertKanaOffSelector*/},
+  {HB_TAG ('v','p','a','l'),   22/*kTextSpacingType*/,                 
5/*kAltProportionalTextSelector*/,              7},
+  {HB_TAG ('v','r','t','2'),   4/*kVerticalSubstitutionType*/,         
0/*kSubstituteVerticalFormsOnSelector*/,        
1/*kSubstituteVerticalFormsOffSelector*/},
+  {HB_TAG ('z','e','r','o'),   14/*kTypographicExtrasType*/,           
4/*kSlashedZeroOnSelector*/,                    5/*kSlashedZeroOffSelector*/},
 };
 
 const hb_aat_feature_mapping_t *
 hb_aat_layout_find_feature_mapping (hb_tag_t tag)
 {
-  return bsearch (&tag,
-                 feature_mappings,
-                 ARRAY_LENGTH (feature_mappings),
-                 sizeof (feature_mappings[0]),
-                 hb_aat_feature_mapping_t::cmp);
+  return (const hb_aat_feature_mapping_t *) bsearch (&tag,
+                                                    feature_mappings,
+                                                    ARRAY_LENGTH 
(feature_mappings),
+                                                    sizeof 
(feature_mappings[0]),
+                                                    
hb_aat_feature_mapping_t::cmp);
 }
 
 
commit e0c5e0d91bbc0c8b2bb547ba5cb118989affc617
Author: Behdad Esfahbod <beh...@behdad.org>
Date:   Sat Oct 13 18:37:14 2018 -0400

    [aat] WIP remove feature mapping here from hb-coretext
    
    Need to map enum values to numerics since we don't have CoreText headers.

diff --git a/src/hb-aat-layout.cc b/src/hb-aat-layout.cc
index 2b86ba8c..e15531cc 100644
--- a/src/hb-aat-layout.cc
+++ b/src/hb-aat-layout.cc
@@ -36,6 +36,100 @@
 #include "hb-aat-layout-trak-table.hh"
 #include "hb-aat-ltag-table.hh" // Just so we compile it; unused otherwise.
 
+
+/* Table data courtesy of Apple.  Converted from mnemonics to integers
+ * when moving to this file.  See hb-coretext.cc before 2018-10-13 for
+ * more verbose version. */
+static const hb_aat_feature_mapping_t feature_mappings[] =
+{
+    { 'c2pc',   kUpperCaseType,             kUpperCasePetiteCapsSelector,      
     kDefaultUpperCaseSelector },
+    { 'c2sc',   kUpperCaseType,             kUpperCaseSmallCapsSelector,       
     kDefaultUpperCaseSelector },
+    { 'calt',   kContextualAlternatesType,  kContextualAlternatesOnSelector,   
     kContextualAlternatesOffSelector },
+    { 'case',   kCaseSensitiveLayoutType,   kCaseSensitiveLayoutOnSelector,    
     kCaseSensitiveLayoutOffSelector },
+    { 'clig',   kLigaturesType,             kContextualLigaturesOnSelector,    
     kContextualLigaturesOffSelector },
+    { 'cpsp',   kCaseSensitiveLayoutType,   kCaseSensitiveSpacingOnSelector,   
     kCaseSensitiveSpacingOffSelector },
+    { 'cswh',   kContextualAlternatesType,  
kContextualSwashAlternatesOnSelector,   kContextualSwashAlternatesOffSelector },
+    { 'dlig',   kLigaturesType,             kRareLigaturesOnSelector,          
     kRareLigaturesOffSelector },
+    { 'expt',   kCharacterShapeType,        kExpertCharactersSelector,         
     16 },
+    { 'frac',   kFractionsType,             kDiagonalFractionsSelector,        
     kNoFractionsSelector },
+    { 'fwid',   kTextSpacingType,           kMonospacedTextSelector,           
     7 },
+    { 'halt',   kTextSpacingType,           kAltHalfWidthTextSelector,         
     7 },
+    { 'hist',   kLigaturesType,             kHistoricalLigaturesOnSelector,    
     kHistoricalLigaturesOffSelector },
+    { 'hkna',   kAlternateKanaType,         kAlternateHorizKanaOnSelector,     
     kAlternateHorizKanaOffSelector, },
+    { 'hlig',   kLigaturesType,             kHistoricalLigaturesOnSelector,    
     kHistoricalLigaturesOffSelector },
+    { 'hngl',   kTransliterationType,       kHanjaToHangulSelector,            
     kNoTransliterationSelector },
+    { 'hojo',   kCharacterShapeType,        kHojoCharactersSelector,           
     16 },
+    { 'hwid',   kTextSpacingType,           kHalfWidthTextSelector,            
     7 },
+    { 'ital',   kItalicCJKRomanType,        kCJKItalicRomanOnSelector,         
     kCJKItalicRomanOffSelector },
+    { 'jp04',   kCharacterShapeType,        kJIS2004CharactersSelector,        
     16 },
+    { 'jp78',   kCharacterShapeType,        kJIS1978CharactersSelector,        
     16 },
+    { 'jp83',   kCharacterShapeType,        kJIS1983CharactersSelector,        
     16 },
+    { 'jp90',   kCharacterShapeType,        kJIS1990CharactersSelector,        
     16 },
+    { 'liga',   kLigaturesType,             kCommonLigaturesOnSelector,        
     kCommonLigaturesOffSelector },
+    { 'lnum',   kNumberCaseType,            kUpperCaseNumbersSelector,         
     2 },
+    { 'mgrk',   kMathematicalExtrasType,    kMathematicalGreekOnSelector,      
     kMathematicalGreekOffSelector },
+    { 'nlck',   kCharacterShapeType,        kNLCCharactersSelector,            
     16 },
+    { 'onum',   kNumberCaseType,            kLowerCaseNumbersSelector,         
     2 },
+    { 'ordn',   kVerticalPositionType,      kOrdinalsSelector,                 
     kNormalPositionSelector },
+    { 'palt',   kTextSpacingType,           kAltProportionalTextSelector,      
     7 },
+    { 'pcap',   kLowerCaseType,             kLowerCasePetiteCapsSelector,      
     kDefaultLowerCaseSelector },
+    { 'pkna',   kTextSpacingType,           kProportionalTextSelector,         
     7 },
+    { 'pnum',   kNumberSpacingType,         kProportionalNumbersSelector,      
     4 },
+    { 'pwid',   kTextSpacingType,           kProportionalTextSelector,         
     7 },
+    { 'qwid',   kTextSpacingType,           kQuarterWidthTextSelector,         
     7 },
+    { 'ruby',   kRubyKanaType,              kRubyKanaOnSelector,               
     kRubyKanaOffSelector },
+    { 'sinf',   kVerticalPositionType,      kScientificInferiorsSelector,      
     kNormalPositionSelector },
+    { 'smcp',   kLowerCaseType,             kLowerCaseSmallCapsSelector,       
     kDefaultLowerCaseSelector },
+    { 'smpl',   kCharacterShapeType,        kSimplifiedCharactersSelector,     
     16 },
+    { 'ss01',   kStylisticAlternativesType, kStylisticAltOneOnSelector,        
     kStylisticAltOneOffSelector },
+    { 'ss02',   kStylisticAlternativesType, kStylisticAltTwoOnSelector,        
     kStylisticAltTwoOffSelector },
+    { 'ss03',   kStylisticAlternativesType, kStylisticAltThreeOnSelector,      
     kStylisticAltThreeOffSelector },
+    { 'ss04',   kStylisticAlternativesType, kStylisticAltFourOnSelector,       
     kStylisticAltFourOffSelector },
+    { 'ss05',   kStylisticAlternativesType, kStylisticAltFiveOnSelector,       
     kStylisticAltFiveOffSelector },
+    { 'ss06',   kStylisticAlternativesType, kStylisticAltSixOnSelector,        
     kStylisticAltSixOffSelector },
+    { 'ss07',   kStylisticAlternativesType, kStylisticAltSevenOnSelector,      
     kStylisticAltSevenOffSelector },
+    { 'ss08',   kStylisticAlternativesType, kStylisticAltEightOnSelector,      
     kStylisticAltEightOffSelector },
+    { 'ss09',   kStylisticAlternativesType, kStylisticAltNineOnSelector,       
     kStylisticAltNineOffSelector },
+    { 'ss10',   kStylisticAlternativesType, kStylisticAltTenOnSelector,        
     kStylisticAltTenOffSelector },
+    { 'ss11',   kStylisticAlternativesType, kStylisticAltElevenOnSelector,     
     kStylisticAltElevenOffSelector },
+    { 'ss12',   kStylisticAlternativesType, kStylisticAltTwelveOnSelector,     
     kStylisticAltTwelveOffSelector },
+    { 'ss13',   kStylisticAlternativesType, kStylisticAltThirteenOnSelector,   
     kStylisticAltThirteenOffSelector },
+    { 'ss14',   kStylisticAlternativesType, kStylisticAltFourteenOnSelector,   
     kStylisticAltFourteenOffSelector },
+    { 'ss15',   kStylisticAlternativesType, kStylisticAltFifteenOnSelector,    
     kStylisticAltFifteenOffSelector },
+    { 'ss16',   kStylisticAlternativesType, kStylisticAltSixteenOnSelector,    
     kStylisticAltSixteenOffSelector },
+    { 'ss17',   kStylisticAlternativesType, kStylisticAltSeventeenOnSelector,  
     kStylisticAltSeventeenOffSelector },
+    { 'ss18',   kStylisticAlternativesType, kStylisticAltEighteenOnSelector,   
     kStylisticAltEighteenOffSelector },
+    { 'ss19',   kStylisticAlternativesType, kStylisticAltNineteenOnSelector,   
     kStylisticAltNineteenOffSelector },
+    { 'ss20',   kStylisticAlternativesType, kStylisticAltTwentyOnSelector,     
     kStylisticAltTwentyOffSelector },
+    { 'subs',   kVerticalPositionType,      kInferiorsSelector,                
     kNormalPositionSelector },
+    { 'sups',   kVerticalPositionType,      kSuperiorsSelector,                
     kNormalPositionSelector },
+    { 'swsh',   kContextualAlternatesType,  kSwashAlternatesOnSelector,        
     kSwashAlternatesOffSelector },
+    { 'titl',   kStyleOptionsType,          kTitlingCapsSelector,              
     kNoStyleOptionsSelector },
+    { 'tnam',   kCharacterShapeType,        
kTraditionalNamesCharactersSelector,    16 },
+    { 'tnum',   kNumberSpacingType,         kMonospacedNumbersSelector,        
     4 },
+    { 'trad',   kCharacterShapeType,        kTraditionalCharactersSelector,    
     16 },
+    { 'twid',   kTextSpacingType,           kThirdWidthTextSelector,           
     7 },
+    { 'unic',   kLetterCaseType,            14,                                
     15 },
+    { 'valt',   kTextSpacingType,           kAltProportionalTextSelector,      
     7 },
+    { 'vert',   kVerticalSubstitutionType,  
kSubstituteVerticalFormsOnSelector,     kSubstituteVerticalFormsOffSelector },
+    { 'vhal',   kTextSpacingType,           kAltHalfWidthTextSelector,         
     7 },
+    { 'vkna',   kAlternateKanaType,         kAlternateVertKanaOnSelector,      
     kAlternateVertKanaOffSelector },
+    { 'vpal',   kTextSpacingType,           kAltProportionalTextSelector,      
     7 },
+    { 'vrt2',   kVerticalSubstitutionType,  
kSubstituteVerticalFormsOnSelector,     kSubstituteVerticalFormsOffSelector },
+    { 'zero',   kTypographicExtrasType,     kSlashedZeroOnSelector,            
     kSlashedZeroOffSelector },
+};
+
+const hb_aat_feature_mapping_t *
+hb_aat_layout_find_feature_mapping (hb_tag_t tag)
+{
+  return bsearch (&tag,
+                 feature_mappings,
+                 ARRAY_LENGTH (feature_mappings),
+                 sizeof (feature_mappings[0]),
+                 hb_aat_feature_mapping_t::cmp);
+}
+
+
 /*
  * morx/kerx/trak
  */
diff --git a/src/hb-aat-layout.hh b/src/hb-aat-layout.hh
index 897c26aa..d0eb0190 100644
--- a/src/hb-aat-layout.hh
+++ b/src/hb-aat-layout.hh
@@ -31,6 +31,28 @@
 
 #include "hb-ot-shape.hh"
 
+
+struct hb_aat_feature_mapping_t
+{
+  hb_tag_t otFeatureTag;
+  uint16_t aatFeatureType;
+  uint16_t selectorToEnable;
+  uint16_t selectorToDisable;
+
+  static inline int cmp (const void *key_, const void *entry_)
+  {
+    hb_tag_t key = * (unsigned int *) key_;
+    const hb_aat_feature_mapping_t * entry = (const hb_aat_feature_mapping_t 
*) entry_;
+    return key < entry->otFeatureTag ? -1 :
+          key > entry->otFeatureTag ? 1 :
+          0;
+  }
+};
+
+HB_INTERNAL const hb_aat_feature_mapping_t *
+hb_aat_layout_find_feature_mapping (hb_tag_t tag);
+
+
 HB_INTERNAL hb_bool_t
 hb_aat_layout_has_substitution (hb_face_t *face);
 
diff --git a/src/hb-coretext.cc b/src/hb-coretext.cc
index eee1d346..aa3921a3 100644
--- a/src/hb-coretext.cc
+++ b/src/hb-coretext.cc
@@ -32,6 +32,7 @@
 #include "hb-shaper-impl.hh"
 
 #include "hb-coretext.h"
+#include "hb-aat-layout.hh"
 #include <math.h>
 
 /* 
https://developer.apple.com/documentation/coretext/1508745-ctfontcreatewithgraphicsfont
 */
@@ -431,194 +432,6 @@ struct range_record_t {
 };
 
 
-/* The following enum members are added in OS X 10.8. */
-#define kAltHalfWidthTextSelector              6
-#define kAltProportionalTextSelector           5
-#define kAlternateHorizKanaOffSelector         1
-#define kAlternateHorizKanaOnSelector          0
-#define kAlternateKanaType                     34
-#define kAlternateVertKanaOffSelector          3
-#define kAlternateVertKanaOnSelector           2
-#define kCaseSensitiveLayoutOffSelector                1
-#define kCaseSensitiveLayoutOnSelector         0
-#define kCaseSensitiveLayoutType               33
-#define kCaseSensitiveSpacingOffSelector       3
-#define kCaseSensitiveSpacingOnSelector                2
-#define kContextualAlternatesOffSelector       1
-#define kContextualAlternatesOnSelector                0
-#define kContextualAlternatesType              36
-#define kContextualLigaturesOffSelector                19
-#define kContextualLigaturesOnSelector         18
-#define kContextualSwashAlternatesOffSelector  5
-#define kContextualSwashAlternatesOnSelector   4
-#define kDefaultLowerCaseSelector              0
-#define kDefaultUpperCaseSelector              0
-#define kHistoricalLigaturesOffSelector                21
-#define kHistoricalLigaturesOnSelector         20
-#define kHojoCharactersSelector                        12
-#define kJIS2004CharactersSelector             11
-#define kLowerCasePetiteCapsSelector           2
-#define kLowerCaseSmallCapsSelector            1
-#define kLowerCaseType                         37
-#define kMathematicalGreekOffSelector          11
-#define kMathematicalGreekOnSelector           10
-#define kNLCCharactersSelector                 13
-#define kQuarterWidthTextSelector              4
-#define kScientificInferiorsSelector           4
-#define kStylisticAltEightOffSelector          17
-#define kStylisticAltEightOnSelector           16
-#define kStylisticAltEighteenOffSelector       37
-#define kStylisticAltEighteenOnSelector                36
-#define kStylisticAltElevenOffSelector         23
-#define kStylisticAltElevenOnSelector          22
-#define kStylisticAltFifteenOffSelector                31
-#define kStylisticAltFifteenOnSelector         30
-#define kStylisticAltFiveOffSelector           11
-#define kStylisticAltFiveOnSelector            10
-#define kStylisticAltFourOffSelector           9
-#define kStylisticAltFourOnSelector            8
-#define kStylisticAltFourteenOffSelector       29
-#define kStylisticAltFourteenOnSelector                28
-#define kStylisticAltNineOffSelector           19
-#define kStylisticAltNineOnSelector            18
-#define kStylisticAltNineteenOffSelector       39
-#define kStylisticAltNineteenOnSelector                38
-#define kStylisticAltOneOffSelector            3
-#define kStylisticAltOneOnSelector             2
-#define kStylisticAltSevenOffSelector          15
-#define kStylisticAltSevenOnSelector           14
-#define kStylisticAltSeventeenOffSelector      35
-#define kStylisticAltSeventeenOnSelector       34
-#define kStylisticAltSixOffSelector            13
-#define kStylisticAltSixOnSelector             12
-#define kStylisticAltSixteenOffSelector                33
-#define kStylisticAltSixteenOnSelector         32
-#define kStylisticAltTenOffSelector            21
-#define kStylisticAltTenOnSelector             20
-#define kStylisticAltThirteenOffSelector       27
-#define kStylisticAltThirteenOnSelector                26
-#define kStylisticAltThreeOffSelector          7
-#define kStylisticAltThreeOnSelector           6
-#define kStylisticAltTwelveOffSelector         25
-#define kStylisticAltTwelveOnSelector          24
-#define kStylisticAltTwentyOffSelector         41
-#define kStylisticAltTwentyOnSelector          40
-#define kStylisticAltTwoOffSelector            5
-#define kStylisticAltTwoOnSelector             4
-#define kStylisticAlternativesType             35
-#define kSwashAlternatesOffSelector            3
-#define kSwashAlternatesOnSelector             2
-#define kThirdWidthTextSelector                        3
-#define kTraditionalNamesCharactersSelector    14
-#define kUpperCasePetiteCapsSelector           2
-#define kUpperCaseSmallCapsSelector            1
-#define kUpperCaseType                         38
-
-/* Table data courtesy of Apple. */
-static const struct hb_aat_feature_mapping_t
-{
-  hb_tag_t otFeatureTag;
-  uint16_t aatFeatureType;
-  uint16_t selectorToEnable;
-  uint16_t selectorToDisable;
-
-  static inline int cmp (const void *key_, const void *entry_)
-  {
-    hb_tag_t key = * (unsigned int *) key_;
-    const hb_aat_feature_mapping_t * entry = (const hb_aat_feature_mapping_t 
*) entry_;
-    return key < entry->otFeatureTag ? -1 :
-          key > entry->otFeatureTag ? 1 :
-          0;
-  }
-} feature_mappings[] =
-{
-    { 'c2pc',   kUpperCaseType,             kUpperCasePetiteCapsSelector,      
     kDefaultUpperCaseSelector },
-    { 'c2sc',   kUpperCaseType,             kUpperCaseSmallCapsSelector,       
     kDefaultUpperCaseSelector },
-    { 'calt',   kContextualAlternatesType,  kContextualAlternatesOnSelector,   
     kContextualAlternatesOffSelector },
-    { 'case',   kCaseSensitiveLayoutType,   kCaseSensitiveLayoutOnSelector,    
     kCaseSensitiveLayoutOffSelector },
-    { 'clig',   kLigaturesType,             kContextualLigaturesOnSelector,    
     kContextualLigaturesOffSelector },
-    { 'cpsp',   kCaseSensitiveLayoutType,   kCaseSensitiveSpacingOnSelector,   
     kCaseSensitiveSpacingOffSelector },
-    { 'cswh',   kContextualAlternatesType,  
kContextualSwashAlternatesOnSelector,   kContextualSwashAlternatesOffSelector },
-    { 'dlig',   kLigaturesType,             kRareLigaturesOnSelector,          
     kRareLigaturesOffSelector },
-    { 'expt',   kCharacterShapeType,        kExpertCharactersSelector,         
     16 },
-    { 'frac',   kFractionsType,             kDiagonalFractionsSelector,        
     kNoFractionsSelector },
-    { 'fwid',   kTextSpacingType,           kMonospacedTextSelector,           
     7 },
-    { 'halt',   kTextSpacingType,           kAltHalfWidthTextSelector,         
     7 },
-    { 'hist',   kLigaturesType,             kHistoricalLigaturesOnSelector,    
     kHistoricalLigaturesOffSelector },
-    { 'hkna',   kAlternateKanaType,         kAlternateHorizKanaOnSelector,     
     kAlternateHorizKanaOffSelector, },
-    { 'hlig',   kLigaturesType,             kHistoricalLigaturesOnSelector,    
     kHistoricalLigaturesOffSelector },
-    { 'hngl',   kTransliterationType,       kHanjaToHangulSelector,            
     kNoTransliterationSelector },
-    { 'hojo',   kCharacterShapeType,        kHojoCharactersSelector,           
     16 },
-    { 'hwid',   kTextSpacingType,           kHalfWidthTextSelector,            
     7 },
-    { 'ital',   kItalicCJKRomanType,        kCJKItalicRomanOnSelector,         
     kCJKItalicRomanOffSelector },
-    { 'jp04',   kCharacterShapeType,        kJIS2004CharactersSelector,        
     16 },
-    { 'jp78',   kCharacterShapeType,        kJIS1978CharactersSelector,        
     16 },
-    { 'jp83',   kCharacterShapeType,        kJIS1983CharactersSelector,        
     16 },
-    { 'jp90',   kCharacterShapeType,        kJIS1990CharactersSelector,        
     16 },
-    { 'liga',   kLigaturesType,             kCommonLigaturesOnSelector,        
     kCommonLigaturesOffSelector },
-    { 'lnum',   kNumberCaseType,            kUpperCaseNumbersSelector,         
     2 },
-    { 'mgrk',   kMathematicalExtrasType,    kMathematicalGreekOnSelector,      
     kMathematicalGreekOffSelector },
-    { 'nlck',   kCharacterShapeType,        kNLCCharactersSelector,            
     16 },
-    { 'onum',   kNumberCaseType,            kLowerCaseNumbersSelector,         
     2 },
-    { 'ordn',   kVerticalPositionType,      kOrdinalsSelector,                 
     kNormalPositionSelector },
-    { 'palt',   kTextSpacingType,           kAltProportionalTextSelector,      
     7 },
-    { 'pcap',   kLowerCaseType,             kLowerCasePetiteCapsSelector,      
     kDefaultLowerCaseSelector },
-    { 'pkna',   kTextSpacingType,           kProportionalTextSelector,         
     7 },
-    { 'pnum',   kNumberSpacingType,         kProportionalNumbersSelector,      
     4 },
-    { 'pwid',   kTextSpacingType,           kProportionalTextSelector,         
     7 },
-    { 'qwid',   kTextSpacingType,           kQuarterWidthTextSelector,         
     7 },
-    { 'ruby',   kRubyKanaType,              kRubyKanaOnSelector,               
     kRubyKanaOffSelector },
-    { 'sinf',   kVerticalPositionType,      kScientificInferiorsSelector,      
     kNormalPositionSelector },
-    { 'smcp',   kLowerCaseType,             kLowerCaseSmallCapsSelector,       
     kDefaultLowerCaseSelector },
-    { 'smpl',   kCharacterShapeType,        kSimplifiedCharactersSelector,     
     16 },
-    { 'ss01',   kStylisticAlternativesType, kStylisticAltOneOnSelector,        
     kStylisticAltOneOffSelector },
-    { 'ss02',   kStylisticAlternativesType, kStylisticAltTwoOnSelector,        
     kStylisticAltTwoOffSelector },
-    { 'ss03',   kStylisticAlternativesType, kStylisticAltThreeOnSelector,      
     kStylisticAltThreeOffSelector },
-    { 'ss04',   kStylisticAlternativesType, kStylisticAltFourOnSelector,       
     kStylisticAltFourOffSelector },
-    { 'ss05',   kStylisticAlternativesType, kStylisticAltFiveOnSelector,       
     kStylisticAltFiveOffSelector },
-    { 'ss06',   kStylisticAlternativesType, kStylisticAltSixOnSelector,        
     kStylisticAltSixOffSelector },
-    { 'ss07',   kStylisticAlternativesType, kStylisticAltSevenOnSelector,      
     kStylisticAltSevenOffSelector },
-    { 'ss08',   kStylisticAlternativesType, kStylisticAltEightOnSelector,      
     kStylisticAltEightOffSelector },
-    { 'ss09',   kStylisticAlternativesType, kStylisticAltNineOnSelector,       
     kStylisticAltNineOffSelector },
-    { 'ss10',   kStylisticAlternativesType, kStylisticAltTenOnSelector,        
     kStylisticAltTenOffSelector },
-    { 'ss11',   kStylisticAlternativesType, kStylisticAltElevenOnSelector,     
     kStylisticAltElevenOffSelector },
-    { 'ss12',   kStylisticAlternativesType, kStylisticAltTwelveOnSelector,     
     kStylisticAltTwelveOffSelector },
-    { 'ss13',   kStylisticAlternativesType, kStylisticAltThirteenOnSelector,   
     kStylisticAltThirteenOffSelector },
-    { 'ss14',   kStylisticAlternativesType, kStylisticAltFourteenOnSelector,   
     kStylisticAltFourteenOffSelector },
-    { 'ss15',   kStylisticAlternativesType, kStylisticAltFifteenOnSelector,    
     kStylisticAltFifteenOffSelector },
-    { 'ss16',   kStylisticAlternativesType, kStylisticAltSixteenOnSelector,    
     kStylisticAltSixteenOffSelector },
-    { 'ss17',   kStylisticAlternativesType, kStylisticAltSeventeenOnSelector,  
     kStylisticAltSeventeenOffSelector },
-    { 'ss18',   kStylisticAlternativesType, kStylisticAltEighteenOnSelector,   
     kStylisticAltEighteenOffSelector },
-    { 'ss19',   kStylisticAlternativesType, kStylisticAltNineteenOnSelector,   
     kStylisticAltNineteenOffSelector },
-    { 'ss20',   kStylisticAlternativesType, kStylisticAltTwentyOnSelector,     
     kStylisticAltTwentyOffSelector },
-    { 'subs',   kVerticalPositionType,      kInferiorsSelector,                
     kNormalPositionSelector },
-    { 'sups',   kVerticalPositionType,      kSuperiorsSelector,                
     kNormalPositionSelector },
-    { 'swsh',   kContextualAlternatesType,  kSwashAlternatesOnSelector,        
     kSwashAlternatesOffSelector },
-    { 'titl',   kStyleOptionsType,          kTitlingCapsSelector,              
     kNoStyleOptionsSelector },
-    { 'tnam',   kCharacterShapeType,        
kTraditionalNamesCharactersSelector,    16 },
-    { 'tnum',   kNumberSpacingType,         kMonospacedNumbersSelector,        
     4 },
-    { 'trad',   kCharacterShapeType,        kTraditionalCharactersSelector,    
     16 },
-    { 'twid',   kTextSpacingType,           kThirdWidthTextSelector,           
     7 },
-    { 'unic',   kLetterCaseType,            14,                                
     15 },
-    { 'valt',   kTextSpacingType,           kAltProportionalTextSelector,      
     7 },
-    { 'vert',   kVerticalSubstitutionType,  
kSubstituteVerticalFormsOnSelector,     kSubstituteVerticalFormsOffSelector },
-    { 'vhal',   kTextSpacingType,           kAltHalfWidthTextSelector,         
     7 },
-    { 'vkna',   kAlternateKanaType,         kAlternateVertKanaOnSelector,      
     kAlternateVertKanaOffSelector },
-    { 'vpal',   kTextSpacingType,           kAltProportionalTextSelector,      
     7 },
-    { 'vrt2',   kVerticalSubstitutionType,  
kSubstituteVerticalFormsOnSelector,     kSubstituteVerticalFormsOffSelector },
-    { 'zero',   kTypographicExtrasType,     kSlashedZeroOnSelector,            
     kSlashedZeroOffSelector },
-};
-
-HB_INTERNAL const hb_aat_feature_mapping_t *
-hb_aat_layout_find_feature_mapping (hb_tag_t tag)
-{
-  return bsearch (&tag,
-                 feature_mappings,
-                 ARRAY_LENGTH (feature_mappings),
-                 sizeof (feature_mappings[0]),
-                 hb_aat_feature_mapping_t::cmp);
-}
-
 hb_bool_t
 _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
                    hb_font_t          *font,
commit cb057749131826dd89bc3b92527116a974ae3bbe
Author: Behdad Esfahbod <beh...@behdad.org>
Date:   Sat Oct 13 17:03:32 2018 -0400

    [coretext] Prepare AAT feature mapping to be moved

diff --git a/src/hb-coretext.cc b/src/hb-coretext.cc
index 9bebb2be..eee1d346 100644
--- a/src/hb-coretext.cc
+++ b/src/hb-coretext.cc
@@ -515,12 +515,21 @@ struct range_record_t {
 #define kUpperCaseType                         38
 
 /* Table data courtesy of Apple. */
-static const struct feature_mapping_t
+static const struct hb_aat_feature_mapping_t
 {
-    hb_tag_t otFeatureTag;
-    uint16_t aatFeatureType;
-    uint16_t selectorToEnable;
-    uint16_t selectorToDisable;
+  hb_tag_t otFeatureTag;
+  uint16_t aatFeatureType;
+  uint16_t selectorToEnable;
+  uint16_t selectorToDisable;
+
+  static inline int cmp (const void *key_, const void *entry_)
+  {
+    hb_tag_t key = * (unsigned int *) key_;
+    const hb_aat_feature_mapping_t * entry = (const hb_aat_feature_mapping_t 
*) entry_;
+    return key < entry->otFeatureTag ? -1 :
+          key > entry->otFeatureTag ? 1 :
+          0;
+  }
 } feature_mappings[] =
 {
     { 'c2pc',   kUpperCaseType,             kUpperCasePetiteCapsSelector,      
     kDefaultUpperCaseSelector },
@@ -600,14 +609,14 @@ static const struct feature_mapping_t
     { 'zero',   kTypographicExtrasType,     kSlashedZeroOnSelector,            
     kSlashedZeroOffSelector },
 };
 
-static int
-_hb_feature_mapping_cmp (const void *key_, const void *entry_)
+HB_INTERNAL const hb_aat_feature_mapping_t *
+hb_aat_layout_find_feature_mapping (hb_tag_t tag)
 {
-  hb_tag_t key = * (unsigned int *) key_;
-  const feature_mapping_t * entry = (const feature_mapping_t *) entry_;
-  return key < entry->otFeatureTag ? -1 :
-        key > entry->otFeatureTag ? 1 :
-        0;
+  return bsearch (&tag,
+                 feature_mappings,
+                 ARRAY_LENGTH (feature_mappings),
+                 sizeof (feature_mappings[0]),
+                 hb_aat_feature_mapping_t::cmp);
 }
 
 hb_bool_t
@@ -655,11 +664,7 @@ _hb_coretext_shape (hb_shape_plan_t    *shape_plan,
     hb_auto_t<hb_vector_t<feature_event_t> > feature_events;
     for (unsigned int i = 0; i < num_features; i++)
     {
-      const feature_mapping_t * mapping = (const feature_mapping_t *) bsearch 
(&features[i].tag,
-                                                                              
feature_mappings,
-                                                                              
ARRAY_LENGTH (feature_mappings),
-                                                                              
sizeof (feature_mappings[0]),
-                                                                              
_hb_feature_mapping_cmp);
+      const hb_aat_feature_mapping_t * mapping = 
hb_aat_layout_find_feature_mapping (features[i].tag);
       if (!mapping)
         continue;
 
_______________________________________________
HarfBuzz mailing list
HarfBuzz@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to