Bläddra i källkod

HarfBuzz: Update to version 4.0.1

bruvzg 3 år sedan
förälder
incheckning
94a365e94b

+ 1 - 0
modules/text_server_adv/SCsub

@@ -103,6 +103,7 @@ if env["builtin_harfbuzz"]:
         "src/hb-subset-cff2.cc",
         "src/hb-subset-input.cc",
         "src/hb-subset-plan.cc",
+        "src/hb-subset-repacker.cc",
         "src/hb-subset.cc",
         "src/hb-ucd.cc",
         "src/hb-unicode.cc",

+ 1 - 1
thirdparty/README.md

@@ -192,7 +192,7 @@ Files extracted from upstream source:
 ## harfbuzz
 
 - Upstream: https://github.com/harfbuzz/harfbuzz
-- Version: 4.0.0 (8d1b000a3edc90c12267b836b4ef3f81c0e53edc, 2022)
+- Version: 4.0.1 (1f79ba9407ecd54e382997940cbcc3fb71bef8be, 2022)
 - License: MIT
 
 Files extracted from upstream source:

+ 2 - 1
thirdparty/harfbuzz/src/hb-aat-layout.cc

@@ -108,7 +108,7 @@ static const hb_aat_feature_mapping_t feature_mappings[] =
   {HB_TAG ('f','r','a','c'), HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS,               HB_AAT_LAYOUT_FEATURE_SELECTOR_DIAGONAL_FRACTIONS,             HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_FRACTIONS},
   {HB_TAG ('f','w','i','d'), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING,            HB_AAT_LAYOUT_FEATURE_SELECTOR_MONOSPACED_TEXT,                (hb_aat_layout_feature_selector_t) 7},
   {HB_TAG ('h','a','l','t'), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING,            HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_HALF_WIDTH_TEXT,            (hb_aat_layout_feature_selector_t) 7},
-  {HB_TAG ('h','i','s','t'), HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES,               HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_ON,        HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_OFF},
+  {HB_TAG ('h','i','s','t'), (hb_aat_layout_feature_type_t) 40,                  (hb_aat_layout_feature_selector_t) 0,                          (hb_aat_layout_feature_selector_t) 1},
   {HB_TAG ('h','k','n','a'), HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA,          HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_ON,        HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_OFF},
   {HB_TAG ('h','l','i','g'), HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES,               HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_ON,        HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_OFF},
   {HB_TAG ('h','n','g','l'), HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION,         HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL,                HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_TRANSLITERATION},
@@ -170,6 +170,7 @@ static const hb_aat_feature_mapping_t feature_mappings[] =
   {HB_TAG ('v','k','n','a'), HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA,          HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_VERT_KANA_ON,         HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_VERT_KANA_OFF},
   {HB_TAG ('v','p','a','l'), HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING,            HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_PROPORTIONAL_TEXT,          (hb_aat_layout_feature_selector_t) 7},
   {HB_TAG ('v','r','t','2'), HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION,   HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_ON,   HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_OFF},
+  {HB_TAG ('v','r','t','r'), HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION,   (hb_aat_layout_feature_selector_t) 2,                          (hb_aat_layout_feature_selector_t) 3},
   {HB_TAG ('z','e','r','o'), HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS,      HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_ON,                HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_OFF},
 };
 

+ 8 - 8
thirdparty/harfbuzz/src/hb-buffer-deserialize-text.hh

@@ -478,7 +478,7 @@ _resume:
 	case 18:
 #line 58 "hb-buffer-deserialize-text.rl"
 	{
-	/* TODO Unescape delimeters. */
+	/* TODO Unescape delimiters. */
 	if (!hb_font_glyph_from_string (font,
 					tok, p - tok,
 					&info.codepoint))
@@ -535,7 +535,7 @@ _resume:
 	case 16:
 #line 58 "hb-buffer-deserialize-text.rl"
 	{
-	/* TODO Unescape delimeters. */
+	/* TODO Unescape delimiters. */
 	if (!hb_font_glyph_from_string (font,
 					tok, p - tok,
 					&info.codepoint))
@@ -635,7 +635,7 @@ _resume:
 }
 #line 58 "hb-buffer-deserialize-text.rl"
 	{
-	/* TODO Unescape delimeters. */
+	/* TODO Unescape delimiters. */
 	if (!hb_font_glyph_from_string (font,
 					tok, p - tok,
 					&info.codepoint))
@@ -645,7 +645,7 @@ _resume:
 	case 17:
 #line 58 "hb-buffer-deserialize-text.rl"
 	{
-	/* TODO Unescape delimeters. */
+	/* TODO Unescape delimiters. */
 	if (!hb_font_glyph_from_string (font,
 					tok, p - tok,
 					&info.codepoint))
@@ -674,7 +674,7 @@ _resume:
 }
 #line 58 "hb-buffer-deserialize-text.rl"
 	{
-	/* TODO Unescape delimeters. */
+	/* TODO Unescape delimiters. */
 	if (!hb_font_glyph_from_string (font,
 					tok, p - tok,
 					&info.codepoint))
@@ -701,7 +701,7 @@ _resume:
 }
 #line 58 "hb-buffer-deserialize-text.rl"
 	{
-	/* TODO Unescape delimeters. */
+	/* TODO Unescape delimiters. */
 	if (!hb_font_glyph_from_string (font,
 					tok, p - tok,
 					&info.codepoint))
@@ -733,7 +733,7 @@ _again:
 	case 16:
 #line 58 "hb-buffer-deserialize-text.rl"
 	{
-	/* TODO Unescape delimeters. */
+	/* TODO Unescape delimiters. */
 	if (!hb_font_glyph_from_string (font,
 					tok, p - tok,
 					&info.codepoint))
@@ -820,7 +820,7 @@ _again:
 }
 #line 58 "hb-buffer-deserialize-text.rl"
 	{
-	/* TODO Unescape delimeters. */
+	/* TODO Unescape delimiters. */
 	if (!hb_font_glyph_from_string (font,
 					tok, p - tok,
 					&info.codepoint))

+ 1 - 1
thirdparty/harfbuzz/src/hb-buffer.h

@@ -117,7 +117,7 @@ typedef struct hb_glyph_info_t {
  * 				   from there, and repeat.
  * 				   At the start of next line a similar algorithm can
  * 				   be implemented. That is: 1. Iterate forward from
- * 				   the line-break position untill the first cluster
+ * 				   the line-break position until the first cluster
  * 				   start position that is NOT unsafe-to-concat, 2.
  * 				   shape the segment from beginning of the line to
  * 				   that position, 3. check whether the resulting

+ 12 - 8
thirdparty/harfbuzz/src/hb-ot-layout-base-table.hh

@@ -41,7 +41,10 @@ namespace OT {
 
 struct BaseCoordFormat1
 {
-  hb_position_t get_coord () const { return coordinate; }
+  hb_position_t get_coord (hb_font_t *font, hb_direction_t direction) const
+  {
+    return HB_DIRECTION_IS_HORIZONTAL (direction) ? font->em_scale_y (coordinate) : font->em_scale_x (coordinate);
+  }
 
   bool sanitize (hb_sanitize_context_t *c) const
   {
@@ -58,10 +61,10 @@ struct BaseCoordFormat1
 
 struct BaseCoordFormat2
 {
-  hb_position_t get_coord () const
+  hb_position_t get_coord (hb_font_t *font, hb_direction_t direction) const
   {
     /* TODO */
-    return coordinate;
+    return HB_DIRECTION_IS_HORIZONTAL (direction) ? font->em_scale_y (coordinate) : font->em_scale_x (coordinate);
   }
 
   bool sanitize (hb_sanitize_context_t *c) const
@@ -87,9 +90,10 @@ struct BaseCoordFormat3
 			   hb_direction_t direction) const
   {
     const Device &device = this+deviceTable;
-    return coordinate + (HB_DIRECTION_IS_VERTICAL (direction) ?
-			 device.get_y_delta (font, var_store) :
-			 device.get_x_delta (font, var_store));
+
+    return HB_DIRECTION_IS_HORIZONTAL (direction)
+	 ? font->em_scale_y (coordinate) + device.get_y_delta (font, var_store)
+	 : font->em_scale_x (coordinate) + device.get_x_delta (font, var_store);
   }
 
 
@@ -120,8 +124,8 @@ struct BaseCoord
 			   hb_direction_t        direction) const
   {
     switch (u.format) {
-    case 1: return u.format1.get_coord ();
-    case 2: return u.format2.get_coord ();
+    case 1: return u.format1.get_coord (font, direction);
+    case 2: return u.format2.get_coord (font, direction);
     case 3: return u.format3.get_coord (font, var_store, direction);
     default:return 0;
     }

+ 1 - 6
thirdparty/harfbuzz/src/hb-ot-layout.cc

@@ -2060,12 +2060,7 @@ hb_ot_layout_get_baseline (hb_font_t                   *font,
 			   hb_tag_t                     language_tag,
 			   hb_position_t               *coord        /* OUT.  May be NULL. */)
 {
-  bool result = font->face->table.BASE->get_baseline (font, baseline_tag, direction, script_tag, language_tag, coord);
-
-  if (result && coord)
-    *coord = HB_DIRECTION_IS_HORIZONTAL (direction) ? font->em_scale_y (*coord) : font->em_scale_x (*coord);
-
-  return result;
+  return font->face->table.BASE->get_baseline (font, baseline_tag, direction, script_tag, language_tag, coord);
 }
 
 /**

+ 426 - 226
thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh

@@ -92,41 +92,60 @@ enum use_syllable_type_t {
 #define use_syllable_machine_ex_VMPst 39u
 #define use_syllable_machine_ex_VPre 22u
 #define use_syllable_machine_ex_VPst 35u
+#define use_syllable_machine_ex_WJ 16u
 #define use_syllable_machine_ex_ZWNJ 14u
 
 
-#line 99 "hb-ot-shape-complex-use-machine.hh"
+#line 100 "hb-ot-shape-complex-use-machine.hh"
 static const unsigned char _use_syllable_machine_trans_keys[] = {
-	0u, 51u, 41u, 42u, 42u, 42u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 23u, 48u, 
+	0u, 51u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 23u, 48u, 24u, 47u, 25u, 47u, 
+	26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u, 1u, 1u, 24u, 48u, 
+	23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u, 22u, 48u, 11u, 48u, 1u, 48u, 
+	11u, 48u, 41u, 42u, 42u, 42u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 23u, 48u, 
 	24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u, 
 	1u, 1u, 24u, 48u, 23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u, 22u, 48u, 
 	11u, 48u, 1u, 48u, 13u, 13u, 4u, 4u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 
 	23u, 48u, 24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 
 	24u, 48u, 1u, 1u, 24u, 48u, 23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u, 
-	22u, 48u, 11u, 48u, 1u, 48u, 4u, 4u, 13u, 13u, 1u, 48u, 11u, 48u, 41u, 42u, 
-	42u, 42u, 1u, 5u, 50u, 52u, 49u, 52u, 49u, 51u, 0
+	22u, 48u, 11u, 48u, 1u, 48u, 11u, 48u, 11u, 48u, 1u, 1u, 22u, 48u, 23u, 48u, 
+	24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u, 
+	1u, 1u, 24u, 48u, 23u, 48u, 23u, 48u, 23u, 48u, 22u, 48u, 22u, 48u, 22u, 48u, 
+	11u, 48u, 1u, 48u, 4u, 4u, 13u, 13u, 1u, 48u, 11u, 48u, 41u, 42u, 42u, 42u, 
+	1u, 5u, 50u, 52u, 49u, 52u, 49u, 51u, 0
 };
 
 static const char _use_syllable_machine_key_spans[] = {
-	52, 2, 1, 38, 38, 1, 27, 26, 
+	52, 38, 38, 1, 27, 26, 24, 23, 
+	22, 2, 1, 25, 25, 25, 1, 25, 
+	26, 26, 26, 27, 27, 27, 38, 48, 
+	38, 2, 1, 38, 38, 1, 27, 26, 
 	24, 23, 22, 2, 1, 25, 25, 25, 
 	1, 25, 26, 26, 26, 27, 27, 27, 
 	38, 48, 1, 1, 38, 38, 1, 27, 
 	26, 24, 23, 22, 2, 1, 25, 25, 
 	25, 1, 25, 26, 26, 26, 27, 27, 
-	27, 38, 48, 1, 1, 48, 38, 2, 
-	1, 5, 3, 4, 3
+	27, 38, 48, 38, 38, 1, 27, 26, 
+	24, 23, 22, 2, 1, 25, 25, 25, 
+	1, 25, 26, 26, 26, 27, 27, 27, 
+	38, 48, 1, 1, 48, 38, 2, 1, 
+	5, 3, 4, 3
 };
 
 static const short _use_syllable_machine_index_offsets[] = {
-	0, 53, 56, 58, 97, 136, 138, 166, 
-	193, 218, 242, 265, 268, 270, 296, 322, 
-	348, 350, 376, 403, 430, 457, 485, 513, 
-	541, 580, 629, 631, 633, 672, 711, 713, 
-	741, 768, 793, 817, 840, 843, 845, 871, 
-	897, 923, 925, 951, 978, 1005, 1032, 1060, 
-	1088, 1116, 1155, 1204, 1206, 1208, 1257, 1296, 
-	1299, 1301, 1307, 1311, 1316
+	0, 53, 92, 131, 133, 161, 188, 213, 
+	237, 260, 263, 265, 291, 317, 343, 345, 
+	371, 398, 425, 452, 480, 508, 536, 575, 
+	624, 663, 666, 668, 707, 746, 748, 776, 
+	803, 828, 852, 875, 878, 880, 906, 932, 
+	958, 960, 986, 1013, 1040, 1067, 1095, 1123, 
+	1151, 1190, 1239, 1241, 1243, 1282, 1321, 1323, 
+	1351, 1378, 1403, 1427, 1450, 1453, 1455, 1481, 
+	1507, 1533, 1535, 1561, 1588, 1615, 1642, 1670, 
+	1698, 1726, 1765, 1814, 1853, 1892, 1894, 1922, 
+	1949, 1974, 1998, 2021, 2024, 2026, 2052, 2078, 
+	2104, 2106, 2132, 2159, 2186, 2213, 2241, 2269, 
+	2297, 2336, 2385, 2387, 2389, 2438, 2477, 2480, 
+	2482, 2488, 2492, 2497
 };
 
 static const char _use_syllable_machine_indicies[] = {
@@ -136,178 +155,331 @@ static const char _use_syllable_machine_indicies[] = {
 	11, 12, 13, 14, 15, 9, 16, 17, 
 	18, 19, 20, 21, 2, 22, 23, 24, 
 	2, 25, 26, 27, 28, 29, 30, 31, 
-	6, 32, 2, 33, 2, 0, 35, 34, 
-	35, 34, 37, 38, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 39, 40, 41, 
-	42, 43, 44, 45, 39, 46, 1, 47, 
-	48, 49, 50, 36, 51, 52, 53, 36, 
-	36, 36, 36, 54, 55, 56, 57, 38, 
-	36, 37, 38, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 39, 40, 41, 42, 
-	43, 44, 45, 39, 46, 47, 47, 48, 
-	49, 50, 36, 51, 52, 53, 36, 36, 
-	36, 36, 54, 55, 56, 57, 38, 36, 
-	37, 58, 39, 40, 41, 42, 43, 36, 
-	36, 36, 36, 36, 36, 48, 49, 50, 
-	36, 51, 52, 53, 36, 36, 36, 36, 
-	40, 55, 56, 57, 59, 36, 40, 41, 
-	42, 43, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 51, 52, 53, 36, 
-	36, 36, 36, 36, 55, 56, 57, 59, 
-	36, 41, 42, 43, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 55, 56, 
-	57, 36, 42, 43, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 55, 56, 
-	57, 36, 43, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 55, 56, 57, 
-	36, 55, 56, 36, 56, 36, 41, 42, 
-	43, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 51, 52, 53, 36, 36, 
-	36, 36, 36, 55, 56, 57, 59, 36, 
-	41, 42, 43, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 52, 53, 
-	36, 36, 36, 36, 36, 55, 56, 57, 
-	59, 36, 41, 42, 43, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 53, 36, 36, 36, 36, 36, 55, 
-	56, 57, 59, 36, 61, 60, 41, 42, 
-	43, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 55, 56, 57, 59, 36, 
-	40, 41, 42, 43, 36, 36, 36, 36, 
-	36, 36, 48, 49, 50, 36, 51, 52, 
-	53, 36, 36, 36, 36, 40, 55, 56, 
-	57, 59, 36, 40, 41, 42, 43, 36, 
-	36, 36, 36, 36, 36, 36, 49, 50, 
-	36, 51, 52, 53, 36, 36, 36, 36, 
-	40, 55, 56, 57, 59, 36, 40, 41, 
-	42, 43, 36, 36, 36, 36, 36, 36, 
-	36, 36, 50, 36, 51, 52, 53, 36, 
-	36, 36, 36, 40, 55, 56, 57, 59, 
-	36, 39, 40, 41, 42, 43, 36, 45, 
-	39, 36, 36, 36, 48, 49, 50, 36, 
-	51, 52, 53, 36, 36, 36, 36, 40, 
-	55, 56, 57, 59, 36, 39, 40, 41, 
-	42, 43, 36, 36, 39, 36, 36, 36, 
-	48, 49, 50, 36, 51, 52, 53, 36, 
-	36, 36, 36, 40, 55, 56, 57, 59, 
-	36, 39, 40, 41, 42, 43, 44, 45, 
-	39, 36, 36, 36, 48, 49, 50, 36, 
-	51, 52, 53, 36, 36, 36, 36, 40, 
-	55, 56, 57, 59, 36, 37, 38, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	39, 40, 41, 42, 43, 44, 45, 39, 
-	46, 36, 47, 48, 49, 50, 36, 51, 
-	52, 53, 36, 36, 36, 36, 54, 55, 
-	56, 57, 38, 36, 37, 58, 58, 58, 
-	58, 58, 58, 58, 58, 58, 58, 58, 
-	58, 58, 58, 58, 58, 58, 58, 58, 
-	58, 58, 40, 41, 42, 43, 58, 58, 
-	58, 58, 58, 58, 58, 58, 58, 58, 
-	51, 52, 53, 58, 58, 58, 58, 58, 
-	55, 56, 57, 59, 58, 63, 62, 3, 
-	64, 37, 38, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 39, 40, 41, 42, 
-	43, 44, 45, 39, 46, 1, 47, 48, 
-	49, 50, 36, 51, 52, 53, 36, 0, 
-	35, 36, 54, 55, 56, 57, 38, 36, 
-	5, 6, 65, 65, 65, 65, 65, 65, 
-	65, 65, 65, 9, 10, 11, 12, 13, 
-	14, 15, 9, 16, 18, 18, 19, 20, 
-	21, 65, 22, 23, 24, 65, 65, 65, 
-	65, 28, 29, 30, 31, 6, 65, 5, 
-	65, 9, 10, 11, 12, 13, 65, 65, 
-	65, 65, 65, 65, 19, 20, 21, 65, 
-	22, 23, 24, 65, 65, 65, 65, 10, 
-	29, 30, 31, 66, 65, 10, 11, 12, 
-	13, 65, 65, 65, 65, 65, 65, 65, 
-	65, 65, 65, 22, 23, 24, 65, 65, 
-	65, 65, 65, 29, 30, 31, 66, 65, 
-	11, 12, 13, 65, 65, 65, 65, 65, 
-	65, 65, 65, 65, 65, 65, 65, 65, 
-	65, 65, 65, 65, 65, 29, 30, 31, 
-	65, 12, 13, 65, 65, 65, 65, 65, 
-	65, 65, 65, 65, 65, 65, 65, 65, 
-	65, 65, 65, 65, 65, 29, 30, 31, 
-	65, 13, 65, 65, 65, 65, 65, 65, 
-	65, 65, 65, 65, 65, 65, 65, 65, 
-	65, 65, 65, 65, 29, 30, 31, 65, 
-	29, 30, 65, 30, 65, 11, 12, 13, 
-	65, 65, 65, 65, 65, 65, 65, 65, 
-	65, 65, 22, 23, 24, 65, 65, 65, 
-	65, 65, 29, 30, 31, 66, 65, 11, 
-	12, 13, 65, 65, 65, 65, 65, 65, 
-	65, 65, 65, 65, 65, 23, 24, 65, 
-	65, 65, 65, 65, 29, 30, 31, 66, 
-	65, 11, 12, 13, 65, 65, 65, 65, 
-	65, 65, 65, 65, 65, 65, 65, 65, 
-	24, 65, 65, 65, 65, 65, 29, 30, 
-	31, 66, 65, 67, 65, 11, 12, 13, 
-	65, 65, 65, 65, 65, 65, 65, 65, 
-	65, 65, 65, 65, 65, 65, 65, 65, 
-	65, 65, 29, 30, 31, 66, 65, 10, 
-	11, 12, 13, 65, 65, 65, 65, 65, 
-	65, 19, 20, 21, 65, 22, 23, 24, 
-	65, 65, 65, 65, 10, 29, 30, 31, 
-	66, 65, 10, 11, 12, 13, 65, 65, 
-	65, 65, 65, 65, 65, 20, 21, 65, 
-	22, 23, 24, 65, 65, 65, 65, 10, 
-	29, 30, 31, 66, 65, 10, 11, 12, 
-	13, 65, 65, 65, 65, 65, 65, 65, 
-	65, 21, 65, 22, 23, 24, 65, 65, 
-	65, 65, 10, 29, 30, 31, 66, 65, 
-	9, 10, 11, 12, 13, 65, 15, 9, 
-	65, 65, 65, 19, 20, 21, 65, 22, 
-	23, 24, 65, 65, 65, 65, 10, 29, 
-	30, 31, 66, 65, 9, 10, 11, 12, 
-	13, 65, 65, 9, 65, 65, 65, 19, 
-	20, 21, 65, 22, 23, 24, 65, 65, 
-	65, 65, 10, 29, 30, 31, 66, 65, 
+	6, 32, 2, 33, 2, 35, 36, 34, 
+	34, 34, 34, 34, 34, 34, 34, 34, 
+	37, 38, 39, 40, 41, 42, 43, 37, 
+	44, 45, 46, 47, 48, 49, 34, 50, 
+	51, 52, 34, 53, 54, 34, 55, 56, 
+	57, 58, 36, 34, 35, 36, 34, 34, 
+	34, 34, 34, 34, 34, 34, 34, 37, 
+	38, 39, 40, 41, 42, 43, 37, 44, 
+	46, 46, 47, 48, 49, 34, 50, 51, 
+	52, 34, 34, 34, 34, 55, 56, 57, 
+	58, 36, 34, 35, 34, 37, 38, 39, 
+	40, 41, 34, 34, 34, 34, 34, 34, 
+	47, 48, 49, 34, 50, 51, 52, 34, 
+	34, 34, 34, 38, 56, 57, 58, 59, 
+	34, 38, 39, 40, 41, 34, 34, 34, 
+	34, 34, 34, 34, 34, 34, 34, 50, 
+	51, 52, 34, 34, 34, 34, 34, 56, 
+	57, 58, 59, 34, 39, 40, 41, 34, 
+	34, 34, 34, 34, 34, 34, 34, 34, 
+	34, 34, 34, 34, 34, 34, 34, 34, 
+	34, 56, 57, 58, 34, 40, 41, 34, 
+	34, 34, 34, 34, 34, 34, 34, 34, 
+	34, 34, 34, 34, 34, 34, 34, 34, 
+	34, 56, 57, 58, 34, 41, 34, 34, 
+	34, 34, 34, 34, 34, 34, 34, 34, 
+	34, 34, 34, 34, 34, 34, 34, 34, 
+	56, 57, 58, 34, 56, 57, 34, 57, 
+	34, 39, 40, 41, 34, 34, 34, 34, 
+	34, 34, 34, 34, 34, 34, 50, 51, 
+	52, 34, 34, 34, 34, 34, 56, 57, 
+	58, 59, 34, 39, 40, 41, 34, 34, 
+	34, 34, 34, 34, 34, 34, 34, 34, 
+	34, 51, 52, 34, 34, 34, 34, 34, 
+	56, 57, 58, 59, 34, 39, 40, 41, 
+	34, 34, 34, 34, 34, 34, 34, 34, 
+	34, 34, 34, 34, 52, 34, 34, 34, 
+	34, 34, 56, 57, 58, 59, 34, 60, 
+	34, 39, 40, 41, 34, 34, 34, 34, 
+	34, 34, 34, 34, 34, 34, 34, 34, 
+	34, 34, 34, 34, 34, 34, 56, 57, 
+	58, 59, 34, 38, 39, 40, 41, 34, 
+	34, 34, 34, 34, 34, 47, 48, 49, 
+	34, 50, 51, 52, 34, 34, 34, 34, 
+	38, 56, 57, 58, 59, 34, 38, 39, 
+	40, 41, 34, 34, 34, 34, 34, 34, 
+	34, 48, 49, 34, 50, 51, 52, 34, 
+	34, 34, 34, 38, 56, 57, 58, 59, 
+	34, 38, 39, 40, 41, 34, 34, 34, 
+	34, 34, 34, 34, 34, 49, 34, 50, 
+	51, 52, 34, 34, 34, 34, 38, 56, 
+	57, 58, 59, 34, 37, 38, 39, 40, 
+	41, 34, 43, 37, 34, 34, 34, 47, 
+	48, 49, 34, 50, 51, 52, 34, 34, 
+	34, 34, 38, 56, 57, 58, 59, 34, 
+	37, 38, 39, 40, 41, 34, 34, 37, 
+	34, 34, 34, 47, 48, 49, 34, 50, 
+	51, 52, 34, 34, 34, 34, 38, 56, 
+	57, 58, 59, 34, 37, 38, 39, 40, 
+	41, 42, 43, 37, 34, 34, 34, 47, 
+	48, 49, 34, 50, 51, 52, 34, 34, 
+	34, 34, 38, 56, 57, 58, 59, 34, 
+	35, 36, 34, 34, 34, 34, 34, 34, 
+	34, 34, 34, 37, 38, 39, 40, 41, 
+	42, 43, 37, 44, 34, 46, 47, 48, 
+	49, 34, 50, 51, 52, 34, 34, 34, 
+	34, 55, 56, 57, 58, 36, 34, 35, 
+	34, 34, 34, 34, 34, 34, 34, 34, 
+	34, 34, 34, 34, 34, 34, 34, 34, 
+	34, 34, 34, 34, 34, 38, 39, 40, 
+	41, 34, 34, 34, 34, 34, 34, 34, 
+	34, 34, 34, 50, 51, 52, 34, 34, 
+	34, 34, 34, 56, 57, 58, 59, 34, 
+	35, 36, 34, 34, 34, 34, 34, 34, 
+	34, 34, 34, 37, 38, 39, 40, 41, 
+	42, 43, 37, 44, 45, 46, 47, 48, 
+	49, 34, 50, 51, 52, 34, 34, 34, 
+	34, 55, 56, 57, 58, 36, 34, 53, 
+	54, 34, 54, 34, 62, 63, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 64, 
+	65, 66, 67, 68, 69, 70, 64, 71, 
+	1, 72, 73, 74, 75, 61, 76, 77, 
+	78, 61, 61, 61, 61, 79, 80, 81, 
+	82, 63, 61, 62, 63, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 64, 65, 
+	66, 67, 68, 69, 70, 64, 71, 72, 
+	72, 73, 74, 75, 61, 76, 77, 78, 
+	61, 61, 61, 61, 79, 80, 81, 82, 
+	63, 61, 62, 83, 64, 65, 66, 67, 
+	68, 61, 61, 61, 61, 61, 61, 73, 
+	74, 75, 61, 76, 77, 78, 61, 61, 
+	61, 61, 65, 80, 81, 82, 84, 61, 
+	65, 66, 67, 68, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 76, 77, 
+	78, 61, 61, 61, 61, 61, 80, 81, 
+	82, 84, 61, 66, 67, 68, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	80, 81, 82, 61, 67, 68, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	80, 81, 82, 61, 68, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 80, 
+	81, 82, 61, 80, 81, 61, 81, 61, 
+	66, 67, 68, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 76, 77, 78, 
+	61, 61, 61, 61, 61, 80, 81, 82, 
+	84, 61, 66, 67, 68, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	77, 78, 61, 61, 61, 61, 61, 80, 
+	81, 82, 84, 61, 66, 67, 68, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 61, 61, 78, 61, 61, 61, 61, 
+	61, 80, 81, 82, 84, 61, 86, 85, 
+	66, 67, 68, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 80, 81, 82, 
+	84, 61, 65, 66, 67, 68, 61, 61, 
+	61, 61, 61, 61, 73, 74, 75, 61, 
+	76, 77, 78, 61, 61, 61, 61, 65, 
+	80, 81, 82, 84, 61, 65, 66, 67, 
+	68, 61, 61, 61, 61, 61, 61, 61, 
+	74, 75, 61, 76, 77, 78, 61, 61, 
+	61, 61, 65, 80, 81, 82, 84, 61, 
+	65, 66, 67, 68, 61, 61, 61, 61, 
+	61, 61, 61, 61, 75, 61, 76, 77, 
+	78, 61, 61, 61, 61, 65, 80, 81, 
+	82, 84, 61, 64, 65, 66, 67, 68, 
+	61, 70, 64, 61, 61, 61, 73, 74, 
+	75, 61, 76, 77, 78, 61, 61, 61, 
+	61, 65, 80, 81, 82, 84, 61, 64, 
+	65, 66, 67, 68, 61, 61, 64, 61, 
+	61, 61, 73, 74, 75, 61, 76, 77, 
+	78, 61, 61, 61, 61, 65, 80, 81, 
+	82, 84, 61, 64, 65, 66, 67, 68, 
+	69, 70, 64, 61, 61, 61, 73, 74, 
+	75, 61, 76, 77, 78, 61, 61, 61, 
+	61, 65, 80, 81, 82, 84, 61, 62, 
+	63, 61, 61, 61, 61, 61, 61, 61, 
+	61, 61, 64, 65, 66, 67, 68, 69, 
+	70, 64, 71, 61, 72, 73, 74, 75, 
+	61, 76, 77, 78, 61, 61, 61, 61, 
+	79, 80, 81, 82, 63, 61, 62, 83, 
+	83, 83, 83, 83, 83, 83, 83, 83, 
+	83, 83, 83, 83, 83, 83, 83, 83, 
+	83, 83, 83, 83, 65, 66, 67, 68, 
+	83, 83, 83, 83, 83, 83, 83, 83, 
+	83, 83, 76, 77, 78, 83, 83, 83, 
+	83, 83, 80, 81, 82, 84, 83, 88, 
+	87, 3, 89, 90, 91, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 92, 93, 
+	94, 95, 96, 97, 98, 92, 99, 100, 
+	101, 102, 103, 104, 61, 105, 106, 107, 
+	61, 53, 54, 61, 108, 109, 110, 82, 
+	91, 61, 90, 91, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 92, 93, 94, 
+	95, 96, 97, 98, 92, 99, 101, 101, 
+	102, 103, 104, 61, 105, 106, 107, 61, 
+	61, 61, 61, 108, 109, 110, 82, 91, 
+	61, 90, 83, 92, 93, 94, 95, 96, 
+	61, 61, 61, 61, 61, 61, 102, 103, 
+	104, 61, 105, 106, 107, 61, 61, 61, 
+	61, 93, 109, 110, 82, 111, 61, 93, 
+	94, 95, 96, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 105, 106, 107, 
+	61, 61, 61, 61, 61, 109, 110, 82, 
+	111, 61, 94, 95, 96, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 109, 
+	110, 82, 61, 95, 96, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 109, 
+	110, 82, 61, 96, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 109, 110, 
+	82, 61, 109, 110, 61, 110, 61, 94, 
+	95, 96, 61, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 105, 106, 107, 61, 
+	61, 61, 61, 61, 109, 110, 82, 111, 
+	61, 94, 95, 96, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 106, 
+	107, 61, 61, 61, 61, 61, 109, 110, 
+	82, 111, 61, 94, 95, 96, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 61, 107, 61, 61, 61, 61, 61, 
+	109, 110, 82, 111, 61, 112, 85, 94, 
+	95, 96, 61, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 109, 110, 82, 111, 
+	61, 93, 94, 95, 96, 61, 61, 61, 
+	61, 61, 61, 102, 103, 104, 61, 105, 
+	106, 107, 61, 61, 61, 61, 93, 109, 
+	110, 82, 111, 61, 93, 94, 95, 96, 
+	61, 61, 61, 61, 61, 61, 61, 103, 
+	104, 61, 105, 106, 107, 61, 61, 61, 
+	61, 93, 109, 110, 82, 111, 61, 93, 
+	94, 95, 96, 61, 61, 61, 61, 61, 
+	61, 61, 61, 104, 61, 105, 106, 107, 
+	61, 61, 61, 61, 93, 109, 110, 82, 
+	111, 61, 92, 93, 94, 95, 96, 61, 
+	98, 92, 61, 61, 61, 102, 103, 104, 
+	61, 105, 106, 107, 61, 61, 61, 61, 
+	93, 109, 110, 82, 111, 61, 92, 93, 
+	94, 95, 96, 61, 61, 92, 61, 61, 
+	61, 102, 103, 104, 61, 105, 106, 107, 
+	61, 61, 61, 61, 93, 109, 110, 82, 
+	111, 61, 92, 93, 94, 95, 96, 97, 
+	98, 92, 61, 61, 61, 102, 103, 104, 
+	61, 105, 106, 107, 61, 61, 61, 61, 
+	93, 109, 110, 82, 111, 61, 90, 91, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 92, 93, 94, 95, 96, 97, 98, 
+	92, 99, 61, 101, 102, 103, 104, 61, 
+	105, 106, 107, 61, 61, 61, 61, 108, 
+	109, 110, 82, 91, 61, 90, 83, 83, 
+	83, 83, 83, 83, 83, 83, 83, 83, 
+	83, 83, 83, 83, 83, 83, 83, 83, 
+	83, 83, 83, 93, 94, 95, 96, 83, 
+	83, 83, 83, 83, 83, 83, 83, 83, 
+	83, 105, 106, 107, 83, 83, 83, 83, 
+	83, 109, 110, 82, 111, 83, 90, 91, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 92, 93, 94, 95, 96, 97, 98, 
+	92, 99, 100, 101, 102, 103, 104, 61, 
+	105, 106, 107, 61, 61, 61, 61, 108, 
+	109, 110, 82, 91, 61, 5, 6, 113, 
+	113, 113, 113, 113, 113, 113, 113, 113, 
 	9, 10, 11, 12, 13, 14, 15, 9, 
-	65, 65, 65, 19, 20, 21, 65, 22, 
-	23, 24, 65, 65, 65, 65, 10, 29, 
-	30, 31, 66, 65, 5, 6, 65, 65, 
-	65, 65, 65, 65, 65, 65, 65, 9, 
-	10, 11, 12, 13, 14, 15, 9, 16, 
-	65, 18, 19, 20, 21, 65, 22, 23, 
-	24, 65, 65, 65, 65, 28, 29, 30, 
-	31, 6, 65, 5, 65, 65, 65, 65, 
-	65, 65, 65, 65, 65, 65, 65, 65, 
-	65, 65, 65, 65, 65, 65, 65, 65, 
-	65, 10, 11, 12, 13, 65, 65, 65, 
-	65, 65, 65, 65, 65, 65, 65, 22, 
-	23, 24, 65, 65, 65, 65, 65, 29, 
-	30, 31, 66, 65, 68, 65, 7, 65, 
-	1, 65, 65, 65, 1, 65, 65, 65, 
-	65, 65, 5, 6, 7, 65, 65, 65, 
-	65, 65, 65, 65, 65, 9, 10, 11, 
-	12, 13, 14, 15, 9, 16, 17, 18, 
-	19, 20, 21, 65, 22, 23, 24, 65, 
-	25, 26, 65, 28, 29, 30, 31, 6, 
-	65, 5, 6, 65, 65, 65, 65, 65, 
-	65, 65, 65, 65, 9, 10, 11, 12, 
-	13, 14, 15, 9, 16, 17, 18, 19, 
-	20, 21, 65, 22, 23, 24, 65, 65, 
-	65, 65, 28, 29, 30, 31, 6, 65, 
-	25, 26, 65, 26, 65, 1, 69, 69, 
-	69, 1, 69, 71, 70, 32, 70, 32, 
-	71, 70, 71, 70, 32, 70, 33, 70, 
-	0
+	16, 18, 18, 19, 20, 21, 113, 22, 
+	23, 24, 113, 113, 113, 113, 28, 29, 
+	30, 31, 6, 113, 5, 113, 9, 10, 
+	11, 12, 13, 113, 113, 113, 113, 113, 
+	113, 19, 20, 21, 113, 22, 23, 24, 
+	113, 113, 113, 113, 10, 29, 30, 31, 
+	114, 113, 10, 11, 12, 13, 113, 113, 
+	113, 113, 113, 113, 113, 113, 113, 113, 
+	22, 23, 24, 113, 113, 113, 113, 113, 
+	29, 30, 31, 114, 113, 11, 12, 13, 
+	113, 113, 113, 113, 113, 113, 113, 113, 
+	113, 113, 113, 113, 113, 113, 113, 113, 
+	113, 113, 29, 30, 31, 113, 12, 13, 
+	113, 113, 113, 113, 113, 113, 113, 113, 
+	113, 113, 113, 113, 113, 113, 113, 113, 
+	113, 113, 29, 30, 31, 113, 13, 113, 
+	113, 113, 113, 113, 113, 113, 113, 113, 
+	113, 113, 113, 113, 113, 113, 113, 113, 
+	113, 29, 30, 31, 113, 29, 30, 113, 
+	30, 113, 11, 12, 13, 113, 113, 113, 
+	113, 113, 113, 113, 113, 113, 113, 22, 
+	23, 24, 113, 113, 113, 113, 113, 29, 
+	30, 31, 114, 113, 11, 12, 13, 113, 
+	113, 113, 113, 113, 113, 113, 113, 113, 
+	113, 113, 23, 24, 113, 113, 113, 113, 
+	113, 29, 30, 31, 114, 113, 11, 12, 
+	13, 113, 113, 113, 113, 113, 113, 113, 
+	113, 113, 113, 113, 113, 24, 113, 113, 
+	113, 113, 113, 29, 30, 31, 114, 113, 
+	115, 113, 11, 12, 13, 113, 113, 113, 
+	113, 113, 113, 113, 113, 113, 113, 113, 
+	113, 113, 113, 113, 113, 113, 113, 29, 
+	30, 31, 114, 113, 10, 11, 12, 13, 
+	113, 113, 113, 113, 113, 113, 19, 20, 
+	21, 113, 22, 23, 24, 113, 113, 113, 
+	113, 10, 29, 30, 31, 114, 113, 10, 
+	11, 12, 13, 113, 113, 113, 113, 113, 
+	113, 113, 20, 21, 113, 22, 23, 24, 
+	113, 113, 113, 113, 10, 29, 30, 31, 
+	114, 113, 10, 11, 12, 13, 113, 113, 
+	113, 113, 113, 113, 113, 113, 21, 113, 
+	22, 23, 24, 113, 113, 113, 113, 10, 
+	29, 30, 31, 114, 113, 9, 10, 11, 
+	12, 13, 113, 15, 9, 113, 113, 113, 
+	19, 20, 21, 113, 22, 23, 24, 113, 
+	113, 113, 113, 10, 29, 30, 31, 114, 
+	113, 9, 10, 11, 12, 13, 113, 113, 
+	9, 113, 113, 113, 19, 20, 21, 113, 
+	22, 23, 24, 113, 113, 113, 113, 10, 
+	29, 30, 31, 114, 113, 9, 10, 11, 
+	12, 13, 14, 15, 9, 113, 113, 113, 
+	19, 20, 21, 113, 22, 23, 24, 113, 
+	113, 113, 113, 10, 29, 30, 31, 114, 
+	113, 5, 6, 113, 113, 113, 113, 113, 
+	113, 113, 113, 113, 9, 10, 11, 12, 
+	13, 14, 15, 9, 16, 113, 18, 19, 
+	20, 21, 113, 22, 23, 24, 113, 113, 
+	113, 113, 28, 29, 30, 31, 6, 113, 
+	5, 113, 113, 113, 113, 113, 113, 113, 
+	113, 113, 113, 113, 113, 113, 113, 113, 
+	113, 113, 113, 113, 113, 113, 10, 11, 
+	12, 13, 113, 113, 113, 113, 113, 113, 
+	113, 113, 113, 113, 22, 23, 24, 113, 
+	113, 113, 113, 113, 29, 30, 31, 114, 
+	113, 116, 113, 7, 113, 1, 113, 113, 
+	113, 1, 113, 113, 113, 113, 113, 5, 
+	6, 7, 113, 113, 113, 113, 113, 113, 
+	113, 113, 9, 10, 11, 12, 13, 14, 
+	15, 9, 16, 17, 18, 19, 20, 21, 
+	113, 22, 23, 24, 113, 25, 26, 113, 
+	28, 29, 30, 31, 6, 113, 5, 6, 
+	113, 113, 113, 113, 113, 113, 113, 113, 
+	113, 9, 10, 11, 12, 13, 14, 15, 
+	9, 16, 17, 18, 19, 20, 21, 113, 
+	22, 23, 24, 113, 113, 113, 113, 28, 
+	29, 30, 31, 6, 113, 25, 26, 113, 
+	26, 113, 1, 117, 117, 117, 1, 117, 
+	119, 118, 32, 118, 32, 119, 118, 119, 
+	118, 32, 118, 33, 118, 0
 };
 
 static const char _use_syllable_machine_trans_targs[] = {
-	1, 3, 0, 26, 28, 29, 30, 51, 
-	53, 31, 32, 33, 34, 35, 46, 47, 
-	48, 54, 49, 43, 44, 45, 38, 39, 
-	40, 55, 56, 57, 50, 36, 37, 0, 
-	58, 60, 0, 2, 0, 4, 5, 6, 
-	7, 8, 9, 10, 21, 22, 23, 24, 
-	18, 19, 20, 13, 14, 15, 25, 11, 
-	12, 0, 0, 16, 0, 17, 0, 27, 
-	0, 0, 41, 42, 52, 0, 0, 59
+	1, 27, 0, 50, 52, 76, 77, 98, 
+	100, 78, 79, 80, 81, 82, 93, 94, 
+	95, 101, 96, 90, 91, 92, 85, 86, 
+	87, 102, 103, 104, 97, 83, 84, 0, 
+	105, 107, 0, 2, 3, 4, 5, 6, 
+	7, 8, 19, 20, 21, 24, 22, 16, 
+	17, 18, 11, 12, 13, 25, 26, 23, 
+	9, 10, 0, 14, 15, 0, 28, 29, 
+	30, 31, 32, 33, 34, 45, 46, 47, 
+	48, 42, 43, 44, 37, 38, 39, 49, 
+	35, 36, 0, 0, 40, 0, 41, 0, 
+	51, 0, 53, 54, 55, 56, 57, 58, 
+	59, 70, 71, 72, 75, 73, 67, 68, 
+	69, 62, 63, 64, 74, 60, 61, 65, 
+	66, 0, 88, 89, 99, 0, 0, 106
 };
 
 static const char _use_syllable_machine_trans_actions[] = {
@@ -315,11 +487,17 @@ static const char _use_syllable_machine_trans_actions[] = {
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 4, 
-	0, 0, 5, 0, 6, 0, 0, 0, 
+	0, 0, 5, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 6, 0, 0, 7, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 8, 9, 0, 10, 0, 11, 
+	0, 12, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 7, 8, 0, 9, 0, 10, 0, 
-	11, 12, 0, 0, 0, 13, 14, 0
+	0, 13, 0, 0, 0, 14, 15, 0
 };
 
 static const char _use_syllable_machine_to_state_actions[] = {
@@ -330,7 +508,13 @@ static const char _use_syllable_machine_to_state_actions[] = {
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0
 };
 
 static const char _use_syllable_machine_from_state_actions[] = {
@@ -341,18 +525,30 @@ static const char _use_syllable_machine_from_state_actions[] = {
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0
 };
 
 static const short _use_syllable_machine_eof_trans[] = {
-	0, 35, 35, 37, 37, 59, 37, 37, 
-	37, 37, 37, 37, 37, 37, 37, 37, 
-	61, 37, 37, 37, 37, 37, 37, 37, 
-	37, 59, 63, 65, 37, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 70, 71, 71, 71
+	0, 35, 35, 35, 35, 35, 35, 35, 
+	35, 35, 35, 35, 35, 35, 35, 35, 
+	35, 35, 35, 35, 35, 35, 35, 35, 
+	35, 35, 35, 62, 62, 84, 62, 62, 
+	62, 62, 62, 62, 62, 62, 62, 62, 
+	86, 62, 62, 62, 62, 62, 62, 62, 
+	62, 84, 88, 90, 62, 62, 84, 62, 
+	62, 62, 62, 62, 62, 62, 62, 62, 
+	62, 86, 62, 62, 62, 62, 62, 62, 
+	62, 62, 84, 62, 114, 114, 114, 114, 
+	114, 114, 114, 114, 114, 114, 114, 114, 
+	114, 114, 114, 114, 114, 114, 114, 114, 
+	114, 114, 114, 114, 114, 114, 114, 114, 
+	118, 119, 119, 119
 };
 
 static const int use_syllable_machine_start = 0;
@@ -366,7 +562,7 @@ static const int use_syllable_machine_en_main = 0;
 
 
 
-#line 179 "hb-ot-shape-complex-use-machine.rl"
+#line 181 "hb-ot-shape-complex-use-machine.rl"
 
 
 #define found_syllable(syllable_type) \
@@ -422,7 +618,7 @@ HB_FUNCOBJ (machine_index);
 
 static bool
 not_ccs_default_ignorable (const hb_glyph_info_t &i)
-{ return !(i.use_category() == USE(CGJ) && _hb_glyph_info_is_default_ignorable (&i)); }
+{ return i.use_category() != USE(CGJ); }
 
 static inline void
 find_syllables_use (hb_buffer_t *buffer)
@@ -451,7 +647,7 @@ find_syllables_use (hb_buffer_t *buffer)
   unsigned int act HB_UNUSED;
   int cs;
   
-#line 453 "hb-ot-shape-complex-use-machine.hh"
+#line 651 "hb-ot-shape-complex-use-machine.hh"
 	{
 	cs = use_syllable_machine_start;
 	ts = 0;
@@ -459,12 +655,12 @@ find_syllables_use (hb_buffer_t *buffer)
 	act = 0;
 	}
 
-#line 263 "hb-ot-shape-complex-use-machine.rl"
+#line 267 "hb-ot-shape-complex-use-machine.rl"
 
 
   unsigned int syllable_serial = 1;
   
-#line 466 "hb-ot-shape-complex-use-machine.hh"
+#line 664 "hb-ot-shape-complex-use-machine.hh"
 	{
 	int _slen;
 	int _trans;
@@ -478,7 +674,7 @@ _resume:
 #line 1 "NONE"
 	{ts = p;}
 	break;
-#line 480 "hb-ot-shape-complex-use-machine.hh"
+#line 678 "hb-ot-shape-complex-use-machine.hh"
 	}
 
 	_keys = _use_syllable_machine_trans_keys + (cs<<1);
@@ -496,55 +692,59 @@ _eof_trans:
 		goto _again;
 
 	switch ( _use_syllable_machine_trans_actions[_trans] ) {
-	case 7:
-#line 169 "hb-ot-shape-complex-use-machine.rl"
+	case 8:
+#line 171 "hb-ot-shape-complex-use-machine.rl"
 	{te = p+1;{ found_syllable (use_standard_cluster); }}
 	break;
-	case 4:
+	case 6:
 #line 174 "hb-ot-shape-complex-use-machine.rl"
+	{te = p+1;{ found_syllable (use_symbol_cluster); }}
+	break;
+	case 4:
+#line 176 "hb-ot-shape-complex-use-machine.rl"
 	{te = p+1;{ found_syllable (use_broken_cluster); }}
 	break;
 	case 3:
-#line 175 "hb-ot-shape-complex-use-machine.rl"
+#line 177 "hb-ot-shape-complex-use-machine.rl"
 	{te = p+1;{ found_syllable (use_non_cluster); }}
 	break;
-	case 8:
-#line 167 "hb-ot-shape-complex-use-machine.rl"
+	case 9:
+#line 169 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_virama_terminated_cluster); }}
 	break;
-	case 9:
-#line 168 "hb-ot-shape-complex-use-machine.rl"
+	case 10:
+#line 170 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_sakot_terminated_cluster); }}
 	break;
-	case 6:
-#line 169 "hb-ot-shape-complex-use-machine.rl"
+	case 7:
+#line 171 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_standard_cluster); }}
 	break;
-	case 11:
-#line 170 "hb-ot-shape-complex-use-machine.rl"
+	case 12:
+#line 172 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_number_joiner_terminated_cluster); }}
 	break;
-	case 10:
-#line 171 "hb-ot-shape-complex-use-machine.rl"
+	case 11:
+#line 173 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_numeral_cluster); }}
 	break;
 	case 5:
-#line 172 "hb-ot-shape-complex-use-machine.rl"
+#line 174 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_symbol_cluster); }}
 	break;
-	case 14:
-#line 173 "hb-ot-shape-complex-use-machine.rl"
+	case 15:
+#line 175 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_hieroglyph_cluster); }}
 	break;
-	case 12:
-#line 174 "hb-ot-shape-complex-use-machine.rl"
+	case 13:
+#line 176 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_broken_cluster); }}
 	break;
-	case 13:
-#line 175 "hb-ot-shape-complex-use-machine.rl"
+	case 14:
+#line 177 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_non_cluster); }}
 	break;
-#line 546 "hb-ot-shape-complex-use-machine.hh"
+#line 748 "hb-ot-shape-complex-use-machine.hh"
 	}
 
 _again:
@@ -553,7 +753,7 @@ _again:
 #line 1 "NONE"
 	{ts = 0;}
 	break;
-#line 555 "hb-ot-shape-complex-use-machine.hh"
+#line 757 "hb-ot-shape-complex-use-machine.hh"
 	}
 
 	if ( ++p != pe )
@@ -569,7 +769,7 @@ _again:
 
 	}
 
-#line 268 "hb-ot-shape-complex-use-machine.rl"
+#line 272 "hb-ot-shape-complex-use-machine.rl"
 
 }
 

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 272 - 256
thirdparty/harfbuzz/src/hb-ot-shape-complex-use-table.hh


+ 3 - 2
thirdparty/harfbuzz/src/hb-ot-shape-complex-use.cc

@@ -206,7 +206,7 @@ setup_masks_use (const hb_ot_shape_plan_t *plan,
   unsigned int count = buffer->len;
   hb_glyph_info_t *info = buffer->info;
   for (unsigned int i = 0; i < count; i++)
-    info[i].use_category() = hb_use_get_category (info[i].codepoint);
+    info[i].use_category() = hb_use_get_category (info[i]);
 }
 
 static void
@@ -257,7 +257,6 @@ setup_topographical_masks (const hb_ot_shape_plan_t *plan,
     use_syllable_type_t syllable_type = (use_syllable_type_t) (info[start].syllable() & 0x0F);
     switch (syllable_type)
     {
-      case use_symbol_cluster:
       case use_hieroglyph_cluster:
       case use_non_cluster:
 	/* These don't join.  Nothing to do. */
@@ -269,6 +268,7 @@ setup_topographical_masks (const hb_ot_shape_plan_t *plan,
       case use_standard_cluster:
       case use_number_joiner_terminated_cluster:
       case use_numeral_cluster:
+      case use_symbol_cluster:
       case use_broken_cluster:
 
 	bool join = last_form == JOINING_FORM_FINA || last_form == JOINING_FORM_ISOL;
@@ -363,6 +363,7 @@ reorder_syllable_use (hb_buffer_t *buffer, unsigned int start, unsigned int end)
 		  (FLAG (use_virama_terminated_cluster) |
 		   FLAG (use_sakot_terminated_cluster) |
 		   FLAG (use_standard_cluster) |
+		   FLAG (use_symbol_cluster) |
 		   FLAG (use_broken_cluster) |
 		   0))))
     return;

+ 5 - 2
thirdparty/harfbuzz/src/hb-ot-tag-table.hh

@@ -7,7 +7,7 @@
  * on files with these headers:
  *
  * <meta name="updated_at" content="2022-01-28 10:00 PM" />
- * File-Date: 2021-12-29
+ * File-Date: 2022-03-02
  */
 
 #ifndef HB_OT_TAG_TABLE_HH
@@ -54,6 +54,7 @@ static const LangTag ot_languages[] = {
 /*{"aio",	HB_TAG('A','I','O',' ')},*/	/* Aiton */
   {"aiw",	HB_TAG('A','R','I',' ')},	/* Aari */
   {"ajp",	HB_TAG('A','R','A',' ')},	/* South Levantine Arabic -> Arabic */
+  {"ajt",	HB_TAG('A','R','A',' ')},	/* Judeo-Tunisian Arabic (retired code) -> Arabic */
   {"ak",	HB_TAG('A','K','A',' ')},	/* Akan [macrolanguage] */
   {"akb",	HB_TAG('A','K','B',' ')},	/* Batak Angkola */
   {"akb",	HB_TAG('B','T','K',' ')},	/* Batak Angkola -> Batak */
@@ -809,7 +810,7 @@ static const LangTag ot_languages[] = {
   {"lac",	HB_TAG('M','Y','N',' ')},	/* Lacandon -> Mayan */
   {"lad",	HB_TAG('J','U','D',' ')},	/* Ladino */
   {"lah",	HB_TAG_NONE	       },	/* Lahnda [macrolanguage] != Lahuli */
-  {"lak",	HB_TAG_NONE	       },	/* Laka (Nigeria) != Lak */
+  {"lak",	HB_TAG_NONE	       },	/* Laka (Nigeria) (retired code) != Lak */
   {"lam",	HB_TAG_NONE	       },	/* Lamba != Lambani */
   {"laz",	HB_TAG_NONE	       },	/* Aribwatsa != Laz */
   {"lb",	HB_TAG('L','T','Z',' ')},	/* Luxembourgish */
@@ -1339,12 +1340,14 @@ static const LangTag ot_languages[] = {
   {"sla",	HB_TAG_NONE	       },	/* Slavic [collection] != Slavey */
   {"sm",	HB_TAG('S','M','O',' ')},	/* Samoan */
   {"sma",	HB_TAG('S','S','M',' ')},	/* Southern Sami */
+  {"smd",	HB_TAG('M','B','N',' ')},	/* Sama (retired code) -> Mbundu */
   {"smj",	HB_TAG('L','S','M',' ')},	/* Lule Sami */
   {"sml",	HB_TAG_NONE	       },	/* Central Sama != Somali */
   {"smn",	HB_TAG('I','S','M',' ')},	/* Inari Sami */
   {"sms",	HB_TAG('S','K','S',' ')},	/* Skolt Sami */
   {"smt",	HB_TAG('Q','I','N',' ')},	/* Simte -> Chin */
   {"sn",	HB_TAG('S','N','A','0')},	/* Shona */
+  {"snb",	HB_TAG('I','B','A',' ')},	/* Sebuyau (retired code) -> Iban */
   {"snh",	HB_TAG_NONE	       },	/* Shinabo (retired code) != Sinhala (Sinhalese) */
 /*{"snk",	HB_TAG('S','N','K',' ')},*/	/* Soninke */
   {"so",	HB_TAG('S','M','L',' ')},	/* Somali */

+ 11 - 8
thirdparty/harfbuzz/src/hb-repacker.hh

@@ -37,7 +37,6 @@
  * For a detailed writeup on the overflow resolution algorithm see:
  * docs/repacker.md
  */
-
 struct graph_t
 {
   struct vertex_t
@@ -140,7 +139,8 @@ struct graph_t
    * the 'packed' object stack used internally in the
    * serializer
    */
-  graph_t (const hb_vector_t<hb_serialize_context_t::object_t *>& objects)
+  template<typename T>
+  graph_t (const T& objects)
       : parents_invalid (true),
         distance_invalid (true),
         positions_invalid (true),
@@ -1098,8 +1098,9 @@ struct graph_t
   hb_vector_t<unsigned> num_roots_for_space_;
 };
 
-static bool _try_isolating_subgraphs (const hb_vector_t<graph_t::overflow_record_t>& overflows,
-                                      graph_t& sorted_graph)
+static inline
+bool _try_isolating_subgraphs (const hb_vector_t<graph_t::overflow_record_t>& overflows,
+                               graph_t& sorted_graph)
 {
   unsigned space = 0;
   hb_set_t roots_to_isolate;
@@ -1147,9 +1148,10 @@ static bool _try_isolating_subgraphs (const hb_vector_t<graph_t::overflow_record
   return true;
 }
 
-static bool _process_overflows (const hb_vector_t<graph_t::overflow_record_t>& overflows,
-                                hb_set_t& priority_bumped_parents,
-                                graph_t& sorted_graph)
+static inline
+bool _process_overflows (const hb_vector_t<graph_t::overflow_record_t>& overflows,
+                         hb_set_t& priority_bumped_parents,
+                         graph_t& sorted_graph)
 {
   bool resolution_attempted = false;
 
@@ -1207,8 +1209,9 @@ static bool _process_overflows (const hb_vector_t<graph_t::overflow_record_t>& o
  * For a detailed writeup describing how the algorithm operates see:
  * docs/repacker.md
  */
+template<typename T>
 inline hb_blob_t*
-hb_resolve_overflows (const hb_vector_t<hb_serialize_context_t::object_t *>& packed,
+hb_resolve_overflows (const T& packed,
                       hb_tag_t table_tag,
                       unsigned max_rounds = 20) {
   // Kahn sort is ~twice as fast as shortest distance sort and works for many fonts

+ 35 - 0
thirdparty/harfbuzz/src/hb-serialize.hh

@@ -36,6 +36,9 @@
 #include "hb-map.hh"
 #include "hb-pool.hh"
 
+#ifdef HB_EXPERIMENTAL_API
+#include "hb-subset-repacker.h"
+#endif
 
 /*
  * Serialize
@@ -70,6 +73,24 @@ struct hb_serialize_context_t
       virtual_links.fini ();
     }
 
+    object_t () = default;
+    
+#ifdef HB_EXPERIMENTAL_API
+    object_t (const hb_object_t &o)
+    {
+      head = o.head;
+      tail = o.tail;
+      next = nullptr;
+      real_links.alloc (o.num_real_links);
+      for (unsigned i = 0 ; i < o.num_real_links; i++)
+        real_links.push (o.real_links[i]);
+
+      virtual_links.alloc (o.num_virtual_links);
+      for (unsigned i = 0; i < o.num_virtual_links; i++)
+        virtual_links.push (o.virtual_links[i]);
+    }
+#endif
+
     bool operator == (const object_t &o) const
     {
       // Virtual links aren't considered for equality since they don't affect the functionality
@@ -95,6 +116,20 @@ struct hb_serialize_context_t
       unsigned position: 28;
       unsigned bias;
       objidx_t objidx;
+
+      link_t () = default;
+
+#ifdef HB_EXPERIMENTAL_API
+      link_t (const hb_link_t &o)
+      {
+        width = o.width;
+        is_signed = 0;
+        whence = 0;
+        position = o.position;
+        bias = 0;
+        objidx = o.objidx;
+      }
+#endif
     };
 
     char *head;

+ 49 - 0
thirdparty/harfbuzz/src/hb-subset-repacker.cc

@@ -0,0 +1,49 @@
+/*
+ * Copyright © 2022  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ */
+#include "hb-repacker.hh"
+
+#ifdef HB_EXPERIMENTAL_API
+/**
+ * hb_subset_repack_or_fail:
+ * @hb_objects: raw array of struct hb_object_t, which provides
+ * object graph info
+ * @num_hb_objs: number of hb_object_t in the hb_objects array.
+ *
+ * Given the input object graph info, repack a table to eliminate
+ * offset overflows. A nullptr is returned if the repacking attempt fails.
+ *
+ * Since: EXPERIMENTAL
+ **/
+hb_blob_t* hb_subset_repack_or_fail (hb_object_t* hb_objects, unsigned num_hb_objs)
+{
+  hb_vector_t<const hb_object_t *> packed;
+  packed.alloc (num_hb_objs + 1);
+  packed.push (nullptr);
+  for (unsigned i = 0 ; i < num_hb_objs ; i++)
+    packed.push (&(hb_objects[i]));
+  return hb_resolve_overflows (packed, HB_OT_TAG_GSUB);
+}
+#endif
+

+ 80 - 0
thirdparty/harfbuzz/src/hb-subset-repacker.h

@@ -0,0 +1,80 @@
+/*
+ * Copyright © 2022  Google, Inc.
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ */
+
+#ifndef HB_SUBSET_REPACKER_H
+#define HB_SUBSET_REPACKER_H
+
+#include "hb.h"
+
+HB_BEGIN_DECLS
+
+#ifdef HB_EXPERIMENTAL_API
+/**
+ * struct hb_link_t
+ * width:    offsetSize in bytes
+ * position: position of the offset field in bytes
+ * from beginning of subtable
+ * objidx:   index of subtable
+ **/
+struct hb_link_t
+{
+  unsigned width;
+  unsigned position;
+  unsigned objidx;
+};
+
+typedef struct hb_link_t hb_link_t;
+
+/**
+ * struct hb_object_t
+ * head:    start of object data
+ * tail:    end of object data
+ * num_real_links:    num of offset field in the object
+ * real_links:        pointer to array of offset info
+ * num_virtual_links: num of objects that must be packed
+ * after current object in the final serialized order
+ * virtual_links:     array of virtual link info
+ **/
+struct hb_object_t
+{
+  char *head;
+  char *tail;
+  unsigned num_real_links;
+  hb_link_t *real_links;
+  unsigned num_virtual_links;
+  hb_link_t *virtual_links;
+};
+
+typedef struct hb_object_t hb_object_t;
+
+HB_EXTERN hb_blob_t*
+hb_subset_repack_or_fail (hb_object_t* hb_objects,
+                          unsigned num_hb_objs);
+
+#endif
+
+HB_END_DECLS
+
+#endif /* HB_SUBSET_REPACKER_H */

+ 2 - 2
thirdparty/harfbuzz/src/hb-version.h

@@ -53,14 +53,14 @@ HB_BEGIN_DECLS
  *
  * The micro component of the library version available at compile-time.
  */
-#define HB_VERSION_MICRO 0
+#define HB_VERSION_MICRO 1
 
 /**
  * HB_VERSION_STRING:
  *
  * A string literal containing the library version available at compile-time.
  */
-#define HB_VERSION_STRING "4.0.0"
+#define HB_VERSION_STRING "4.0.1"
 
 /**
  * HB_VERSION_ATLEAST:

Vissa filer visades inte eftersom för många filer har ändrats