Update static const ints to enums so that these enums can be used in
switch-case.  There are two exceptions:
1. if original Java code uses static const int, we keep it that way.
2. C++ compilers may not support 64-bit enum so we need to define them as static
const uint64_t



git-svn-id: http://sfntly.googlecode.com/svn/trunk/cpp/src@6 672e30a5-4c29-85ac-ac6d-611c735e0a51
diff --git a/sfntly/cmap_table.cc b/sfntly/cmap_table.cc
index 79b083a..e73b657 100644
--- a/sfntly/cmap_table.cc
+++ b/sfntly/cmap_table.cc
@@ -23,93 +23,7 @@
 
 namespace sfntly {
 
-/******************************************************************************
- * Constants
- ******************************************************************************/
 const int32_t CMapTable::NOTDEF = 0;
-const int32_t CMapTable::Offset::kVersion = 0;
-const int32_t CMapTable::Offset::kNumTables = 2;
-const int32_t CMapTable::Offset::kEncodingRecordStart = 4;
-const int32_t CMapTable::Offset::kEncodingRecordPlatformId = 0;
-const int32_t CMapTable::Offset::kEncodingRecordEncodingId = 2;
-const int32_t CMapTable::Offset::kEncodingRecordOffset = 4;
-const int32_t CMapTable::Offset::kEncodingRecordSize = 8;
-const int32_t CMapTable::Offset::kFormat = 0;
-const int32_t CMapTable::Offset::kFormat0Format = 0;
-const int32_t CMapTable::Offset::kFormat0Length = 2;
-const int32_t CMapTable::Offset::kFormat0Language = 4;
-const int32_t CMapTable::Offset::kFormat0GlyphIdArray = 6;
-const int32_t CMapTable::Offset::kFormat2Format = 0;
-const int32_t CMapTable::Offset::kFormat2Length = 2;
-const int32_t CMapTable::Offset::kFormat2Language = 4;
-const int32_t CMapTable::Offset::kFormat2SubHeaderKeys = 6;
-const int32_t CMapTable::Offset::kFormat2SubHeaders = 518;
-const int32_t CMapTable::Offset::kFormat2SubHeader_firstCode = 0;
-const int32_t CMapTable::Offset::kFormat2SubHeader_entryCount = 2;
-const int32_t CMapTable::Offset::kFormat2SubHeader_idDelta = 4;
-const int32_t CMapTable::Offset::kFormat2SubHeader_idRangeOffset = 6;
-const int32_t CMapTable::Offset::kFormat2SubHeader_structLength = 8;
-const int32_t CMapTable::Offset::kFormat4Format = 0;
-const int32_t CMapTable::Offset::kFormat4Length = 2;
-const int32_t CMapTable::Offset::kFormat4Language = 4;
-const int32_t CMapTable::Offset::kFormat4SegCountX2 = 6;
-const int32_t CMapTable::Offset::kFormat4SearchRange = 8;
-const int32_t CMapTable::Offset::kFormat4EntrySelector = 10;
-const int32_t CMapTable::Offset::kFormat4RangeShift = 12;
-const int32_t CMapTable::Offset::kFormat4EndCount = 14;
-const int32_t CMapTable::Offset::kFormat6Format = 0;
-const int32_t CMapTable::Offset::kFormat6Length = 2;
-const int32_t CMapTable::Offset::kFormat6Language = 4;
-const int32_t CMapTable::Offset::kFormat6FirstCode = 6;
-const int32_t CMapTable::Offset::kFormat6EntryCount = 8;
-const int32_t CMapTable::Offset::kFormat6GlyphIdArray = 10;
-const int32_t CMapTable::Offset::kFormat8Format = 0;
-const int32_t CMapTable::Offset::kFormat8Length = 4;
-const int32_t CMapTable::Offset::kFormat8Language = 8;
-const int32_t CMapTable::Offset::kFormat8Is32 = 12;
-const int32_t CMapTable::Offset::kFormat8nGroups204 = 8204;
-const int32_t CMapTable::Offset::kFormat8Groups208 = 8208;
-const int32_t CMapTable::Offset::kFormat8Group_startCharCode = 0;
-const int32_t CMapTable::Offset::kFormat8Group_endCharCode = 4;
-const int32_t CMapTable::Offset::kFormat8Group_startGlyphId = 8;
-const int32_t CMapTable::Offset::kFormat8Group_structLength = 12;
-const int32_t CMapTable::Offset::kFormat10Format = 0;
-const int32_t CMapTable::Offset::kFormat10Length = 4;
-const int32_t CMapTable::Offset::kFormat10Language = 8;
-const int32_t CMapTable::Offset::kFormat10StartCharCode = 12;
-const int32_t CMapTable::Offset::kFormat10NumChars = 16;
-const int32_t CMapTable::Offset::kFormat10Glyphs0 = 20;
-const int32_t CMapTable::Offset::kFormat12Format = 0;
-const int32_t CMapTable::Offset::kFormat12Length = 4;
-const int32_t CMapTable::Offset::kFormat12Language = 8;
-const int32_t CMapTable::Offset::kFormat12nGroups = 12;
-const int32_t CMapTable::Offset::kFormat12Groups = 16;
-const int32_t CMapTable::Offset::kFormat12Groups_structLength = 12;
-const int32_t CMapTable::Offset::kFormat12_startCharCode = 0;
-const int32_t CMapTable::Offset::kFormat12_endCharCode = 4;
-const int32_t CMapTable::Offset::kFormat12_startGlyphId = 8;
-const int32_t CMapTable::Offset::kFormat13Format = 0;
-const int32_t CMapTable::Offset::kFormat13Length = 4;
-const int32_t CMapTable::Offset::kFormat13Language = 8;
-const int32_t CMapTable::Offset::kFormat13nGroups = 12;
-const int32_t CMapTable::Offset::kFormat13Groups = 16;
-const int32_t CMapTable::Offset::kFormat13Groups_structLength = 12;
-const int32_t CMapTable::Offset::kFormat13_startCharCode = 0;
-const int32_t CMapTable::Offset::kFormat13_endCharCode = 4;
-const int32_t CMapTable::Offset::kFormat13_glyphId = 8;
-const int32_t CMapTable::Offset::kFormat14Format = 0;
-const int32_t CMapTable::Offset::kFormat14Length = 2;
-const int32_t CMapTable::Offset::kLast = -1;
-
-const int32_t CMapTable::CMapFormat::kFormat0 = 0;
-const int32_t CMapTable::CMapFormat::kFormat2 = 2;
-const int32_t CMapTable::CMapFormat::kFormat4 = 4;
-const int32_t CMapTable::CMapFormat::kFormat6 = 6;
-const int32_t CMapTable::CMapFormat::kFormat8 = 8;
-const int32_t CMapTable::CMapFormat::kFormat10 = 10;
-const int32_t CMapTable::CMapFormat::kFormat12 = 12;
-const int32_t CMapTable::CMapFormat::kFormat13 = 13;
-const int32_t CMapTable::CMapFormat::kFormat14 = 14;
 
 /******************************************************************************
  * CMapTable class
diff --git a/sfntly/cmap_table.h b/sfntly/cmap_table.h
index 9e9aa87..c13318e 100644
--- a/sfntly/cmap_table.h
+++ b/sfntly/cmap_table.h
@@ -27,127 +27,131 @@
 
 namespace sfntly {
 
+// CMap subtable formats
+struct CMapFormat {
+  enum {
+    kFormat0 = 0,
+    kFormat2 = 2,
+    kFormat4 = 4,
+    kFormat6 = 6,
+    kFormat8 = 8,
+    kFormat10 = 10,
+    kFormat12 = 12,
+    kFormat13 = 13,
+    kFormat14 = 14
+  };
+};
+
 // A CMap table
 class CMapTable : public Table, public RefCounted<CMapTable> {
  private:
   static const int32_t NOTDEF;
   struct Offset {
-    static const int32_t kVersion;
-    static const int32_t kNumTables;
-    static const int32_t kEncodingRecordStart;
+    enum {
+      kVersion = 0,
+      kNumTables = 2,
+      kEncodingRecordStart = 4,
 
-    // offsets relative to the encoding record
-    static const int32_t kEncodingRecordPlatformId;
-    static const int32_t kEncodingRecordEncodingId;
-    static const int32_t kEncodingRecordOffset;
-    static const int32_t kEncodingRecordSize;
+      // offsets relative to the encoding record
+      kEncodingRecordPlatformId = 0,
+      kEncodingRecordEncodingId = 2,
+      kEncodingRecordOffset = 4,
+      kEncodingRecordSize = 8,
 
-    static const int32_t kFormat;
+      kFormat = 0,
 
-    // Format 0: Byte encoding table
-    static const int32_t kFormat0Format;
-    static const int32_t kFormat0Length;
-    static const int32_t kFormat0Language;
-    static const int32_t kFormat0GlyphIdArray;
+      // Format 0: Byte encoding table
+      kFormat0Format = 0,
+      kFormat0Length = 2,
+      kFormat0Language = 4,
+      kFormat0GlyphIdArray = 6,
 
-    // Format 2: High-byte mapping through table
-    static const int32_t kFormat2Format;
-    static const int32_t kFormat2Length;
-    static const int32_t kFormat2Language;
-    static const int32_t kFormat2SubHeaderKeys;
-    static const int32_t kFormat2SubHeaders;
-    // offset relative to the subHeader structure
-    static const int32_t kFormat2SubHeader_firstCode;
-    static const int32_t kFormat2SubHeader_entryCount;
-    static const int32_t kFormat2SubHeader_idDelta;
-    static const int32_t kFormat2SubHeader_idRangeOffset;
-    static const int32_t kFormat2SubHeader_structLength;
+      // Format 2: High-byte mapping through table
+      kFormat2Format = 0,
+      kFormat2Length = 2,
+      kFormat2Language = 4,
+      kFormat2SubHeaderKeys = 6,
+      kFormat2SubHeaders = 518,
+      // offset relative to the subHeader structure
+      kFormat2SubHeader_firstCode = 0,
+      kFormat2SubHeader_entryCount = 2,
+      kFormat2SubHeader_idDelta = 4,
+      kFormat2SubHeader_idRangeOffset = 6,
+      kFormat2SubHeader_structLength = 8,
 
-    // Format 4: Segment mapping to delta values
-    static const int32_t kFormat4Format;
-    static const int32_t kFormat4Length;
-    static const int32_t kFormat4Language;
-    static const int32_t kFormat4SegCountX2;
-    static const int32_t kFormat4SearchRange;
-    static const int32_t kFormat4EntrySelector;
-    static const int32_t kFormat4RangeShift;
-    static const int32_t kFormat4EndCount;
+      // Format 4: Segment mapping to delta values
+      kFormat4Format = 0,
+      kFormat4Length = 2,
+      kFormat4Language = 4,
+      kFormat4SegCountX2 = 6,
+      kFormat4SearchRange = 8,
+      kFormat4EntrySelector = 10,
+      kFormat4RangeShift = 12,
+      kFormat4EndCount = 14,
 
-    // format 6: Trimmed table mapping
-    static const int32_t kFormat6Format;
-    static const int32_t kFormat6Length;
-    static const int32_t kFormat6Language;
-    static const int32_t kFormat6FirstCode;
-    static const int32_t kFormat6EntryCount;
-    static const int32_t kFormat6GlyphIdArray;
+      // format 6: Trimmed table mapping
+      kFormat6Format = 0,
+      kFormat6Length = 2,
+      kFormat6Language = 4,
+      kFormat6FirstCode = 6,
+      kFormat6EntryCount = 8,
+      kFormat6GlyphIdArray = 10,
 
-    // Format 8: mixed 16-bit and 32-bit coverage
-    static const int32_t kFormat8Format;
-    static const int32_t kFormat8Length;
-    static const int32_t kFormat8Language;
-    static const int32_t kFormat8Is32;
-    static const int32_t kFormat8nGroups204;
-    static const int32_t kFormat8Groups208;
-    // ofset relative to the group structure
-    static const int32_t kFormat8Group_startCharCode;
-    static const int32_t kFormat8Group_endCharCode;
-    static const int32_t kFormat8Group_startGlyphId;
-    static const int32_t kFormat8Group_structLength;
+      // Format 8: mixed 16-bit and 32-bit coverage
+      kFormat8Format = 0,
+      kFormat8Length = 4,
+      kFormat8Language = 8,
+      kFormat8Is32 = 12,
+      kFormat8nGroups204 = 8204,
+      kFormat8Groups208 = 8208,
+      // offset relative to the group structure
+      kFormat8Group_startCharCode = 0,
+      kFormat8Group_endCharCode = 4,
+      kFormat8Group_startGlyphId = 8,
+      kFormat8Group_structLength = 12,
 
-    // Format 10: Trimmed array
-    static const int32_t kFormat10Format;
-    static const int32_t kFormat10Length;
-    static const int32_t kFormat10Language;
-    static const int32_t kFormat10StartCharCode;
-    static const int32_t kFormat10NumChars;
-    static const int32_t kFormat10Glyphs0;
+      // Format 10: Trimmed array
+      kFormat10Format = 0,
+      kFormat10Length = 4,
+      kFormat10Language = 8,
+      kFormat10StartCharCode = 12,
+      kFormat10NumChars = 16,
+      kFormat10Glyphs0 = 20,
 
-    // Format 12: Segmented coverage
-    static const int32_t kFormat12Format;
-    static const int32_t kFormat12Length;
-    static const int32_t kFormat12Language;
-    static const int32_t kFormat12nGroups;
-    static const int32_t kFormat12Groups;
-    static const int32_t kFormat12Groups_structLength;
-    // offsets within the group structure
-    static const int32_t kFormat12_startCharCode;
-    static const int32_t kFormat12_endCharCode;
-    static const int32_t kFormat12_startGlyphId;
+      // Format 12: Segmented coverage
+      kFormat12Format = 0,
+      kFormat12Length = 4,
+      kFormat12Language = 8,
+      kFormat12nGroups = 12,
+      kFormat12Groups = 16,
+      kFormat12Groups_structLength = 12,
+      // offsets within the group structure
+      kFormat12_startCharCode = 0,
+      kFormat12_endCharCode = 4,
+      kFormat12_startGlyphId = 8,
 
-    // Format 13: Last Resort Font
-    static const int32_t kFormat13Format;
-    static const int32_t kFormat13Length;
-    static const int32_t kFormat13Language;
-    static const int32_t kFormat13nGroups;
-    static const int32_t kFormat13Groups;
-    static const int32_t kFormat13Groups_structLength;
-    // offsets within the group structure
-    static const int32_t kFormat13_startCharCode;
-    static const int32_t kFormat13_endCharCode;
-    static const int32_t kFormat13_glyphId;
+      // Format 13: Last Resort Font
+      kFormat13Format = 0,
+      kFormat13Length = 4,
+      kFormat13Language = 8,
+      kFormat13nGroups = 12,
+      kFormat13Groups = 16,
+      kFormat13Groups_structLength = 12,
+      // offsets within the group structure
+      kFormat13_startCharCode = 0,
+      kFormat13_endCharCode = 4,
+      kFormat13_glyphId = 8,
 
-    // Format 14: Unicode Variation Sequences
-    static const int32_t kFormat14Format;
-    static const int32_t kFormat14Length;
+      // Format 14: Unicode Variation Sequences
+      kFormat14Format = 0,
+      kFormat14Length = 2,
 
-    // TODO(stuartg): finish tables
-    // Default UVS Table
+      // TODO(stuartg): finish tables
+      // Default UVS Table
 
-    // Non-default UVS Table
-    static const int32_t kLast;
-  };
-
-  // CMap subtable formats
-  struct CMapFormat {
-    static const int32_t kFormat0;
-    static const int32_t kFormat2;
-    static const int32_t kFormat4;
-    static const int32_t kFormat6;
-    static const int32_t kFormat8;
-    static const int32_t kFormat10;
-    static const int32_t kFormat12;
-    static const int32_t kFormat13;
-    static const int32_t kFormat14;
+      // Non-default UVS Table
+      kLast = -1
+    };
   };
 
  public:
diff --git a/sfntly/data/font_data.cc b/sfntly/data/font_data.cc
index 8cda562..fdba5f8 100644
--- a/sfntly/data/font_data.cc
+++ b/sfntly/data/font_data.cc
@@ -22,23 +22,6 @@
 
 namespace sfntly {
 
-const int32_t DataSize::kBYTE = 1;
-const int32_t DataSize::kCHAR = 1;
-const int32_t DataSize::kUSHORT = 2;
-const int32_t DataSize::kSHORT = 2;
-const int32_t DataSize::kUINT24 = 3;
-const int32_t DataSize::kULONG = 4;
-const int32_t DataSize::kLONG = 4;
-const int32_t DataSize::kFixed = 4;
-const int32_t DataSize::kFUNIT = 4;
-const int32_t DataSize::kFWORD = 2;
-const int32_t DataSize::kUFWORD = 2;
-const int32_t DataSize::kF2DOT14 = 2;
-const int32_t DataSize::kLONGDATETIME = 8;
-const int32_t DataSize::kTag = 4;
-const int32_t DataSize::kGlyphID = 2;
-const int32_t DataSize::kOffset = 2;
-
 FontData::~FontData() {}
 
 void FontData::init(ByteArray* ba) {
diff --git a/sfntly/data/font_data.h b/sfntly/data/font_data.h
index 5766cb8..6bcdb73 100644
--- a/sfntly/data/font_data.h
+++ b/sfntly/data/font_data.h
@@ -25,22 +25,24 @@
 namespace sfntly {
 
 struct DataSize {
-  static const int32_t kBYTE;
-  static const int32_t kCHAR;
-  static const int32_t kUSHORT;
-  static const int32_t kSHORT;
-  static const int32_t kUINT24;
-  static const int32_t kULONG;
-  static const int32_t kLONG;
-  static const int32_t kFixed;
-  static const int32_t kFUNIT;
-  static const int32_t kFWORD;
-  static const int32_t kUFWORD;
-  static const int32_t kF2DOT14;
-  static const int32_t kLONGDATETIME;
-  static const int32_t kTag;
-  static const int32_t kGlyphID;
-  static const int32_t kOffset;
+  enum {
+    kBYTE = 1,
+    kCHAR = 1,
+    kUSHORT = 2,
+    kSHORT = 2,
+    kUINT24 = 3,
+    kULONG = 4,
+    kLONG = 4,
+    kFixed = 4,
+    kFUNIT = 4,
+    kFWORD = 2,
+    kUFWORD = 2,
+    kF2DOT14 = 2,
+    kLONGDATETIME = 8,
+    kTag = 4,
+    kGlyphID = 2,
+    kOffset = 2
+  };
 };
 
 class FontData : virtual public RefCount {
diff --git a/sfntly/font.cc b/sfntly/font.cc
index 46dc48c..1532f49 100644
--- a/sfntly/font.cc
+++ b/sfntly/font.cc
@@ -34,84 +34,8 @@
 
 namespace sfntly {
 
-/******************************************************************************
- * constant definitions
- ******************************************************************************/
-const int32_t PlatformId::kUnknown = -1;
-const int32_t PlatformId::kUnicode = 0;
-const int32_t PlatformId::kMacintosh = 1;
-const int32_t PlatformId::kISO = 2;
-const int32_t PlatformId::kWindows = 3;
-const int32_t PlatformId::kCustom = 4;
-
-const int32_t UnicodeEncodingId::kUnknown = -1;
-const int32_t UnicodeEncodingId::kUnicode1_0 = 0;
-const int32_t UnicodeEncodingId::kUnicode1_1 = 1;
-const int32_t UnicodeEncodingId::kISO10646 = 2;
-const int32_t UnicodeEncodingId::kUnicode2_0_BMP = 3;
-const int32_t UnicodeEncodingId::kUnicode2_0 = 4;
-const int32_t UnicodeEncodingId::kUnicodeVariationSequences = 5;
-
-const int32_t WindowsEncodingId::kUnknown = 0xffffffff;
-const int32_t WindowsEncodingId::kSymbol = 0;
-const int32_t WindowsEncodingId::kUnicodeUCS2 = 1;
-const int32_t WindowsEncodingId::kShiftJIS = 2;
-const int32_t WindowsEncodingId::kPRC = 3;
-const int32_t WindowsEncodingId::kBig5 = 4;
-const int32_t WindowsEncodingId::kWansung = 5;
-const int32_t WindowsEncodingId::kJohab = 6;
-const int32_t WindowsEncodingId::kUnicodeUCS4 = 10;
-
-const int32_t MacintoshEncodingId::kUnknown = -1;
-const int32_t MacintoshEncodingId::kRoman = 0;
-const int32_t MacintoshEncodingId::kJapanese = 1;
-const int32_t MacintoshEncodingId::kChineseTraditional = 2;
-const int32_t MacintoshEncodingId::kKorean = 3;
-const int32_t MacintoshEncodingId::kArabic = 4;
-const int32_t MacintoshEncodingId::kHebrew = 5;
-const int32_t MacintoshEncodingId::kGreek = 6;
-const int32_t MacintoshEncodingId::kRussian = 7;
-const int32_t MacintoshEncodingId::kRSymbol = 8;
-const int32_t MacintoshEncodingId::kDevanagari = 9;
-const int32_t MacintoshEncodingId::kGurmukhi = 10;
-const int32_t MacintoshEncodingId::kGujarati = 11;
-const int32_t MacintoshEncodingId::kOriya = 12;
-const int32_t MacintoshEncodingId::kBengali = 13;
-const int32_t MacintoshEncodingId::kTamil = 14;
-const int32_t MacintoshEncodingId::kTelugu = 15;
-const int32_t MacintoshEncodingId::kKannada = 16;
-const int32_t MacintoshEncodingId::kMalayalam = 17;
-const int32_t MacintoshEncodingId::kSinhalese = 18;
-const int32_t MacintoshEncodingId::kBurmese = 19;
-const int32_t MacintoshEncodingId::kKhmer = 20;
-const int32_t MacintoshEncodingId::kThai = 21;
-const int32_t MacintoshEncodingId::kLaotian = 22;
-const int32_t MacintoshEncodingId::kGeorgian = 23;
-const int32_t MacintoshEncodingId::kArmenian = 24;
-const int32_t MacintoshEncodingId::kChineseSimplified = 25;
-const int32_t MacintoshEncodingId::kTibetan = 26;
-const int32_t MacintoshEncodingId::kMongolian = 27;
-const int32_t MacintoshEncodingId::kGeez = 28;
-const int32_t MacintoshEncodingId::kSlavic = 29;
-const int32_t MacintoshEncodingId::kVietnamese = 30;
-const int32_t MacintoshEncodingId::kSindhi = 31;
-const int32_t MacintoshEncodingId::kUninterpreted = 32;
-
 const int32_t SFNTVERSION_1 = Fixed1616::fixed(1, 0);
 
-const int32_t Font::Offset::kSfntVersion = 0;
-const int32_t Font::Offset::kNumTables = 4;
-const int32_t Font::Offset::kSearchRange = 6;
-const int32_t Font::Offset::kEntrySelector = 8;
-const int32_t Font::Offset::kRangeShift = 10;
-const int32_t Font::Offset::kTableRecordBegin = 12;
-const int32_t Font::Offset::kSfntHeaderSize = 12;
-const int32_t Font::Offset::kTableTag = 0;
-const int32_t Font::Offset::kTableCheckSum = 4;
-const int32_t Font::Offset::kTableOffset = 8;
-const int32_t Font::Offset::kTableLength = 12;
-const int32_t Font::Offset::kTableRecordSize = 16;
-
 /******************************************************************************
  * Font class
  ******************************************************************************/
diff --git a/sfntly/font.h b/sfntly/font.h
index 4b1dc1b..cbd9607 100644
--- a/sfntly/font.h
+++ b/sfntly/font.h
@@ -36,78 +36,86 @@
 // Platform ids. These are used in a number of places within the font whenever
 // the platform needs to be specified.
 struct PlatformId {
-  static const int32_t kUnknown;
-  static const int32_t kUnicode;
-  static const int32_t kMacintosh;
-  static const int32_t kISO;
-  static const int32_t kWindows;
-  static const int32_t kCustom;
+  enum {
+    kUnknown = -1,
+    kUnicode = 0,
+    kMacintosh = 1,
+    kISO = 2,
+    kWindows = 3,
+    kCustom = 4
+  };
 };
 
 // Unicode encoding ids. These are used in a number of places within the font
 // whenever character encodings need to be specified.
 struct UnicodeEncodingId {
-  static const int32_t kUnknown;
-  static const int32_t kUnicode1_0;
-  static const int32_t kUnicode1_1;
-  static const int32_t kISO10646;
-  static const int32_t kUnicode2_0_BMP;
-  static const int32_t kUnicode2_0;
-  static const int32_t kUnicodeVariationSequences;
+  enum {
+    kUnknown = -1,
+    kUnicode1_0 = 0,
+    kUnicode1_1 = 1,
+    kISO10646 = 2,
+    kUnicode2_0_BMP = 3,
+    kUnicode2_0 = 4,
+    kUnicodeVariationSequences = 5
+  };
 };
 
 // Windows encoding ids. These are used in a number of places within the font
 // whenever character encodings need to be specified.
 struct WindowsEncodingId {
-  static const int32_t kUnknown;
-  static const int32_t kSymbol;
-  static const int32_t kUnicodeUCS2;
-  static const int32_t kShiftJIS;
-  static const int32_t kPRC;
-  static const int32_t kBig5;
-  static const int32_t kWansung;
-  static const int32_t kJohab;
-  static const int32_t kUnicodeUCS4;
+  enum {
+    kUnknown = 0xffffffff,
+    kSymbol = 0,
+    kUnicodeUCS2 = 1,
+    kShiftJIS = 2,
+    kPRC = 3,
+    kBig5 = 4,
+    kWansung = 5,
+    kJohab = 6,
+    kUnicodeUCS4 = 10
+  };
 };
 
 // Macintosh encoding ids. These are used in a number of places within the
 // font whenever character encodings need to be specified.
 struct MacintoshEncodingId {
   // Macintosh Platform Encodings
-  static const int32_t kUnknown;
-  static const int32_t kRoman;
-  static const int32_t kJapanese;
-  static const int32_t kChineseTraditional;
-  static const int32_t kKorean;
-  static const int32_t kArabic;
-  static const int32_t kHebrew;
-  static const int32_t kGreek;
-  static const int32_t kRussian;
-  static const int32_t kRSymbol;
-  static const int32_t kDevanagari;
-  static const int32_t kGurmukhi;
-  static const int32_t kGujarati;
-  static const int32_t kOriya;
-  static const int32_t kBengali;
-  static const int32_t kTamil;
-  static const int32_t kTelugu;
-  static const int32_t kKannada;
-  static const int32_t kMalayalam;
-  static const int32_t kSinhalese;
-  static const int32_t kBurmese;
-  static const int32_t kKhmer;
-  static const int32_t kThai;
-  static const int32_t kLaotian;
-  static const int32_t kGeorgian;
-  static const int32_t kArmenian;
-  static const int32_t kChineseSimplified;
-  static const int32_t kTibetan;
-  static const int32_t kMongolian;
-  static const int32_t kGeez;
-  static const int32_t kSlavic;
-  static const int32_t kVietnamese;
-  static const int32_t kSindhi;
-  static const int32_t kUninterpreted;
+  enum {
+    kUnknown = -1,
+    kRoman = 0,
+    kJapanese = 1,
+    kChineseTraditional = 2,
+    kKorean = 3,
+    kArabic = 4,
+    kHebrew = 5,
+    kGreek = 6,
+    kRussian = 7,
+    kRSymbol = 8,
+    kDevanagari = 9,
+    kGurmukhi = 10,
+    kGujarati = 11,
+    kOriya = 12,
+    kBengali = 13,
+    kTamil = 14,
+    kTelugu = 15,
+    kKannada = 16,
+    kMalayalam = 17,
+    kSinhalese = 18,
+    kBurmese = 19,
+    kKhmer = 20,
+    kThai = 21,
+    kLaotian = 22,
+    kGeorgian = 23,
+    kArmenian = 24,
+    kChineseSimplified = 25,
+    kTibetan = 26,
+    kMongolian = 27,
+    kGeez = 28,
+    kSlavic = 29,
+    kVietnamese = 30,
+    kSindhi = 31,
+    kUninterpreted = 32
+  };
 };
 
 extern const int32_t SFNTVERSION_1;
@@ -119,21 +127,23 @@
   // relative to the start of the table or the start of sub-blocks within the
   // table.
   struct Offset {
+    enum {
     // Offsets within the main directory
-    static const int32_t kSfntVersion;
-    static const int32_t kNumTables;
-    static const int32_t kSearchRange;
-    static const int32_t kEntrySelector;
-    static const int32_t kRangeShift;
-    static const int32_t kTableRecordBegin;
-    static const int32_t kSfntHeaderSize;
+      kSfntVersion = 0,
+      kNumTables = 4,
+      kSearchRange = 6,
+      kEntrySelector = 8,
+      kRangeShift = 10,
+      kTableRecordBegin = 12,
+      kSfntHeaderSize = 12,
 
     // Offsets within a specific table record
-    static const int32_t kTableTag;
-    static const int32_t kTableCheckSum;
-    static const int32_t kTableOffset;
-    static const int32_t kTableLength;
-    static const int32_t kTableRecordSize;
+      kTableTag = 0,
+      kTableCheckSum = 4,
+      kTableOffset = 8,
+      kTableLength = 12,
+      kTableRecordSize = 16
+    };
   };
 
   // Note: the two constants are moved to tag.h to avoid VC++ bug.
diff --git a/sfntly/font_factory.cc b/sfntly/font_factory.cc
index f1d1f25..b741f0a 100644
--- a/sfntly/font_factory.cc
+++ b/sfntly/font_factory.cc
@@ -23,14 +23,6 @@
 
 namespace sfntly {
 
-const int32_t FontFactory::Offset::kTTCTag = 0;
-const int32_t FontFactory::Offset::kVersion = 4;
-const int32_t FontFactory::Offset::kNumFonts = 8;
-const int32_t FontFactory::Offset::kOffsetTable = 12;
-const int32_t FontFactory::Offset::kulDsigTag = 0;
-const int32_t FontFactory::Offset::kulDsigLength = 4;
-const int32_t FontFactory::Offset::kulDsigOffset = 8;
-
 FontFactory::FontFactory() : fingerprint_(false) {
 }
 
diff --git a/sfntly/font_factory.h b/sfntly/font_factory.h
index 9307d91..907ea66 100644
--- a/sfntly/font_factory.h
+++ b/sfntly/font_factory.h
@@ -31,17 +31,19 @@
   // relative to the start of the table or the start of sub-blocks within the
   // table.
   struct Offset {
-    // Offsets within the main directory
-    static const int32_t kTTCTag;
-    static const int32_t kVersion;
-    static const int32_t kNumFonts;
-    static const int32_t kOffsetTable;
+    enum {
+      // Offsets within the main directory
+      kTTCTag = 0,
+      kVersion = 4,
+      kNumFonts = 8,
+      kOffsetTable = 12,
 
-    // TTC Version 2.0 extensions
-    // offsets from end of OffsetTable
-    static const int32_t kulDsigTag;
-    static const int32_t kulDsigLength;
-    static const int32_t kulDsigOffset;
+      // TTC Version 2.0 extensions
+      // offsets from end of OffsetTable
+      kulDsigTag = 0,
+      kulDsigLength = 4,
+      kulDsigOffset = 8
+    };
   };
 
   FontFactory();
diff --git a/sfntly/font_header_table.cc b/sfntly/font_header_table.cc
index 5d23d39..7710c5a 100644
--- a/sfntly/font_header_table.cc
+++ b/sfntly/font_header_table.cc
@@ -18,36 +18,6 @@
 
 namespace sfntly {
 /******************************************************************************
- * Constants
- ******************************************************************************/
-const int32_t FontHeaderTable::Offset::kTableVersion = 0;
-const int32_t FontHeaderTable::Offset::kFontRevision = 4;
-const int32_t FontHeaderTable::Offset::kCheckSumAdjustment = 8;
-const int32_t FontHeaderTable::Offset::kMagicNumber = 12;
-const int32_t FontHeaderTable::Offset::kFlags = 16;
-const int32_t FontHeaderTable::Offset::kUnitsPerEm = 18;
-const int32_t FontHeaderTable::Offset::kCreated = 20;
-const int32_t FontHeaderTable::Offset::kModified = 28;
-const int32_t FontHeaderTable::Offset::kXMin = 36;
-const int32_t FontHeaderTable::Offset::kYMin = 38;
-const int32_t FontHeaderTable::Offset::kXMax = 40;
-const int32_t FontHeaderTable::Offset::kYMax = 42;
-const int32_t FontHeaderTable::Offset::kMacStyle = 44;
-const int32_t FontHeaderTable::Offset::kLowestRecPPEM = 46;
-const int32_t FontHeaderTable::Offset::kFontDirectionHint = 48;
-const int32_t FontHeaderTable::Offset::kIndexToLocFormat = 50;
-const int32_t FontHeaderTable::Offset::kGlyphDataFormat = 52;
-
-const int32_t IndexToLocFormat::kShortOffset = 0;
-const int32_t IndexToLocFormat::kLongOffset = 1;
-
-const int32_t FontDirectionHint::kFullyMixed = 0;
-const int32_t FontDirectionHint::kOnlyStrongLTR = 1;
-const int32_t FontDirectionHint::kStrongLTRAndNeutral = 2;
-const int32_t FontDirectionHint::kOnlyStrongRTL = -1;
-const int32_t FontDirectionHint::kStrongRTLAndNeutral = -2;
-
-/******************************************************************************
  * FontHeaderTable class
  ******************************************************************************/
 FontHeaderTable::FontHeaderTable(Header* header, ReadableFontData* data)
diff --git a/sfntly/font_header_table.h b/sfntly/font_header_table.h
index cac33c8..c8aa9fe 100644
--- a/sfntly/font_header_table.h
+++ b/sfntly/font_header_table.h
@@ -22,38 +22,44 @@
 namespace sfntly {
 
 struct IndexToLocFormat {
-  static const int32_t kShortOffset;
-  static const int32_t kLongOffset;
+  enum {
+    kShortOffset = 0,
+    kLongOffset = 1
+  };
 };
 
 struct FontDirectionHint {
-  static const int32_t kFullyMixed;
-  static const int32_t kOnlyStrongLTR;
-  static const int32_t kStrongLTRAndNeutral;
-  static const int32_t kOnlyStrongRTL;
-  static const int32_t kStrongRTLAndNeutral;
+  enum {
+    kFullyMixed = 0,
+    kOnlyStrongLTR = 1,
+    kStrongLTRAndNeutral = 2,
+    kOnlyStrongRTL = -1,
+    kStrongRTLAndNeutral = -2
+  };
 };
 
 class FontHeaderTable : public Table, public RefCounted<FontHeaderTable> {
  private:
   struct Offset {
-    static const int32_t kTableVersion;
-    static const int32_t kFontRevision;
-    static const int32_t kCheckSumAdjustment;
-    static const int32_t kMagicNumber;
-    static const int32_t kFlags;
-    static const int32_t kUnitsPerEm;
-    static const int32_t kCreated;
-    static const int32_t kModified;
-    static const int32_t kXMin;
-    static const int32_t kYMin;
-    static const int32_t kXMax;
-    static const int32_t kYMax;
-    static const int32_t kMacStyle;
-    static const int32_t kLowestRecPPEM;
-    static const int32_t kFontDirectionHint;
-    static const int32_t kIndexToLocFormat;
-    static const int32_t kGlyphDataFormat;
+    enum {
+      kTableVersion = 0,
+      kFontRevision = 4,
+      kCheckSumAdjustment = 8,
+      kMagicNumber = 12,
+      kFlags = 16,
+      kUnitsPerEm = 18,
+      kCreated = 20,
+      kModified = 28,
+      kXMin = 36,
+      kYMin = 38,
+      kXMax = 40,
+      kYMax = 42,
+      kMacStyle = 44,
+      kLowestRecPPEM = 46,
+      kFontDirectionHint = 48,
+      kIndexToLocFormat = 50,
+      kGlyphDataFormat = 52
+    };
   };
 
  private:
diff --git a/sfntly/glyph_table.cc b/sfntly/glyph_table.cc
index 4cd6436..3ff6d97 100644
--- a/sfntly/glyph_table.cc
+++ b/sfntly/glyph_table.cc
@@ -23,21 +23,6 @@
 /******************************************************************************
  * Constants
  ******************************************************************************/
-const int32_t GlyphTable::Offset::kNumberOfContours = 0;
-const int32_t GlyphTable::Offset::kXMin = 2;
-const int32_t GlyphTable::Offset::kYMin = 4;
-const int32_t GlyphTable::Offset::kXMax = 6;
-const int32_t GlyphTable::Offset::kYMax = 8;
-const int32_t GlyphTable::Offset::kSimpleEndPtsOfCountours = 10;
-const int32_t GlyphTable::Offset::kSimpleInstructionLength = 0;
-const int32_t GlyphTable::Offset::kSimpleInstructions = 2;
-const int32_t GlyphTable::Offset::kCompositeFlags = 0;
-const int32_t GlyphTable::Offset::kCompositeGyphIndexWithoutFlag = 0;
-const int32_t GlyphTable::Offset::kCompositeGlyphIndexWithFlag = 2;
-
-const int32_t GlyphType::kSimple = 0;
-const int32_t GlyphType::kComposite = 1;
-
 const int32_t GlyphTable::SimpleGlyph::kFLAG_ONCURVE = 1;
 const int32_t GlyphTable::SimpleGlyph::kFLAG_XSHORT = 1 << 1;
 const int32_t GlyphTable::SimpleGlyph::kFLAG_YSHORT = 1 << 2;
diff --git a/sfntly/glyph_table.h b/sfntly/glyph_table.h
index 6f04d45..8a7a8aa 100644
--- a/sfntly/glyph_table.h
+++ b/sfntly/glyph_table.h
@@ -25,8 +25,10 @@
 namespace sfntly {
 
 struct GlyphType {
-  static const int32_t kSimple;
-  static const int32_t kComposite;
+  enum {
+    kSimple = 0,
+    kComposite = 1
+  };
 };
 
 // Note: due to the complexity of this class, the order of declaration is
@@ -35,26 +37,28 @@
 class GlyphTable : public Table, public RefCounted<GlyphTable> {
  public:
   struct Offset {
-    // header
-    static const int32_t kNumberOfContours;
-    static const int32_t kXMin;
-    static const int32_t kYMin;
-    static const int32_t kXMax;
-    static const int32_t kYMax;
+    enum {
+      // header
+      kNumberOfContours = 0,
+      kXMin = 2,
+      kYMin = 4,
+      kXMax = 6,
+      kYMax = 8,
 
-    // Simple Glyph Description
-    static const int32_t kSimpleEndPtsOfCountours;
-    // offset from the end of the contours array
-    static const int32_t kSimpleInstructionLength;
-    static const int32_t kSimpleInstructions;
-    // flags
-    // xCoordinates
-    // yCoordinates
+      // Simple Glyph Description
+      kSimpleEndPtsOfCountours = 10,
+      // offset from the end of the contours array
+      kSimpleInstructionLength = 0,
+      kSimpleInstructions = 2,
+      // flags
+      // xCoordinates
+      // yCoordinates
 
-    // Composite Glyph Description
-    static const int32_t kCompositeFlags;
-    static const int32_t kCompositeGyphIndexWithoutFlag;
-    static const int32_t kCompositeGlyphIndexWithFlag;
+      // Composite Glyph Description
+      kCompositeFlags = 0,
+      kCompositeGyphIndexWithoutFlag = 0,
+      kCompositeGlyphIndexWithFlag = 2,
+    };
   };
 
  private:
diff --git a/sfntly/horizontal_header_table.cc b/sfntly/horizontal_header_table.cc
index 68afeea..f30e8db 100644
--- a/sfntly/horizontal_header_table.cc
+++ b/sfntly/horizontal_header_table.cc
@@ -22,23 +22,6 @@
 
 namespace sfntly {
 /******************************************************************************
- * HorizontalHeaderTable::Builder class
- ******************************************************************************/
-const int32_t HorizontalHeaderTable::Offset::kVersion = 0;
-const int32_t HorizontalHeaderTable::Offset::kAscender = 4;
-const int32_t HorizontalHeaderTable::Offset::kDescender = 6;
-const int32_t HorizontalHeaderTable::Offset::kLineGap = 8;
-const int32_t HorizontalHeaderTable::Offset::kAdvanceWidthMax = 10;
-const int32_t HorizontalHeaderTable::Offset::kMinLeftSideBearing = 12;
-const int32_t HorizontalHeaderTable::Offset::kMinRightSideBearing = 14;
-const int32_t HorizontalHeaderTable::Offset::kXMaxExtent = 16;
-const int32_t HorizontalHeaderTable::Offset::kCaretSlopeRise = 18;
-const int32_t HorizontalHeaderTable::Offset::kCaretSlopeRun = 20;
-const int32_t HorizontalHeaderTable::Offset::kCaretOffset = 22;
-const int32_t HorizontalHeaderTable::Offset::kMetricDataFormat = 32;
-const int32_t HorizontalHeaderTable::Offset::kNumberOfHMetrics = 34;
-
-/******************************************************************************
  * HorizontalHeaderTable class
  ******************************************************************************/
 HorizontalHeaderTable:: HorizontalHeaderTable(Header* header,
diff --git a/sfntly/horizontal_header_table.h b/sfntly/horizontal_header_table.h
index 36f4180..704391c 100644
--- a/sfntly/horizontal_header_table.h
+++ b/sfntly/horizontal_header_table.h
@@ -25,19 +25,21 @@
                               public RefCounted<HorizontalHeaderTable> {
  private:
   struct Offset {
-    static const int32_t kVersion;
-    static const int32_t kAscender;
-    static const int32_t kDescender;
-    static const int32_t kLineGap;
-    static const int32_t kAdvanceWidthMax;
-    static const int32_t kMinLeftSideBearing;
-    static const int32_t kMinRightSideBearing;
-    static const int32_t kXMaxExtent;
-    static const int32_t kCaretSlopeRise;
-    static const int32_t kCaretSlopeRun;
-    static const int32_t kCaretOffset;
-    static const int32_t kMetricDataFormat;
-    static const int32_t kNumberOfHMetrics;
+    enum {
+      kVersion = 0,
+      kAscender = 4,
+      kDescender = 6,
+      kLineGap = 8,
+      kAdvanceWidthMax = 10,
+      kMinLeftSideBearing = 12,
+      kMinRightSideBearing = 14,
+      kXMaxExtent = 16,
+      kCaretSlopeRise = 18,
+      kCaretSlopeRun = 20,
+      kCaretOffset = 22,
+      kMetricDataFormat = 32,
+      kNumberOfHMetrics = 34,
+    };
   };
 
  private:
diff --git a/sfntly/horizontal_metrics_table.cc b/sfntly/horizontal_metrics_table.cc
index d6beab1..c151e18 100644
--- a/sfntly/horizontal_metrics_table.cc
+++ b/sfntly/horizontal_metrics_table.cc
@@ -19,15 +19,6 @@
 
 namespace sfntly {
 /******************************************************************************
- * Constants
- ******************************************************************************/
-const int32_t HorizontalMetricsTable::Offset::kHMetricsStart = 0;
-const int32_t HorizontalMetricsTable::Offset::kHMetricsSize = 4;
-const int32_t HorizontalMetricsTable::Offset::kHMetricsAdvanceWidth = 0;
-const int32_t HorizontalMetricsTable::Offset::kHMetricsLeftSideBearing = 2;
-const int32_t HorizontalMetricsTable::Offset::kLeftSideBearingSize = 2;
-
-/******************************************************************************
  * HorizontalMetricsTable class
  ******************************************************************************/
 HorizontalMetricsTable::HorizontalMetricsTable(Header* header,
diff --git a/sfntly/horizontal_metrics_table.h b/sfntly/horizontal_metrics_table.h
index 0f1d651..c393fee 100644
--- a/sfntly/horizontal_metrics_table.h
+++ b/sfntly/horizontal_metrics_table.h
@@ -25,15 +25,17 @@
                                public RefCounted<HorizontalMetricsTable> {
  private:
   struct Offset {
-    // hMetrics
-    static const int32_t kHMetricsStart;
-    static const int32_t kHMetricsSize;
+    enum {
+      // hMetrics
+      kHMetricsStart = 0,
+      kHMetricsSize = 4,
 
-    // Offset within an hMetric
-    static const int32_t kHMetricsAdvanceWidth;
-    static const int32_t kHMetricsLeftSideBearing;
+      // Offset within an hMetric
+      kHMetricsAdvanceWidth = 0,
+      kHMetricsLeftSideBearing = 2,
 
-    static const int32_t kLeftSideBearingSize;
+      kLeftSideBearingSize = 2
+    };
   };
 
  private:
diff --git a/sfntly/maximum_profile_table.cc b/sfntly/maximum_profile_table.cc
index a79d1e4..61a176e 100644
--- a/sfntly/maximum_profile_table.cc
+++ b/sfntly/maximum_profile_table.cc
@@ -18,25 +18,6 @@
 
 namespace sfntly {
 /******************************************************************************
- * Constants
- ******************************************************************************/
-const int32_t MaximumProfileTable::Offset::kVersion = 0;
-const int32_t MaximumProfileTable::Offset::kNumGlyphs = 4;
-const int32_t MaximumProfileTable::Offset::kMaxPoints = 6;
-const int32_t MaximumProfileTable::Offset::kMaxContours = 8;
-const int32_t MaximumProfileTable::Offset::kMaxCompositePoints = 10;
-const int32_t MaximumProfileTable::Offset::kMaxCompositeContours = 12;
-const int32_t MaximumProfileTable::Offset::kMaxZones = 14;
-const int32_t MaximumProfileTable::Offset::kMaxTwilightPoints = 16;
-const int32_t MaximumProfileTable::Offset::kMaxStorage = 18;
-const int32_t MaximumProfileTable::Offset::kMaxFunctionDefs = 20;
-const int32_t MaximumProfileTable::Offset::kMaxInstructionDefs = 22;
-const int32_t MaximumProfileTable::Offset::kMaxStackElements = 24;
-const int32_t MaximumProfileTable::Offset::kMaxSizeOfInstructions = 26;
-const int32_t MaximumProfileTable::Offset::kMaxComponentElements = 28;
-const int32_t MaximumProfileTable::Offset::kMaxComponentDepth = 30;
-
-/******************************************************************************
  * MaximumProfileTable class
  ******************************************************************************/
 MaximumProfileTable::MaximumProfileTable(Header* header,
diff --git a/sfntly/maximum_profile_table.h b/sfntly/maximum_profile_table.h
index 7a0b941..044eccf 100644
--- a/sfntly/maximum_profile_table.h
+++ b/sfntly/maximum_profile_table.h
@@ -26,24 +26,26 @@
                             public RefCounted<MaximumProfileTable> {
  private:
   struct Offset {
-    // version 0.5 and 1.0
-    static const int32_t kVersion;
-    static const int32_t kNumGlyphs;
+    enum {
+      // version 0.5 and 1.0
+      kVersion = 0,
+      kNumGlyphs = 4,
 
-    // version 1.0
-    static const int32_t kMaxPoints;
-    static const int32_t kMaxContours;
-    static const int32_t kMaxCompositePoints;
-    static const int32_t kMaxCompositeContours;
-    static const int32_t kMaxZones;
-    static const int32_t kMaxTwilightPoints;
-    static const int32_t kMaxStorage;
-    static const int32_t kMaxFunctionDefs;
-    static const int32_t kMaxInstructionDefs;
-    static const int32_t kMaxStackElements;
-    static const int32_t kMaxSizeOfInstructions;
-    static const int32_t kMaxComponentElements;
-    static const int32_t kMaxComponentDepth;
+      // version 1.0
+      kMaxPoints = 6,
+      kMaxContours = 8,
+      kMaxCompositePoints = 10,
+      kMaxCompositeContours = 12,
+      kMaxZones = 14,
+      kMaxTwilightPoints = 16,
+      kMaxStorage = 18,
+      kMaxFunctionDefs = 20,
+      kMaxInstructionDefs = 22,
+      kMaxStackElements = 24,
+      kMaxSizeOfInstructions = 26,
+      kMaxComponentElements = 28,
+      kMaxComponentDepth = 30,
+    };
   };
 
  private:
diff --git a/sfntly/name_table.cc b/sfntly/name_table.cc
index b344bfa..cee6e3d 100644
--- a/sfntly/name_table.cc
+++ b/sfntly/name_table.cc
@@ -20,378 +20,6 @@
 
 namespace sfntly {
 /******************************************************************************
- * Constants
- ******************************************************************************/
-const int32_t NameTable::Offset::kFormat = 0;
-const int32_t NameTable::Offset::kCount = 2;
-const int32_t NameTable::Offset::kStringOffset = 4;
-const int32_t NameTable::Offset::kNameRecordStart = 6;
-const int32_t NameTable::Offset::kLangTagCount = 0;
-const int32_t NameTable::Offset::kLangTagRecord = 2;
-const int32_t NameTable::Offset::kNameRecordSize = 12;
-const int32_t NameTable::Offset::kNameRecordPlatformId = 0;
-const int32_t NameTable::Offset::kNameRecordEncodingId = 2;
-const int32_t NameTable::Offset::kNameRecordLanguageId = 4;
-const int32_t NameTable::Offset::kNameRecordNameId = 6;
-const int32_t NameTable::Offset::kNameRecordStringLength = 8;
-const int32_t NameTable::Offset::kNameRecordStringOffset = 10;
-
-const int32_t NameTable::NameId::kUnknown = -1;
-const int32_t NameTable::NameId::kCopyrightNotice = 0;
-const int32_t NameTable::NameId::kFontFamilyName = 1;
-const int32_t NameTable::NameId::kFontSubfamilyName = 2;
-const int32_t NameTable::NameId::kUniqueFontIdentifier = 3;
-const int32_t NameTable::NameId::kFullFontName = 4;
-const int32_t NameTable::NameId::kVersionString = 5;
-const int32_t NameTable::NameId::kPostscriptName = 6;
-const int32_t NameTable::NameId::kTrademark = 7;
-const int32_t NameTable::NameId::kManufacturerName = 8;
-const int32_t NameTable::NameId::kDesigner = 9;
-const int32_t NameTable::NameId::kDescription = 10;
-const int32_t NameTable::NameId::kVendorURL = 11;
-const int32_t NameTable::NameId::kDesignerURL = 12;
-const int32_t NameTable::NameId::kLicenseDescription = 13;
-const int32_t NameTable::NameId::kLicenseInfoURL = 14;
-const int32_t NameTable::NameId::kReserved15 = 15;
-const int32_t NameTable::NameId::kPreferredFamily = 16;
-const int32_t NameTable::NameId::kPreferredSubfamily = 17;
-const int32_t NameTable::NameId::kCompatibleFullName = 18;
-const int32_t NameTable::NameId::kSampleText = 19;
-const int32_t NameTable::NameId::kPostscriptCID = 20;
-const int32_t NameTable::NameId::kWWSFamilyName = 21;
-const int32_t NameTable::NameId::kWWSSubfamilyName = 22;
-
-const int32_t UnicodeLanguageId::kUnknown = -1;
-const int32_t UnicodeLanguageId::kAll = 0;
-
-const int32_t MacintoshLanguageId::kUnknown = -1;
-const int32_t MacintoshLanguageId::kEnglish = 0;
-const int32_t MacintoshLanguageId::kFrench = 1;
-const int32_t MacintoshLanguageId::kGerman = 2;
-const int32_t MacintoshLanguageId::kItalian = 3;
-const int32_t MacintoshLanguageId::kDutch = 4;
-const int32_t MacintoshLanguageId::kSwedish = 5;
-const int32_t MacintoshLanguageId::kSpanish = 6;
-const int32_t MacintoshLanguageId::kDanish = 7;
-const int32_t MacintoshLanguageId::kPortuguese = 8;
-const int32_t MacintoshLanguageId::kNorwegian = 9;
-const int32_t MacintoshLanguageId::kHebrew = 10;
-const int32_t MacintoshLanguageId::kJapanese = 11;
-const int32_t MacintoshLanguageId::kArabic = 12;
-const int32_t MacintoshLanguageId::kFinnish = 13;
-const int32_t MacintoshLanguageId::kGreek = 14;
-const int32_t MacintoshLanguageId::kIcelandic = 15;
-const int32_t MacintoshLanguageId::kMaltese = 16;
-const int32_t MacintoshLanguageId::kTurkish = 17;
-const int32_t MacintoshLanguageId::kCroatian = 18;
-const int32_t MacintoshLanguageId::kChinese_Traditional = 19;
-const int32_t MacintoshLanguageId::kUrdu = 20;
-const int32_t MacintoshLanguageId::kHindi = 21;
-const int32_t MacintoshLanguageId::kThai = 22;
-const int32_t MacintoshLanguageId::kKorean = 23;
-const int32_t MacintoshLanguageId::kLithuanian = 24;
-const int32_t MacintoshLanguageId::kPolish = 25;
-const int32_t MacintoshLanguageId::kHungarian = 26;
-const int32_t MacintoshLanguageId::kEstonian = 27;
-const int32_t MacintoshLanguageId::kLatvian = 28;
-const int32_t MacintoshLanguageId::kSami = 29;
-const int32_t MacintoshLanguageId::kFaroese = 30;
-const int32_t MacintoshLanguageId::kFarsiPersian = 31;
-const int32_t MacintoshLanguageId::kRussian = 32;
-const int32_t MacintoshLanguageId::kChinese_Simplified = 33;
-const int32_t MacintoshLanguageId::kFlemish = 34;
-const int32_t MacintoshLanguageId::kIrishGaelic = 35;
-const int32_t MacintoshLanguageId::kAlbanian = 36;
-const int32_t MacintoshLanguageId::kRomanian = 37;
-const int32_t MacintoshLanguageId::kCzech = 38;
-const int32_t MacintoshLanguageId::kSlovak = 39;
-const int32_t MacintoshLanguageId::kSlovenian = 40;
-const int32_t MacintoshLanguageId::kYiddish = 41;
-const int32_t MacintoshLanguageId::kSerbian = 42;
-const int32_t MacintoshLanguageId::kMacedonian = 43;
-const int32_t MacintoshLanguageId::kBulgarian = 44;
-const int32_t MacintoshLanguageId::kUkrainian = 45;
-const int32_t MacintoshLanguageId::kByelorussian = 46;
-const int32_t MacintoshLanguageId::kUzbek = 47;
-const int32_t MacintoshLanguageId::kKazakh = 48;
-const int32_t MacintoshLanguageId::kAzerbaijani_Cyrillic = 49;
-const int32_t MacintoshLanguageId::kAzerbaijani_Arabic = 50;
-const int32_t MacintoshLanguageId::kArmenian = 51;
-const int32_t MacintoshLanguageId::kGeorgian = 52;
-const int32_t MacintoshLanguageId::kMoldavian = 53;
-const int32_t MacintoshLanguageId::kKirghiz = 54;
-const int32_t MacintoshLanguageId::kTajiki = 55;
-const int32_t MacintoshLanguageId::kTurkmen = 56;
-const int32_t MacintoshLanguageId::kMongolian_Mongolian = 57;
-const int32_t MacintoshLanguageId::kMongolian_Cyrillic = 58;
-const int32_t MacintoshLanguageId::kPashto = 59;
-const int32_t MacintoshLanguageId::kKurdish = 60;
-const int32_t MacintoshLanguageId::kKashmiri = 61;
-const int32_t MacintoshLanguageId::kSindhi = 62;
-const int32_t MacintoshLanguageId::kTibetan = 63;
-const int32_t MacintoshLanguageId::kNepali = 64;
-const int32_t MacintoshLanguageId::kSanskrit = 65;
-const int32_t MacintoshLanguageId::kMarathi = 66;
-const int32_t MacintoshLanguageId::kBengali = 67;
-const int32_t MacintoshLanguageId::kAssamese = 68;
-const int32_t MacintoshLanguageId::kGujarati = 69;
-const int32_t MacintoshLanguageId::kPunjabi = 70;
-const int32_t MacintoshLanguageId::kOriya = 71;
-const int32_t MacintoshLanguageId::kMalayalam = 72;
-const int32_t MacintoshLanguageId::kKannada = 73;
-const int32_t MacintoshLanguageId::kTamil = 74;
-const int32_t MacintoshLanguageId::kTelugu = 75;
-const int32_t MacintoshLanguageId::kSinhalese = 76;
-const int32_t MacintoshLanguageId::kBurmese = 77;
-const int32_t MacintoshLanguageId::kKhmer = 78;
-const int32_t MacintoshLanguageId::kLao = 79;
-const int32_t MacintoshLanguageId::kVietnamese = 80;
-const int32_t MacintoshLanguageId::kIndonesian = 81;
-const int32_t MacintoshLanguageId::kTagalong = 82;
-const int32_t MacintoshLanguageId::kMalay_Roman = 83;
-const int32_t MacintoshLanguageId::kMalay_Arabic = 84;
-const int32_t MacintoshLanguageId::kAmharic = 85;
-const int32_t MacintoshLanguageId::kTigrinya = 86;
-const int32_t MacintoshLanguageId::kGalla = 87;
-const int32_t MacintoshLanguageId::kSomali = 88;
-const int32_t MacintoshLanguageId::kSwahili = 89;
-const int32_t MacintoshLanguageId::kKinyarwandaRuanda = 90;
-const int32_t MacintoshLanguageId::kRundi = 91;
-const int32_t MacintoshLanguageId::kNyanjaChewa = 92;
-const int32_t MacintoshLanguageId::kMalagasy = 93;
-const int32_t MacintoshLanguageId::kEsperanto = 94;
-const int32_t MacintoshLanguageId::kWelsh = 128;
-const int32_t MacintoshLanguageId::kBasque = 129;
-const int32_t MacintoshLanguageId::kCatalan = 130;
-const int32_t MacintoshLanguageId::kLatin = 131;
-const int32_t MacintoshLanguageId::kQuenchua = 132;
-const int32_t MacintoshLanguageId::kGuarani = 133;
-const int32_t MacintoshLanguageId::kAymara = 134;
-const int32_t MacintoshLanguageId::kTatar = 135;
-const int32_t MacintoshLanguageId::kUighur = 136;
-const int32_t MacintoshLanguageId::kDzongkha = 137;
-const int32_t MacintoshLanguageId::kJavanese_Roman = 138;
-const int32_t MacintoshLanguageId::kSundanese_Roman = 139;
-const int32_t MacintoshLanguageId::kGalician = 140;
-const int32_t MacintoshLanguageId::kAfrikaans = 141;
-const int32_t MacintoshLanguageId::kBreton = 142;
-const int32_t MacintoshLanguageId::kInuktitut = 143;
-const int32_t MacintoshLanguageId::kScottishGaelic = 144;
-const int32_t MacintoshLanguageId::kManxGaelic = 145;
-const int32_t MacintoshLanguageId::kIrishGaelic_WithDotAbove = 146;
-const int32_t MacintoshLanguageId::kTongan = 147;
-const int32_t MacintoshLanguageId::kGreek_Polytonic = 148;
-const int32_t MacintoshLanguageId::kGreenlandic = 149;
-const int32_t MacintoshLanguageId::kAzerbaijani_Roman = 150;
-
-const int32_t WindowsLanguageId::kUnknown = -1;
-const int32_t WindowsLanguageId::kAfrikaans_SouthAfrica = 0x0436;
-const int32_t WindowsLanguageId::kAlbanian_Albania = 0x041C;
-const int32_t WindowsLanguageId::kAlsatian_France = 0x0484;
-const int32_t WindowsLanguageId::kAmharic_Ethiopia = 0x045E;
-const int32_t WindowsLanguageId::kArabic_Algeria = 0x1401;
-const int32_t WindowsLanguageId::kArabic_Bahrain = 0x3C01;
-const int32_t WindowsLanguageId::kArabic_Egypt = 0x0C01;
-const int32_t WindowsLanguageId::kArabic_Iraq = 0x0801;
-const int32_t WindowsLanguageId::kArabic_Jordan = 0x2C01;
-const int32_t WindowsLanguageId::kArabic_Kuwait = 0x3401;
-const int32_t WindowsLanguageId::kArabic_Lebanon = 0x3001;
-const int32_t WindowsLanguageId::kArabic_Libya = 0x1001;
-const int32_t WindowsLanguageId::kArabic_Morocco = 0x1801;
-const int32_t WindowsLanguageId::kArabic_Oman = 0x2001;
-const int32_t WindowsLanguageId::kArabic_Qatar = 0x4001;
-const int32_t WindowsLanguageId::kArabic_SaudiArabia = 0x0401;
-const int32_t WindowsLanguageId::kArabic_Syria = 0x2801;
-const int32_t WindowsLanguageId::kArabic_Tunisia = 0x1C01;
-const int32_t WindowsLanguageId::kArabic_UAE = 0x3801;
-const int32_t WindowsLanguageId::kArabic_Yemen = 0x2401;
-const int32_t WindowsLanguageId::kArmenian_Armenia = 0x042B;
-const int32_t WindowsLanguageId::kAssamese_India = 0x044D;
-const int32_t WindowsLanguageId::kAzeri_Cyrillic_Azerbaijan = 0x082C;
-const int32_t WindowsLanguageId::kAzeri_Latin_Azerbaijan = 0x042C;
-const int32_t WindowsLanguageId::kBashkir_Russia = 0x046D;
-const int32_t WindowsLanguageId::kBasque_Basque = 0x042D;
-const int32_t WindowsLanguageId::kBelarusian_Belarus = 0x0423;
-const int32_t WindowsLanguageId::kBengali_Bangladesh = 0x0845;
-const int32_t WindowsLanguageId::kBengali_India = 0x0445;
-const int32_t WindowsLanguageId::kBosnian_Cyrillic_BosniaAndHerzegovina = 0x201A;
-const int32_t WindowsLanguageId::kBosnian_Latin_BosniaAndHerzegovina = 0x141A;
-const int32_t WindowsLanguageId::kBreton_France = 0x047E;
-const int32_t WindowsLanguageId::kBulgarian_Bulgaria = 0x0402;
-const int32_t WindowsLanguageId::kCatalan_Catalan = 0x0403;
-const int32_t WindowsLanguageId::kChinese_HongKongSAR = 0x0C04;
-const int32_t WindowsLanguageId::kChinese_MacaoSAR = 0x1404;
-const int32_t WindowsLanguageId::kChinese_PeoplesRepublicOfChina = 0x0804;
-const int32_t WindowsLanguageId::kChinese_Singapore = 0x1004;
-const int32_t WindowsLanguageId::kChinese_Taiwan = 0x0404;
-const int32_t WindowsLanguageId::kCorsican_France = 0x0483;
-const int32_t WindowsLanguageId::kCroatian_Croatia = 0x041A;
-const int32_t WindowsLanguageId::kCroatian_Latin_BosniaAndHerzegovina = 0x101A;
-const int32_t WindowsLanguageId::kCzech_CzechRepublic = 0x0405;
-const int32_t WindowsLanguageId::kDanish_Denmark = 0x0406;
-const int32_t WindowsLanguageId::kDari_Afghanistan = 0x048C;
-const int32_t WindowsLanguageId::kDivehi_Maldives = 0x0465;
-const int32_t WindowsLanguageId::kDutch_Belgium = 0x0813;
-const int32_t WindowsLanguageId::kDutch_Netherlands = 0x0413;
-const int32_t WindowsLanguageId::kEnglish_Australia = 0x0C09;
-const int32_t WindowsLanguageId::kEnglish_Belize = 0x2809;
-const int32_t WindowsLanguageId::kEnglish_Canada = 0x1009;
-const int32_t WindowsLanguageId::kEnglish_Caribbean = 0x2409;
-const int32_t WindowsLanguageId::kEnglish_India = 0x4009;
-const int32_t WindowsLanguageId::kEnglish_Ireland = 0x1809;
-const int32_t WindowsLanguageId::kEnglish_Jamaica = 0x2009;
-const int32_t WindowsLanguageId::kEnglish_Malaysia = 0x4409;
-const int32_t WindowsLanguageId::kEnglish_NewZealand = 0x1409;
-const int32_t WindowsLanguageId::kEnglish_RepublicOfThePhilippines = 0x3409;
-const int32_t WindowsLanguageId::kEnglish_Singapore = 0x4809;
-const int32_t WindowsLanguageId::kEnglish_SouthAfrica = 0x1C09;
-const int32_t WindowsLanguageId::kEnglish_TrinidadAndTobago = 0x2C09;
-const int32_t WindowsLanguageId::kEnglish_UnitedKingdom = 0x0809;
-const int32_t WindowsLanguageId::kEnglish_UnitedStates = 0x0409;
-const int32_t WindowsLanguageId::kEnglish_Zimbabwe = 0x3009;
-const int32_t WindowsLanguageId::kEstonian_Estonia = 0x0425;
-const int32_t WindowsLanguageId::kFaroese_FaroeIslands = 0x0438;
-const int32_t WindowsLanguageId::kFilipino_Philippines = 0x0464;
-const int32_t WindowsLanguageId::kFinnish_Finland = 0x040B;
-const int32_t WindowsLanguageId::kFrench_Belgium = 0x080C;
-const int32_t WindowsLanguageId::kFrench_Canada = 0x0C0C;
-const int32_t WindowsLanguageId::kFrench_France = 0x040C;
-const int32_t WindowsLanguageId::kFrench_Luxembourg = 0x140c;
-const int32_t WindowsLanguageId::kFrench_PrincipalityOfMonoco = 0x180C;
-const int32_t WindowsLanguageId::kFrench_Switzerland = 0x100C;
-const int32_t WindowsLanguageId::kFrisian_Netherlands = 0x0462;
-const int32_t WindowsLanguageId::kGalician_Galician = 0x0456;
-const int32_t WindowsLanguageId::kGeorgian_Georgia = 0x0437;
-const int32_t WindowsLanguageId::kGerman_Austria = 0x0C07;
-const int32_t WindowsLanguageId::kGerman_Germany = 0x0407;
-const int32_t WindowsLanguageId::kGerman_Liechtenstein = 0x1407;
-const int32_t WindowsLanguageId::kGerman_Luxembourg = 0x1007;
-const int32_t WindowsLanguageId::kGerman_Switzerland = 0x0807;
-const int32_t WindowsLanguageId::kGreek_Greece = 0x0408;
-const int32_t WindowsLanguageId::kGreenlandic_Greenland = 0x046F;
-const int32_t WindowsLanguageId::kGujarati_India = 0x0447;
-const int32_t WindowsLanguageId::kHausa_Latin_Nigeria = 0x0468;
-const int32_t WindowsLanguageId::kHebrew_Israel = 0x040D;
-const int32_t WindowsLanguageId::kHindi_India = 0x0439;
-const int32_t WindowsLanguageId::kHungarian_Hungary = 0x040E;
-const int32_t WindowsLanguageId::kIcelandic_Iceland = 0x040F;
-const int32_t WindowsLanguageId::kIgbo_Nigeria = 0x0470;
-const int32_t WindowsLanguageId::kIndonesian_Indonesia = 0x0421;
-const int32_t WindowsLanguageId::kInuktitut_Canada = 0x045D;
-const int32_t WindowsLanguageId::kInuktitut_Latin_Canada = 0x085D;
-const int32_t WindowsLanguageId::kIrish_Ireland = 0x083C;
-const int32_t WindowsLanguageId::kisiXhosa_SouthAfrica = 0x0434;
-const int32_t WindowsLanguageId::kisiZulu_SouthAfrica = 0x0435;
-const int32_t WindowsLanguageId::kItalian_Italy = 0x0410;
-const int32_t WindowsLanguageId::kItalian_Switzerland = 0x0810;
-const int32_t WindowsLanguageId::kJapanese_Japan = 0x0411;
-const int32_t WindowsLanguageId::kKannada_India = 0x044B;
-const int32_t WindowsLanguageId::kKazakh_Kazakhstan = 0x043F;
-const int32_t WindowsLanguageId::kKhmer_Cambodia = 0x0453;
-const int32_t WindowsLanguageId::kKiche_Guatemala = 0x0486;
-const int32_t WindowsLanguageId::kKinyarwanda_Rwanda = 0x0487;
-const int32_t WindowsLanguageId::kKiswahili_Kenya = 0x0441;
-const int32_t WindowsLanguageId::kKonkani_India = 0x0457;
-const int32_t WindowsLanguageId::kKorean_Korea = 0x0412;
-const int32_t WindowsLanguageId::kKyrgyz_Kyrgyzstan = 0x0440;
-const int32_t WindowsLanguageId::kLao_LaoPDR = 0x0454;
-const int32_t WindowsLanguageId::kLatvian_Latvia = 0x0426;
-const int32_t WindowsLanguageId::kLithuanian_Lithuania = 0x0427;
-const int32_t WindowsLanguageId::kLowerSorbian_Germany = 0x082E;
-const int32_t WindowsLanguageId::kLuxembourgish_Luxembourg = 0x046E;
-const int32_t WindowsLanguageId::kMacedonian_FYROM_FormerYugoslavRepublicOfMacedonia = 0x042F;
-const int32_t WindowsLanguageId::kMalay_BruneiDarussalam = 0x083E;
-const int32_t WindowsLanguageId::kMalay_Malaysia = 0x043E;
-const int32_t WindowsLanguageId::kMalayalam_India = 0x044C;
-const int32_t WindowsLanguageId::kMaltese_Malta = 0x043A;
-const int32_t WindowsLanguageId::kMaori_NewZealand = 0x0481;
-const int32_t WindowsLanguageId::kMapudungun_Chile = 0x047A;
-const int32_t WindowsLanguageId::kMarathi_India = 0x044E;
-const int32_t WindowsLanguageId::kMohawk_Mohawk = 0x047C;
-const int32_t WindowsLanguageId::kMongolian_Cyrillic_Mongolia = 0x0450;
-const int32_t WindowsLanguageId::kMongolian_Traditional_PeoplesRepublicOfChina = 0x0850;
-const int32_t WindowsLanguageId::kNepali_Nepal = 0x0461;
-const int32_t WindowsLanguageId::kNorwegian_Bokmal_Norway = 0x0414;
-const int32_t WindowsLanguageId::kNorwegian_Nynorsk_Norway = 0x0814;
-const int32_t WindowsLanguageId::kOccitan_France = 0x0482;
-const int32_t WindowsLanguageId::kOriya_India = 0x0448;
-const int32_t WindowsLanguageId::kPashto_Afghanistan = 0x0463;
-const int32_t WindowsLanguageId::kPolish_Poland = 0x0415;
-const int32_t WindowsLanguageId::kPortuguese_Brazil = 0x0416;
-const int32_t WindowsLanguageId::kPortuguese_Portugal = 0x0816;
-const int32_t WindowsLanguageId::kPunjabi_India = 0x0446;
-const int32_t WindowsLanguageId::kQuechua_Bolivia = 0x046B;
-const int32_t WindowsLanguageId::kQuechua_Ecuador = 0x086B;
-const int32_t WindowsLanguageId::kQuechua_Peru = 0x0C6B;
-const int32_t WindowsLanguageId::kRomanian_Romania = 0x0418;
-const int32_t WindowsLanguageId::kRomansh_Switzerland = 0x0417;
-const int32_t WindowsLanguageId::kRussian_Russia = 0x0419;
-const int32_t WindowsLanguageId::kSami_Inari_Finland = 0x243B;
-const int32_t WindowsLanguageId::kSami_Lule_Norway = 0x103B;
-const int32_t WindowsLanguageId::kSami_Lule_Sweden = 0x143B;
-const int32_t WindowsLanguageId::kSami_Northern_Finland = 0x0C3B;
-const int32_t WindowsLanguageId::kSami_Northern_Norway = 0x043B;
-const int32_t WindowsLanguageId::kSami_Northern_Sweden = 0x083B;
-const int32_t WindowsLanguageId::kSami_Skolt_Finland = 0x203B;
-const int32_t WindowsLanguageId::kSami_Southern_Norway = 0x183B;
-const int32_t WindowsLanguageId::kSami_Southern_Sweden = 0x1C3B;
-const int32_t WindowsLanguageId::kSanskrit_India = 0x044F;
-const int32_t WindowsLanguageId::kSerbian_Cyrillic_BosniaAndHerzegovina = 0x1C1A;
-const int32_t WindowsLanguageId::kSerbian_Cyrillic_Serbia = 0x0C1A;
-const int32_t WindowsLanguageId::kSerbian_Latin_BosniaAndHerzegovina = 0x181A;
-const int32_t WindowsLanguageId::kSerbian_Latin_Serbia = 0x081A;
-const int32_t WindowsLanguageId::kSesothoSaLeboa_SouthAfrica = 0x046C;
-const int32_t WindowsLanguageId::kSetswana_SouthAfrica = 0x0432;
-const int32_t WindowsLanguageId::kSinhala_SriLanka = 0x045B;
-const int32_t WindowsLanguageId::kSlovak_Slovakia = 0x041B;
-const int32_t WindowsLanguageId::kSlovenian_Slovenia = 0x0424;
-const int32_t WindowsLanguageId::kSpanish_Argentina = 0x2C0A;
-const int32_t WindowsLanguageId::kSpanish_Bolivia = 0x400A;
-const int32_t WindowsLanguageId::kSpanish_Chile = 0x340A;
-const int32_t WindowsLanguageId::kSpanish_Colombia = 0x240A;
-const int32_t WindowsLanguageId::kSpanish_CostaRica = 0x140A;
-const int32_t WindowsLanguageId::kSpanish_DominicanRepublic = 0x1C0A;
-const int32_t WindowsLanguageId::kSpanish_Ecuador = 0x300A;
-const int32_t WindowsLanguageId::kSpanish_ElSalvador = 0x440A;
-const int32_t WindowsLanguageId::kSpanish_Guatemala = 0x100A;
-const int32_t WindowsLanguageId::kSpanish_Honduras = 0x480A;
-const int32_t WindowsLanguageId::kSpanish_Mexico = 0x080A;
-const int32_t WindowsLanguageId::kSpanish_Nicaragua = 0x4C0A;
-const int32_t WindowsLanguageId::kSpanish_Panama = 0x180A;
-const int32_t WindowsLanguageId::kSpanish_Paraguay = 0x3C0A;
-const int32_t WindowsLanguageId::kSpanish_Peru = 0x280A;
-const int32_t WindowsLanguageId::kSpanish_PuertoRico = 0x500A;
-const int32_t WindowsLanguageId::kSpanish_ModernSort_Spain = 0x0C0A;
-const int32_t WindowsLanguageId::kSpanish_TraditionalSort_Spain = 0x040A;
-const int32_t WindowsLanguageId::kSpanish_UnitedStates = 0x540A;
-const int32_t WindowsLanguageId::kSpanish_Uruguay = 0x380A;
-const int32_t WindowsLanguageId::kSpanish_Venezuela = 0x200A;
-const int32_t WindowsLanguageId::kSweden_Finland = 0x081D;
-const int32_t WindowsLanguageId::kSwedish_Sweden = 0x041D;
-const int32_t WindowsLanguageId::kSyriac_Syria = 0x045A;
-const int32_t WindowsLanguageId::kTajik_Cyrillic_Tajikistan = 0x0428;
-const int32_t WindowsLanguageId::kTamazight_Latin_Algeria = 0x085F;
-const int32_t WindowsLanguageId::kTamil_India = 0x0449;
-const int32_t WindowsLanguageId::kTatar_Russia = 0x0444;
-const int32_t WindowsLanguageId::kTelugu_India = 0x044A;
-const int32_t WindowsLanguageId::kThai_Thailand = 0x041E;
-const int32_t WindowsLanguageId::kTibetan_PRC = 0x0451;
-const int32_t WindowsLanguageId::kTurkish_Turkey = 0x041F;
-const int32_t WindowsLanguageId::kTurkmen_Turkmenistan = 0x0442;
-const int32_t WindowsLanguageId::kUighur_PRC = 0x0480;
-const int32_t WindowsLanguageId::kUkrainian_Ukraine = 0x0422;
-const int32_t WindowsLanguageId::kUpperSorbian_Germany = 0x042E;
-const int32_t WindowsLanguageId::kUrdu_IslamicRepublicOfPakistan = 0x0420;
-const int32_t WindowsLanguageId::kUzbek_Cyrillic_Uzbekistan = 0x0843;
-const int32_t WindowsLanguageId::kUzbek_Latin_Uzbekistan = 0x0443;
-const int32_t WindowsLanguageId::kVietnamese_Vietnam = 0x042A;
-const int32_t WindowsLanguageId::kWelsh_UnitedKingdom = 0x0452;
-const int32_t WindowsLanguageId::kWolof_Senegal = 0x0448;
-const int32_t WindowsLanguageId::kYakut_Russia = 0x0485;
-const int32_t WindowsLanguageId::kYi_PRC = 0x0478;
-const int32_t WindowsLanguageId::kYoruba_Nigeria = 0x046A;
-
-/******************************************************************************
  * NameTable class
  ******************************************************************************/
 NameTable::NameTable(Header* header, ReadableFontData* data)
diff --git a/sfntly/name_table.h b/sfntly/name_table.h
index 7553aa0..948c6b9 100644
--- a/sfntly/name_table.h
+++ b/sfntly/name_table.h
@@ -25,391 +25,401 @@
 
 namespace sfntly {
 
-struct UnicodeLanguageId {
-  static const int32_t kUnknown;
-  static const int32_t kAll;
+struct NameId {
+  enum {
+    kUnknown = -1,
+    kCopyrightNotice = 0,
+    kFontFamilyName = 1,
+    kFontSubfamilyName = 2,
+    kUniqueFontIdentifier = 3,
+    kFullFontName = 4,
+    kVersionString = 5,
+    kPostscriptName = 6,
+    kTrademark = 7,
+    kManufacturerName = 8,
+    kDesigner = 9,
+    kDescription = 10,
+    kVendorURL = 11,
+    kDesignerURL = 12,
+    kLicenseDescription = 13,
+    kLicenseInfoURL = 14,
+    kReserved15 = 15,
+    kPreferredFamily = 16,
+    kPreferredSubfamily = 17,
+    kCompatibleFullName = 18,
+    kSampleText = 19,
+    kPostscriptCID = 20,
+    kWWSFamilyName = 21,
+    kWWSSubfamilyName = 22
+  };
 };
 
-// Macinstosh Language IDs (platform ID = 1)
+struct UnicodeLanguageId {
+  enum {
+    kUnknown = -1,
+    kAll = 0
+  };
+};
+
+// Macintosh Language IDs (platform ID = 1)
 struct MacintoshLanguageId {
-  static const int32_t kUnknown;
-  static const int32_t kEnglish;
-  static const int32_t kFrench;
-  static const int32_t kGerman;
-  static const int32_t kItalian;
-  static const int32_t kDutch;
-  static const int32_t kSwedish;
-  static const int32_t kSpanish;
-  static const int32_t kDanish;
-  static const int32_t kPortuguese;
-  static const int32_t kNorwegian;
-  static const int32_t kHebrew;
-  static const int32_t kJapanese;
-  static const int32_t kArabic;
-  static const int32_t kFinnish;
-  static const int32_t kGreek;
-  static const int32_t kIcelandic;
-  static const int32_t kMaltese;
-  static const int32_t kTurkish;
-  static const int32_t kCroatian;
-  static const int32_t kChinese_Traditional;
-  static const int32_t kUrdu;
-  static const int32_t kHindi;
-  static const int32_t kThai;
-  static const int32_t kKorean;
-  static const int32_t kLithuanian;
-  static const int32_t kPolish;
-  static const int32_t kHungarian;
-  static const int32_t kEstonian;
-  static const int32_t kLatvian;
-  static const int32_t kSami;
-  static const int32_t kFaroese;
-  static const int32_t kFarsiPersian;
-  static const int32_t kRussian;
-  static const int32_t kChinese_Simplified;
-  static const int32_t kFlemish;
-  static const int32_t kIrishGaelic;
-  static const int32_t kAlbanian;
-  static const int32_t kRomanian;
-  static const int32_t kCzech;
-  static const int32_t kSlovak;
-  static const int32_t kSlovenian;
-  static const int32_t kYiddish;
-  static const int32_t kSerbian;
-  static const int32_t kMacedonian;
-  static const int32_t kBulgarian;
-  static const int32_t kUkrainian;
-  static const int32_t kByelorussian;
-  static const int32_t kUzbek;
-  static const int32_t kKazakh;
-  static const int32_t kAzerbaijani_Cyrillic;
-  static const int32_t kAzerbaijani_Arabic;
-  static const int32_t kArmenian;
-  static const int32_t kGeorgian;
-  static const int32_t kMoldavian;
-  static const int32_t kKirghiz;
-  static const int32_t kTajiki;
-  static const int32_t kTurkmen;
-  static const int32_t kMongolian_Mongolian;
-  static const int32_t kMongolian_Cyrillic;
-  static const int32_t kPashto;
-  static const int32_t kKurdish;
-  static const int32_t kKashmiri;
-  static const int32_t kSindhi;
-  static const int32_t kTibetan;
-  static const int32_t kNepali;
-  static const int32_t kSanskrit;
-  static const int32_t kMarathi;
-  static const int32_t kBengali;
-  static const int32_t kAssamese;
-  static const int32_t kGujarati;
-  static const int32_t kPunjabi;
-  static const int32_t kOriya;
-  static const int32_t kMalayalam;
-  static const int32_t kKannada;
-  static const int32_t kTamil;
-  static const int32_t kTelugu;
-  static const int32_t kSinhalese;
-  static const int32_t kBurmese;
-  static const int32_t kKhmer;
-  static const int32_t kLao;
-  static const int32_t kVietnamese;
-  static const int32_t kIndonesian;
-  static const int32_t kTagalong;
-  static const int32_t kMalay_Roman;
-  static const int32_t kMalay_Arabic;
-  static const int32_t kAmharic;
-  static const int32_t kTigrinya;
-  static const int32_t kGalla;
-  static const int32_t kSomali;
-  static const int32_t kSwahili;
-  static const int32_t kKinyarwandaRuanda;
-  static const int32_t kRundi;
-  static const int32_t kNyanjaChewa;
-  static const int32_t kMalagasy;
-  static const int32_t kEsperanto;
-  static const int32_t kWelsh;
-  static const int32_t kBasque;
-  static const int32_t kCatalan;
-  static const int32_t kLatin;
-  static const int32_t kQuenchua;
-  static const int32_t kGuarani;
-  static const int32_t kAymara;
-  static const int32_t kTatar;
-  static const int32_t kUighur;
-  static const int32_t kDzongkha;
-  static const int32_t kJavanese_Roman;
-  static const int32_t kSundanese_Roman;
-  static const int32_t kGalician;
-  static const int32_t kAfrikaans;
-  static const int32_t kBreton;
-  static const int32_t kInuktitut;
-  static const int32_t kScottishGaelic;
-  static const int32_t kManxGaelic;
-  static const int32_t kIrishGaelic_WithDotAbove;
-  static const int32_t kTongan;
-  static const int32_t kGreek_Polytonic;
-  static const int32_t kGreenlandic;
-  static const int32_t kAzerbaijani_Roman;
+  enum {
+    kUnknown = -1,
+    kEnglish = 0,
+    kFrench = 1,
+    kGerman = 2,
+    kItalian = 3,
+    kDutch = 4,
+    kSwedish = 5,
+    kSpanish = 6,
+    kDanish = 7,
+    kPortuguese = 8,
+    kNorwegian = 9,
+    kHebrew = 10,
+    kJapanese = 11,
+    kArabic = 12,
+    kFinnish = 13,
+    kGreek = 14,
+    kIcelandic = 15,
+    kMaltese = 16,
+    kTurkish = 17,
+    kCroatian = 18,
+    kChinese_Traditional = 19,
+    kUrdu = 20,
+    kHindi = 21,
+    kThai = 22,
+    kKorean = 23,
+    kLithuanian = 24,
+    kPolish = 25,
+    kHungarian = 26,
+    kEstonian = 27,
+    kLatvian = 28,
+    kSami = 29,
+    kFaroese = 30,
+    kFarsiPersian = 31,
+    kRussian = 32,
+    kChinese_Simplified = 33,
+    kFlemish = 34,
+    kIrishGaelic = 35,
+    kAlbanian = 36,
+    kRomanian = 37,
+    kCzech = 38,
+    kSlovak = 39,
+    kSlovenian = 40,
+    kYiddish = 41,
+    kSerbian = 42,
+    kMacedonian = 43,
+    kBulgarian = 44,
+    kUkrainian = 45,
+    kByelorussian = 46,
+    kUzbek = 47,
+    kKazakh = 48,
+    kAzerbaijani_Cyrillic = 49,
+    kAzerbaijani_Arabic = 50,
+    kArmenian = 51,
+    kGeorgian = 52,
+    kMoldavian = 53,
+    kKirghiz = 54,
+    kTajiki = 55,
+    kTurkmen = 56,
+    kMongolian_Mongolian = 57,
+    kMongolian_Cyrillic = 58,
+    kPashto = 59,
+    kKurdish = 60,
+    kKashmiri = 61,
+    kSindhi = 62,
+    kTibetan = 63,
+    kNepali = 64,
+    kSanskrit = 65,
+    kMarathi = 66,
+    kBengali = 67,
+    kAssamese = 68,
+    kGujarati = 69,
+    kPunjabi = 70,
+    kOriya = 71,
+    kMalayalam = 72,
+    kKannada = 73,
+    kTamil = 74,
+    kTelugu = 75,
+    kSinhalese = 76,
+    kBurmese = 77,
+    kKhmer = 78,
+    kLao = 79,
+    kVietnamese = 80,
+    kIndonesian = 81,
+    kTagalong = 82,
+    kMalay_Roman = 83,
+    kMalay_Arabic = 84,
+    kAmharic = 85,
+    kTigrinya = 86,
+    kGalla = 87,
+    kSomali = 88,
+    kSwahili = 89,
+    kKinyarwandaRuanda = 90,
+    kRundi = 91,
+    kNyanjaChewa = 92,
+    kMalagasy = 93,
+    kEsperanto = 94,
+    kWelsh = 128,
+    kBasque = 129,
+    kCatalan = 130,
+    kLatin = 131,
+    kQuenchua = 132,
+    kGuarani = 133,
+    kAymara = 134,
+    kTatar = 135,
+    kUighur = 136,
+    kDzongkha = 137,
+    kJavanese_Roman = 138,
+    kSundanese_Roman = 139,
+    kGalician = 140,
+    kAfrikaans = 141,
+    kBreton = 142,
+    kInuktitut = 143,
+    kScottishGaelic = 144,
+    kManxGaelic = 145,
+    kIrishGaelic_WithDotAbove = 146,
+    kTongan = 147,
+    kGreek_Polytonic = 148,
+    kGreenlandic = 149,
+    kAzerbaijani_Roman = 150
+  };
 };
 
 // Windows Language IDs (platformID = 3)
 struct WindowsLanguageId {
-  static const int32_t kUnknown;
-  static const int32_t kAfrikaans_SouthAfrica;
-  static const int32_t kAlbanian_Albania;
-  static const int32_t kAlsatian_France;
-  static const int32_t kAmharic_Ethiopia;
-  static const int32_t kArabic_Algeria;
-  static const int32_t kArabic_Bahrain;
-  static const int32_t kArabic_Egypt;
-  static const int32_t kArabic_Iraq;
-  static const int32_t kArabic_Jordan;
-  static const int32_t kArabic_Kuwait;
-  static const int32_t kArabic_Lebanon;
-  static const int32_t kArabic_Libya;
-  static const int32_t kArabic_Morocco;
-  static const int32_t kArabic_Oman;
-  static const int32_t kArabic_Qatar;
-  static const int32_t kArabic_SaudiArabia;
-  static const int32_t kArabic_Syria;
-  static const int32_t kArabic_Tunisia;
-  static const int32_t kArabic_UAE;
-  static const int32_t kArabic_Yemen;
-  static const int32_t kArmenian_Armenia;
-  static const int32_t kAssamese_India;
-  static const int32_t kAzeri_Cyrillic_Azerbaijan;
-  static const int32_t kAzeri_Latin_Azerbaijan;
-  static const int32_t kBashkir_Russia;
-  static const int32_t kBasque_Basque;
-  static const int32_t kBelarusian_Belarus;
-  static const int32_t kBengali_Bangladesh;
-  static const int32_t kBengali_India;
-  static const int32_t kBosnian_Cyrillic_BosniaAndHerzegovina;
-  static const int32_t kBosnian_Latin_BosniaAndHerzegovina;
-  static const int32_t kBreton_France;
-  static const int32_t kBulgarian_Bulgaria;
-  static const int32_t kCatalan_Catalan;
-  static const int32_t kChinese_HongKongSAR;
-  static const int32_t kChinese_MacaoSAR;
-  static const int32_t kChinese_PeoplesRepublicOfChina;
-  static const int32_t kChinese_Singapore;
-  static const int32_t kChinese_Taiwan;
-  static const int32_t kCorsican_France;
-  static const int32_t kCroatian_Croatia;
-  static const int32_t kCroatian_Latin_BosniaAndHerzegovina;
-  static const int32_t kCzech_CzechRepublic;
-  static const int32_t kDanish_Denmark;
-  static const int32_t kDari_Afghanistan;
-  static const int32_t kDivehi_Maldives;
-  static const int32_t kDutch_Belgium;
-  static const int32_t kDutch_Netherlands;
-  static const int32_t kEnglish_Australia;
-  static const int32_t kEnglish_Belize;
-  static const int32_t kEnglish_Canada;
-  static const int32_t kEnglish_Caribbean;
-  static const int32_t kEnglish_India;
-  static const int32_t kEnglish_Ireland;
-  static const int32_t kEnglish_Jamaica;
-  static const int32_t kEnglish_Malaysia;
-  static const int32_t kEnglish_NewZealand;
-  static const int32_t kEnglish_RepublicOfThePhilippines;
-  static const int32_t kEnglish_Singapore;
-  static const int32_t kEnglish_SouthAfrica;
-  static const int32_t kEnglish_TrinidadAndTobago;
-  static const int32_t kEnglish_UnitedKingdom;
-  static const int32_t kEnglish_UnitedStates;
-  static const int32_t kEnglish_Zimbabwe;
-  static const int32_t kEstonian_Estonia;
-  static const int32_t kFaroese_FaroeIslands;
-  static const int32_t kFilipino_Philippines;
-  static const int32_t kFinnish_Finland;
-  static const int32_t kFrench_Belgium;
-  static const int32_t kFrench_Canada;
-  static const int32_t kFrench_France;
-  static const int32_t kFrench_Luxembourg;
-  static const int32_t kFrench_PrincipalityOfMonoco;
-  static const int32_t kFrench_Switzerland;
-  static const int32_t kFrisian_Netherlands;
-  static const int32_t kGalician_Galician;
-  static const int32_t kGeorgian_Georgia;
-  static const int32_t kGerman_Austria;
-  static const int32_t kGerman_Germany;
-  static const int32_t kGerman_Liechtenstein;
-  static const int32_t kGerman_Luxembourg;
-  static const int32_t kGerman_Switzerland;
-  static const int32_t kGreek_Greece;
-  static const int32_t kGreenlandic_Greenland;
-  static const int32_t kGujarati_India;
-  static const int32_t kHausa_Latin_Nigeria;
-  static const int32_t kHebrew_Israel;
-  static const int32_t kHindi_India;
-  static const int32_t kHungarian_Hungary;
-  static const int32_t kIcelandic_Iceland;
-  static const int32_t kIgbo_Nigeria;
-  static const int32_t kIndonesian_Indonesia;
-  static const int32_t kInuktitut_Canada;
-  static const int32_t kInuktitut_Latin_Canada;
-  static const int32_t kIrish_Ireland;
-  static const int32_t kisiXhosa_SouthAfrica;
-  static const int32_t kisiZulu_SouthAfrica;
-  static const int32_t kItalian_Italy;
-  static const int32_t kItalian_Switzerland;
-  static const int32_t kJapanese_Japan;
-  static const int32_t kKannada_India;
-  static const int32_t kKazakh_Kazakhstan;
-  static const int32_t kKhmer_Cambodia;
-  static const int32_t kKiche_Guatemala;
-  static const int32_t kKinyarwanda_Rwanda;
-  static const int32_t kKiswahili_Kenya;
-  static const int32_t kKonkani_India;
-  static const int32_t kKorean_Korea;
-  static const int32_t kKyrgyz_Kyrgyzstan;
-  static const int32_t kLao_LaoPDR;
-  static const int32_t kLatvian_Latvia;
-  static const int32_t kLithuanian_Lithuania;
-  static const int32_t kLowerSorbian_Germany;
-  static const int32_t kLuxembourgish_Luxembourg;
-  static const int32_t kMacedonian_FYROM_FormerYugoslavRepublicOfMacedonia;
-  static const int32_t kMalay_BruneiDarussalam;
-  static const int32_t kMalay_Malaysia;
-  static const int32_t kMalayalam_India;
-  static const int32_t kMaltese_Malta;
-  static const int32_t kMaori_NewZealand;
-  static const int32_t kMapudungun_Chile;
-  static const int32_t kMarathi_India;
-  static const int32_t kMohawk_Mohawk;
-  static const int32_t kMongolian_Cyrillic_Mongolia;
-  static const int32_t kMongolian_Traditional_PeoplesRepublicOfChina;
-  static const int32_t kNepali_Nepal;
-  static const int32_t kNorwegian_Bokmal_Norway;
-  static const int32_t kNorwegian_Nynorsk_Norway;
-  static const int32_t kOccitan_France;
-  static const int32_t kOriya_India;
-  static const int32_t kPashto_Afghanistan;
-  static const int32_t kPolish_Poland;
-  static const int32_t kPortuguese_Brazil;
-  static const int32_t kPortuguese_Portugal;
-  static const int32_t kPunjabi_India;
-  static const int32_t kQuechua_Bolivia;
-  static const int32_t kQuechua_Ecuador;
-  static const int32_t kQuechua_Peru;
-  static const int32_t kRomanian_Romania;
-  static const int32_t kRomansh_Switzerland;
-  static const int32_t kRussian_Russia;
-  static const int32_t kSami_Inari_Finland;
-  static const int32_t kSami_Lule_Norway;
-  static const int32_t kSami_Lule_Sweden;
-  static const int32_t kSami_Northern_Finland;
-  static const int32_t kSami_Northern_Norway;
-  static const int32_t kSami_Northern_Sweden;
-  static const int32_t kSami_Skolt_Finland;
-  static const int32_t kSami_Southern_Norway;
-  static const int32_t kSami_Southern_Sweden;
-  static const int32_t kSanskrit_India;
-  static const int32_t kSerbian_Cyrillic_BosniaAndHerzegovina;
-  static const int32_t kSerbian_Cyrillic_Serbia;
-  static const int32_t kSerbian_Latin_BosniaAndHerzegovina;
-  static const int32_t kSerbian_Latin_Serbia;
-  static const int32_t kSesothoSaLeboa_SouthAfrica;
-  static const int32_t kSetswana_SouthAfrica;
-  static const int32_t kSinhala_SriLanka;
-  static const int32_t kSlovak_Slovakia;
-  static const int32_t kSlovenian_Slovenia;
-  static const int32_t kSpanish_Argentina;
-  static const int32_t kSpanish_Bolivia;
-  static const int32_t kSpanish_Chile;
-  static const int32_t kSpanish_Colombia;
-  static const int32_t kSpanish_CostaRica;
-  static const int32_t kSpanish_DominicanRepublic;
-  static const int32_t kSpanish_Ecuador;
-  static const int32_t kSpanish_ElSalvador;
-  static const int32_t kSpanish_Guatemala;
-  static const int32_t kSpanish_Honduras;
-  static const int32_t kSpanish_Mexico;
-  static const int32_t kSpanish_Nicaragua;
-  static const int32_t kSpanish_Panama;
-  static const int32_t kSpanish_Paraguay;
-  static const int32_t kSpanish_Peru;
-  static const int32_t kSpanish_PuertoRico;
-  static const int32_t kSpanish_ModernSort_Spain;
-  static const int32_t kSpanish_TraditionalSort_Spain;
-  static const int32_t kSpanish_UnitedStates;
-  static const int32_t kSpanish_Uruguay;
-  static const int32_t kSpanish_Venezuela;
-  static const int32_t kSweden_Finland;
-  static const int32_t kSwedish_Sweden;
-  static const int32_t kSyriac_Syria;
-  static const int32_t kTajik_Cyrillic_Tajikistan;
-  static const int32_t kTamazight_Latin_Algeria;
-  static const int32_t kTamil_India;
-  static const int32_t kTatar_Russia;
-  static const int32_t kTelugu_India;
-  static const int32_t kThai_Thailand;
-  static const int32_t kTibetan_PRC;
-  static const int32_t kTurkish_Turkey;
-  static const int32_t kTurkmen_Turkmenistan;
-  static const int32_t kUighur_PRC;
-  static const int32_t kUkrainian_Ukraine;
-  static const int32_t kUpperSorbian_Germany;
-  static const int32_t kUrdu_IslamicRepublicOfPakistan;
-  static const int32_t kUzbek_Cyrillic_Uzbekistan;
-  static const int32_t kUzbek_Latin_Uzbekistan;
-  static const int32_t kVietnamese_Vietnam;
-  static const int32_t kWelsh_UnitedKingdom;
-  static const int32_t kWolof_Senegal;
-  static const int32_t kYakut_Russia;
-  static const int32_t kYi_PRC;
-  static const int32_t kYoruba_Nigeria;
+  enum {
+    kUnknown = -1,
+    kAfrikaans_SouthAfrica = 0x0436,
+    kAlbanian_Albania = 0x041C,
+    kAlsatian_France = 0x0484,
+    kAmharic_Ethiopia = 0x045E,
+    kArabic_Algeria = 0x1401,
+    kArabic_Bahrain = 0x3C01,
+    kArabic_Egypt = 0x0C01,
+    kArabic_Iraq = 0x0801,
+    kArabic_Jordan = 0x2C01,
+    kArabic_Kuwait = 0x3401,
+    kArabic_Lebanon = 0x3001,
+    kArabic_Libya = 0x1001,
+    kArabic_Morocco = 0x1801,
+    kArabic_Oman = 0x2001,
+    kArabic_Qatar = 0x4001,
+    kArabic_SaudiArabia = 0x0401,
+    kArabic_Syria = 0x2801,
+    kArabic_Tunisia = 0x1C01,
+    kArabic_UAE = 0x3801,
+    kArabic_Yemen = 0x2401,
+    kArmenian_Armenia = 0x042B,
+    kAssamese_India = 0x044D,
+    kAzeri_Cyrillic_Azerbaijan = 0x082C,
+    kAzeri_Latin_Azerbaijan = 0x042C,
+    kBashkir_Russia = 0x046D,
+    kBasque_Basque = 0x042D,
+    kBelarusian_Belarus = 0x0423,
+    kBengali_Bangladesh = 0x0845,
+    kBengali_India = 0x0445,
+    kBosnian_Cyrillic_BosniaAndHerzegovina = 0x201A,
+    kBosnian_Latin_BosniaAndHerzegovina = 0x141A,
+    kBreton_France = 0x047E,
+    kBulgarian_Bulgaria = 0x0402,
+    kCatalan_Catalan = 0x0403,
+    kChinese_HongKongSAR = 0x0C04,
+    kChinese_MacaoSAR = 0x1404,
+    kChinese_PeoplesRepublicOfChina = 0x0804,
+    kChinese_Singapore = 0x1004,
+    kChinese_Taiwan = 0x0404,
+    kCorsican_France = 0x0483,
+    kCroatian_Croatia = 0x041A,
+    kCroatian_Latin_BosniaAndHerzegovina = 0x101A,
+    kCzech_CzechRepublic = 0x0405,
+    kDanish_Denmark = 0x0406,
+    kDari_Afghanistan = 0x048C,
+    kDivehi_Maldives = 0x0465,
+    kDutch_Belgium = 0x0813,
+    kDutch_Netherlands = 0x0413,
+    kEnglish_Australia = 0x0C09,
+    kEnglish_Belize = 0x2809,
+    kEnglish_Canada = 0x1009,
+    kEnglish_Caribbean = 0x2409,
+    kEnglish_India = 0x4009,
+    kEnglish_Ireland = 0x1809,
+    kEnglish_Jamaica = 0x2009,
+    kEnglish_Malaysia = 0x4409,
+    kEnglish_NewZealand = 0x1409,
+    kEnglish_RepublicOfThePhilippines = 0x3409,
+    kEnglish_Singapore = 0x4809,
+    kEnglish_SouthAfrica = 0x1C09,
+    kEnglish_TrinidadAndTobago = 0x2C09,
+    kEnglish_UnitedKingdom = 0x0809,
+    kEnglish_UnitedStates = 0x0409,
+    kEnglish_Zimbabwe = 0x3009,
+    kEstonian_Estonia = 0x0425,
+    kFaroese_FaroeIslands = 0x0438,
+    kFilipino_Philippines = 0x0464,
+    kFinnish_Finland = 0x040B,
+    kFrench_Belgium = 0x080C,
+    kFrench_Canada = 0x0C0C,
+    kFrench_France = 0x040C,
+    kFrench_Luxembourg = 0x140c,
+    kFrench_PrincipalityOfMonoco = 0x180C,
+    kFrench_Switzerland = 0x100C,
+    kFrisian_Netherlands = 0x0462,
+    kGalician_Galician = 0x0456,
+    kGeorgian_Georgia = 0x0437,
+    kGerman_Austria = 0x0C07,
+    kGerman_Germany = 0x0407,
+    kGerman_Liechtenstein = 0x1407,
+    kGerman_Luxembourg = 0x1007,
+    kGerman_Switzerland = 0x0807,
+    kGreek_Greece = 0x0408,
+    kGreenlandic_Greenland = 0x046F,
+    kGujarati_India = 0x0447,
+    kHausa_Latin_Nigeria = 0x0468,
+    kHebrew_Israel = 0x040D,
+    kHindi_India = 0x0439,
+    kHungarian_Hungary = 0x040E,
+    kIcelandic_Iceland = 0x040F,
+    kIgbo_Nigeria = 0x0470,
+    kIndonesian_Indonesia = 0x0421,
+    kInuktitut_Canada = 0x045D,
+    kInuktitut_Latin_Canada = 0x085D,
+    kIrish_Ireland = 0x083C,
+    kisiXhosa_SouthAfrica = 0x0434,
+    kisiZulu_SouthAfrica = 0x0435,
+    kItalian_Italy = 0x0410,
+    kItalian_Switzerland = 0x0810,
+    kJapanese_Japan = 0x0411,
+    kKannada_India = 0x044B,
+    kKazakh_Kazakhstan = 0x043F,
+    kKhmer_Cambodia = 0x0453,
+    kKiche_Guatemala = 0x0486,
+    kKinyarwanda_Rwanda = 0x0487,
+    kKiswahili_Kenya = 0x0441,
+    kKonkani_India = 0x0457,
+    kKorean_Korea = 0x0412,
+    kKyrgyz_Kyrgyzstan = 0x0440,
+    kLao_LaoPDR = 0x0454,
+    kLatvian_Latvia = 0x0426,
+    kLithuanian_Lithuania = 0x0427,
+    kLowerSorbian_Germany = 0x082E,
+    kLuxembourgish_Luxembourg = 0x046E,
+    kMacedonian_FYROM_FormerYugoslavRepublicOfMacedonia = 0x042F,
+    kMalay_BruneiDarussalam = 0x083E,
+    kMalay_Malaysia = 0x043E,
+    kMalayalam_India = 0x044C,
+    kMaltese_Malta = 0x043A,
+    kMaori_NewZealand = 0x0481,
+    kMapudungun_Chile = 0x047A,
+    kMarathi_India = 0x044E,
+    kMohawk_Mohawk = 0x047C,
+    kMongolian_Cyrillic_Mongolia = 0x0450,
+    kMongolian_Traditional_PeoplesRepublicOfChina = 0x0850,
+    kNepali_Nepal = 0x0461,
+    kNorwegian_Bokmal_Norway = 0x0414,
+    kNorwegian_Nynorsk_Norway = 0x0814,
+    kOccitan_France = 0x0482,
+    kOriya_India = 0x0448,
+    kPashto_Afghanistan = 0x0463,
+    kPolish_Poland = 0x0415,
+    kPortuguese_Brazil = 0x0416,
+    kPortuguese_Portugal = 0x0816,
+    kPunjabi_India = 0x0446,
+    kQuechua_Bolivia = 0x046B,
+    kQuechua_Ecuador = 0x086B,
+    kQuechua_Peru = 0x0C6B,
+    kRomanian_Romania = 0x0418,
+    kRomansh_Switzerland = 0x0417,
+    kRussian_Russia = 0x0419,
+    kSami_Inari_Finland = 0x243B,
+    kSami_Lule_Norway = 0x103B,
+    kSami_Lule_Sweden = 0x143B,
+    kSami_Northern_Finland = 0x0C3B,
+    kSami_Northern_Norway = 0x043B,
+    kSami_Northern_Sweden = 0x083B,
+    kSami_Skolt_Finland = 0x203B,
+    kSami_Southern_Norway = 0x183B,
+    kSami_Southern_Sweden = 0x1C3B,
+    kSanskrit_India = 0x044F,
+    kSerbian_Cyrillic_BosniaAndHerzegovina = 0x1C1A,
+    kSerbian_Cyrillic_Serbia = 0x0C1A,
+    kSerbian_Latin_BosniaAndHerzegovina = 0x181A,
+    kSerbian_Latin_Serbia = 0x081A,
+    kSesothoSaLeboa_SouthAfrica = 0x046C,
+    kSetswana_SouthAfrica = 0x0432,
+    kSinhala_SriLanka = 0x045B,
+    kSlovak_Slovakia = 0x041B,
+    kSlovenian_Slovenia = 0x0424,
+    kSpanish_Argentina = 0x2C0A,
+    kSpanish_Bolivia = 0x400A,
+    kSpanish_Chile = 0x340A,
+    kSpanish_Colombia = 0x240A,
+    kSpanish_CostaRica = 0x140A,
+    kSpanish_DominicanRepublic = 0x1C0A,
+    kSpanish_Ecuador = 0x300A,
+    kSpanish_ElSalvador = 0x440A,
+    kSpanish_Guatemala = 0x100A,
+    kSpanish_Honduras = 0x480A,
+    kSpanish_Mexico = 0x080A,
+    kSpanish_Nicaragua = 0x4C0A,
+    kSpanish_Panama = 0x180A,
+    kSpanish_Paraguay = 0x3C0A,
+    kSpanish_Peru = 0x280A,
+    kSpanish_PuertoRico = 0x500A,
+    kSpanish_ModernSort_Spain = 0x0C0A,
+    kSpanish_TraditionalSort_Spain = 0x040A,
+    kSpanish_UnitedStates = 0x540A,
+    kSpanish_Uruguay = 0x380A,
+    kSpanish_Venezuela = 0x200A,
+    kSweden_Finland = 0x081D,
+    kSwedish_Sweden = 0x041D,
+    kSyriac_Syria = 0x045A,
+    kTajik_Cyrillic_Tajikistan = 0x0428,
+    kTamazight_Latin_Algeria = 0x085F,
+    kTamil_India = 0x0449,
+    kTatar_Russia = 0x0444,
+    kTelugu_India = 0x044A,
+    kThai_Thailand = 0x041E,
+    kTibetan_PRC = 0x0451,
+    kTurkish_Turkey = 0x041F,
+    kTurkmen_Turkmenistan = 0x0442,
+    kUighur_PRC = 0x0480,
+    kUkrainian_Ukraine = 0x0422,
+    kUpperSorbian_Germany = 0x042E,
+    kUrdu_IslamicRepublicOfPakistan = 0x0420,
+    kUzbek_Cyrillic_Uzbekistan = 0x0843,
+    kUzbek_Latin_Uzbekistan = 0x0443,
+    kVietnamese_Vietnam = 0x042A,
+    kWelsh_UnitedKingdom = 0x0452,
+    kWolof_Senegal = 0x0448,
+    kYakut_Russia = 0x0485,
+    kYi_PRC = 0x0478,
+    kYoruba_Nigeria = 0x046A
+  };
 };
 
 class NameTable : public Table, public RefCounted<NameTable> {
  private:
   struct Offset {
-    static const int32_t kFormat;
-    static const int32_t kCount;
-    static const int32_t kStringOffset;
-    static const int32_t kNameRecordStart;
+    enum {
+      kFormat = 0,
+      kCount = 2,
+      kStringOffset = 4,
+      kNameRecordStart = 6,
 
-    // format 1 - offset from the end of the name records
-    static const int32_t kLangTagCount;
-    static const int32_t kLangTagRecord;
+      // format 1 - offset from the end of the name records
+      kLangTagCount = 0,
+      kLangTagRecord = 2,
 
-    static const int32_t kNameRecordSize;
-    // Name Records
-    static const int32_t kNameRecordPlatformId;
-    static const int32_t kNameRecordEncodingId;
-    static const int32_t kNameRecordLanguageId;
-    static const int32_t kNameRecordNameId;
-    static const int32_t kNameRecordStringLength;
-    static const int32_t kNameRecordStringOffset;
-  };
-
-  struct NameId {
-    static const int32_t kUnknown;
-    static const int32_t kCopyrightNotice;
-    static const int32_t kFontFamilyName;
-    static const int32_t kFontSubfamilyName;
-    static const int32_t kUniqueFontIdentifier;
-    static const int32_t kFullFontName;
-    static const int32_t kVersionString;
-    static const int32_t kPostscriptName;
-    static const int32_t kTrademark;
-    static const int32_t kManufacturerName;
-    static const int32_t kDesigner;
-    static const int32_t kDescription;
-    static const int32_t kVendorURL;
-    static const int32_t kDesignerURL;
-    static const int32_t kLicenseDescription;
-    static const int32_t kLicenseInfoURL;
-    static const int32_t kReserved15;
-    static const int32_t kPreferredFamily;
-    static const int32_t kPreferredSubfamily;
-    static const int32_t kCompatibleFullName;
-    static const int32_t kSampleText;
-    static const int32_t kPostscriptCID;
-    static const int32_t kWWSFamilyName;
-    static const int32_t kWWSSubfamilyName;
+      kNameRecordSize = 12,
+      // Name Records
+      kNameRecordPlatformId = 0,
+      kNameRecordEncodingId = 2,
+      kNameRecordLanguageId = 4,
+      kNameRecordNameId = 6,
+      kNameRecordStringLength = 8,
+      kNameRecordStringOffset = 10
+    };
   };
 
  public:
diff --git a/sfntly/os2_table.cc b/sfntly/os2_table.cc
index 73d98cc..4e7189d 100644
--- a/sfntly/os2_table.cc
+++ b/sfntly/os2_table.cc
@@ -20,98 +20,6 @@
 /******************************************************************************
  * Constants
  ******************************************************************************/
-const int32_t OS2Table::Offset::kVersion = 0;
-const int32_t OS2Table::Offset::kXAvgCharWidth = 2;
-const int32_t OS2Table::Offset::kUsWeightClass = 4;
-const int32_t OS2Table::Offset::kUsWidthClass = 6;
-const int32_t OS2Table::Offset::kFsType = 8;
-const int32_t OS2Table::Offset::kYSubscriptXSize = 10;
-const int32_t OS2Table::Offset::kYSubscriptYSize = 12;
-const int32_t OS2Table::Offset::kYSubscriptXOffset = 14;
-const int32_t OS2Table::Offset::kYSubscriptYOffset = 16;
-const int32_t OS2Table::Offset::kYSuperscriptXSize = 18;
-const int32_t OS2Table::Offset::kYSuperscriptYSize = 20;
-const int32_t OS2Table::Offset::kYSuperscriptXOffset = 22;
-const int32_t OS2Table::Offset::kYSuperscriptYOffset = 24;
-const int32_t OS2Table::Offset::kYStrikeoutSize = 26;
-const int32_t OS2Table::Offset::kYStrikeoutPosition = 28;
-const int32_t OS2Table::Offset::kSFamilyClass = 30;
-const int32_t OS2Table::Offset::kPanose = 32;
-const int32_t OS2Table::Offset::kUlUnicodeRange1 = 42;
-const int32_t OS2Table::Offset::kUlUnicodeRange2 = 46;
-const int32_t OS2Table::Offset::kUlUnicodeRange3 = 50;
-const int32_t OS2Table::Offset::kUlUnicodeRange4 = 54;
-const int32_t OS2Table::Offset::kAchVendId = 58;
-const int32_t OS2Table::Offset::kFsSelection = 62;
-const int32_t OS2Table::Offset::kUsFirstCharIndex = 64;
-const int32_t OS2Table::Offset::kUsLastCharIndex = 66;
-const int32_t OS2Table::Offset::kSTypoAscender = 68;
-const int32_t OS2Table::Offset::kSTypoDescender = 70;
-const int32_t OS2Table::Offset::kSTypoLineGap = 72;
-const int32_t OS2Table::Offset::kUsWinAscent = 74;
-const int32_t OS2Table::Offset::kUsWinDescent = 76;
-const int32_t OS2Table::Offset::kUlCodePageRange1 = 78;
-const int32_t OS2Table::Offset::kUlCodePageRange2 = 82;
-const int32_t OS2Table::Offset::kSxHeight = 86;
-const int32_t OS2Table::Offset::kSCapHeight = 88;
-const int32_t OS2Table::Offset::kUsDefaultChar = 90;
-const int32_t OS2Table::Offset::kUsBreakChar = 92;
-const int32_t OS2Table::Offset::kUsMaxContext = 94;
-
-const int32_t WeightClass::kThin = 100;
-const int32_t WeightClass::kExtraLight = 200;
-const int32_t WeightClass::kUltraLight = 200;
-const int32_t WeightClass::kLight = 300;
-const int32_t WeightClass::kNormal = 400;
-const int32_t WeightClass::kRegular = 400;
-const int32_t WeightClass::kMedium = 500;
-const int32_t WeightClass::kSemiBold = 600;
-const int32_t WeightClass::kDemiBold = 600;
-const int32_t WeightClass::kBold = 700;
-const int32_t WeightClass::kExtraBold = 800;
-const int32_t WeightClass::kUltraBold = 800;
-const int32_t WeightClass::kBlack = 900;
-const int32_t WeightClass::kHeavy = 900;
-
-const int32_t WidthClass::kUltraCondensed = 1;
-const int32_t WidthClass::kExtraCondensed = 2;
-const int32_t WidthClass::kCondensed = 3;
-const int32_t WidthClass::kSemiCondensed = 4;
-const int32_t WidthClass::kMedium = 5;
-const int32_t WidthClass::kNormal = 5;
-const int32_t WidthClass::kSemiExpanded = 6;
-const int32_t WidthClass::kExpanded = 7;
-const int32_t WidthClass::kExtraExpanded = 8;
-const int32_t WidthClass::kUltraExpanded = 9;
-
-const int32_t EmbeddingFlags::kReserved0 = 1 << 0;
-const int32_t EmbeddingFlags::kRestrictedLicenseEmbedding = 1 << 1;
-const int32_t EmbeddingFlags::kPreviewAndPrintEmbedding = 1 << 2;
-const int32_t EmbeddingFlags::kEditableEmbedding = 1 << 3;
-const int32_t EmbeddingFlags::kReserved4 = 1 << 4;
-const int32_t EmbeddingFlags::kReserved5 = 1 << 5;
-const int32_t EmbeddingFlags::kReserved6 = 1 << 6;
-const int32_t EmbeddingFlags::kReserved7 = 1 << 7;
-const int32_t EmbeddingFlags::kNoSubsetting = 1 << 8;
-const int32_t EmbeddingFlags::kBitmapEmbeddingOnly = 1 << 9;
-const int32_t EmbeddingFlags::kReserved10 = 1 << 10;
-const int32_t EmbeddingFlags::kReserved11 = 1 << 11;
-const int32_t EmbeddingFlags::kReserved12 = 1 << 12;
-const int32_t EmbeddingFlags::kReserved13 = 1 << 13;
-const int32_t EmbeddingFlags::kReserved14 = 1 << 14;
-const int32_t EmbeddingFlags::kReserved15 = 1 << 15;
-
-const int32_t FsSelection::kITALIC = 1 << 0;
-const int32_t FsSelection::kUNDERSCORE = 1 << 1;
-const int32_t FsSelection::kNEGATIVE = 1 << 2;
-const int32_t FsSelection::kOUTLINED = 1 << 3;
-const int32_t FsSelection::kSTRIKEOUT = 1 << 4;
-const int32_t FsSelection::kBOLD = 1 << 5;
-const int32_t FsSelection::kREGULAR = 1 << 6;
-const int32_t FsSelection::kUSE_TYPO_METRICS = 1 << 7;
-const int32_t FsSelection::kWWS = 1 << 8;
-const int32_t FsSelection::kOBLIQUE = 1 << 9;
-
 const int64_t CodePageRange::kLatin1_1252 = (int64_t)1 << 0;
 const int64_t CodePageRange::kLatin2_1250 = (int64_t)1 << (int64_t)1;
 const int64_t CodePageRange::kCyrillic_1251 = (int64_t)1 << 2;
diff --git a/sfntly/os2_table.h b/sfntly/os2_table.h
index 88d4769..9bf33c2 100644
--- a/sfntly/os2_table.h
+++ b/sfntly/os2_table.h
@@ -23,56 +23,64 @@
 namespace sfntly {
 
 struct WeightClass {
-  static const int32_t kThin;
-  static const int32_t kExtraLight;
-  static const int32_t kUltraLight;
-  static const int32_t kLight;
-  static const int32_t kNormal;
-  static const int32_t kRegular;
-  static const int32_t kMedium;
-  static const int32_t kSemiBold;
-  static const int32_t kDemiBold;
-  static const int32_t kBold;
-  static const int32_t kExtraBold;
-  static const int32_t kUltraBold;
-  static const int32_t kBlack;
-  static const int32_t kHeavy;
+  enum {
+    kThin = 100,
+    kExtraLight = 200,
+    kUltraLight = 200,
+    kLight = 300,
+    kNormal = 400,
+    kRegular = 400,
+    kMedium = 500,
+    kSemiBold = 600,
+    kDemiBold = 600,
+    kBold = 700,
+    kExtraBold = 800,
+    kUltraBold = 800,
+    kBlack = 900,
+    kHeavy = 900
+  };
 };
 
 struct WidthClass {
-  static const int32_t kUltraCondensed;
-  static const int32_t kExtraCondensed;
-  static const int32_t kCondensed;
-  static const int32_t kSemiCondensed;
-  static const int32_t kMedium;
-  static const int32_t kNormal;
-  static const int32_t kSemiExpanded;
-  static const int32_t kExpanded;
-  static const int32_t kExtraExpanded;
-  static const int32_t kUltraExpanded;
+  enum {
+    kUltraCondensed = 1,
+    kExtraCondensed = 2,
+    kCondensed = 3,
+    kSemiCondensed = 4,
+    kMedium = 5,
+    kNormal = 5,
+    kSemiExpanded = 6,
+    kExpanded = 7,
+    kExtraExpanded = 8,
+    kUltraExpanded = 9
+  };
 };
 
 struct EmbeddingFlags {
-  static const int32_t kReserved0;
-  static const int32_t kRestrictedLicenseEmbedding;
-  static const int32_t kPreviewAndPrintEmbedding;
-  static const int32_t kEditableEmbedding;
-  static const int32_t kReserved4;
-  static const int32_t kReserved5;
-  static const int32_t kReserved6;
-  static const int32_t kReserved7;
-  static const int32_t kNoSubsetting;
-  static const int32_t kBitmapEmbeddingOnly;
-  static const int32_t kReserved10;
-  static const int32_t kReserved11;
-  static const int32_t kReserved12;
-  static const int32_t kReserved13;
-  static const int32_t kReserved14;
-  static const int32_t kReserved15;
+  enum {
+    kReserved0 = 1 << 0,
+    kRestrictedLicenseEmbedding = 1 << 1,
+    kPreviewAndPrintEmbedding = 1 << 2,
+    kEditableEmbedding = 1 << 3,
+    kReserved4 = 1 << 4,
+    kReserved5 = 1 << 5,
+    kReserved6 = 1 << 6,
+    kReserved7 = 1 << 7,
+    kNoSubsetting = 1 << 8,
+    kBitmapEmbeddingOnly = 1 << 9,
+    kReserved10 = 1 << 10,
+    kReserved11 = 1 << 11,
+    kReserved12 = 1 << 12,
+    kReserved13 = 1 << 13,
+    kReserved14 = 1 << 14,
+    kReserved15 = 1 << 15
+  };
 };
 
 struct UnicodeRange {
   enum {
+    // This enum relies on the ordering of the data matching the ordinal numbers
+    // of the properties.
     kBasicLatin,
     kLatin1Supplement,
     kLatinExtendedA,
@@ -208,18 +216,22 @@
 };
 
 struct FsSelection {
-  static const int32_t kITALIC;
-  static const int32_t kUNDERSCORE;
-  static const int32_t kNEGATIVE;
-  static const int32_t kOUTLINED;
-  static const int32_t kSTRIKEOUT;
-  static const int32_t kBOLD;
-  static const int32_t kREGULAR;
-  static const int32_t kUSE_TYPO_METRICS;
-  static const int32_t kWWS;
-  static const int32_t kOBLIQUE;
+  enum {
+    kITALIC = 1 << 0,
+    kUNDERSCORE = 1 << 1,
+    kNEGATIVE = 1 << 2,
+    kOUTLINED = 1 << 3,
+    kSTRIKEOUT = 1 << 4,
+    kBOLD = 1 << 5,
+    kREGULAR = 1 << 6,
+    kUSE_TYPO_METRICS = 1 << 7,
+    kWWS = 1 << 8,
+    kOBLIQUE = 1 << 9
+  };
 };
 
+// C++ port only: C++ does not support 64-bit enums until C++0x.  For better
+// portability, we need to use static const int64_t instead.
 struct CodePageRange {
   static const int64_t kLatin1_1252;
   static const int64_t kLatin2_1250;
@@ -290,43 +302,45 @@
 class OS2Table : public Table, public RefCounted<OS2Table> {
  private:
   struct Offset {
-    static const int32_t kVersion;
-    static const int32_t kXAvgCharWidth;
-    static const int32_t kUsWeightClass;
-    static const int32_t kUsWidthClass;
-    static const int32_t kFsType;
-    static const int32_t kYSubscriptXSize;
-    static const int32_t kYSubscriptYSize;
-    static const int32_t kYSubscriptXOffset;
-    static const int32_t kYSubscriptYOffset;
-    static const int32_t kYSuperscriptXSize;
-    static const int32_t kYSuperscriptYSize;
-    static const int32_t kYSuperscriptXOffset;
-    static const int32_t kYSuperscriptYOffset;
-    static const int32_t kYStrikeoutSize;
-    static const int32_t kYStrikeoutPosition;
-    static const int32_t kSFamilyClass;
-    static const int32_t kPanose;
-    static const int32_t kUlUnicodeRange1;
-    static const int32_t kUlUnicodeRange2;
-    static const int32_t kUlUnicodeRange3;
-    static const int32_t kUlUnicodeRange4;
-    static const int32_t kAchVendId;
-    static const int32_t kFsSelection;
-    static const int32_t kUsFirstCharIndex;
-    static const int32_t kUsLastCharIndex;
-    static const int32_t kSTypoAscender;
-    static const int32_t kSTypoDescender;
-    static const int32_t kSTypoLineGap;
-    static const int32_t kUsWinAscent;
-    static const int32_t kUsWinDescent;
-    static const int32_t kUlCodePageRange1;
-    static const int32_t kUlCodePageRange2;
-    static const int32_t kSxHeight;
-    static const int32_t kSCapHeight;
-    static const int32_t kUsDefaultChar;
-    static const int32_t kUsBreakChar;
-    static const int32_t kUsMaxContext;
+    enum {
+      kVersion = 0,
+      kXAvgCharWidth = 2,
+      kUsWeightClass = 4,
+      kUsWidthClass = 6,
+      kFsType = 8,
+      kYSubscriptXSize = 10,
+      kYSubscriptYSize = 12,
+      kYSubscriptXOffset = 14,
+      kYSubscriptYOffset = 16,
+      kYSuperscriptXSize = 18,
+      kYSuperscriptYSize = 20,
+      kYSuperscriptXOffset = 22,
+      kYSuperscriptYOffset = 24,
+      kYStrikeoutSize = 26,
+      kYStrikeoutPosition = 28,
+      kSFamilyClass = 30,
+      kPanose = 32,
+      kUlUnicodeRange1 = 42,
+      kUlUnicodeRange2 = 46,
+      kUlUnicodeRange3 = 50,
+      kUlUnicodeRange4 = 54,
+      kAchVendId = 58,
+      kFsSelection = 62,
+      kUsFirstCharIndex = 64,
+      kUsLastCharIndex = 66,
+      kSTypoAscender = 68,
+      kSTypoDescender = 70,
+      kSTypoLineGap = 72,
+      kUsWinAscent = 74,
+      kUsWinDescent = 76,
+      kUlCodePageRange1 = 78,
+      kUlCodePageRange2 = 82,
+      kSxHeight = 86,
+      kSCapHeight = 88,
+      kUsDefaultChar = 90,
+      kUsBreakChar = 92,
+      kUsMaxContext = 94
+    };
   };
 
   OS2Table(Header* header, ReadableFontData* data);