summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2014-01-30 05:04:28 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-30 12:43:33 +0100
commite707607ab0c9935ea744e43bc2b2948b5502360b (patch)
tree19fd241d063a881271c6bbd20f463d2679f77668
parenta5614264d5a5d6d1cc0f2773f4d7cd70195a0546 (diff)
Update HB to 7691a154e50f8c8c77bbd94787686262955bf5d4
Change-Id: I7dae9d74f338d3beeb1677a1676a07b66c05bb93 Reviewed-by: Lars Knoll <lars.knoll@digia.com>
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-ot-shape.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/src/config.h4
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-buffer-serialize.cc2
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-common.h8
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-fallback-shape.cc138
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-font-private.hh6
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-open-type-private.hh2
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gpos-table.hh28
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout.h5
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc3
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-default.cc184
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hangul.cc417
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hebrew.cc172
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-machine.hh2083
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic.cc8
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar-machine.hh369
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar.cc9
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-private.hh38
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-sea.cc9
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-thai.cc4
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-tibetan.cc61
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-fallback.cc6
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize-private.hh1
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize.cc36
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-private.hh15
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape.cc58
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape.h54
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot.h9
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-private.hh6
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shaper-list.hh2
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-unicode-private.hh21
-rw-r--r--src/3rdparty/harfbuzz.pri5
32 files changed, 2307 insertions, 1457 deletions
diff --git a/src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-ot-shape.h b/src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-ot-shape.h
new file mode 100644
index 0000000000..ac21ff2f8c
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-ot-shape.h
@@ -0,0 +1 @@
+#include "../../src/hb-ot-shape.h"
diff --git a/src/3rdparty/harfbuzz-ng/src/config.h b/src/3rdparty/harfbuzz-ng/src/config.h
index fe9a450533..db706987fe 100644
--- a/src/3rdparty/harfbuzz-ng/src/config.h
+++ b/src/3rdparty/harfbuzz-ng/src/config.h
@@ -14,6 +14,10 @@
# define HB_INTERNAL Q_DECL_HIDDEN
#endif
+#if !defined(QT_NO_DEBUG)
+# define NDEBUG
+#endif
+
// because strdup() is not part of strict Posix, declare it here
extern "C" char *strdup(const char *src);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-buffer-serialize.cc b/src/3rdparty/harfbuzz-ng/src/hb-buffer-serialize.cc
index 4541db23bd..263bc81dc4 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-buffer-serialize.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-buffer-serialize.cc
@@ -204,7 +204,7 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
*p++ = '+';
p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "%d", pos[i].x_advance));
- if (pos->y_advance)
+ if (pos[i].y_advance)
p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance));
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-common.h b/src/3rdparty/harfbuzz-ng/src/hb-common.h
index e445504550..c8bfd8825a 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-common.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-common.h
@@ -94,6 +94,7 @@ typedef uint32_t hb_tag_t;
#define HB_UNTAG(tag) ((uint8_t)((tag)>>24)), ((uint8_t)((tag)>>16)), ((uint8_t)((tag)>>8)), ((uint8_t)(tag))
#define HB_TAG_NONE HB_TAG(0,0,0,0)
+#define HB_TAG_MAX HB_TAG(0xff,0xff,0xff,0xff)
/* len=-1 means str is NUL-terminated. */
hb_tag_t
@@ -270,7 +271,12 @@ typedef enum
/*6.1*/ HB_SCRIPT_TAKRI = HB_TAG ('T','a','k','r'),
/* No script set. */
- /*---*/ HB_SCRIPT_INVALID = HB_TAG_NONE
+ /*---*/ HB_SCRIPT_INVALID = HB_TAG_NONE,
+
+ /* Dummy value to ensure any hb_tag_t value can be passed/stored as hb_script_t
+ * without risking undefined behavior. */
+ /*---*/ _HB_SCRIPT_MAX_VALUE = HB_TAG_MAX
+
} hb_script_t;
/* These are moved out of hb_script_t because glib-mkenums chokes otherwise. */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-fallback-shape.cc b/src/3rdparty/harfbuzz-ng/src/hb-fallback-shape.cc
deleted file mode 100644
index b894a4a47d..0000000000
--- a/src/3rdparty/harfbuzz-ng/src/hb-fallback-shape.cc
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright © 2011 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.
- *
- * Google Author(s): Behdad Esfahbod
- */
-
-#define HB_SHAPER fallback
-#include "hb-shaper-impl-private.hh"
-
-
-/*
- * shaper face data
- */
-
-struct hb_fallback_shaper_face_data_t {};
-
-hb_fallback_shaper_face_data_t *
-_hb_fallback_shaper_face_data_create (hb_face_t *face HB_UNUSED)
-{
- return (hb_fallback_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED;
-}
-
-void
-_hb_fallback_shaper_face_data_destroy (hb_fallback_shaper_face_data_t *data HB_UNUSED)
-{
-}
-
-
-/*
- * shaper font data
- */
-
-struct hb_fallback_shaper_font_data_t {};
-
-hb_fallback_shaper_font_data_t *
-_hb_fallback_shaper_font_data_create (hb_font_t *font HB_UNUSED)
-{
- return (hb_fallback_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED;
-}
-
-void
-_hb_fallback_shaper_font_data_destroy (hb_fallback_shaper_font_data_t *data HB_UNUSED)
-{
-}
-
-
-/*
- * shaper shape_plan data
- */
-
-struct hb_fallback_shaper_shape_plan_data_t {};
-
-hb_fallback_shaper_shape_plan_data_t *
-_hb_fallback_shaper_shape_plan_data_create (hb_shape_plan_t *shape_plan HB_UNUSED,
- const hb_feature_t *user_features HB_UNUSED,
- unsigned int num_user_features HB_UNUSED)
-{
- return (hb_fallback_shaper_shape_plan_data_t *) HB_SHAPER_DATA_SUCCEEDED;
-}
-
-void
-_hb_fallback_shaper_shape_plan_data_destroy (hb_fallback_shaper_shape_plan_data_t *data HB_UNUSED)
-{
-}
-
-
-/*
- * shaper
- */
-
-hb_bool_t
-_hb_fallback_shape (hb_shape_plan_t *shape_plan HB_UNUSED,
- hb_font_t *font,
- hb_buffer_t *buffer,
- const hb_feature_t *features HB_UNUSED,
- unsigned int num_features HB_UNUSED)
-{
- /* TODO
- *
- * - Apply fallback kern.
- * - Handle Variation Selectors?
- * - Apply normalization?
- *
- * This will make the fallback shaper into a dumb "TrueType"
- * shaper which many people unfortunately still request.
- */
-
- hb_codepoint_t space;
- font->get_glyph (' ', 0, &space);
-
- buffer->clear_positions ();
-
- unsigned int count = buffer->len;
-
- for (unsigned int i = 0; i < count; i++)
- {
- if (buffer->unicode->is_default_ignorable (buffer->info[i].codepoint)) {
- buffer->info[i].codepoint = space;
- buffer->pos[i].x_advance = 0;
- buffer->pos[i].y_advance = 0;
- continue;
- }
- font->get_glyph (buffer->info[i].codepoint, 0, &buffer->info[i].codepoint);
- font->get_glyph_advance_for_direction (buffer->info[i].codepoint,
- buffer->props.direction,
- &buffer->pos[i].x_advance,
- &buffer->pos[i].y_advance);
- font->subtract_glyph_origin_for_direction (buffer->info[i].codepoint,
- buffer->props.direction,
- &buffer->pos[i].x_offset,
- &buffer->pos[i].y_offset);
- }
-
- if (HB_DIRECTION_IS_BACKWARD (buffer->props.direction))
- hb_buffer_reverse (buffer);
-
- return true;
-}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-font-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-font-private.hh
index 431d0477c2..33bbf7143a 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-font-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-font-private.hh
@@ -144,6 +144,12 @@ struct hb_font_t {
/* Public getters */
+ inline hb_bool_t has_glyph (hb_codepoint_t unicode)
+ {
+ hb_codepoint_t glyph;
+ return get_glyph (unicode, 0, &glyph);
+ }
+
inline hb_bool_t get_glyph (hb_codepoint_t unicode, hb_codepoint_t variation_selector,
hb_codepoint_t *glyph)
{
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-open-type-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-open-type-private.hh
index 437ecd57f8..558103a8ec 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-open-type-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-open-type-private.hh
@@ -592,7 +592,7 @@ struct LONGDATETIME
TRACE_SANITIZE (this);
return TRACE_RETURN (likely (c->check_struct (this)));
}
- private:
+ protected:
LONG major;
ULONG minor;
public:
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gpos-table.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gpos-table.hh
index 5e4326ef0c..7c0a4ea666 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gpos-table.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gpos-table.hh
@@ -109,11 +109,13 @@ struct ValueFormat : USHORT
if (format & xPlacement) glyph_pos.x_offset += font->em_scale_x (get_short (values++));
if (format & yPlacement) glyph_pos.y_offset += font->em_scale_y (get_short (values++));
if (format & xAdvance) {
- if (likely (horizontal)) glyph_pos.x_advance += font->em_scale_x (get_short (values++)); else values++;
+ if (likely (horizontal)) glyph_pos.x_advance += font->em_scale_x (get_short (values));
+ values++;
}
/* y_advance values grow downward but font-space grows upward, hence negation */
if (format & yAdvance) {
- if (unlikely (!horizontal)) glyph_pos.y_advance -= font->em_scale_y (get_short (values++)); else values++;
+ if (unlikely (!horizontal)) glyph_pos.y_advance -= font->em_scale_y (get_short (values));
+ values++;
}
if (!has_device ()) return;
@@ -125,17 +127,21 @@ struct ValueFormat : USHORT
/* pixel -> fractional pixel */
if (format & xPlaDevice) {
- if (x_ppem) glyph_pos.x_offset += (base + get_device (values++)).get_x_delta (font); else values++;
+ if (x_ppem) glyph_pos.x_offset += (base + get_device (values)).get_x_delta (font);
+ values++;
}
if (format & yPlaDevice) {
- if (y_ppem) glyph_pos.y_offset += (base + get_device (values++)).get_y_delta (font); else values++;
+ if (y_ppem) glyph_pos.y_offset += (base + get_device (values)).get_y_delta (font);
+ values++;
}
if (format & xAdvDevice) {
- if (horizontal && x_ppem) glyph_pos.x_advance += (base + get_device (values++)).get_x_delta (font); else values++;
+ if (horizontal && x_ppem) glyph_pos.x_advance += (base + get_device (values)).get_x_delta (font);
+ values++;
}
if (format & yAdvDevice) {
/* y_advance values grow downward but font-space grows upward, hence negation */
- if (!horizontal && y_ppem) glyph_pos.y_advance -= (base + get_device (values++)).get_y_delta (font); else values++;
+ if (!horizontal && y_ppem) glyph_pos.y_advance -= (base + get_device (values)).get_y_delta (font);
+ values++;
}
}
@@ -240,12 +246,12 @@ struct AnchorFormat2
unsigned int x_ppem = font->x_ppem;
unsigned int y_ppem = font->y_ppem;
hb_position_t cx, cy;
- hb_bool_t ret = false;
+ hb_bool_t ret;
- if (x_ppem || y_ppem)
- ret = font->get_glyph_contour_point_for_origin (glyph_id, anchorPoint, HB_DIRECTION_LTR, &cx, &cy);
- *x = x_ppem && ret ? cx : font->em_scale_x (xCoordinate);
- *y = y_ppem && ret ? cy : font->em_scale_y (yCoordinate);
+ ret = (x_ppem || y_ppem) &&
+ font->get_glyph_contour_point_for_origin (glyph_id, anchorPoint, HB_DIRECTION_LTR, &cx, &cy);
+ *x = ret && x_ppem ? cx : font->em_scale_x (xCoordinate);
+ *y = ret && y_ppem ? cy : font->em_scale_y (yCoordinate);
}
inline bool sanitize (hb_sanitize_context_t *c) {
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout.h b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout.h
index dfc7f2446f..d90eff374d 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-layout.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-layout.h
@@ -194,11 +194,6 @@ hb_ot_layout_collect_lookups (hb_face_t *face,
hb_set_t *lookup_indexes /* OUT */);
void
-hb_ot_shape_plan_collect_lookups (hb_shape_plan_t *shape_plan,
- hb_tag_t table_tag,
- hb_set_t *lookup_indexes /* OUT */);
-
-void
hb_ot_layout_lookup_collect_glyphs (hb_face_t *face,
hb_tag_t table_tag,
unsigned int lookup_index,
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc
index 4f6c86e8ee..ea6d85c1e6 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc
@@ -199,7 +199,6 @@ collect_features_arabic (hb_ot_shape_planner_t *plan)
map->add_global_bool_feature (HB_TAG('c','a','l','t'));
map->add_gsub_pause (NULL);
- map->add_global_bool_feature (HB_TAG('c','s','w','h'));
map->add_global_bool_feature (HB_TAG('m','s','e','t'));
}
@@ -366,7 +365,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic =
data_create_arabic,
data_destroy_arabic,
NULL, /* preprocess_text_arabic */
- NULL, /* normalization_preference */
+ HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
NULL, /* decompose */
NULL, /* compose */
setup_masks_arabic,
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-default.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-default.cc
index d6afa0e1c1..f7f097eeda 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-default.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-default.cc
@@ -27,194 +27,18 @@
#include "hb-ot-shape-complex-private.hh"
-/* TODO Add kana, and other small shapers here */
-
-
-/* The default shaper *only* adds additional per-script features.*/
-
-static const hb_tag_t hangul_features[] =
-{
- HB_TAG('l','j','m','o'),
- HB_TAG('v','j','m','o'),
- HB_TAG('t','j','m','o'),
- HB_TAG_NONE
-};
-
-static const hb_tag_t tibetan_features[] =
-{
- HB_TAG('a','b','v','s'),
- HB_TAG('b','l','w','s'),
- HB_TAG('a','b','v','m'),
- HB_TAG('b','l','w','m'),
- HB_TAG_NONE
-};
-
-static void
-collect_features_default (hb_ot_shape_planner_t *plan)
-{
- const hb_tag_t *script_features = NULL;
-
- switch ((hb_tag_t) plan->props.script)
- {
- /* Unicode-1.1 additions */
- case HB_SCRIPT_HANGUL:
- script_features = hangul_features;
- break;
-
- /* Unicode-2.0 additions */
- case HB_SCRIPT_TIBETAN:
- script_features = tibetan_features;
- break;
- }
-
- for (; script_features && *script_features; script_features++)
- plan->map.add_global_bool_feature (*script_features);
-}
-
-static hb_ot_shape_normalization_mode_t
-normalization_preference_default (const hb_segment_properties_t *props)
-{
- return HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS;
-}
-
-static bool
-compose_default (const hb_ot_shape_normalize_context_t *c,
- hb_codepoint_t a,
- hb_codepoint_t b,
- hb_codepoint_t *ab)
-{
- /* Hebrew presentation-form shaping.
- * https://bugzilla.mozilla.org/show_bug.cgi?id=728866
- * Hebrew presentation forms with dagesh, for characters 0x05D0..0x05EA;
- * Note that some letters do not have a dagesh presForm encoded.
- */
- static const hb_codepoint_t sDageshForms[0x05EA - 0x05D0 + 1] = {
- 0xFB30, /* ALEF */
- 0xFB31, /* BET */
- 0xFB32, /* GIMEL */
- 0xFB33, /* DALET */
- 0xFB34, /* HE */
- 0xFB35, /* VAV */
- 0xFB36, /* ZAYIN */
- 0x0000, /* HET */
- 0xFB38, /* TET */
- 0xFB39, /* YOD */
- 0xFB3A, /* FINAL KAF */
- 0xFB3B, /* KAF */
- 0xFB3C, /* LAMED */
- 0x0000, /* FINAL MEM */
- 0xFB3E, /* MEM */
- 0x0000, /* FINAL NUN */
- 0xFB40, /* NUN */
- 0xFB41, /* SAMEKH */
- 0x0000, /* AYIN */
- 0xFB43, /* FINAL PE */
- 0xFB44, /* PE */
- 0x0000, /* FINAL TSADI */
- 0xFB46, /* TSADI */
- 0xFB47, /* QOF */
- 0xFB48, /* RESH */
- 0xFB49, /* SHIN */
- 0xFB4A /* TAV */
- };
-
- bool found = c->unicode->compose (a, b, ab);
-
- if (!found && (b & ~0x7F) == 0x0580) {
- /* Special-case Hebrew presentation forms that are excluded from
- * standard normalization, but wanted for old fonts. */
- switch (b) {
- case 0x05B4: /* HIRIQ */
- if (a == 0x05D9) { /* YOD */
- *ab = 0xFB1D;
- found = true;
- }
- break;
- case 0x05B7: /* patah */
- if (a == 0x05F2) { /* YIDDISH YOD YOD */
- *ab = 0xFB1F;
- found = true;
- } else if (a == 0x05D0) { /* ALEF */
- *ab = 0xFB2E;
- found = true;
- }
- break;
- case 0x05B8: /* QAMATS */
- if (a == 0x05D0) { /* ALEF */
- *ab = 0xFB2F;
- found = true;
- }
- break;
- case 0x05B9: /* HOLAM */
- if (a == 0x05D5) { /* VAV */
- *ab = 0xFB4B;
- found = true;
- }
- break;
- case 0x05BC: /* DAGESH */
- if (a >= 0x05D0 && a <= 0x05EA) {
- *ab = sDageshForms[a - 0x05D0];
- found = (*ab != 0);
- } else if (a == 0xFB2A) { /* SHIN WITH SHIN DOT */
- *ab = 0xFB2C;
- found = true;
- } else if (a == 0xFB2B) { /* SHIN WITH SIN DOT */
- *ab = 0xFB2D;
- found = true;
- }
- break;
- case 0x05BF: /* RAFE */
- switch (a) {
- case 0x05D1: /* BET */
- *ab = 0xFB4C;
- found = true;
- break;
- case 0x05DB: /* KAF */
- *ab = 0xFB4D;
- found = true;
- break;
- case 0x05E4: /* PE */
- *ab = 0xFB4E;
- found = true;
- break;
- }
- break;
- case 0x05C1: /* SHIN DOT */
- if (a == 0x05E9) { /* SHIN */
- *ab = 0xFB2A;
- found = true;
- } else if (a == 0xFB49) { /* SHIN WITH DAGESH */
- *ab = 0xFB2C;
- found = true;
- }
- break;
- case 0x05C2: /* SIN DOT */
- if (a == 0x05E9) { /* SHIN */
- *ab = 0xFB2B;
- found = true;
- } else if (a == 0xFB49) { /* SHIN WITH DAGESH */
- *ab = 0xFB2D;
- found = true;
- }
- break;
- }
- }
-
- return found;
-}
-
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_default =
{
"default",
- collect_features_default,
+ NULL, /* collect_features */
NULL, /* override_features */
NULL, /* data_create */
NULL, /* data_destroy */
NULL, /* preprocess_text */
- normalization_preference_default,
+ HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
NULL, /* decompose */
- compose_default,
+ NULL, /* compose */
NULL, /* setup_masks */
- HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE,
+ HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT,
true, /* fallback_position */
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hangul.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hangul.cc
new file mode 100644
index 0000000000..47aa44fedb
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hangul.cc
@@ -0,0 +1,417 @@
+/*
+ * Copyright © 2013 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.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ot-shape-complex-private.hh"
+
+
+/* Hangul shaper */
+
+
+/* Same order as the feature array below */
+enum {
+ NONE,
+
+ LJMO,
+ VJMO,
+ TJMO,
+
+ FIRST_HANGUL_FEATURE = LJMO,
+ HANGUL_FEATURE_COUNT = TJMO + 1
+};
+
+static const hb_tag_t hangul_features[HANGUL_FEATURE_COUNT] =
+{
+ HB_TAG_NONE,
+ HB_TAG('l','j','m','o'),
+ HB_TAG('v','j','m','o'),
+ HB_TAG('t','j','m','o')
+};
+
+static void
+collect_features_hangul (hb_ot_shape_planner_t *plan)
+{
+ hb_ot_map_builder_t *map = &plan->map;
+
+ for (unsigned int i = FIRST_HANGUL_FEATURE; i < HANGUL_FEATURE_COUNT; i++)
+ map->add_feature (hangul_features[i], 1, F_NONE);
+}
+
+struct hangul_shape_plan_t
+{
+ ASSERT_POD ();
+
+ hb_mask_t mask_array[HANGUL_FEATURE_COUNT];
+};
+
+static void *
+data_create_hangul (const hb_ot_shape_plan_t *plan)
+{
+ hangul_shape_plan_t *hangul_plan = (hangul_shape_plan_t *) calloc (1, sizeof (hangul_shape_plan_t));
+ if (unlikely (!hangul_plan))
+ return NULL;
+
+ for (unsigned int i = 0; i < HANGUL_FEATURE_COUNT; i++)
+ hangul_plan->mask_array[i] = plan->map.get_1_mask (hangul_features[i]);
+
+ return hangul_plan;
+}
+
+static void
+data_destroy_hangul (void *data)
+{
+ free (data);
+}
+
+/* Constants for algorithmic hangul syllable [de]composition. */
+#define LBase 0x1100
+#define VBase 0x1161
+#define TBase 0x11A7
+#define LCount 19
+#define VCount 21
+#define TCount 28
+#define SBase 0xAC00
+#define NCount (VCount * TCount)
+#define SCount (LCount * NCount)
+
+#define isCombiningL(u) (hb_in_range<hb_codepoint_t> ((u), LBase, LBase+LCount-1))
+#define isCombiningV(u) (hb_in_range<hb_codepoint_t> ((u), VBase, VBase+VCount-1))
+#define isCombiningT(u) (hb_in_range<hb_codepoint_t> ((u), TBase+1, TBase+TCount-1))
+#define isCombinedS(u) (hb_in_range<hb_codepoint_t> ((u), SBase, SBase+SCount-1))
+
+#define isL(u) (hb_in_ranges<hb_codepoint_t> ((u), 0x1100, 0x115F, 0xA960, 0xA97C))
+#define isV(u) (hb_in_ranges<hb_codepoint_t> ((u), 0x1160, 0x11A7, 0xD7B0, 0xD7C6))
+#define isT(u) (hb_in_ranges<hb_codepoint_t> ((u), 0x11A8, 0x11FF, 0xD7CB, 0xD7FB))
+
+#define isHangulTone(u) (hb_in_range<hb_codepoint_t> ((u), 0x302e, 0x302f))
+
+/* buffer var allocations */
+#define hangul_shaping_feature() complex_var_u8_0() /* hangul jamo shaping feature */
+
+static bool
+is_zero_width_char (hb_font_t *font,
+ hb_codepoint_t unicode)
+{
+ hb_codepoint_t glyph;
+ return hb_font_get_glyph (font, unicode, 0, &glyph) && hb_font_get_glyph_h_advance (font, glyph) == 0;
+}
+
+static void
+preprocess_text_hangul (const hb_ot_shape_plan_t *plan,
+ hb_buffer_t *buffer,
+ hb_font_t *font)
+{
+ HB_BUFFER_ALLOCATE_VAR (buffer, hangul_shaping_feature);
+
+ /* Hangul syllables come in two shapes: LV, and LVT. Of those:
+ *
+ * - LV can be precomposed, or decomposed. Lets call those
+ * <LV> and <L,V>,
+ * - LVT can be fully precomposed, partically precomposed, or
+ * fully decomposed. Ie. <LVT>, <LV,T>, or <L,V,T>.
+ *
+ * The composition / decomposition is mechanical. However, not
+ * all <L,V> sequences compose, and not all <LV,T> sequences
+ * compose.
+ *
+ * Here are the specifics:
+ *
+ * - <L>: U+1100..115F, U+A960..A97F
+ * - <V>: U+1160..11A7, U+D7B0..D7C7
+ * - <T>: U+11A8..11FF, U+D7CB..D7FB
+ *
+ * - Only the <L,V> sequences for the 11xx ranges combine.
+ * - Only <LV,T> sequences for T in U+11A8..11C3 combine.
+ *
+ * Here is what we want to accomplish in this shaper:
+ *
+ * - If the whole syllable can be precomposed, do that,
+ * - Otherwise, fully decompose and apply ljmo/vjmo/tjmo features.
+ * - If a valid syllable is followed by a Hangul tone mark, reorder the tone
+ * mark to precede the whole syllable - unless it is a zero-width glyph, in
+ * which case we leave it untouched, assuming it's designed to overstrike.
+ *
+ * That is, of the different possible syllables:
+ *
+ * <L>
+ * <L,V>
+ * <L,V,T>
+ * <LV>
+ * <LVT>
+ * <LV, T>
+ *
+ * - <L> needs no work.
+ *
+ * - <LV> and <LVT> can stay the way they are if the font supports them, otherwise we
+ * should fully decompose them if font supports.
+ *
+ * - <L,V> and <L,V,T> we should compose if the whole thing can be composed.
+ *
+ * - <LV,T> we should compose if the whole thing can be composed, otherwise we should
+ * decompose.
+ */
+
+ buffer->clear_output ();
+ unsigned int start = 0, end = 0; /* Extent of most recently seen syllable;
+ * valid only if start < end
+ */
+ unsigned int count = buffer->len;
+
+ for (buffer->idx = 0; buffer->idx < count;)
+ {
+ hb_codepoint_t u = buffer->cur().codepoint;
+
+ if (isHangulTone (u))
+ {
+ /*
+ * We could cache the width of the tone marks and the existence of dotted-circle,
+ * but the use of the Hangul tone mark characters seems to be rare enough that
+ * I didn't bother for now.
+ */
+ if (start < end && end == buffer->out_len)
+ {
+ /* Tone mark follows a valid syllable; move it in front, unless it's zero width. */
+ buffer->next_glyph ();
+ if (!is_zero_width_char (font, u))
+ {
+ hb_glyph_info_t *info = buffer->out_info;
+ hb_glyph_info_t tone = info[end];
+ memmove (&info[start + 1], &info[start], (end - start) * sizeof (hb_glyph_info_t));
+ info[start] = tone;
+ }
+ /* Merge clusters across the (possibly reordered) syllable+tone.
+ * We want to merge even in the zero-width tone mark case here,
+ * so that clustering behavior isn't dependent on how the tone mark
+ * is handled by the font.
+ */
+ buffer->merge_out_clusters (start, end + 1);
+ }
+ else
+ {
+ /* No valid syllable as base for tone mark; try to insert dotted circle. */
+ if (font->has_glyph (0x25cc))
+ {
+ hb_codepoint_t chars[2];
+ if (!is_zero_width_char (font, u)) {
+ chars[0] = u;
+ chars[1] = 0x25cc;
+ } else {
+ chars[0] = 0x25cc;
+ chars[1] = u;
+ }
+ buffer->replace_glyphs (1, 2, chars);
+ }
+ else
+ {
+ /* No dotted circle available in the font; just leave tone mark untouched. */
+ buffer->next_glyph ();
+ }
+ }
+ start = end = buffer->out_len;
+ continue;
+ }
+
+ start = buffer->out_len; /* Remember current position as a potential syllable start;
+ * will only be used if we set end to a later position.
+ */
+
+ if (isL (u) && buffer->idx + 1 < count)
+ {
+ hb_codepoint_t l = u;
+ hb_codepoint_t v = buffer->cur(+1).codepoint;
+ if (isV (v))
+ {
+ /* Have <L,V> or <L,V,T>. */
+ hb_codepoint_t t = 0;
+ unsigned int tindex = 0;
+ if (buffer->idx + 2 < count)
+ {
+ t = buffer->cur(+2).codepoint;
+ if (isT (t))
+ tindex = t - TBase; /* Only used if isCombiningT (t); otherwise invalid. */
+ else
+ t = 0; /* The next character was not a trailing jamo. */
+ }
+
+ /* We've got a syllable <L,V,T?>; see if it can potentially be composed. */
+ if (isCombiningL (l) && isCombiningV (v) && (t == 0 || isCombiningT (t)))
+ {
+ /* Try to compose; if this succeeds, end is set to start+1. */
+ hb_codepoint_t s = SBase + (l - LBase) * NCount + (v - VBase) * TCount + tindex;
+ if (font->has_glyph (s))
+ {
+ buffer->replace_glyphs (t ? 3 : 2, 1, &s);
+ if (unlikely (buffer->in_error))
+ return;
+ end = start + 1;
+ continue;
+ }
+ }
+
+ /* We didn't compose, either because it's an Old Hangul syllable without a
+ * precomposed character in Unicode, or because the font didn't support the
+ * necessary precomposed glyph.
+ * Set jamo features on the individual glyphs, and advance past them.
+ */
+ buffer->cur().hangul_shaping_feature() = LJMO;
+ buffer->next_glyph ();
+ buffer->cur().hangul_shaping_feature() = VJMO;
+ buffer->next_glyph ();
+ if (t)
+ {
+ buffer->cur().hangul_shaping_feature() = TJMO;
+ buffer->next_glyph ();
+ end = start + 3;
+ }
+ else
+ end = start + 2;
+ buffer->merge_out_clusters (start, end);
+ continue;
+ }
+ }
+
+ else if (isCombinedS (u))
+ {
+ /* Have <LV>, <LVT>, or <LV,T> */
+ hb_codepoint_t s = u;
+ bool has_glyph = font->has_glyph (s);
+ unsigned int lindex = (s - SBase) / NCount;
+ unsigned int nindex = (s - SBase) % NCount;
+ unsigned int vindex = nindex / TCount;
+ unsigned int tindex = nindex % TCount;
+
+ if (!tindex &&
+ buffer->idx + 1 < count &&
+ isCombiningT (buffer->cur(+1).codepoint))
+ {
+ /* <LV,T>, try to combine. */
+ unsigned int new_tindex = buffer->cur(+1).codepoint - TBase;
+ hb_codepoint_t new_s = s + new_tindex;
+ if (font->has_glyph (new_s))
+ {
+ buffer->replace_glyphs (2, 1, &new_s);
+ if (unlikely (buffer->in_error))
+ return;
+ end = start + 1;
+ continue;
+ }
+ }
+
+ /* Otherwise, decompose if font doesn't support <LV> or <LVT>,
+ * or if having non-combining <LV,T>. Note that we already handled
+ * combining <LV,T> above. */
+ if (!has_glyph ||
+ (!tindex &&
+ buffer->idx + 1 < count &&
+ isT (buffer->cur(+1).codepoint)))
+ {
+ hb_codepoint_t decomposed[3] = {LBase + lindex,
+ VBase + vindex,
+ TBase + tindex};
+ if (font->has_glyph (decomposed[0]) &&
+ font->has_glyph (decomposed[1]) &&
+ (!tindex || font->has_glyph (decomposed[2])))
+ {
+ unsigned int s_len = tindex ? 3 : 2;
+ buffer->replace_glyphs (1, s_len, decomposed);
+ if (unlikely (buffer->in_error))
+ return;
+
+ /* We decomposed S: apply jamo features to the individual glyphs
+ * that are now in buffer->out_info.
+ */
+ hb_glyph_info_t *info = buffer->out_info;
+
+ /* If we decomposed an LV because of a non-combining T following,
+ * we want to include this T in the syllable.
+ */
+ if (has_glyph && !tindex)
+ {
+ buffer->next_glyph ();
+ s_len++;
+ }
+ end = start + s_len;
+
+ unsigned int i = start;
+ info[i++].hangul_shaping_feature() = LJMO;
+ info[i++].hangul_shaping_feature() = VJMO;
+ if (i < end)
+ info[i++].hangul_shaping_feature() = TJMO;
+ buffer->merge_out_clusters (start, end);
+ continue;
+ }
+ }
+
+ if (has_glyph)
+ {
+ /* We didn't decompose the S, so just advance past it. */
+ end = start + 1;
+ buffer->next_glyph ();
+ continue;
+ }
+ }
+
+ /* Didn't find a recognizable syllable, so we leave end <= start;
+ * this will prevent tone-mark reordering happening.
+ */
+ buffer->next_glyph ();
+ }
+ buffer->swap_buffers ();
+}
+
+static void
+setup_masks_hangul (const hb_ot_shape_plan_t *plan,
+ hb_buffer_t *buffer,
+ hb_font_t *font HB_UNUSED)
+{
+ const hangul_shape_plan_t *hangul_plan = (const hangul_shape_plan_t *) plan->data;
+
+ if (likely (hangul_plan))
+ {
+ unsigned int count = buffer->len;
+ hb_glyph_info_t *info = buffer->info;
+ for (unsigned int i = 0; i < count; i++, info++)
+ info->mask |= hangul_plan->mask_array[info->hangul_shaping_feature()];
+ }
+
+ HB_BUFFER_DEALLOCATE_VAR (buffer, hangul_shaping_feature);
+}
+
+
+const hb_ot_complex_shaper_t _hb_ot_complex_shaper_hangul =
+{
+ "hangul",
+ collect_features_hangul,
+ NULL, /* override_features */
+ data_create_hangul, /* data_create */
+ data_destroy_hangul, /* data_destroy */
+ preprocess_text_hangul,
+ HB_OT_SHAPE_NORMALIZATION_MODE_NONE,
+ NULL, /* decompose */
+ NULL, /* compose */
+ setup_masks_hangul, /* setup_masks */
+ HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
+ false, /* fallback_position */
+};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hebrew.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hebrew.cc
new file mode 100644
index 0000000000..efef8c14ad
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-hebrew.cc
@@ -0,0 +1,172 @@
+/*
+ * Copyright © 2010,2012 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.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ot-shape-complex-private.hh"
+
+
+static bool
+compose_hebrew (const hb_ot_shape_normalize_context_t *c,
+ hb_codepoint_t a,
+ hb_codepoint_t b,
+ hb_codepoint_t *ab)
+{
+ /* Hebrew presentation-form shaping.
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=728866
+ * Hebrew presentation forms with dagesh, for characters 0x05D0..0x05EA;
+ * Note that some letters do not have a dagesh presForm encoded.
+ */
+ static const hb_codepoint_t sDageshForms[0x05EA - 0x05D0 + 1] = {
+ 0xFB30, /* ALEF */
+ 0xFB31, /* BET */
+ 0xFB32, /* GIMEL */
+ 0xFB33, /* DALET */
+ 0xFB34, /* HE */
+ 0xFB35, /* VAV */
+ 0xFB36, /* ZAYIN */
+ 0x0000, /* HET */
+ 0xFB38, /* TET */
+ 0xFB39, /* YOD */
+ 0xFB3A, /* FINAL KAF */
+ 0xFB3B, /* KAF */
+ 0xFB3C, /* LAMED */
+ 0x0000, /* FINAL MEM */
+ 0xFB3E, /* MEM */
+ 0x0000, /* FINAL NUN */
+ 0xFB40, /* NUN */
+ 0xFB41, /* SAMEKH */
+ 0x0000, /* AYIN */
+ 0xFB43, /* FINAL PE */
+ 0xFB44, /* PE */
+ 0x0000, /* FINAL TSADI */
+ 0xFB46, /* TSADI */
+ 0xFB47, /* QOF */
+ 0xFB48, /* RESH */
+ 0xFB49, /* SHIN */
+ 0xFB4A /* TAV */
+ };
+
+ bool found = c->unicode->compose (a, b, ab);
+
+ if (!found)
+ {
+ /* Special-case Hebrew presentation forms that are excluded from
+ * standard normalization, but wanted for old fonts. */
+ switch (b) {
+ case 0x05B4: /* HIRIQ */
+ if (a == 0x05D9) { /* YOD */
+ *ab = 0xFB1D;
+ found = true;
+ }
+ break;
+ case 0x05B7: /* patah */
+ if (a == 0x05F2) { /* YIDDISH YOD YOD */
+ *ab = 0xFB1F;
+ found = true;
+ } else if (a == 0x05D0) { /* ALEF */
+ *ab = 0xFB2E;
+ found = true;
+ }
+ break;
+ case 0x05B8: /* QAMATS */
+ if (a == 0x05D0) { /* ALEF */
+ *ab = 0xFB2F;
+ found = true;
+ }
+ break;
+ case 0x05B9: /* HOLAM */
+ if (a == 0x05D5) { /* VAV */
+ *ab = 0xFB4B;
+ found = true;
+ }
+ break;
+ case 0x05BC: /* DAGESH */
+ if (a >= 0x05D0 && a <= 0x05EA) {
+ *ab = sDageshForms[a - 0x05D0];
+ found = (*ab != 0);
+ } else if (a == 0xFB2A) { /* SHIN WITH SHIN DOT */
+ *ab = 0xFB2C;
+ found = true;
+ } else if (a == 0xFB2B) { /* SHIN WITH SIN DOT */
+ *ab = 0xFB2D;
+ found = true;
+ }
+ break;
+ case 0x05BF: /* RAFE */
+ switch (a) {
+ case 0x05D1: /* BET */
+ *ab = 0xFB4C;
+ found = true;
+ break;
+ case 0x05DB: /* KAF */
+ *ab = 0xFB4D;
+ found = true;
+ break;
+ case 0x05E4: /* PE */
+ *ab = 0xFB4E;
+ found = true;
+ break;
+ }
+ break;
+ case 0x05C1: /* SHIN DOT */
+ if (a == 0x05E9) { /* SHIN */
+ *ab = 0xFB2A;
+ found = true;
+ } else if (a == 0xFB49) { /* SHIN WITH DAGESH */
+ *ab = 0xFB2C;
+ found = true;
+ }
+ break;
+ case 0x05C2: /* SIN DOT */
+ if (a == 0x05E9) { /* SHIN */
+ *ab = 0xFB2B;
+ found = true;
+ } else if (a == 0xFB49) { /* SHIN WITH DAGESH */
+ *ab = 0xFB2D;
+ found = true;
+ }
+ break;
+ }
+ }
+
+ return found;
+}
+
+
+const hb_ot_complex_shaper_t _hb_ot_complex_shaper_hebrew =
+{
+ "hebrew",
+ NULL, /* collect_features */
+ NULL, /* override_features */
+ NULL, /* data_create */
+ NULL, /* data_destroy */
+ NULL, /* preprocess_text */
+ HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
+ NULL, /* decompose */
+ compose_hebrew,
+ NULL, /* setup_masks */
+ HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT,
+ true, /* fallback_position */
+};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-machine.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-machine.hh
index 612f7b788a..71621034ee 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-machine.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-machine.hh
@@ -55,48 +55,52 @@ static const unsigned char _indic_syllable_machine_trans_keys[] = {
4u, 14u, 5u, 7u, 5u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 5u, 7u, 5u, 7u,
7u, 7u, 5u, 7u, 5u, 7u, 7u, 7u, 1u, 16u, 13u, 13u, 4u, 4u, 6u, 6u,
16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u, 6u, 6u, 16u, 16u, 4u, 7u,
- 6u, 6u, 16u, 16u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u,
- 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u,
- 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 5u, 14u, 8u, 14u,
- 5u, 9u, 9u, 9u, 9u, 9u, 3u, 17u, 3u, 9u, 8u, 9u, 3u, 9u, 3u, 13u,
- 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u,
- 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 6u, 14u, 3u, 14u, 4u, 14u, 1u, 16u,
- 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u,
- 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u,
- 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u,
- 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 3u, 14u, 3u, 14u,
- 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u,
- 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u,
- 4u, 14u, 5u, 14u, 8u, 14u, 5u, 9u, 9u, 9u, 9u, 9u, 3u, 17u, 3u, 9u,
- 8u, 9u, 3u, 9u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u,
- 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 6u, 14u,
- 3u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u,
- 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u,
- 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u,
- 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 4u, 14u, 1u, 16u, 3u, 14u,
- 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u,
- 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u,
- 3u, 14u, 4u, 14u, 5u, 14u, 8u, 14u, 5u, 9u, 9u, 9u, 9u, 9u, 3u, 17u,
- 3u, 9u, 8u, 9u, 3u, 9u, 3u, 13u, 3u, 14u, 3u, 14u, 4u, 14u, 5u, 14u,
- 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u,
- 6u, 14u, 3u, 14u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u,
- 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u,
- 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u,
- 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 4u, 14u,
- 3u, 14u, 4u, 14u, 3u, 14u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u,
- 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u,
- 4u, 14u, 1u, 16u, 3u, 17u, 3u, 14u, 4u, 14u, 5u, 14u, 8u, 14u, 5u, 9u,
- 9u, 9u, 9u, 9u, 3u, 17u, 3u, 9u, 8u, 9u, 3u, 9u, 3u, 13u, 3u, 14u,
- 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u,
- 5u, 14u, 3u, 14u, 4u, 14u, 6u, 14u, 3u, 14u, 1u, 16u, 3u, 14u, 3u, 14u,
- 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u,
- 1u, 16u, 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u,
- 1u, 16u, 1u, 16u, 1u, 16u, 3u, 14u, 3u, 14u, 1u, 16u, 1u, 16u, 1u, 16u,
- 1u, 16u, 1u, 16u, 3u, 14u, 1u, 16u, 3u, 17u, 1u, 16u, 4u, 14u, 1u, 16u,
- 3u, 17u, 3u, 14u, 4u, 14u, 5u, 9u, 9u, 9u, 9u, 9u, 3u, 14u, 3u, 14u,
- 1u, 16u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u,
- 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 8u, 14u, 3u, 17u, 3u, 9u, 8u, 9u,
- 3u, 9u, 3u, 13u, 1u, 16u, 0
+ 6u, 6u, 16u, 16u, 1u, 31u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u,
+ 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u,
+ 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 18u, 8u, 18u,
+ 5u, 10u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 18u, 3u, 18u, 8u, 18u,
+ 3u, 10u, 8u, 10u, 3u, 18u, 3u, 18u, 3u, 18u, 3u, 18u, 4u, 18u, 5u, 18u,
+ 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u,
+ 6u, 18u, 3u, 18u, 1u, 18u, 4u, 31u, 4u, 18u, 3u, 31u, 3u, 31u, 1u, 18u,
+ 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u,
+ 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u,
+ 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u,
+ 1u, 18u, 3u, 31u, 3u, 31u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u,
+ 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u,
+ 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 18u, 8u, 18u,
+ 5u, 10u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 18u, 3u, 18u, 8u, 18u,
+ 3u, 10u, 8u, 10u, 3u, 18u, 3u, 18u, 3u, 18u, 3u, 18u, 4u, 18u, 5u, 18u,
+ 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u,
+ 6u, 18u, 3u, 18u, 1u, 18u, 4u, 31u, 4u, 18u, 3u, 31u, 3u, 31u, 1u, 18u,
+ 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u,
+ 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u,
+ 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u,
+ 4u, 14u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u,
+ 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u,
+ 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 18u, 8u, 18u, 5u, 10u,
+ 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 18u, 3u, 18u, 8u, 18u, 3u, 10u,
+ 8u, 10u, 3u, 18u, 3u, 18u, 3u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u,
+ 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 6u, 18u,
+ 3u, 18u, 1u, 18u, 4u, 31u, 4u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u,
+ 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u,
+ 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u,
+ 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u,
+ 4u, 14u, 3u, 31u, 4u, 14u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u,
+ 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u,
+ 3u, 31u, 4u, 31u, 1u, 18u, 3u, 31u, 3u, 31u, 4u, 31u, 5u, 18u, 8u, 18u,
+ 5u, 10u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 18u, 3u, 18u, 8u, 18u,
+ 3u, 10u, 8u, 10u, 3u, 18u, 3u, 18u, 3u, 18u, 3u, 18u, 4u, 18u, 5u, 18u,
+ 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u,
+ 6u, 18u, 3u, 18u, 1u, 18u, 4u, 31u, 4u, 18u, 3u, 31u, 3u, 31u, 1u, 18u,
+ 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u,
+ 1u, 18u, 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u,
+ 1u, 18u, 1u, 18u, 3u, 31u, 3u, 31u, 1u, 18u, 1u, 18u, 1u, 18u, 1u, 18u,
+ 1u, 18u, 3u, 31u, 1u, 31u, 3u, 31u, 1u, 31u, 4u, 18u, 1u, 18u, 3u, 31u,
+ 3u, 31u, 4u, 31u, 5u, 10u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 10u,
+ 8u, 10u, 3u, 31u, 3u, 31u, 1u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u,
+ 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 5u, 18u, 3u, 18u, 4u, 18u, 8u, 18u,
+ 3u, 18u, 3u, 18u, 8u, 18u, 3u, 18u, 3u, 18u, 1u, 18u, 3u, 10u, 8u, 10u,
+ 5u, 10u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 0
};
static const char _indic_syllable_machine_key_spans[] = {
@@ -121,48 +125,52 @@ static const char _indic_syllable_machine_key_spans[] = {
11, 3, 3, 3, 3, 1, 3, 3,
1, 3, 3, 1, 16, 1, 1, 1,
1, 4, 1, 1, 4, 1, 1, 4,
- 1, 1, 16, 15, 12, 11, 16, 15,
- 12, 11, 16, 15, 12, 11, 16, 15,
- 12, 11, 16, 15, 12, 11, 10, 7,
- 5, 1, 1, 15, 7, 2, 7, 11,
- 12, 12, 11, 10, 12, 11, 10, 12,
- 11, 10, 12, 11, 9, 12, 11, 16,
- 12, 12, 16, 16, 16, 16, 16, 12,
- 12, 16, 16, 16, 16, 16, 12, 12,
- 16, 16, 16, 16, 16, 12, 12, 16,
- 16, 16, 16, 16, 12, 12, 12, 12,
- 11, 16, 15, 12, 11, 16, 15, 12,
- 11, 16, 15, 12, 11, 16, 15, 12,
- 11, 10, 7, 5, 1, 1, 15, 7,
- 2, 7, 11, 12, 12, 11, 10, 12,
- 11, 10, 12, 11, 10, 12, 11, 9,
- 12, 16, 12, 12, 16, 16, 16, 16,
- 16, 12, 12, 16, 16, 16, 16, 16,
- 12, 12, 16, 16, 16, 16, 16, 12,
- 12, 16, 16, 16, 16, 11, 16, 12,
- 12, 11, 16, 15, 12, 11, 16, 15,
- 12, 11, 16, 15, 12, 11, 16, 15,
- 12, 11, 10, 7, 5, 1, 1, 15,
- 7, 2, 7, 11, 12, 12, 11, 10,
- 12, 11, 10, 12, 11, 10, 12, 11,
- 9, 12, 16, 12, 12, 16, 16, 16,
- 16, 16, 12, 12, 16, 16, 16, 16,
- 16, 12, 12, 16, 16, 16, 16, 16,
- 12, 12, 16, 16, 16, 16, 16, 11,
- 12, 11, 12, 12, 11, 16, 15, 12,
- 11, 16, 15, 12, 11, 16, 15, 12,
- 11, 16, 15, 12, 11, 10, 7, 5,
- 1, 1, 15, 7, 2, 7, 11, 12,
- 12, 11, 10, 12, 11, 10, 12, 11,
- 10, 12, 11, 9, 12, 16, 12, 12,
- 16, 16, 16, 16, 16, 12, 12, 16,
- 16, 16, 16, 16, 12, 12, 16, 16,
- 16, 16, 16, 12, 12, 16, 16, 16,
- 16, 16, 12, 16, 15, 16, 11, 16,
- 15, 12, 11, 5, 1, 1, 12, 12,
- 16, 12, 11, 10, 12, 11, 10, 12,
- 11, 10, 12, 11, 7, 15, 7, 2,
- 7, 11, 16
+ 1, 1, 31, 29, 29, 28, 18, 29,
+ 29, 28, 18, 29, 29, 28, 18, 29,
+ 29, 28, 18, 29, 29, 28, 14, 11,
+ 6, 2, 2, 1, 6, 16, 16, 11,
+ 8, 3, 16, 16, 16, 16, 15, 14,
+ 16, 15, 14, 16, 15, 14, 16, 15,
+ 13, 16, 18, 28, 15, 29, 29, 18,
+ 18, 18, 18, 18, 29, 29, 18, 18,
+ 18, 18, 18, 29, 29, 18, 18, 18,
+ 18, 18, 29, 29, 18, 18, 18, 18,
+ 18, 29, 29, 29, 29, 28, 18, 29,
+ 29, 28, 18, 29, 29, 28, 18, 29,
+ 29, 28, 18, 29, 29, 28, 14, 11,
+ 6, 2, 2, 1, 6, 16, 16, 11,
+ 8, 3, 16, 16, 16, 16, 15, 14,
+ 16, 15, 14, 16, 15, 14, 16, 15,
+ 13, 16, 18, 28, 15, 29, 29, 18,
+ 18, 18, 18, 18, 29, 29, 18, 18,
+ 18, 18, 18, 29, 29, 18, 18, 18,
+ 18, 18, 29, 29, 18, 18, 18, 18,
+ 11, 18, 29, 29, 28, 18, 29, 29,
+ 28, 18, 29, 29, 28, 18, 29, 29,
+ 28, 18, 29, 29, 28, 14, 11, 6,
+ 2, 2, 1, 6, 16, 16, 11, 8,
+ 3, 16, 16, 16, 16, 15, 14, 16,
+ 15, 14, 16, 15, 14, 16, 15, 13,
+ 16, 18, 28, 15, 29, 29, 18, 18,
+ 18, 18, 18, 29, 29, 18, 18, 18,
+ 18, 18, 29, 29, 18, 18, 18, 18,
+ 18, 29, 29, 18, 18, 18, 18, 18,
+ 11, 29, 11, 29, 29, 28, 18, 29,
+ 29, 28, 18, 29, 29, 28, 18, 29,
+ 29, 28, 18, 29, 29, 28, 14, 11,
+ 6, 2, 2, 1, 6, 16, 16, 11,
+ 8, 3, 16, 16, 16, 16, 15, 14,
+ 16, 15, 14, 16, 15, 14, 16, 15,
+ 13, 16, 18, 28, 15, 29, 29, 18,
+ 18, 18, 18, 18, 29, 29, 18, 18,
+ 18, 18, 18, 29, 29, 18, 18, 18,
+ 18, 18, 29, 29, 18, 18, 18, 18,
+ 18, 29, 31, 29, 31, 15, 18, 29,
+ 29, 28, 6, 2, 2, 1, 6, 8,
+ 3, 29, 29, 18, 16, 15, 14, 16,
+ 15, 14, 16, 15, 14, 16, 15, 11,
+ 16, 16, 11, 16, 16, 18, 8, 3,
+ 6, 2, 2, 1, 6
};
static const short _indic_syllable_machine_index_offsets[] = {
@@ -187,48 +195,52 @@ static const short _indic_syllable_machine_index_offsets[] = {
848, 860, 864, 868, 872, 876, 878, 882,
886, 888, 892, 896, 898, 915, 917, 919,
921, 923, 928, 930, 932, 937, 939, 941,
- 946, 948, 950, 967, 983, 996, 1008, 1025,
- 1041, 1054, 1066, 1083, 1099, 1112, 1124, 1141,
- 1157, 1170, 1182, 1199, 1215, 1228, 1240, 1251,
- 1259, 1265, 1267, 1269, 1285, 1293, 1296, 1304,
- 1316, 1329, 1342, 1354, 1365, 1378, 1390, 1401,
- 1414, 1426, 1437, 1450, 1462, 1472, 1485, 1497,
- 1514, 1527, 1540, 1557, 1574, 1591, 1608, 1625,
- 1638, 1651, 1668, 1685, 1702, 1719, 1736, 1749,
- 1762, 1779, 1796, 1813, 1830, 1847, 1860, 1873,
- 1890, 1907, 1924, 1941, 1958, 1971, 1984, 1997,
- 2010, 2022, 2039, 2055, 2068, 2080, 2097, 2113,
- 2126, 2138, 2155, 2171, 2184, 2196, 2213, 2229,
- 2242, 2254, 2265, 2273, 2279, 2281, 2283, 2299,
- 2307, 2310, 2318, 2330, 2343, 2356, 2368, 2379,
- 2392, 2404, 2415, 2428, 2440, 2451, 2464, 2476,
- 2486, 2499, 2516, 2529, 2542, 2559, 2576, 2593,
- 2610, 2627, 2640, 2653, 2670, 2687, 2704, 2721,
- 2738, 2751, 2764, 2781, 2798, 2815, 2832, 2849,
- 2862, 2875, 2892, 2909, 2926, 2943, 2955, 2972,
- 2985, 2998, 3010, 3027, 3043, 3056, 3068, 3085,
- 3101, 3114, 3126, 3143, 3159, 3172, 3184, 3201,
- 3217, 3230, 3242, 3253, 3261, 3267, 3269, 3271,
- 3287, 3295, 3298, 3306, 3318, 3331, 3344, 3356,
- 3367, 3380, 3392, 3403, 3416, 3428, 3439, 3452,
- 3464, 3474, 3487, 3504, 3517, 3530, 3547, 3564,
- 3581, 3598, 3615, 3628, 3641, 3658, 3675, 3692,
- 3709, 3726, 3739, 3752, 3769, 3786, 3803, 3820,
- 3837, 3850, 3863, 3880, 3897, 3914, 3931, 3948,
- 3960, 3973, 3985, 3998, 4011, 4023, 4040, 4056,
- 4069, 4081, 4098, 4114, 4127, 4139, 4156, 4172,
- 4185, 4197, 4214, 4230, 4243, 4255, 4266, 4274,
- 4280, 4282, 4284, 4300, 4308, 4311, 4319, 4331,
- 4344, 4357, 4369, 4380, 4393, 4405, 4416, 4429,
- 4441, 4452, 4465, 4477, 4487, 4500, 4517, 4530,
- 4543, 4560, 4577, 4594, 4611, 4628, 4641, 4654,
- 4671, 4688, 4705, 4722, 4739, 4752, 4765, 4782,
- 4799, 4816, 4833, 4850, 4863, 4876, 4893, 4910,
- 4927, 4944, 4961, 4974, 4991, 5007, 5024, 5036,
- 5053, 5069, 5082, 5094, 5100, 5102, 5104, 5117,
- 5130, 5147, 5160, 5172, 5183, 5196, 5208, 5219,
- 5232, 5244, 5255, 5268, 5280, 5288, 5304, 5312,
- 5315, 5323, 5335
+ 946, 948, 950, 982, 1012, 1042, 1071, 1090,
+ 1120, 1150, 1179, 1198, 1228, 1258, 1287, 1306,
+ 1336, 1366, 1395, 1414, 1444, 1474, 1503, 1518,
+ 1530, 1537, 1540, 1543, 1545, 1552, 1569, 1586,
+ 1598, 1607, 1611, 1628, 1645, 1662, 1679, 1695,
+ 1710, 1727, 1743, 1758, 1775, 1791, 1806, 1823,
+ 1839, 1853, 1870, 1889, 1918, 1934, 1964, 1994,
+ 2013, 2032, 2051, 2070, 2089, 2119, 2149, 2168,
+ 2187, 2206, 2225, 2244, 2274, 2304, 2323, 2342,
+ 2361, 2380, 2399, 2429, 2459, 2478, 2497, 2516,
+ 2535, 2554, 2584, 2614, 2644, 2674, 2703, 2722,
+ 2752, 2782, 2811, 2830, 2860, 2890, 2919, 2938,
+ 2968, 2998, 3027, 3046, 3076, 3106, 3135, 3150,
+ 3162, 3169, 3172, 3175, 3177, 3184, 3201, 3218,
+ 3230, 3239, 3243, 3260, 3277, 3294, 3311, 3327,
+ 3342, 3359, 3375, 3390, 3407, 3423, 3438, 3455,
+ 3471, 3485, 3502, 3521, 3550, 3566, 3596, 3626,
+ 3645, 3664, 3683, 3702, 3721, 3751, 3781, 3800,
+ 3819, 3838, 3857, 3876, 3906, 3936, 3955, 3974,
+ 3993, 4012, 4031, 4061, 4091, 4110, 4129, 4148,
+ 4167, 4179, 4198, 4228, 4258, 4287, 4306, 4336,
+ 4366, 4395, 4414, 4444, 4474, 4503, 4522, 4552,
+ 4582, 4611, 4630, 4660, 4690, 4719, 4734, 4746,
+ 4753, 4756, 4759, 4761, 4768, 4785, 4802, 4814,
+ 4823, 4827, 4844, 4861, 4878, 4895, 4911, 4926,
+ 4943, 4959, 4974, 4991, 5007, 5022, 5039, 5055,
+ 5069, 5086, 5105, 5134, 5150, 5180, 5210, 5229,
+ 5248, 5267, 5286, 5305, 5335, 5365, 5384, 5403,
+ 5422, 5441, 5460, 5490, 5520, 5539, 5558, 5577,
+ 5596, 5615, 5645, 5675, 5694, 5713, 5732, 5751,
+ 5770, 5782, 5812, 5824, 5854, 5884, 5913, 5932,
+ 5962, 5992, 6021, 6040, 6070, 6100, 6129, 6148,
+ 6178, 6208, 6237, 6256, 6286, 6316, 6345, 6360,
+ 6372, 6379, 6382, 6385, 6387, 6394, 6411, 6428,
+ 6440, 6449, 6453, 6470, 6487, 6504, 6521, 6537,
+ 6552, 6569, 6585, 6600, 6617, 6633, 6648, 6665,
+ 6681, 6695, 6712, 6731, 6760, 6776, 6806, 6836,
+ 6855, 6874, 6893, 6912, 6931, 6961, 6991, 7010,
+ 7029, 7048, 7067, 7086, 7116, 7146, 7165, 7184,
+ 7203, 7222, 7241, 7271, 7301, 7320, 7339, 7358,
+ 7377, 7396, 7426, 7458, 7488, 7520, 7536, 7555,
+ 7585, 7615, 7644, 7651, 7654, 7657, 7659, 7666,
+ 7675, 7679, 7709, 7739, 7758, 7775, 7791, 7806,
+ 7823, 7839, 7854, 7871, 7887, 7902, 7919, 7935,
+ 7947, 7964, 7981, 7993, 8010, 8027, 8046, 8055,
+ 8059, 8066, 8069, 8072, 8074
};
static const short _indic_syllable_machine_indicies[] = {
@@ -351,625 +363,970 @@ static const short _indic_syllable_machine_indicies[] = {
172, 0, 173, 0, 174, 159, 159, 160,
0, 175, 0, 176, 0, 177, 156, 156,
157, 0, 178, 0, 179, 0, 181, 182,
- 183, 184, 185, 186, 81, 187, 188, 180,
- 189, 189, 152, 190, 191, 192, 180, 194,
- 195, 196, 197, 5, 198, 199, 200, 193,
- 193, 37, 201, 193, 193, 181, 193, 202,
- 195, 203, 203, 5, 198, 199, 200, 193,
- 193, 193, 201, 193, 195, 203, 203, 5,
- 198, 199, 200, 193, 193, 193, 201, 193,
- 204, 193, 193, 193, 18, 205, 193, 198,
- 199, 193, 193, 193, 193, 206, 193, 204,
- 193, 207, 208, 209, 210, 5, 198, 199,
- 200, 193, 193, 35, 211, 193, 193, 204,
- 193, 212, 208, 213, 213, 5, 198, 199,
- 200, 193, 193, 193, 211, 193, 208, 213,
- 213, 5, 198, 199, 200, 193, 193, 193,
- 211, 193, 214, 193, 193, 193, 18, 215,
- 193, 198, 199, 193, 193, 193, 193, 206,
- 193, 214, 193, 216, 217, 218, 219, 5,
- 198, 199, 200, 193, 193, 33, 220, 193,
- 193, 214, 193, 221, 217, 222, 222, 5,
- 198, 199, 200, 193, 193, 193, 220, 193,
- 217, 222, 222, 5, 198, 199, 200, 193,
- 193, 193, 220, 193, 223, 193, 193, 193,
- 18, 224, 193, 198, 199, 193, 193, 193,
- 193, 206, 193, 223, 193, 225, 226, 227,
- 228, 5, 198, 199, 200, 193, 193, 31,
- 229, 193, 193, 223, 193, 230, 226, 231,
- 231, 5, 198, 199, 200, 193, 193, 193,
- 229, 193, 226, 231, 231, 5, 198, 199,
- 200, 193, 193, 193, 229, 193, 232, 193,
- 193, 193, 18, 233, 193, 198, 199, 193,
- 193, 193, 193, 206, 193, 232, 193, 234,
- 235, 236, 237, 5, 198, 199, 200, 193,
- 193, 29, 238, 193, 193, 232, 193, 239,
- 235, 240, 240, 5, 198, 199, 200, 193,
- 193, 193, 238, 193, 235, 240, 240, 5,
- 198, 199, 200, 193, 193, 193, 238, 193,
- 18, 241, 193, 198, 199, 193, 193, 193,
- 193, 206, 193, 198, 199, 193, 193, 193,
- 193, 206, 193, 242, 193, 193, 193, 199,
- 193, 199, 193, 243, 193, 244, 193, 245,
- 246, 193, 198, 199, 193, 193, 193, 3,
- 193, 193, 193, 1, 193, 2, 193, 193,
- 193, 193, 198, 199, 193, 198, 199, 193,
- 244, 193, 193, 193, 193, 198, 199, 193,
- 244, 193, 245, 193, 193, 198, 199, 193,
- 193, 193, 3, 193, 18, 193, 247, 247,
- 5, 198, 199, 193, 193, 193, 193, 206,
- 193, 248, 27, 249, 250, 8, 198, 199,
- 193, 193, 193, 193, 206, 193, 27, 249,
- 250, 8, 198, 199, 193, 193, 193, 193,
- 206, 193, 249, 249, 8, 198, 199, 193,
- 193, 193, 193, 206, 193, 251, 24, 252,
- 253, 11, 198, 199, 193, 193, 193, 193,
- 206, 193, 24, 252, 253, 11, 198, 199,
- 193, 193, 193, 193, 206, 193, 252, 252,
- 11, 198, 199, 193, 193, 193, 193, 206,
- 193, 254, 21, 255, 256, 14, 198, 199,
- 193, 193, 193, 193, 206, 193, 21, 255,
- 256, 14, 198, 199, 193, 193, 193, 193,
- 206, 193, 255, 255, 14, 198, 199, 193,
- 193, 193, 193, 206, 193, 257, 18, 193,
- 258, 193, 198, 199, 193, 193, 193, 193,
- 206, 193, 18, 193, 258, 193, 198, 199,
- 193, 193, 193, 193, 206, 193, 259, 193,
- 198, 199, 193, 193, 193, 193, 206, 193,
- 18, 193, 193, 193, 193, 198, 199, 193,
- 193, 193, 193, 206, 193, 235, 240, 240,
- 5, 198, 199, 193, 193, 193, 193, 238,
- 193, 1, 2, 193, 193, 18, 241, 193,
- 198, 199, 193, 193, 193, 193, 206, 193,
- 1, 193, 234, 235, 240, 240, 5, 198,
- 199, 200, 193, 193, 193, 238, 193, 234,
- 235, 236, 240, 5, 198, 199, 200, 193,
- 193, 29, 238, 193, 232, 193, 260, 193,
- 247, 247, 5, 198, 199, 193, 193, 193,
- 193, 206, 193, 232, 193, 232, 193, 193,
- 193, 193, 193, 193, 198, 199, 193, 193,
- 193, 193, 206, 193, 232, 193, 232, 193,
- 193, 193, 193, 261, 193, 198, 199, 193,
- 193, 193, 193, 206, 193, 232, 193, 232,
- 193, 260, 193, 193, 193, 193, 198, 199,
- 193, 193, 193, 193, 206, 193, 232, 193,
- 232, 2, 193, 193, 18, 233, 193, 198,
- 199, 193, 193, 193, 193, 206, 193, 232,
- 193, 225, 226, 231, 231, 5, 198, 199,
- 200, 193, 193, 193, 229, 193, 225, 226,
- 227, 231, 5, 198, 199, 200, 193, 193,
- 31, 229, 193, 223, 193, 262, 193, 247,
- 247, 5, 198, 199, 193, 193, 193, 193,
- 206, 193, 223, 193, 223, 193, 193, 193,
- 193, 193, 193, 198, 199, 193, 193, 193,
- 193, 206, 193, 223, 193, 223, 193, 193,
- 193, 193, 263, 193, 198, 199, 193, 193,
- 193, 193, 206, 193, 223, 193, 223, 193,
- 262, 193, 193, 193, 193, 198, 199, 193,
- 193, 193, 193, 206, 193, 223, 193, 223,
- 2, 193, 193, 18, 224, 193, 198, 199,
- 193, 193, 193, 193, 206, 193, 223, 193,
- 216, 217, 222, 222, 5, 198, 199, 200,
- 193, 193, 193, 220, 193, 216, 217, 218,
- 222, 5, 198, 199, 200, 193, 193, 33,
- 220, 193, 214, 193, 264, 193, 247, 247,
- 5, 198, 199, 193, 193, 193, 193, 206,
- 193, 214, 193, 214, 193, 193, 193, 193,
- 193, 193, 198, 199, 193, 193, 193, 193,
- 206, 193, 214, 193, 214, 193, 193, 193,
- 193, 265, 193, 198, 199, 193, 193, 193,
- 193, 206, 193, 214, 193, 214, 193, 264,
- 193, 193, 193, 193, 198, 199, 193, 193,
- 193, 193, 206, 193, 214, 193, 214, 2,
- 193, 193, 18, 215, 193, 198, 199, 193,
- 193, 193, 193, 206, 193, 214, 193, 207,
- 208, 213, 213, 5, 198, 199, 200, 193,
- 193, 193, 211, 193, 207, 208, 209, 213,
- 5, 198, 199, 200, 193, 193, 35, 211,
- 193, 204, 193, 266, 193, 247, 247, 5,
- 198, 199, 193, 193, 193, 193, 206, 193,
- 204, 193, 204, 193, 193, 193, 193, 193,
- 193, 198, 199, 193, 193, 193, 193, 206,
- 193, 204, 193, 204, 193, 193, 193, 193,
- 267, 193, 198, 199, 193, 193, 193, 193,
- 206, 193, 204, 193, 204, 193, 266, 193,
- 193, 193, 193, 198, 199, 193, 193, 193,
- 193, 206, 193, 204, 193, 204, 2, 193,
- 193, 18, 205, 193, 198, 199, 193, 193,
- 193, 193, 206, 193, 204, 193, 194, 195,
- 203, 203, 5, 198, 199, 200, 193, 193,
- 193, 201, 193, 194, 195, 196, 203, 5,
- 198, 199, 200, 193, 193, 37, 201, 193,
- 269, 270, 271, 272, 43, 273, 274, 268,
- 268, 268, 75, 275, 268, 276, 270, 277,
- 272, 43, 273, 274, 268, 268, 268, 268,
- 275, 268, 270, 277, 272, 43, 273, 274,
- 268, 268, 268, 268, 275, 268, 278, 268,
- 268, 268, 56, 279, 268, 273, 274, 268,
- 268, 268, 268, 280, 268, 278, 268, 281,
- 282, 283, 284, 43, 273, 274, 268, 268,
- 268, 73, 285, 268, 268, 278, 268, 286,
- 282, 287, 287, 43, 273, 274, 268, 268,
- 268, 268, 285, 268, 282, 287, 287, 43,
- 273, 274, 268, 268, 268, 268, 285, 268,
- 288, 268, 268, 268, 56, 289, 268, 273,
- 274, 268, 268, 268, 268, 280, 268, 288,
- 268, 290, 291, 292, 293, 43, 273, 274,
- 268, 268, 268, 71, 294, 268, 268, 288,
- 268, 295, 291, 296, 296, 43, 273, 274,
- 268, 268, 268, 268, 294, 268, 291, 296,
- 296, 43, 273, 274, 268, 268, 268, 268,
- 294, 268, 297, 268, 268, 268, 56, 298,
- 268, 273, 274, 268, 268, 268, 268, 280,
- 268, 297, 268, 299, 300, 301, 302, 43,
- 273, 274, 268, 268, 268, 69, 303, 268,
- 268, 297, 268, 304, 300, 305, 305, 43,
- 273, 274, 268, 268, 268, 268, 303, 268,
- 300, 305, 305, 43, 273, 274, 268, 268,
- 268, 268, 303, 268, 306, 268, 268, 268,
- 56, 307, 268, 273, 274, 268, 268, 268,
- 268, 280, 268, 306, 268, 308, 309, 310,
- 311, 43, 273, 274, 268, 268, 268, 67,
- 312, 268, 268, 306, 268, 313, 309, 314,
- 314, 43, 273, 274, 268, 268, 268, 268,
- 312, 268, 309, 314, 314, 43, 273, 274,
- 268, 268, 268, 268, 312, 268, 56, 315,
- 268, 273, 274, 268, 268, 268, 268, 280,
- 268, 273, 274, 268, 268, 268, 268, 280,
- 268, 316, 268, 268, 268, 274, 268, 274,
- 268, 317, 268, 318, 268, 319, 320, 268,
- 273, 274, 268, 268, 268, 41, 268, 268,
- 268, 39, 268, 40, 268, 268, 268, 268,
- 273, 274, 268, 273, 274, 268, 318, 268,
- 268, 268, 268, 273, 274, 268, 318, 268,
- 319, 268, 268, 273, 274, 268, 268, 268,
- 41, 268, 56, 268, 321, 321, 43, 273,
- 274, 268, 268, 268, 268, 280, 268, 322,
- 65, 323, 324, 46, 273, 274, 268, 268,
- 268, 268, 280, 268, 65, 323, 324, 46,
- 273, 274, 268, 268, 268, 268, 280, 268,
- 323, 323, 46, 273, 274, 268, 268, 268,
- 268, 280, 268, 325, 62, 326, 327, 49,
- 273, 274, 268, 268, 268, 268, 280, 268,
- 62, 326, 327, 49, 273, 274, 268, 268,
- 268, 268, 280, 268, 326, 326, 49, 273,
- 274, 268, 268, 268, 268, 280, 268, 328,
- 59, 329, 330, 52, 273, 274, 268, 268,
- 268, 268, 280, 268, 59, 329, 330, 52,
- 273, 274, 268, 268, 268, 268, 280, 268,
- 329, 329, 52, 273, 274, 268, 268, 268,
- 268, 280, 268, 331, 56, 268, 332, 268,
- 273, 274, 268, 268, 268, 268, 280, 268,
- 56, 268, 332, 268, 273, 274, 268, 268,
- 268, 268, 280, 268, 333, 268, 273, 274,
- 268, 268, 268, 268, 280, 268, 56, 268,
- 268, 268, 268, 273, 274, 268, 268, 268,
- 268, 280, 268, 39, 40, 268, 268, 56,
- 315, 268, 273, 274, 268, 268, 268, 268,
- 280, 268, 39, 268, 308, 309, 314, 314,
- 43, 273, 274, 268, 268, 268, 268, 312,
- 268, 308, 309, 310, 314, 43, 273, 274,
- 268, 268, 268, 67, 312, 268, 306, 268,
- 334, 268, 321, 321, 43, 273, 274, 268,
- 268, 268, 268, 280, 268, 306, 268, 306,
- 268, 268, 268, 268, 268, 268, 273, 274,
- 268, 268, 268, 268, 280, 268, 306, 268,
- 306, 268, 268, 268, 268, 335, 268, 273,
- 274, 268, 268, 268, 268, 280, 268, 306,
- 268, 306, 268, 334, 268, 268, 268, 268,
- 273, 274, 268, 268, 268, 268, 280, 268,
- 306, 268, 306, 40, 268, 268, 56, 307,
- 268, 273, 274, 268, 268, 268, 268, 280,
- 268, 306, 268, 299, 300, 305, 305, 43,
- 273, 274, 268, 268, 268, 268, 303, 268,
- 299, 300, 301, 305, 43, 273, 274, 268,
- 268, 268, 69, 303, 268, 297, 268, 336,
- 268, 321, 321, 43, 273, 274, 268, 268,
- 268, 268, 280, 268, 297, 268, 297, 268,
- 268, 268, 268, 268, 268, 273, 274, 268,
- 268, 268, 268, 280, 268, 297, 268, 297,
- 268, 268, 268, 268, 337, 268, 273, 274,
- 268, 268, 268, 268, 280, 268, 297, 268,
- 297, 268, 336, 268, 268, 268, 268, 273,
- 274, 268, 268, 268, 268, 280, 268, 297,
- 268, 297, 40, 268, 268, 56, 298, 268,
- 273, 274, 268, 268, 268, 268, 280, 268,
- 297, 268, 290, 291, 296, 296, 43, 273,
- 274, 268, 268, 268, 268, 294, 268, 290,
- 291, 292, 296, 43, 273, 274, 268, 268,
- 268, 71, 294, 268, 288, 268, 338, 268,
- 321, 321, 43, 273, 274, 268, 268, 268,
- 268, 280, 268, 288, 268, 288, 268, 268,
- 268, 268, 268, 268, 273, 274, 268, 268,
- 268, 268, 280, 268, 288, 268, 288, 268,
- 268, 268, 268, 339, 268, 273, 274, 268,
- 268, 268, 268, 280, 268, 288, 268, 288,
- 268, 338, 268, 268, 268, 268, 273, 274,
- 268, 268, 268, 268, 280, 268, 288, 268,
- 288, 40, 268, 268, 56, 289, 268, 273,
- 274, 268, 268, 268, 268, 280, 268, 288,
- 268, 281, 282, 287, 287, 43, 273, 274,
- 268, 268, 268, 268, 285, 268, 281, 282,
- 283, 287, 43, 273, 274, 268, 268, 268,
- 73, 285, 268, 278, 268, 340, 268, 321,
- 321, 43, 273, 274, 268, 268, 268, 268,
- 280, 268, 278, 268, 278, 268, 268, 268,
- 268, 268, 268, 273, 274, 268, 268, 268,
- 268, 280, 268, 278, 268, 278, 268, 268,
- 268, 268, 341, 268, 273, 274, 268, 268,
- 268, 268, 280, 268, 278, 268, 278, 268,
- 340, 268, 268, 268, 268, 273, 274, 268,
- 268, 268, 268, 280, 268, 278, 268, 74,
- 42, 42, 43, 268, 268, 268, 268, 268,
- 268, 74, 268, 278, 40, 268, 268, 56,
- 279, 268, 273, 274, 268, 268, 268, 268,
- 280, 268, 278, 268, 269, 270, 277, 272,
- 43, 273, 274, 268, 268, 268, 268, 275,
- 268, 343, 184, 344, 344, 81, 187, 188,
- 342, 342, 342, 342, 190, 342, 184, 344,
- 344, 81, 187, 188, 342, 342, 342, 342,
- 190, 342, 345, 342, 342, 342, 95, 346,
- 342, 187, 188, 342, 342, 342, 342, 347,
- 342, 345, 342, 348, 349, 350, 351, 81,
- 187, 188, 342, 342, 342, 112, 352, 342,
- 342, 345, 342, 353, 349, 354, 354, 81,
- 187, 188, 342, 342, 342, 342, 352, 342,
- 349, 354, 354, 81, 187, 188, 342, 342,
- 342, 342, 352, 342, 355, 342, 342, 342,
- 95, 356, 342, 187, 188, 342, 342, 342,
- 342, 347, 342, 355, 342, 357, 358, 359,
- 360, 81, 187, 188, 342, 342, 342, 110,
- 361, 342, 342, 355, 342, 362, 358, 363,
- 363, 81, 187, 188, 342, 342, 342, 342,
- 361, 342, 358, 363, 363, 81, 187, 188,
- 342, 342, 342, 342, 361, 342, 364, 342,
- 342, 342, 95, 365, 342, 187, 188, 342,
- 342, 342, 342, 347, 342, 364, 342, 366,
- 367, 368, 369, 81, 187, 188, 342, 342,
- 342, 108, 370, 342, 342, 364, 342, 371,
- 367, 372, 372, 81, 187, 188, 342, 342,
- 342, 342, 370, 342, 367, 372, 372, 81,
- 187, 188, 342, 342, 342, 342, 370, 342,
- 373, 342, 342, 342, 95, 374, 342, 187,
- 188, 342, 342, 342, 342, 347, 342, 373,
- 342, 375, 376, 377, 378, 81, 187, 188,
- 342, 342, 342, 106, 379, 342, 342, 373,
- 342, 380, 376, 381, 381, 81, 187, 188,
- 342, 342, 342, 342, 379, 342, 376, 381,
- 381, 81, 187, 188, 342, 342, 342, 342,
- 379, 342, 95, 382, 342, 187, 188, 342,
- 342, 342, 342, 347, 342, 187, 188, 342,
- 342, 342, 342, 347, 342, 383, 342, 342,
- 342, 188, 342, 188, 342, 384, 342, 385,
- 342, 386, 387, 342, 187, 188, 342, 342,
- 342, 79, 342, 342, 342, 77, 342, 78,
- 342, 342, 342, 342, 187, 188, 342, 187,
- 188, 342, 385, 342, 342, 342, 342, 187,
- 188, 342, 385, 342, 386, 342, 342, 187,
- 188, 342, 342, 342, 79, 342, 95, 342,
- 388, 388, 81, 187, 188, 342, 342, 342,
- 342, 347, 342, 389, 104, 390, 391, 85,
- 187, 188, 342, 342, 342, 342, 347, 342,
- 104, 390, 391, 85, 187, 188, 342, 342,
- 342, 342, 347, 342, 390, 390, 85, 187,
- 188, 342, 342, 342, 342, 347, 342, 392,
- 101, 393, 394, 88, 187, 188, 342, 342,
- 342, 342, 347, 342, 101, 393, 394, 88,
- 187, 188, 342, 342, 342, 342, 347, 342,
- 393, 393, 88, 187, 188, 342, 342, 342,
- 342, 347, 342, 395, 98, 396, 397, 91,
- 187, 188, 342, 342, 342, 342, 347, 342,
- 98, 396, 397, 91, 187, 188, 342, 342,
- 342, 342, 347, 342, 396, 396, 91, 187,
- 188, 342, 342, 342, 342, 347, 342, 398,
- 95, 342, 399, 342, 187, 188, 342, 342,
- 342, 342, 347, 342, 95, 342, 399, 342,
- 187, 188, 342, 342, 342, 342, 347, 342,
- 400, 342, 187, 188, 342, 342, 342, 342,
- 347, 342, 95, 342, 342, 342, 342, 187,
- 188, 342, 342, 342, 342, 347, 342, 77,
- 78, 342, 342, 95, 382, 342, 187, 188,
- 342, 342, 342, 342, 347, 342, 77, 342,
- 375, 376, 381, 381, 81, 187, 188, 342,
- 342, 342, 342, 379, 342, 375, 376, 377,
- 381, 81, 187, 188, 342, 342, 342, 106,
- 379, 342, 373, 342, 401, 342, 388, 388,
- 81, 187, 188, 342, 342, 342, 342, 347,
- 342, 373, 342, 373, 342, 342, 342, 342,
- 342, 342, 187, 188, 342, 342, 342, 342,
- 347, 342, 373, 342, 373, 342, 342, 342,
- 342, 402, 342, 187, 188, 342, 342, 342,
- 342, 347, 342, 373, 342, 373, 342, 401,
- 342, 342, 342, 342, 187, 188, 342, 342,
- 342, 342, 347, 342, 373, 342, 373, 78,
- 342, 342, 95, 374, 342, 187, 188, 342,
- 342, 342, 342, 347, 342, 373, 342, 366,
- 367, 372, 372, 81, 187, 188, 342, 342,
- 342, 342, 370, 342, 366, 367, 368, 372,
- 81, 187, 188, 342, 342, 342, 108, 370,
- 342, 364, 342, 403, 342, 388, 388, 81,
- 187, 188, 342, 342, 342, 342, 347, 342,
- 364, 342, 364, 342, 342, 342, 342, 342,
- 342, 187, 188, 342, 342, 342, 342, 347,
- 342, 364, 342, 364, 342, 342, 342, 342,
- 404, 342, 187, 188, 342, 342, 342, 342,
- 347, 342, 364, 342, 364, 342, 403, 342,
- 342, 342, 342, 187, 188, 342, 342, 342,
- 342, 347, 342, 364, 342, 364, 78, 342,
- 342, 95, 365, 342, 187, 188, 342, 342,
- 342, 342, 347, 342, 364, 342, 357, 358,
- 363, 363, 81, 187, 188, 342, 342, 342,
- 342, 361, 342, 357, 358, 359, 363, 81,
- 187, 188, 342, 342, 342, 110, 361, 342,
- 355, 342, 405, 342, 388, 388, 81, 187,
- 188, 342, 342, 342, 342, 347, 342, 355,
- 342, 355, 342, 342, 342, 342, 342, 342,
- 187, 188, 342, 342, 342, 342, 347, 342,
- 355, 342, 355, 342, 342, 342, 342, 406,
- 342, 187, 188, 342, 342, 342, 342, 347,
- 342, 355, 342, 355, 342, 405, 342, 342,
- 342, 342, 187, 188, 342, 342, 342, 342,
- 347, 342, 355, 342, 355, 78, 342, 342,
- 95, 356, 342, 187, 188, 342, 342, 342,
- 342, 347, 342, 355, 342, 348, 349, 354,
- 354, 81, 187, 188, 342, 342, 342, 342,
- 352, 342, 348, 349, 350, 354, 81, 187,
- 188, 342, 342, 342, 112, 352, 342, 345,
- 342, 407, 342, 388, 388, 81, 187, 188,
- 342, 342, 342, 342, 347, 342, 345, 342,
- 345, 342, 342, 342, 342, 342, 342, 187,
- 188, 342, 342, 342, 342, 347, 342, 345,
- 342, 345, 342, 342, 342, 342, 408, 342,
- 187, 188, 342, 342, 342, 342, 347, 342,
- 345, 342, 345, 342, 407, 342, 342, 342,
- 342, 187, 188, 342, 342, 342, 342, 347,
- 342, 345, 342, 345, 78, 342, 342, 95,
- 346, 342, 187, 188, 342, 342, 342, 342,
- 347, 342, 345, 342, 113, 80, 80, 81,
- 409, 409, 409, 409, 409, 152, 113, 409,
- 183, 184, 344, 344, 81, 187, 188, 342,
- 342, 342, 342, 190, 342, 113, 80, 80,
- 81, 409, 409, 409, 409, 409, 409, 113,
- 409, 411, 412, 413, 414, 119, 415, 416,
- 410, 410, 410, 151, 417, 410, 418, 412,
- 414, 414, 119, 415, 416, 410, 410, 410,
- 410, 417, 410, 412, 414, 414, 119, 415,
- 416, 410, 410, 410, 410, 417, 410, 419,
- 410, 410, 410, 132, 420, 410, 415, 416,
- 410, 410, 410, 410, 421, 410, 419, 410,
- 422, 423, 424, 425, 119, 415, 416, 410,
- 410, 410, 149, 426, 410, 410, 419, 410,
- 427, 423, 428, 428, 119, 415, 416, 410,
- 410, 410, 410, 426, 410, 423, 428, 428,
- 119, 415, 416, 410, 410, 410, 410, 426,
- 410, 429, 410, 410, 410, 132, 430, 410,
- 415, 416, 410, 410, 410, 410, 421, 410,
- 429, 410, 431, 432, 433, 434, 119, 415,
- 416, 410, 410, 410, 147, 435, 410, 410,
- 429, 410, 436, 432, 437, 437, 119, 415,
- 416, 410, 410, 410, 410, 435, 410, 432,
- 437, 437, 119, 415, 416, 410, 410, 410,
- 410, 435, 410, 438, 410, 410, 410, 132,
- 439, 410, 415, 416, 410, 410, 410, 410,
- 421, 410, 438, 410, 440, 441, 442, 443,
- 119, 415, 416, 410, 410, 410, 145, 444,
- 410, 410, 438, 410, 445, 441, 446, 446,
- 119, 415, 416, 410, 410, 410, 410, 444,
- 410, 441, 446, 446, 119, 415, 416, 410,
- 410, 410, 410, 444, 410, 447, 410, 410,
- 410, 132, 448, 410, 415, 416, 410, 410,
- 410, 410, 421, 410, 447, 410, 449, 450,
- 451, 452, 119, 415, 416, 410, 410, 410,
- 143, 453, 410, 410, 447, 410, 454, 450,
- 455, 455, 119, 415, 416, 410, 410, 410,
- 410, 453, 410, 450, 455, 455, 119, 415,
- 416, 410, 410, 410, 410, 453, 410, 132,
- 456, 410, 415, 416, 410, 410, 410, 410,
- 421, 410, 415, 416, 410, 410, 410, 410,
- 421, 410, 457, 410, 410, 410, 416, 410,
- 416, 410, 458, 410, 459, 410, 460, 461,
- 410, 415, 416, 410, 410, 410, 117, 410,
- 410, 410, 115, 410, 116, 410, 410, 410,
- 410, 415, 416, 410, 415, 416, 410, 459,
- 410, 410, 410, 410, 415, 416, 410, 459,
- 410, 460, 410, 410, 415, 416, 410, 410,
- 410, 117, 410, 132, 410, 462, 462, 119,
- 415, 416, 410, 410, 410, 410, 421, 410,
- 463, 141, 464, 465, 122, 415, 416, 410,
- 410, 410, 410, 421, 410, 141, 464, 465,
- 122, 415, 416, 410, 410, 410, 410, 421,
- 410, 464, 464, 122, 415, 416, 410, 410,
- 410, 410, 421, 410, 466, 138, 467, 468,
- 125, 415, 416, 410, 410, 410, 410, 421,
- 410, 138, 467, 468, 125, 415, 416, 410,
- 410, 410, 410, 421, 410, 467, 467, 125,
- 415, 416, 410, 410, 410, 410, 421, 410,
- 469, 135, 470, 471, 128, 415, 416, 410,
- 410, 410, 410, 421, 410, 135, 470, 471,
- 128, 415, 416, 410, 410, 410, 410, 421,
- 410, 470, 470, 128, 415, 416, 410, 410,
- 410, 410, 421, 410, 472, 132, 410, 473,
- 410, 415, 416, 410, 410, 410, 410, 421,
- 410, 132, 410, 473, 410, 415, 416, 410,
- 410, 410, 410, 421, 410, 474, 410, 415,
- 416, 410, 410, 410, 410, 421, 410, 132,
- 410, 410, 410, 410, 415, 416, 410, 410,
- 410, 410, 421, 410, 115, 116, 410, 410,
- 132, 456, 410, 415, 416, 410, 410, 410,
- 410, 421, 410, 115, 410, 449, 450, 455,
- 455, 119, 415, 416, 410, 410, 410, 410,
- 453, 410, 449, 450, 451, 455, 119, 415,
- 416, 410, 410, 410, 143, 453, 410, 447,
- 410, 475, 410, 462, 462, 119, 415, 416,
- 410, 410, 410, 410, 421, 410, 447, 410,
- 447, 410, 410, 410, 410, 410, 410, 415,
- 416, 410, 410, 410, 410, 421, 410, 447,
- 410, 447, 410, 410, 410, 410, 476, 410,
- 415, 416, 410, 410, 410, 410, 421, 410,
- 447, 410, 447, 410, 475, 410, 410, 410,
- 410, 415, 416, 410, 410, 410, 410, 421,
- 410, 447, 410, 447, 116, 410, 410, 132,
- 448, 410, 415, 416, 410, 410, 410, 410,
- 421, 410, 447, 410, 440, 441, 446, 446,
- 119, 415, 416, 410, 410, 410, 410, 444,
- 410, 440, 441, 442, 446, 119, 415, 416,
- 410, 410, 410, 145, 444, 410, 438, 410,
- 477, 410, 462, 462, 119, 415, 416, 410,
- 410, 410, 410, 421, 410, 438, 410, 438,
- 410, 410, 410, 410, 410, 410, 415, 416,
- 410, 410, 410, 410, 421, 410, 438, 410,
- 438, 410, 410, 410, 410, 478, 410, 415,
- 416, 410, 410, 410, 410, 421, 410, 438,
- 410, 438, 410, 477, 410, 410, 410, 410,
- 415, 416, 410, 410, 410, 410, 421, 410,
- 438, 410, 438, 116, 410, 410, 132, 439,
- 410, 415, 416, 410, 410, 410, 410, 421,
- 410, 438, 410, 431, 432, 437, 437, 119,
- 415, 416, 410, 410, 410, 410, 435, 410,
- 431, 432, 433, 437, 119, 415, 416, 410,
- 410, 410, 147, 435, 410, 429, 410, 479,
- 410, 462, 462, 119, 415, 416, 410, 410,
- 410, 410, 421, 410, 429, 410, 429, 410,
- 410, 410, 410, 410, 410, 415, 416, 410,
- 410, 410, 410, 421, 410, 429, 410, 429,
- 410, 410, 410, 410, 480, 410, 415, 416,
- 410, 410, 410, 410, 421, 410, 429, 410,
- 429, 410, 479, 410, 410, 410, 410, 415,
- 416, 410, 410, 410, 410, 421, 410, 429,
- 410, 429, 116, 410, 410, 132, 430, 410,
- 415, 416, 410, 410, 410, 410, 421, 410,
- 429, 410, 422, 423, 428, 428, 119, 415,
- 416, 410, 410, 410, 410, 426, 410, 422,
- 423, 424, 428, 119, 415, 416, 410, 410,
- 410, 149, 426, 410, 419, 410, 481, 410,
- 462, 462, 119, 415, 416, 410, 410, 410,
- 410, 421, 410, 419, 410, 419, 410, 410,
- 410, 410, 410, 410, 415, 416, 410, 410,
- 410, 410, 421, 410, 419, 410, 419, 410,
- 410, 410, 410, 482, 410, 415, 416, 410,
- 410, 410, 410, 421, 410, 419, 410, 419,
- 410, 481, 410, 410, 410, 410, 415, 416,
- 410, 410, 410, 410, 421, 410, 419, 410,
- 419, 116, 410, 410, 132, 420, 410, 415,
- 416, 410, 410, 410, 410, 421, 410, 419,
- 410, 411, 412, 414, 414, 119, 415, 416,
- 410, 410, 410, 410, 417, 410, 181, 182,
- 183, 184, 483, 344, 81, 187, 188, 342,
- 189, 189, 152, 190, 342, 181, 342, 194,
- 484, 196, 197, 5, 198, 199, 200, 193,
- 193, 37, 201, 193, 193, 181, 193, 204,
- 182, 183, 184, 485, 486, 81, 487, 488,
- 193, 189, 189, 152, 489, 193, 204, 193,
- 113, 80, 80, 81, 198, 199, 193, 193,
- 193, 152, 490, 193, 491, 2, 342, 342,
- 342, 408, 342, 187, 188, 342, 342, 342,
- 342, 347, 342, 491, 342, 492, 349, 493,
- 494, 81, 487, 488, 193, 193, 193, 153,
- 352, 193, 193, 491, 193, 495, 349, 354,
- 354, 81, 487, 488, 193, 193, 193, 193,
- 352, 193, 349, 354, 354, 81, 487, 488,
- 193, 193, 193, 193, 352, 193, 496, 193,
- 193, 193, 488, 193, 488, 193, 243, 193,
- 492, 349, 354, 354, 81, 487, 488, 193,
- 193, 193, 193, 352, 193, 492, 349, 493,
- 354, 81, 487, 488, 193, 193, 193, 153,
- 352, 193, 204, 193, 266, 113, 497, 497,
- 155, 198, 199, 193, 193, 193, 193, 490,
- 193, 204, 193, 498, 179, 499, 500, 157,
- 487, 488, 193, 193, 193, 193, 501, 193,
- 179, 499, 500, 157, 487, 488, 193, 193,
- 193, 193, 501, 193, 499, 499, 157, 487,
- 488, 193, 193, 193, 193, 501, 193, 502,
- 176, 503, 504, 160, 487, 488, 193, 193,
- 193, 193, 501, 193, 176, 503, 504, 160,
- 487, 488, 193, 193, 193, 193, 501, 193,
- 503, 503, 160, 487, 488, 193, 193, 193,
- 193, 501, 193, 505, 173, 506, 507, 163,
- 487, 488, 193, 193, 193, 193, 501, 193,
- 173, 506, 507, 163, 487, 488, 193, 193,
- 193, 193, 501, 193, 506, 506, 163, 487,
- 488, 193, 193, 193, 193, 501, 193, 508,
- 170, 193, 509, 193, 487, 488, 193, 193,
- 193, 193, 501, 193, 170, 193, 509, 193,
- 487, 488, 193, 193, 193, 193, 501, 193,
- 487, 488, 193, 193, 193, 193, 501, 193,
- 510, 193, 511, 512, 193, 487, 488, 193,
- 193, 193, 167, 193, 193, 193, 165, 193,
- 166, 193, 193, 193, 193, 487, 488, 193,
- 487, 488, 193, 510, 193, 193, 193, 193,
- 487, 488, 193, 510, 193, 511, 193, 193,
- 487, 488, 193, 193, 193, 167, 193, 491,
- 166, 342, 342, 95, 346, 342, 187, 188,
- 342, 342, 342, 342, 347, 342, 491, 342,
- 0
+ 183, 184, 185, 186, 81, 187, 188, 189,
+ 190, 190, 152, 191, 192, 193, 194, 195,
+ 180, 180, 180, 180, 180, 180, 180, 180,
+ 180, 180, 180, 180, 196, 180, 198, 199,
+ 200, 201, 5, 202, 203, 204, 197, 197,
+ 37, 205, 197, 197, 206, 207, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 208, 197, 209, 199, 210, 210,
+ 5, 202, 203, 204, 197, 197, 197, 205,
+ 197, 197, 206, 207, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 208, 197, 199, 210, 210, 5, 202, 203,
+ 204, 197, 197, 197, 205, 197, 197, 206,
+ 207, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 208, 197, 211,
+ 197, 197, 197, 18, 212, 197, 202, 203,
+ 204, 197, 197, 197, 213, 197, 211, 197,
+ 207, 197, 214, 215, 216, 217, 5, 202,
+ 203, 204, 197, 197, 35, 218, 197, 197,
+ 206, 207, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 208, 197,
+ 219, 215, 220, 220, 5, 202, 203, 204,
+ 197, 197, 197, 218, 197, 197, 206, 207,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 208, 197, 215, 220,
+ 220, 5, 202, 203, 204, 197, 197, 197,
+ 218, 197, 197, 206, 207, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 208, 197, 221, 197, 197, 197, 18,
+ 222, 197, 202, 203, 204, 197, 197, 197,
+ 213, 197, 221, 197, 207, 197, 223, 224,
+ 225, 226, 5, 202, 203, 204, 197, 197,
+ 33, 227, 197, 197, 206, 207, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 208, 197, 228, 224, 229, 229,
+ 5, 202, 203, 204, 197, 197, 197, 227,
+ 197, 197, 206, 207, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 208, 197, 224, 229, 229, 5, 202, 203,
+ 204, 197, 197, 197, 227, 197, 197, 206,
+ 207, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 208, 197, 230,
+ 197, 197, 197, 18, 231, 197, 202, 203,
+ 204, 197, 197, 197, 213, 197, 230, 197,
+ 207, 197, 232, 233, 234, 235, 5, 202,
+ 203, 204, 197, 197, 31, 236, 197, 197,
+ 206, 207, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 208, 197,
+ 237, 233, 238, 238, 5, 202, 203, 204,
+ 197, 197, 197, 236, 197, 197, 206, 207,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 208, 197, 233, 238,
+ 238, 5, 202, 203, 204, 197, 197, 197,
+ 236, 197, 197, 206, 207, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 208, 197, 239, 197, 197, 197, 18,
+ 240, 197, 202, 203, 204, 197, 197, 197,
+ 213, 197, 239, 197, 207, 197, 241, 242,
+ 243, 244, 5, 202, 203, 204, 197, 197,
+ 29, 245, 197, 197, 206, 207, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 208, 197, 246, 242, 247, 247,
+ 5, 202, 203, 204, 197, 197, 197, 245,
+ 197, 197, 206, 207, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 208, 197, 242, 247, 247, 5, 202, 203,
+ 204, 197, 197, 197, 245, 197, 197, 206,
+ 207, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 208, 197, 18,
+ 248, 197, 202, 203, 204, 197, 197, 197,
+ 213, 197, 197, 197, 207, 197, 202, 203,
+ 204, 197, 197, 197, 213, 197, 197, 197,
+ 207, 197, 249, 197, 197, 250, 203, 204,
+ 197, 203, 204, 197, 203, 251, 197, 203,
+ 197, 249, 197, 197, 197, 203, 204, 197,
+ 252, 197, 253, 254, 197, 202, 203, 204,
+ 197, 197, 3, 197, 197, 197, 197, 207,
+ 197, 2, 197, 197, 197, 197, 202, 203,
+ 204, 197, 197, 197, 197, 197, 197, 197,
+ 207, 197, 202, 203, 204, 197, 197, 197,
+ 197, 197, 197, 197, 207, 197, 255, 197,
+ 197, 197, 197, 202, 203, 204, 197, 202,
+ 203, 204, 197, 252, 197, 197, 197, 197,
+ 202, 203, 204, 197, 197, 197, 197, 197,
+ 197, 197, 207, 197, 252, 197, 253, 197,
+ 197, 202, 203, 204, 197, 197, 3, 197,
+ 197, 197, 197, 207, 197, 18, 197, 256,
+ 256, 5, 202, 203, 204, 197, 197, 197,
+ 213, 197, 197, 197, 207, 197, 257, 27,
+ 258, 259, 8, 202, 203, 204, 197, 197,
+ 197, 213, 197, 197, 197, 207, 197, 27,
+ 258, 259, 8, 202, 203, 204, 197, 197,
+ 197, 213, 197, 197, 197, 207, 197, 258,
+ 258, 8, 202, 203, 204, 197, 197, 197,
+ 213, 197, 197, 197, 207, 197, 260, 24,
+ 261, 262, 11, 202, 203, 204, 197, 197,
+ 197, 213, 197, 197, 197, 207, 197, 24,
+ 261, 262, 11, 202, 203, 204, 197, 197,
+ 197, 213, 197, 197, 197, 207, 197, 261,
+ 261, 11, 202, 203, 204, 197, 197, 197,
+ 213, 197, 197, 197, 207, 197, 263, 21,
+ 264, 265, 14, 202, 203, 204, 197, 197,
+ 197, 213, 197, 197, 197, 207, 197, 21,
+ 264, 265, 14, 202, 203, 204, 197, 197,
+ 197, 213, 197, 197, 197, 207, 197, 264,
+ 264, 14, 202, 203, 204, 197, 197, 197,
+ 213, 197, 197, 197, 207, 197, 266, 18,
+ 197, 267, 197, 202, 203, 204, 197, 197,
+ 197, 213, 197, 197, 197, 207, 197, 18,
+ 197, 267, 197, 202, 203, 204, 197, 197,
+ 197, 213, 197, 197, 197, 207, 197, 268,
+ 197, 202, 203, 204, 197, 197, 197, 213,
+ 197, 197, 197, 207, 197, 18, 197, 197,
+ 197, 197, 202, 203, 204, 197, 197, 197,
+ 213, 197, 197, 197, 207, 197, 1, 2,
+ 197, 197, 18, 248, 197, 202, 203, 204,
+ 197, 197, 197, 213, 197, 1, 197, 207,
+ 197, 242, 247, 247, 5, 202, 203, 204,
+ 197, 197, 197, 245, 197, 197, 197, 207,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 208, 197, 242, 247,
+ 247, 5, 202, 203, 204, 197, 197, 197,
+ 245, 197, 197, 197, 207, 197, 241, 242,
+ 247, 247, 5, 202, 203, 204, 197, 197,
+ 197, 245, 197, 197, 206, 207, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 208, 197, 241, 242, 243, 247,
+ 5, 202, 203, 204, 197, 197, 29, 245,
+ 197, 197, 206, 207, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 208, 197, 239, 197, 269, 197, 256, 256,
+ 5, 202, 203, 204, 197, 197, 197, 213,
+ 197, 239, 197, 207, 197, 239, 197, 197,
+ 197, 197, 197, 197, 202, 203, 204, 197,
+ 197, 197, 213, 197, 239, 197, 207, 197,
+ 239, 197, 197, 197, 197, 270, 197, 202,
+ 203, 204, 197, 197, 197, 213, 197, 239,
+ 197, 207, 197, 239, 197, 269, 197, 197,
+ 197, 197, 202, 203, 204, 197, 197, 197,
+ 213, 197, 239, 197, 207, 197, 239, 2,
+ 197, 197, 18, 240, 197, 202, 203, 204,
+ 197, 197, 197, 213, 197, 239, 197, 207,
+ 197, 232, 233, 238, 238, 5, 202, 203,
+ 204, 197, 197, 197, 236, 197, 197, 206,
+ 207, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 208, 197, 232,
+ 233, 234, 238, 5, 202, 203, 204, 197,
+ 197, 31, 236, 197, 197, 206, 207, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 208, 197, 230, 197, 271,
+ 197, 256, 256, 5, 202, 203, 204, 197,
+ 197, 197, 213, 197, 230, 197, 207, 197,
+ 230, 197, 197, 197, 197, 197, 197, 202,
+ 203, 204, 197, 197, 197, 213, 197, 230,
+ 197, 207, 197, 230, 197, 197, 197, 197,
+ 272, 197, 202, 203, 204, 197, 197, 197,
+ 213, 197, 230, 197, 207, 197, 230, 197,
+ 271, 197, 197, 197, 197, 202, 203, 204,
+ 197, 197, 197, 213, 197, 230, 197, 207,
+ 197, 230, 2, 197, 197, 18, 231, 197,
+ 202, 203, 204, 197, 197, 197, 213, 197,
+ 230, 197, 207, 197, 223, 224, 229, 229,
+ 5, 202, 203, 204, 197, 197, 197, 227,
+ 197, 197, 206, 207, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 208, 197, 223, 224, 225, 229, 5, 202,
+ 203, 204, 197, 197, 33, 227, 197, 197,
+ 206, 207, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 208, 197,
+ 221, 197, 273, 197, 256, 256, 5, 202,
+ 203, 204, 197, 197, 197, 213, 197, 221,
+ 197, 207, 197, 221, 197, 197, 197, 197,
+ 197, 197, 202, 203, 204, 197, 197, 197,
+ 213, 197, 221, 197, 207, 197, 221, 197,
+ 197, 197, 197, 274, 197, 202, 203, 204,
+ 197, 197, 197, 213, 197, 221, 197, 207,
+ 197, 221, 197, 273, 197, 197, 197, 197,
+ 202, 203, 204, 197, 197, 197, 213, 197,
+ 221, 197, 207, 197, 221, 2, 197, 197,
+ 18, 222, 197, 202, 203, 204, 197, 197,
+ 197, 213, 197, 221, 197, 207, 197, 214,
+ 215, 220, 220, 5, 202, 203, 204, 197,
+ 197, 197, 218, 197, 197, 206, 207, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 208, 197, 214, 215, 216,
+ 220, 5, 202, 203, 204, 197, 197, 35,
+ 218, 197, 197, 206, 207, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 208, 197, 211, 197, 275, 197, 256,
+ 256, 5, 202, 203, 204, 197, 197, 197,
+ 213, 197, 211, 197, 207, 197, 211, 197,
+ 197, 197, 197, 197, 197, 202, 203, 204,
+ 197, 197, 197, 213, 197, 211, 197, 207,
+ 197, 211, 197, 197, 197, 197, 276, 197,
+ 202, 203, 204, 197, 197, 197, 213, 197,
+ 211, 197, 207, 197, 211, 197, 275, 197,
+ 197, 197, 197, 202, 203, 204, 197, 197,
+ 197, 213, 197, 211, 197, 207, 197, 211,
+ 2, 197, 197, 18, 212, 197, 202, 203,
+ 204, 197, 197, 197, 213, 197, 211, 197,
+ 207, 197, 198, 199, 210, 210, 5, 202,
+ 203, 204, 197, 197, 197, 205, 197, 197,
+ 206, 207, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 208, 197,
+ 198, 199, 200, 210, 5, 202, 203, 204,
+ 197, 197, 37, 205, 197, 197, 206, 207,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 208, 197, 278, 279,
+ 280, 281, 43, 282, 283, 284, 277, 277,
+ 75, 285, 277, 277, 286, 287, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 288, 277, 289, 279, 290, 281,
+ 43, 282, 283, 284, 277, 277, 277, 285,
+ 277, 277, 286, 287, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 288, 277, 279, 290, 281, 43, 282, 283,
+ 284, 277, 277, 277, 285, 277, 277, 286,
+ 287, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 288, 277, 291,
+ 277, 277, 277, 56, 292, 277, 282, 283,
+ 284, 277, 277, 277, 293, 277, 291, 277,
+ 287, 277, 294, 295, 296, 297, 43, 282,
+ 283, 284, 277, 277, 73, 298, 277, 277,
+ 286, 287, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 288, 277,
+ 299, 295, 300, 300, 43, 282, 283, 284,
+ 277, 277, 277, 298, 277, 277, 286, 287,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 288, 277, 295, 300,
+ 300, 43, 282, 283, 284, 277, 277, 277,
+ 298, 277, 277, 286, 287, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 288, 277, 301, 277, 277, 277, 56,
+ 302, 277, 282, 283, 284, 277, 277, 277,
+ 293, 277, 301, 277, 287, 277, 303, 304,
+ 305, 306, 43, 282, 283, 284, 277, 277,
+ 71, 307, 277, 277, 286, 287, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 288, 277, 308, 304, 309, 309,
+ 43, 282, 283, 284, 277, 277, 277, 307,
+ 277, 277, 286, 287, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 288, 277, 304, 309, 309, 43, 282, 283,
+ 284, 277, 277, 277, 307, 277, 277, 286,
+ 287, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 288, 277, 310,
+ 277, 277, 277, 56, 311, 277, 282, 283,
+ 284, 277, 277, 277, 293, 277, 310, 277,
+ 287, 277, 312, 313, 314, 315, 43, 282,
+ 283, 284, 277, 277, 69, 316, 277, 277,
+ 286, 287, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 288, 277,
+ 317, 313, 318, 318, 43, 282, 283, 284,
+ 277, 277, 277, 316, 277, 277, 286, 287,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 288, 277, 313, 318,
+ 318, 43, 282, 283, 284, 277, 277, 277,
+ 316, 277, 277, 286, 287, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 288, 277, 319, 277, 277, 277, 56,
+ 320, 277, 282, 283, 284, 277, 277, 277,
+ 293, 277, 319, 277, 287, 277, 321, 322,
+ 323, 324, 43, 282, 283, 284, 277, 277,
+ 67, 325, 277, 277, 286, 287, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 288, 277, 326, 322, 327, 327,
+ 43, 282, 283, 284, 277, 277, 277, 325,
+ 277, 277, 286, 287, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 288, 277, 322, 327, 327, 43, 282, 283,
+ 284, 277, 277, 277, 325, 277, 277, 286,
+ 287, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 288, 277, 56,
+ 328, 277, 282, 283, 284, 277, 277, 277,
+ 293, 277, 277, 277, 287, 277, 282, 283,
+ 284, 277, 277, 277, 293, 277, 277, 277,
+ 287, 277, 329, 277, 277, 330, 283, 284,
+ 277, 283, 284, 277, 283, 331, 277, 283,
+ 277, 329, 277, 277, 277, 283, 284, 277,
+ 332, 277, 333, 334, 277, 282, 283, 284,
+ 277, 277, 41, 277, 277, 277, 277, 287,
+ 277, 40, 277, 277, 277, 277, 282, 283,
+ 284, 277, 277, 277, 277, 277, 277, 277,
+ 287, 277, 282, 283, 284, 277, 277, 277,
+ 277, 277, 277, 277, 287, 277, 335, 277,
+ 277, 277, 277, 282, 283, 284, 277, 282,
+ 283, 284, 277, 332, 277, 277, 277, 277,
+ 282, 283, 284, 277, 277, 277, 277, 277,
+ 277, 277, 287, 277, 332, 277, 333, 277,
+ 277, 282, 283, 284, 277, 277, 41, 277,
+ 277, 277, 277, 287, 277, 56, 277, 336,
+ 336, 43, 282, 283, 284, 277, 277, 277,
+ 293, 277, 277, 277, 287, 277, 337, 65,
+ 338, 339, 46, 282, 283, 284, 277, 277,
+ 277, 293, 277, 277, 277, 287, 277, 65,
+ 338, 339, 46, 282, 283, 284, 277, 277,
+ 277, 293, 277, 277, 277, 287, 277, 338,
+ 338, 46, 282, 283, 284, 277, 277, 277,
+ 293, 277, 277, 277, 287, 277, 340, 62,
+ 341, 342, 49, 282, 283, 284, 277, 277,
+ 277, 293, 277, 277, 277, 287, 277, 62,
+ 341, 342, 49, 282, 283, 284, 277, 277,
+ 277, 293, 277, 277, 277, 287, 277, 341,
+ 341, 49, 282, 283, 284, 277, 277, 277,
+ 293, 277, 277, 277, 287, 277, 343, 59,
+ 344, 345, 52, 282, 283, 284, 277, 277,
+ 277, 293, 277, 277, 277, 287, 277, 59,
+ 344, 345, 52, 282, 283, 284, 277, 277,
+ 277, 293, 277, 277, 277, 287, 277, 344,
+ 344, 52, 282, 283, 284, 277, 277, 277,
+ 293, 277, 277, 277, 287, 277, 346, 56,
+ 277, 347, 277, 282, 283, 284, 277, 277,
+ 277, 293, 277, 277, 277, 287, 277, 56,
+ 277, 347, 277, 282, 283, 284, 277, 277,
+ 277, 293, 277, 277, 277, 287, 277, 348,
+ 277, 282, 283, 284, 277, 277, 277, 293,
+ 277, 277, 277, 287, 277, 56, 277, 277,
+ 277, 277, 282, 283, 284, 277, 277, 277,
+ 293, 277, 277, 277, 287, 277, 39, 40,
+ 277, 277, 56, 328, 277, 282, 283, 284,
+ 277, 277, 277, 293, 277, 39, 277, 287,
+ 277, 322, 327, 327, 43, 282, 283, 284,
+ 277, 277, 277, 325, 277, 277, 277, 287,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 288, 277, 322, 327,
+ 327, 43, 282, 283, 284, 277, 277, 277,
+ 325, 277, 277, 277, 287, 277, 321, 322,
+ 327, 327, 43, 282, 283, 284, 277, 277,
+ 277, 325, 277, 277, 286, 287, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 288, 277, 321, 322, 323, 327,
+ 43, 282, 283, 284, 277, 277, 67, 325,
+ 277, 277, 286, 287, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 288, 277, 319, 277, 349, 277, 336, 336,
+ 43, 282, 283, 284, 277, 277, 277, 293,
+ 277, 319, 277, 287, 277, 319, 277, 277,
+ 277, 277, 277, 277, 282, 283, 284, 277,
+ 277, 277, 293, 277, 319, 277, 287, 277,
+ 319, 277, 277, 277, 277, 350, 277, 282,
+ 283, 284, 277, 277, 277, 293, 277, 319,
+ 277, 287, 277, 319, 277, 349, 277, 277,
+ 277, 277, 282, 283, 284, 277, 277, 277,
+ 293, 277, 319, 277, 287, 277, 319, 40,
+ 277, 277, 56, 320, 277, 282, 283, 284,
+ 277, 277, 277, 293, 277, 319, 277, 287,
+ 277, 312, 313, 318, 318, 43, 282, 283,
+ 284, 277, 277, 277, 316, 277, 277, 286,
+ 287, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 288, 277, 312,
+ 313, 314, 318, 43, 282, 283, 284, 277,
+ 277, 69, 316, 277, 277, 286, 287, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 288, 277, 310, 277, 351,
+ 277, 336, 336, 43, 282, 283, 284, 277,
+ 277, 277, 293, 277, 310, 277, 287, 277,
+ 310, 277, 277, 277, 277, 277, 277, 282,
+ 283, 284, 277, 277, 277, 293, 277, 310,
+ 277, 287, 277, 310, 277, 277, 277, 277,
+ 352, 277, 282, 283, 284, 277, 277, 277,
+ 293, 277, 310, 277, 287, 277, 310, 277,
+ 351, 277, 277, 277, 277, 282, 283, 284,
+ 277, 277, 277, 293, 277, 310, 277, 287,
+ 277, 310, 40, 277, 277, 56, 311, 277,
+ 282, 283, 284, 277, 277, 277, 293, 277,
+ 310, 277, 287, 277, 303, 304, 309, 309,
+ 43, 282, 283, 284, 277, 277, 277, 307,
+ 277, 277, 286, 287, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 288, 277, 303, 304, 305, 309, 43, 282,
+ 283, 284, 277, 277, 71, 307, 277, 277,
+ 286, 287, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 288, 277,
+ 301, 277, 353, 277, 336, 336, 43, 282,
+ 283, 284, 277, 277, 277, 293, 277, 301,
+ 277, 287, 277, 301, 277, 277, 277, 277,
+ 277, 277, 282, 283, 284, 277, 277, 277,
+ 293, 277, 301, 277, 287, 277, 301, 277,
+ 277, 277, 277, 354, 277, 282, 283, 284,
+ 277, 277, 277, 293, 277, 301, 277, 287,
+ 277, 301, 277, 353, 277, 277, 277, 277,
+ 282, 283, 284, 277, 277, 277, 293, 277,
+ 301, 277, 287, 277, 301, 40, 277, 277,
+ 56, 302, 277, 282, 283, 284, 277, 277,
+ 277, 293, 277, 301, 277, 287, 277, 294,
+ 295, 300, 300, 43, 282, 283, 284, 277,
+ 277, 277, 298, 277, 277, 286, 287, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 277, 288, 277, 294, 295, 296,
+ 300, 43, 282, 283, 284, 277, 277, 73,
+ 298, 277, 277, 286, 287, 277, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 288, 277, 291, 277, 355, 277, 336,
+ 336, 43, 282, 283, 284, 277, 277, 277,
+ 293, 277, 291, 277, 287, 277, 291, 277,
+ 277, 277, 277, 277, 277, 282, 283, 284,
+ 277, 277, 277, 293, 277, 291, 277, 287,
+ 277, 291, 277, 277, 277, 277, 356, 277,
+ 282, 283, 284, 277, 277, 277, 293, 277,
+ 291, 277, 287, 277, 291, 277, 355, 277,
+ 277, 277, 277, 282, 283, 284, 277, 277,
+ 277, 293, 277, 291, 277, 287, 277, 74,
+ 42, 42, 43, 277, 277, 277, 277, 277,
+ 277, 74, 277, 291, 40, 277, 277, 56,
+ 292, 277, 282, 283, 284, 277, 277, 277,
+ 293, 277, 291, 277, 287, 277, 278, 279,
+ 290, 281, 43, 282, 283, 284, 277, 277,
+ 277, 285, 277, 277, 286, 287, 277, 277,
+ 277, 277, 277, 277, 277, 277, 277, 277,
+ 277, 277, 288, 277, 358, 184, 359, 359,
+ 81, 187, 188, 189, 357, 357, 357, 191,
+ 357, 357, 194, 360, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 196, 357, 184, 359, 359, 81, 187, 188,
+ 189, 357, 357, 357, 191, 357, 357, 194,
+ 360, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 196, 357, 361,
+ 357, 357, 357, 95, 362, 357, 187, 188,
+ 189, 357, 357, 357, 363, 357, 361, 357,
+ 360, 357, 364, 365, 366, 367, 81, 187,
+ 188, 189, 357, 357, 112, 368, 357, 357,
+ 194, 360, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 196, 357,
+ 369, 365, 370, 370, 81, 187, 188, 189,
+ 357, 357, 357, 368, 357, 357, 194, 360,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 196, 357, 365, 370,
+ 370, 81, 187, 188, 189, 357, 357, 357,
+ 368, 357, 357, 194, 360, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 196, 357, 371, 357, 357, 357, 95,
+ 372, 357, 187, 188, 189, 357, 357, 357,
+ 363, 357, 371, 357, 360, 357, 373, 374,
+ 375, 376, 81, 187, 188, 189, 357, 357,
+ 110, 377, 357, 357, 194, 360, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 196, 357, 378, 374, 379, 379,
+ 81, 187, 188, 189, 357, 357, 357, 377,
+ 357, 357, 194, 360, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 196, 357, 374, 379, 379, 81, 187, 188,
+ 189, 357, 357, 357, 377, 357, 357, 194,
+ 360, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 196, 357, 380,
+ 357, 357, 357, 95, 381, 357, 187, 188,
+ 189, 357, 357, 357, 363, 357, 380, 357,
+ 360, 357, 382, 383, 384, 385, 81, 187,
+ 188, 189, 357, 357, 108, 386, 357, 357,
+ 194, 360, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 196, 357,
+ 387, 383, 388, 388, 81, 187, 188, 189,
+ 357, 357, 357, 386, 357, 357, 194, 360,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 196, 357, 383, 388,
+ 388, 81, 187, 188, 189, 357, 357, 357,
+ 386, 357, 357, 194, 360, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 196, 357, 389, 357, 357, 357, 95,
+ 390, 357, 187, 188, 189, 357, 357, 357,
+ 363, 357, 389, 357, 360, 357, 391, 392,
+ 393, 394, 81, 187, 188, 189, 357, 357,
+ 106, 395, 357, 357, 194, 360, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 196, 357, 396, 392, 397, 397,
+ 81, 187, 188, 189, 357, 357, 357, 395,
+ 357, 357, 194, 360, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 196, 357, 392, 397, 397, 81, 187, 188,
+ 189, 357, 357, 357, 395, 357, 357, 194,
+ 360, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 196, 357, 95,
+ 398, 357, 187, 188, 189, 357, 357, 357,
+ 363, 357, 357, 357, 360, 357, 187, 188,
+ 189, 357, 357, 357, 363, 357, 357, 357,
+ 360, 357, 399, 357, 357, 400, 188, 189,
+ 357, 188, 189, 357, 188, 401, 357, 188,
+ 357, 399, 357, 357, 357, 188, 189, 357,
+ 402, 357, 403, 404, 357, 187, 188, 189,
+ 357, 357, 79, 357, 357, 357, 357, 360,
+ 357, 78, 357, 357, 357, 357, 187, 188,
+ 189, 357, 357, 357, 357, 357, 357, 357,
+ 360, 357, 187, 188, 189, 357, 357, 357,
+ 357, 357, 357, 357, 360, 357, 405, 357,
+ 357, 357, 357, 187, 188, 189, 357, 187,
+ 188, 189, 357, 402, 357, 357, 357, 357,
+ 187, 188, 189, 357, 357, 357, 357, 357,
+ 357, 357, 360, 357, 402, 357, 403, 357,
+ 357, 187, 188, 189, 357, 357, 79, 357,
+ 357, 357, 357, 360, 357, 95, 357, 406,
+ 406, 81, 187, 188, 189, 357, 357, 357,
+ 363, 357, 357, 357, 360, 357, 407, 104,
+ 408, 409, 85, 187, 188, 189, 357, 357,
+ 357, 363, 357, 357, 357, 360, 357, 104,
+ 408, 409, 85, 187, 188, 189, 357, 357,
+ 357, 363, 357, 357, 357, 360, 357, 408,
+ 408, 85, 187, 188, 189, 357, 357, 357,
+ 363, 357, 357, 357, 360, 357, 410, 101,
+ 411, 412, 88, 187, 188, 189, 357, 357,
+ 357, 363, 357, 357, 357, 360, 357, 101,
+ 411, 412, 88, 187, 188, 189, 357, 357,
+ 357, 363, 357, 357, 357, 360, 357, 411,
+ 411, 88, 187, 188, 189, 357, 357, 357,
+ 363, 357, 357, 357, 360, 357, 413, 98,
+ 414, 415, 91, 187, 188, 189, 357, 357,
+ 357, 363, 357, 357, 357, 360, 357, 98,
+ 414, 415, 91, 187, 188, 189, 357, 357,
+ 357, 363, 357, 357, 357, 360, 357, 414,
+ 414, 91, 187, 188, 189, 357, 357, 357,
+ 363, 357, 357, 357, 360, 357, 416, 95,
+ 357, 417, 357, 187, 188, 189, 357, 357,
+ 357, 363, 357, 357, 357, 360, 357, 95,
+ 357, 417, 357, 187, 188, 189, 357, 357,
+ 357, 363, 357, 357, 357, 360, 357, 418,
+ 357, 187, 188, 189, 357, 357, 357, 363,
+ 357, 357, 357, 360, 357, 95, 357, 357,
+ 357, 357, 187, 188, 189, 357, 357, 357,
+ 363, 357, 357, 357, 360, 357, 77, 78,
+ 357, 357, 95, 398, 357, 187, 188, 189,
+ 357, 357, 357, 363, 357, 77, 357, 360,
+ 357, 392, 397, 397, 81, 187, 188, 189,
+ 357, 357, 357, 395, 357, 357, 357, 360,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 196, 357, 392, 397,
+ 397, 81, 187, 188, 189, 357, 357, 357,
+ 395, 357, 357, 357, 360, 357, 391, 392,
+ 397, 397, 81, 187, 188, 189, 357, 357,
+ 357, 395, 357, 357, 194, 360, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 196, 357, 391, 392, 393, 397,
+ 81, 187, 188, 189, 357, 357, 106, 395,
+ 357, 357, 194, 360, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 196, 357, 389, 357, 419, 357, 406, 406,
+ 81, 187, 188, 189, 357, 357, 357, 363,
+ 357, 389, 357, 360, 357, 389, 357, 357,
+ 357, 357, 357, 357, 187, 188, 189, 357,
+ 357, 357, 363, 357, 389, 357, 360, 357,
+ 389, 357, 357, 357, 357, 420, 357, 187,
+ 188, 189, 357, 357, 357, 363, 357, 389,
+ 357, 360, 357, 389, 357, 419, 357, 357,
+ 357, 357, 187, 188, 189, 357, 357, 357,
+ 363, 357, 389, 357, 360, 357, 389, 78,
+ 357, 357, 95, 390, 357, 187, 188, 189,
+ 357, 357, 357, 363, 357, 389, 357, 360,
+ 357, 382, 383, 388, 388, 81, 187, 188,
+ 189, 357, 357, 357, 386, 357, 357, 194,
+ 360, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 196, 357, 382,
+ 383, 384, 388, 81, 187, 188, 189, 357,
+ 357, 108, 386, 357, 357, 194, 360, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 196, 357, 380, 357, 421,
+ 357, 406, 406, 81, 187, 188, 189, 357,
+ 357, 357, 363, 357, 380, 357, 360, 357,
+ 380, 357, 357, 357, 357, 357, 357, 187,
+ 188, 189, 357, 357, 357, 363, 357, 380,
+ 357, 360, 357, 380, 357, 357, 357, 357,
+ 422, 357, 187, 188, 189, 357, 357, 357,
+ 363, 357, 380, 357, 360, 357, 380, 357,
+ 421, 357, 357, 357, 357, 187, 188, 189,
+ 357, 357, 357, 363, 357, 380, 357, 360,
+ 357, 380, 78, 357, 357, 95, 381, 357,
+ 187, 188, 189, 357, 357, 357, 363, 357,
+ 380, 357, 360, 357, 373, 374, 379, 379,
+ 81, 187, 188, 189, 357, 357, 357, 377,
+ 357, 357, 194, 360, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 196, 357, 373, 374, 375, 379, 81, 187,
+ 188, 189, 357, 357, 110, 377, 357, 357,
+ 194, 360, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 196, 357,
+ 371, 357, 423, 357, 406, 406, 81, 187,
+ 188, 189, 357, 357, 357, 363, 357, 371,
+ 357, 360, 357, 371, 357, 357, 357, 357,
+ 357, 357, 187, 188, 189, 357, 357, 357,
+ 363, 357, 371, 357, 360, 357, 371, 357,
+ 357, 357, 357, 424, 357, 187, 188, 189,
+ 357, 357, 357, 363, 357, 371, 357, 360,
+ 357, 371, 357, 423, 357, 357, 357, 357,
+ 187, 188, 189, 357, 357, 357, 363, 357,
+ 371, 357, 360, 357, 371, 78, 357, 357,
+ 95, 372, 357, 187, 188, 189, 357, 357,
+ 357, 363, 357, 371, 357, 360, 357, 364,
+ 365, 370, 370, 81, 187, 188, 189, 357,
+ 357, 357, 368, 357, 357, 194, 360, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 357, 196, 357, 364, 365, 366,
+ 370, 81, 187, 188, 189, 357, 357, 112,
+ 368, 357, 357, 194, 360, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 196, 357, 361, 357, 425, 357, 406,
+ 406, 81, 187, 188, 189, 357, 357, 357,
+ 363, 357, 361, 357, 360, 357, 361, 357,
+ 357, 357, 357, 357, 357, 187, 188, 189,
+ 357, 357, 357, 363, 357, 361, 357, 360,
+ 357, 361, 357, 357, 357, 357, 426, 357,
+ 187, 188, 189, 357, 357, 357, 363, 357,
+ 361, 357, 360, 357, 361, 357, 425, 357,
+ 357, 357, 357, 187, 188, 189, 357, 357,
+ 357, 363, 357, 361, 357, 360, 357, 361,
+ 78, 357, 357, 95, 362, 357, 187, 188,
+ 189, 357, 357, 357, 363, 357, 361, 357,
+ 360, 357, 113, 80, 80, 81, 427, 427,
+ 427, 427, 427, 152, 113, 427, 183, 184,
+ 359, 359, 81, 187, 188, 189, 357, 357,
+ 357, 191, 357, 357, 194, 360, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 357, 357, 196, 357, 113, 80, 80, 81,
+ 427, 427, 427, 427, 427, 427, 113, 427,
+ 429, 430, 431, 432, 119, 433, 434, 435,
+ 428, 428, 151, 436, 428, 428, 437, 438,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 439, 428, 440, 430,
+ 432, 432, 119, 433, 434, 435, 428, 428,
+ 428, 436, 428, 428, 437, 438, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 439, 428, 430, 432, 432, 119,
+ 433, 434, 435, 428, 428, 428, 436, 428,
+ 428, 437, 438, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 439,
+ 428, 441, 428, 428, 428, 132, 442, 428,
+ 433, 434, 435, 428, 428, 428, 443, 428,
+ 441, 428, 438, 428, 444, 445, 446, 447,
+ 119, 433, 434, 435, 428, 428, 149, 448,
+ 428, 428, 437, 438, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 439, 428, 449, 445, 450, 450, 119, 433,
+ 434, 435, 428, 428, 428, 448, 428, 428,
+ 437, 438, 428, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 428, 439, 428,
+ 445, 450, 450, 119, 433, 434, 435, 428,
+ 428, 428, 448, 428, 428, 437, 438, 428,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 428, 439, 428, 451, 428, 428,
+ 428, 132, 452, 428, 433, 434, 435, 428,
+ 428, 428, 443, 428, 451, 428, 438, 428,
+ 453, 454, 455, 456, 119, 433, 434, 435,
+ 428, 428, 147, 457, 428, 428, 437, 438,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 439, 428, 458, 454,
+ 459, 459, 119, 433, 434, 435, 428, 428,
+ 428, 457, 428, 428, 437, 438, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 439, 428, 454, 459, 459, 119,
+ 433, 434, 435, 428, 428, 428, 457, 428,
+ 428, 437, 438, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 439,
+ 428, 460, 428, 428, 428, 132, 461, 428,
+ 433, 434, 435, 428, 428, 428, 443, 428,
+ 460, 428, 438, 428, 462, 463, 464, 465,
+ 119, 433, 434, 435, 428, 428, 145, 466,
+ 428, 428, 437, 438, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 439, 428, 467, 463, 468, 468, 119, 433,
+ 434, 435, 428, 428, 428, 466, 428, 428,
+ 437, 438, 428, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 428, 439, 428,
+ 463, 468, 468, 119, 433, 434, 435, 428,
+ 428, 428, 466, 428, 428, 437, 438, 428,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 428, 439, 428, 469, 428, 428,
+ 428, 132, 470, 428, 433, 434, 435, 428,
+ 428, 428, 443, 428, 469, 428, 438, 428,
+ 471, 472, 473, 474, 119, 433, 434, 435,
+ 428, 428, 143, 475, 428, 428, 437, 438,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 439, 428, 476, 472,
+ 477, 477, 119, 433, 434, 435, 428, 428,
+ 428, 475, 428, 428, 437, 438, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 439, 428, 472, 477, 477, 119,
+ 433, 434, 435, 428, 428, 428, 475, 428,
+ 428, 437, 438, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 439,
+ 428, 132, 478, 428, 433, 434, 435, 428,
+ 428, 428, 443, 428, 428, 428, 438, 428,
+ 433, 434, 435, 428, 428, 428, 443, 428,
+ 428, 428, 438, 428, 479, 428, 428, 480,
+ 434, 435, 428, 434, 435, 428, 434, 481,
+ 428, 434, 428, 479, 428, 428, 428, 434,
+ 435, 428, 482, 428, 483, 484, 428, 433,
+ 434, 435, 428, 428, 117, 428, 428, 428,
+ 428, 438, 428, 116, 428, 428, 428, 428,
+ 433, 434, 435, 428, 428, 428, 428, 428,
+ 428, 428, 438, 428, 433, 434, 435, 428,
+ 428, 428, 428, 428, 428, 428, 438, 428,
+ 485, 428, 428, 428, 428, 433, 434, 435,
+ 428, 433, 434, 435, 428, 482, 428, 428,
+ 428, 428, 433, 434, 435, 428, 428, 428,
+ 428, 428, 428, 428, 438, 428, 482, 428,
+ 483, 428, 428, 433, 434, 435, 428, 428,
+ 117, 428, 428, 428, 428, 438, 428, 132,
+ 428, 486, 486, 119, 433, 434, 435, 428,
+ 428, 428, 443, 428, 428, 428, 438, 428,
+ 487, 141, 488, 489, 122, 433, 434, 435,
+ 428, 428, 428, 443, 428, 428, 428, 438,
+ 428, 141, 488, 489, 122, 433, 434, 435,
+ 428, 428, 428, 443, 428, 428, 428, 438,
+ 428, 488, 488, 122, 433, 434, 435, 428,
+ 428, 428, 443, 428, 428, 428, 438, 428,
+ 490, 138, 491, 492, 125, 433, 434, 435,
+ 428, 428, 428, 443, 428, 428, 428, 438,
+ 428, 138, 491, 492, 125, 433, 434, 435,
+ 428, 428, 428, 443, 428, 428, 428, 438,
+ 428, 491, 491, 125, 433, 434, 435, 428,
+ 428, 428, 443, 428, 428, 428, 438, 428,
+ 493, 135, 494, 495, 128, 433, 434, 435,
+ 428, 428, 428, 443, 428, 428, 428, 438,
+ 428, 135, 494, 495, 128, 433, 434, 435,
+ 428, 428, 428, 443, 428, 428, 428, 438,
+ 428, 494, 494, 128, 433, 434, 435, 428,
+ 428, 428, 443, 428, 428, 428, 438, 428,
+ 496, 132, 428, 497, 428, 433, 434, 435,
+ 428, 428, 428, 443, 428, 428, 428, 438,
+ 428, 132, 428, 497, 428, 433, 434, 435,
+ 428, 428, 428, 443, 428, 428, 428, 438,
+ 428, 498, 428, 433, 434, 435, 428, 428,
+ 428, 443, 428, 428, 428, 438, 428, 132,
+ 428, 428, 428, 428, 433, 434, 435, 428,
+ 428, 428, 443, 428, 428, 428, 438, 428,
+ 115, 116, 428, 428, 132, 478, 428, 433,
+ 434, 435, 428, 428, 428, 443, 428, 115,
+ 428, 438, 428, 472, 477, 477, 119, 433,
+ 434, 435, 428, 428, 428, 475, 428, 428,
+ 428, 438, 428, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 428, 439, 428,
+ 472, 477, 477, 119, 433, 434, 435, 428,
+ 428, 428, 475, 428, 428, 428, 438, 428,
+ 471, 472, 477, 477, 119, 433, 434, 435,
+ 428, 428, 428, 475, 428, 428, 437, 438,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 439, 428, 471, 472,
+ 473, 477, 119, 433, 434, 435, 428, 428,
+ 143, 475, 428, 428, 437, 438, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 439, 428, 469, 428, 499, 428,
+ 486, 486, 119, 433, 434, 435, 428, 428,
+ 428, 443, 428, 469, 428, 438, 428, 469,
+ 428, 428, 428, 428, 428, 428, 433, 434,
+ 435, 428, 428, 428, 443, 428, 469, 428,
+ 438, 428, 469, 428, 428, 428, 428, 500,
+ 428, 433, 434, 435, 428, 428, 428, 443,
+ 428, 469, 428, 438, 428, 469, 428, 499,
+ 428, 428, 428, 428, 433, 434, 435, 428,
+ 428, 428, 443, 428, 469, 428, 438, 428,
+ 469, 116, 428, 428, 132, 470, 428, 433,
+ 434, 435, 428, 428, 428, 443, 428, 469,
+ 428, 438, 428, 462, 463, 468, 468, 119,
+ 433, 434, 435, 428, 428, 428, 466, 428,
+ 428, 437, 438, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 439,
+ 428, 462, 463, 464, 468, 119, 433, 434,
+ 435, 428, 428, 145, 466, 428, 428, 437,
+ 438, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 439, 428, 460,
+ 428, 501, 428, 486, 486, 119, 433, 434,
+ 435, 428, 428, 428, 443, 428, 460, 428,
+ 438, 428, 460, 428, 428, 428, 428, 428,
+ 428, 433, 434, 435, 428, 428, 428, 443,
+ 428, 460, 428, 438, 428, 460, 428, 428,
+ 428, 428, 502, 428, 433, 434, 435, 428,
+ 428, 428, 443, 428, 460, 428, 438, 428,
+ 460, 428, 501, 428, 428, 428, 428, 433,
+ 434, 435, 428, 428, 428, 443, 428, 460,
+ 428, 438, 428, 460, 116, 428, 428, 132,
+ 461, 428, 433, 434, 435, 428, 428, 428,
+ 443, 428, 460, 428, 438, 428, 453, 454,
+ 459, 459, 119, 433, 434, 435, 428, 428,
+ 428, 457, 428, 428, 437, 438, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 439, 428, 453, 454, 455, 459,
+ 119, 433, 434, 435, 428, 428, 147, 457,
+ 428, 428, 437, 438, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 439, 428, 451, 428, 503, 428, 486, 486,
+ 119, 433, 434, 435, 428, 428, 428, 443,
+ 428, 451, 428, 438, 428, 451, 428, 428,
+ 428, 428, 428, 428, 433, 434, 435, 428,
+ 428, 428, 443, 428, 451, 428, 438, 428,
+ 451, 428, 428, 428, 428, 504, 428, 433,
+ 434, 435, 428, 428, 428, 443, 428, 451,
+ 428, 438, 428, 451, 428, 503, 428, 428,
+ 428, 428, 433, 434, 435, 428, 428, 428,
+ 443, 428, 451, 428, 438, 428, 451, 116,
+ 428, 428, 132, 452, 428, 433, 434, 435,
+ 428, 428, 428, 443, 428, 451, 428, 438,
+ 428, 444, 445, 450, 450, 119, 433, 434,
+ 435, 428, 428, 428, 448, 428, 428, 437,
+ 438, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 439, 428, 444,
+ 445, 446, 450, 119, 433, 434, 435, 428,
+ 428, 149, 448, 428, 428, 437, 438, 428,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 428, 428, 428, 439, 428, 441, 428, 505,
+ 428, 486, 486, 119, 433, 434, 435, 428,
+ 428, 428, 443, 428, 441, 428, 438, 428,
+ 441, 428, 428, 428, 428, 428, 428, 433,
+ 434, 435, 428, 428, 428, 443, 428, 441,
+ 428, 438, 428, 441, 428, 428, 428, 428,
+ 506, 428, 433, 434, 435, 428, 428, 428,
+ 443, 428, 441, 428, 438, 428, 441, 428,
+ 505, 428, 428, 428, 428, 433, 434, 435,
+ 428, 428, 428, 443, 428, 441, 428, 438,
+ 428, 441, 116, 428, 428, 132, 442, 428,
+ 433, 434, 435, 428, 428, 428, 443, 428,
+ 441, 428, 438, 428, 429, 430, 432, 432,
+ 119, 433, 434, 435, 428, 428, 428, 436,
+ 428, 428, 437, 438, 428, 428, 428, 428,
+ 428, 428, 428, 428, 428, 428, 428, 428,
+ 439, 428, 181, 182, 183, 184, 507, 359,
+ 81, 187, 188, 189, 190, 190, 152, 191,
+ 357, 181, 194, 360, 357, 357, 357, 357,
+ 357, 357, 357, 357, 357, 357, 357, 357,
+ 196, 357, 198, 508, 200, 201, 5, 202,
+ 203, 204, 197, 197, 37, 205, 197, 197,
+ 206, 207, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 208, 197,
+ 211, 182, 183, 184, 509, 510, 81, 511,
+ 203, 512, 190, 190, 152, 513, 197, 211,
+ 194, 514, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 196, 197,
+ 113, 80, 80, 81, 202, 203, 204, 197,
+ 197, 152, 515, 197, 197, 197, 207, 197,
+ 516, 2, 357, 357, 357, 426, 357, 187,
+ 188, 189, 357, 357, 357, 363, 357, 516,
+ 357, 360, 357, 517, 365, 518, 519, 81,
+ 511, 203, 512, 197, 197, 153, 368, 197,
+ 197, 194, 514, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 196,
+ 197, 520, 365, 370, 370, 81, 511, 203,
+ 512, 197, 197, 197, 368, 197, 197, 194,
+ 514, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 197, 197, 196, 197, 365,
+ 370, 370, 81, 511, 203, 512, 197, 197,
+ 197, 368, 197, 197, 194, 514, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 196, 197, 521, 197, 197, 522,
+ 203, 512, 197, 203, 512, 197, 203, 523,
+ 197, 203, 197, 521, 197, 197, 197, 203,
+ 512, 197, 524, 197, 197, 197, 197, 511,
+ 203, 512, 197, 511, 203, 512, 197, 517,
+ 365, 370, 370, 81, 511, 203, 512, 197,
+ 197, 197, 368, 197, 197, 194, 514, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 197, 197, 196, 197, 517, 365, 518,
+ 370, 81, 511, 203, 512, 197, 197, 153,
+ 368, 197, 197, 194, 514, 197, 197, 197,
+ 197, 197, 197, 197, 197, 197, 197, 197,
+ 197, 196, 197, 211, 197, 275, 113, 525,
+ 525, 155, 202, 203, 204, 197, 197, 197,
+ 515, 197, 211, 197, 207, 197, 526, 179,
+ 527, 528, 157, 511, 203, 512, 197, 197,
+ 197, 529, 197, 197, 197, 514, 197, 179,
+ 527, 528, 157, 511, 203, 512, 197, 197,
+ 197, 529, 197, 197, 197, 514, 197, 527,
+ 527, 157, 511, 203, 512, 197, 197, 197,
+ 529, 197, 197, 197, 514, 197, 530, 176,
+ 531, 532, 160, 511, 203, 512, 197, 197,
+ 197, 529, 197, 197, 197, 514, 197, 176,
+ 531, 532, 160, 511, 203, 512, 197, 197,
+ 197, 529, 197, 197, 197, 514, 197, 531,
+ 531, 160, 511, 203, 512, 197, 197, 197,
+ 529, 197, 197, 197, 514, 197, 533, 173,
+ 534, 535, 163, 511, 203, 512, 197, 197,
+ 197, 529, 197, 197, 197, 514, 197, 173,
+ 534, 535, 163, 511, 203, 512, 197, 197,
+ 197, 529, 197, 197, 197, 514, 197, 534,
+ 534, 163, 511, 203, 512, 197, 197, 197,
+ 529, 197, 197, 197, 514, 197, 536, 170,
+ 197, 537, 197, 511, 203, 512, 197, 197,
+ 197, 529, 197, 197, 197, 514, 197, 170,
+ 197, 537, 197, 511, 203, 512, 197, 197,
+ 197, 529, 197, 197, 197, 514, 197, 511,
+ 203, 512, 197, 197, 197, 529, 197, 197,
+ 197, 514, 197, 538, 197, 539, 540, 197,
+ 511, 203, 512, 197, 197, 167, 197, 197,
+ 197, 197, 514, 197, 166, 197, 197, 197,
+ 197, 511, 203, 512, 197, 197, 197, 197,
+ 197, 197, 197, 514, 197, 511, 203, 512,
+ 197, 197, 197, 197, 197, 197, 197, 514,
+ 197, 538, 197, 197, 197, 197, 511, 203,
+ 512, 197, 197, 197, 197, 197, 197, 197,
+ 514, 197, 538, 197, 539, 197, 197, 511,
+ 203, 512, 197, 197, 167, 197, 197, 197,
+ 197, 514, 197, 516, 166, 357, 357, 95,
+ 362, 357, 187, 188, 189, 357, 357, 357,
+ 363, 357, 516, 357, 360, 357, 542, 541,
+ 541, 541, 541, 543, 544, 545, 541, 543,
+ 544, 545, 541, 546, 541, 541, 547, 544,
+ 545, 541, 544, 545, 541, 544, 548, 541,
+ 544, 541, 546, 541, 541, 541, 544, 545,
+ 541, 0
};
static const short _indic_syllable_machine_trans_targs[] = {
- 170, 195, 197, 198, 3, 201, 4, 6,
- 204, 7, 9, 207, 10, 12, 210, 13,
- 15, 16, 191, 18, 19, 209, 21, 22,
- 206, 24, 25, 203, 212, 216, 220, 223,
- 227, 230, 234, 237, 241, 244, 170, 270,
- 272, 273, 39, 276, 40, 42, 279, 43,
- 45, 282, 46, 48, 285, 49, 51, 52,
- 266, 54, 55, 284, 57, 58, 281, 60,
- 61, 278, 287, 290, 294, 297, 301, 304,
- 308, 311, 315, 319, 170, 343, 345, 346,
- 75, 349, 170, 76, 78, 352, 79, 81,
- 355, 82, 84, 358, 85, 87, 88, 339,
- 90, 91, 357, 93, 94, 354, 96, 97,
- 351, 360, 363, 367, 370, 374, 377, 381,
- 384, 388, 170, 418, 420, 421, 110, 424,
- 111, 113, 427, 114, 116, 430, 117, 119,
- 433, 120, 122, 123, 414, 125, 126, 432,
- 128, 129, 429, 131, 132, 426, 435, 438,
- 442, 445, 449, 452, 456, 459, 463, 466,
- 392, 478, 146, 481, 148, 484, 149, 151,
- 487, 152, 154, 490, 155, 493, 495, 496,
- 159, 160, 492, 162, 163, 489, 165, 166,
- 486, 168, 169, 483, 170, 171, 246, 320,
- 322, 391, 393, 340, 342, 394, 390, 467,
- 468, 170, 172, 174, 35, 245, 192, 194,
- 214, 243, 173, 34, 175, 239, 0, 176,
- 178, 33, 238, 236, 177, 32, 179, 232,
- 180, 182, 31, 231, 229, 181, 30, 183,
- 225, 184, 186, 29, 224, 222, 185, 28,
- 187, 218, 188, 190, 27, 217, 215, 189,
- 26, 200, 193, 170, 196, 1, 199, 2,
- 202, 5, 23, 205, 8, 20, 208, 11,
- 17, 211, 14, 213, 219, 221, 226, 228,
- 233, 235, 240, 242, 170, 247, 249, 71,
- 317, 267, 269, 318, 248, 70, 250, 313,
- 36, 251, 253, 69, 312, 310, 252, 68,
- 254, 306, 255, 257, 67, 305, 303, 256,
- 66, 258, 299, 259, 261, 65, 298, 296,
- 260, 64, 262, 292, 263, 265, 63, 291,
- 289, 264, 62, 275, 268, 170, 271, 37,
- 274, 38, 277, 41, 59, 280, 44, 56,
- 283, 47, 53, 286, 50, 288, 293, 295,
- 300, 302, 307, 309, 314, 316, 170, 321,
- 106, 323, 386, 72, 324, 326, 105, 385,
- 383, 325, 104, 327, 379, 328, 330, 103,
- 378, 376, 329, 102, 331, 372, 332, 334,
- 101, 371, 369, 333, 100, 335, 365, 336,
- 338, 99, 364, 362, 337, 98, 348, 341,
- 170, 344, 73, 347, 74, 350, 77, 95,
- 353, 80, 92, 356, 83, 89, 359, 86,
- 361, 366, 368, 373, 375, 380, 382, 387,
- 389, 170, 170, 395, 397, 142, 141, 415,
- 417, 465, 396, 398, 461, 107, 399, 401,
- 140, 460, 458, 400, 139, 402, 454, 403,
- 405, 138, 453, 451, 404, 137, 406, 447,
- 407, 409, 136, 446, 444, 408, 135, 410,
- 440, 411, 413, 134, 439, 437, 412, 133,
- 423, 416, 170, 419, 108, 422, 109, 425,
- 112, 130, 428, 115, 127, 431, 118, 124,
- 434, 121, 436, 441, 443, 448, 450, 455,
- 457, 462, 464, 143, 469, 470, 480, 475,
- 477, 498, 471, 472, 473, 144, 479, 474,
- 476, 145, 482, 147, 167, 156, 485, 150,
- 164, 488, 153, 161, 491, 158, 494, 157,
- 497
+ 170, 197, 199, 202, 3, 205, 4, 6,
+ 208, 7, 9, 211, 10, 12, 214, 13,
+ 15, 16, 191, 18, 19, 213, 21, 22,
+ 210, 24, 25, 207, 216, 221, 225, 228,
+ 232, 235, 239, 242, 246, 249, 170, 277,
+ 279, 282, 39, 285, 40, 42, 288, 43,
+ 45, 291, 46, 48, 294, 49, 51, 52,
+ 271, 54, 55, 293, 57, 58, 290, 60,
+ 61, 287, 296, 301, 305, 308, 312, 315,
+ 319, 322, 326, 330, 170, 356, 358, 361,
+ 75, 364, 170, 76, 78, 367, 79, 81,
+ 370, 82, 84, 373, 85, 87, 88, 350,
+ 90, 91, 372, 93, 94, 369, 96, 97,
+ 366, 375, 380, 384, 387, 391, 394, 398,
+ 401, 405, 170, 437, 439, 442, 110, 445,
+ 111, 113, 448, 114, 116, 451, 117, 119,
+ 454, 120, 122, 123, 431, 125, 126, 453,
+ 128, 129, 450, 131, 132, 447, 456, 461,
+ 465, 468, 472, 475, 479, 482, 486, 489,
+ 409, 505, 146, 508, 148, 511, 149, 151,
+ 514, 152, 154, 517, 155, 520, 522, 523,
+ 159, 160, 519, 162, 163, 516, 165, 166,
+ 513, 168, 169, 510, 170, 171, 251, 331,
+ 333, 408, 410, 351, 170, 353, 411, 407,
+ 490, 491, 378, 526, 379, 170, 172, 174,
+ 35, 250, 192, 170, 194, 248, 219, 200,
+ 220, 173, 34, 175, 244, 0, 176, 178,
+ 33, 243, 241, 177, 32, 179, 237, 180,
+ 182, 31, 236, 234, 181, 30, 183, 230,
+ 184, 186, 29, 229, 227, 185, 28, 187,
+ 223, 188, 190, 27, 222, 218, 189, 26,
+ 204, 193, 196, 195, 198, 1, 203, 201,
+ 2, 206, 5, 23, 209, 8, 20, 212,
+ 11, 17, 215, 14, 217, 224, 226, 231,
+ 233, 238, 240, 245, 247, 170, 252, 254,
+ 71, 328, 272, 170, 274, 329, 299, 280,
+ 300, 253, 70, 255, 324, 36, 256, 258,
+ 69, 323, 321, 257, 68, 259, 317, 260,
+ 262, 67, 316, 314, 261, 66, 263, 310,
+ 264, 266, 65, 309, 307, 265, 64, 267,
+ 303, 268, 270, 63, 302, 298, 269, 62,
+ 284, 273, 276, 275, 278, 37, 283, 281,
+ 38, 286, 41, 59, 289, 44, 56, 292,
+ 47, 53, 295, 50, 297, 304, 306, 311,
+ 313, 318, 320, 325, 327, 170, 332, 106,
+ 359, 334, 403, 72, 335, 337, 105, 402,
+ 400, 336, 104, 338, 396, 339, 341, 103,
+ 395, 393, 340, 102, 342, 389, 343, 345,
+ 101, 388, 386, 344, 100, 346, 382, 347,
+ 349, 99, 381, 377, 348, 98, 363, 352,
+ 355, 354, 357, 73, 362, 360, 74, 365,
+ 77, 95, 368, 80, 92, 371, 83, 89,
+ 374, 86, 376, 383, 385, 390, 392, 397,
+ 399, 404, 406, 170, 170, 412, 414, 142,
+ 141, 432, 170, 434, 488, 459, 440, 460,
+ 413, 415, 484, 107, 416, 418, 140, 483,
+ 481, 417, 139, 419, 477, 420, 422, 138,
+ 476, 474, 421, 137, 423, 470, 424, 426,
+ 136, 469, 467, 425, 135, 427, 463, 428,
+ 430, 134, 462, 458, 429, 133, 444, 433,
+ 436, 435, 438, 108, 443, 441, 109, 446,
+ 112, 130, 449, 115, 127, 452, 118, 124,
+ 455, 121, 457, 464, 466, 471, 473, 478,
+ 480, 485, 487, 143, 492, 493, 507, 498,
+ 500, 525, 503, 494, 495, 496, 144, 506,
+ 497, 499, 502, 501, 504, 145, 509, 147,
+ 167, 156, 512, 150, 164, 515, 153, 161,
+ 518, 158, 521, 157, 524, 170, 527, 528,
+ 170, 530, 529, 532, 531
};
static const char _indic_syllable_machine_trans_actions[] = {
@@ -996,48 +1353,52 @@ static const char _indic_syllable_machine_trans_actions[] = {
2, 0, 0, 2, 0, 2, 0, 0,
0, 0, 2, 0, 0, 2, 0, 0,
2, 0, 0, 2, 11, 2, 2, 6,
- 2, 12, 12, 0, 0, 2, 2, 6,
- 2, 13, 2, 2, 0, 2, 0, 0,
- 2, 2, 2, 0, 2, 2, 0, 2,
+ 2, 12, 12, 0, 13, 0, 2, 2,
+ 6, 2, 6, 0, 6, 14, 2, 2,
+ 0, 2, 0, 15, 0, 2, 2, 0,
+ 2, 2, 0, 2, 2, 0, 2, 2,
+ 0, 2, 2, 2, 0, 2, 2, 2,
2, 0, 2, 2, 2, 0, 2, 2,
2, 2, 0, 2, 2, 2, 0, 2,
2, 2, 2, 0, 2, 2, 2, 0,
- 2, 2, 2, 2, 0, 2, 2, 2,
- 0, 2, 0, 14, 0, 0, 2, 0,
- 2, 0, 0, 2, 0, 0, 2, 0,
- 0, 2, 0, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 15, 2, 2, 0,
- 2, 0, 0, 2, 2, 0, 2, 2,
- 0, 2, 2, 0, 2, 2, 2, 0,
- 2, 2, 2, 2, 0, 2, 2, 2,
- 0, 2, 2, 2, 2, 0, 2, 2,
- 2, 0, 2, 2, 2, 2, 0, 2,
- 2, 2, 0, 2, 0, 16, 0, 0,
- 2, 0, 2, 0, 0, 2, 0, 0,
- 2, 0, 0, 2, 0, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 17, 6,
+ 2, 0, 0, 0, 0, 0, 2, 0,
+ 0, 2, 0, 0, 2, 0, 0, 2,
+ 0, 0, 2, 0, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 16, 2, 2,
+ 0, 2, 0, 17, 0, 2, 2, 0,
+ 2, 2, 0, 2, 2, 0, 2, 2,
+ 0, 2, 2, 2, 0, 2, 2, 2,
+ 2, 0, 2, 2, 2, 0, 2, 2,
+ 2, 2, 0, 2, 2, 2, 0, 2,
+ 2, 2, 2, 0, 2, 2, 2, 0,
+ 2, 0, 0, 0, 0, 0, 2, 0,
+ 0, 2, 0, 0, 2, 0, 0, 2,
+ 0, 0, 2, 0, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 18, 6, 0,
0, 6, 6, 0, 6, 2, 0, 6,
2, 6, 0, 6, 6, 6, 2, 0,
6, 2, 6, 0, 6, 6, 6, 2,
0, 6, 2, 6, 0, 6, 6, 6,
2, 0, 6, 2, 6, 0, 6, 0,
- 18, 0, 0, 2, 0, 2, 0, 0,
- 2, 0, 0, 2, 0, 0, 2, 0,
- 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 19, 20, 2, 2, 0, 0, 0,
- 0, 2, 2, 2, 2, 0, 2, 2,
+ 0, 0, 0, 0, 2, 0, 0, 2,
+ 0, 0, 2, 0, 0, 2, 0, 0,
+ 2, 0, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 19, 20, 2, 2, 0,
+ 0, 0, 21, 0, 2, 2, 0, 2,
+ 2, 2, 2, 0, 2, 2, 0, 2,
+ 2, 2, 0, 2, 2, 2, 2, 0,
+ 2, 2, 2, 0, 2, 2, 2, 2,
0, 2, 2, 2, 0, 2, 2, 2,
- 2, 0, 2, 2, 2, 0, 2, 2,
- 2, 2, 0, 2, 2, 2, 0, 2,
- 2, 2, 2, 0, 2, 2, 2, 0,
- 2, 0, 21, 0, 0, 2, 0, 2,
+ 2, 0, 2, 2, 2, 0, 2, 0,
+ 0, 0, 0, 0, 2, 0, 0, 2,
0, 0, 2, 0, 0, 2, 0, 0,
2, 0, 2, 2, 2, 2, 2, 2,
2, 2, 2, 0, 0, 8, 2, 0,
- 0, 2, 2, 8, 8, 0, 8, 8,
- 0, 0, 2, 0, 0, 0, 2, 0,
- 0, 2, 0, 0, 2, 0, 0, 0,
- 2
+ 0, 2, 0, 2, 8, 8, 0, 8,
+ 8, 0, 0, 0, 0, 0, 2, 0,
+ 0, 0, 2, 0, 0, 2, 0, 0,
+ 2, 0, 0, 0, 2, 22, 0, 0,
+ 23, 0, 0, 0, 0
};
static const char _indic_syllable_machine_to_state_actions[] = {
@@ -1103,7 +1464,11 @@ static const char _indic_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
};
static const char _indic_syllable_machine_from_state_actions[] = {
@@ -1169,7 +1534,11 @@ static const char _indic_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
};
static const short _indic_syllable_machine_eof_trans[] = {
@@ -1194,48 +1563,52 @@ static const short _indic_syllable_machine_eof_trans[] = {
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 0, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 269, 269,
- 269, 269, 269, 269, 269, 269, 269, 269,
- 269, 269, 269, 269, 269, 269, 269, 269,
- 269, 269, 269, 269, 269, 269, 269, 269,
- 269, 269, 269, 269, 269, 269, 269, 269,
- 269, 269, 269, 269, 269, 269, 269, 269,
- 269, 269, 269, 269, 269, 269, 269, 269,
- 269, 269, 269, 269, 269, 269, 269, 269,
- 269, 269, 269, 269, 269, 269, 269, 269,
- 269, 269, 269, 269, 269, 269, 269, 269,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 343,
- 343, 343, 343, 343, 343, 343, 343, 410,
- 343, 410, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 411, 411, 411, 411, 411,
- 411, 411, 411, 343, 194, 194, 194, 343,
- 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 194, 194, 194, 194, 194, 194,
- 194, 194, 343
+ 1, 1, 0, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 278, 278, 278, 278, 278,
+ 278, 278, 278, 358, 358, 358, 358, 358,
+ 358, 358, 358, 358, 358, 358, 358, 358,
+ 358, 358, 358, 358, 358, 358, 358, 358,
+ 358, 358, 358, 358, 358, 358, 358, 358,
+ 358, 358, 358, 358, 358, 358, 358, 358,
+ 358, 358, 358, 358, 358, 358, 358, 358,
+ 358, 358, 358, 358, 358, 358, 358, 358,
+ 358, 358, 358, 358, 358, 358, 358, 358,
+ 358, 358, 358, 358, 358, 358, 358, 358,
+ 358, 358, 358, 358, 358, 358, 358, 358,
+ 428, 358, 428, 429, 429, 429, 429, 429,
+ 429, 429, 429, 429, 429, 429, 429, 429,
+ 429, 429, 429, 429, 429, 429, 429, 429,
+ 429, 429, 429, 429, 429, 429, 429, 429,
+ 429, 429, 429, 429, 429, 429, 429, 429,
+ 429, 429, 429, 429, 429, 429, 429, 429,
+ 429, 429, 429, 429, 429, 429, 429, 429,
+ 429, 429, 429, 429, 429, 429, 429, 429,
+ 429, 429, 429, 429, 429, 429, 429, 429,
+ 429, 429, 429, 429, 429, 429, 429, 429,
+ 429, 429, 358, 198, 198, 198, 358, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 198, 198, 198,
+ 198, 198, 198, 198, 198, 358, 542, 542,
+ 542, 542, 542, 542, 542
};
static const int indic_syllable_machine_start = 170;
@@ -1249,7 +1622,7 @@ static const int indic_syllable_machine_en_main = 170;
-#line 91 "hb-ot-shape-complex-indic-machine.rl"
+#line 98 "hb-ot-shape-complex-indic-machine.rl"
#define found_syllable(syllable_type) \
@@ -1269,7 +1642,7 @@ find_syllables (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 1273 "hb-ot-shape-complex-indic-machine.hh"
+#line 1646 "hb-ot-shape-complex-indic-machine.hh"
{
cs = indic_syllable_machine_start;
ts = 0;
@@ -1277,7 +1650,7 @@ find_syllables (hb_buffer_t *buffer)
act = 0;
}
-#line 112 "hb-ot-shape-complex-indic-machine.rl"
+#line 119 "hb-ot-shape-complex-indic-machine.rl"
p = 0;
@@ -1286,7 +1659,7 @@ find_syllables (hb_buffer_t *buffer)
unsigned int last = 0;
unsigned int syllable_serial = 1;
-#line 1290 "hb-ot-shape-complex-indic-machine.hh"
+#line 1663 "hb-ot-shape-complex-indic-machine.hh"
{
int _slen;
int _trans;
@@ -1300,7 +1673,7 @@ _resume:
#line 1 "NONE"
{ts = p;}
break;
-#line 1304 "hb-ot-shape-complex-indic-machine.hh"
+#line 1677 "hb-ot-shape-complex-indic-machine.hh"
}
_keys = _indic_syllable_machine_trans_keys + (cs<<1);
@@ -1322,60 +1695,68 @@ _eof_trans:
#line 1 "NONE"
{te = p+1;}
break;
- case 14:
-#line 83 "hb-ot-shape-complex-indic-machine.rl"
+ case 15:
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (consonant_syllable); }}
break;
- case 16:
-#line 84 "hb-ot-shape-complex-indic-machine.rl"
+ case 17:
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (vowel_syllable); }}
break;
case 21:
-#line 85 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (standalone_cluster); }}
break;
- case 18:
-#line 86 "hb-ot-shape-complex-indic-machine.rl"
+ case 23:
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
+ {te = p+1;{ found_syllable (avagraha_cluster); }}
+ break;
+ case 13:
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (broken_cluster); }}
break;
case 11:
-#line 87 "hb-ot-shape-complex-indic-machine.rl"
+#line 94 "hb-ot-shape-complex-indic-machine.rl"
{te = p+1;{ found_syllable (non_indic_cluster); }}
break;
- case 13:
-#line 83 "hb-ot-shape-complex-indic-machine.rl"
+ case 14:
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (consonant_syllable); }}
break;
- case 15:
-#line 84 "hb-ot-shape-complex-indic-machine.rl"
+ case 16:
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (vowel_syllable); }}
break;
case 20:
-#line 85 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (standalone_cluster); }}
break;
- case 17:
-#line 86 "hb-ot-shape-complex-indic-machine.rl"
+ case 22:
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
+ {te = p;p--;{ found_syllable (avagraha_cluster); }}
+ break;
+ case 18:
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (broken_cluster); }}
break;
case 19:
-#line 87 "hb-ot-shape-complex-indic-machine.rl"
+#line 94 "hb-ot-shape-complex-indic-machine.rl"
{te = p;p--;{ found_syllable (non_indic_cluster); }}
break;
case 1:
-#line 83 "hb-ot-shape-complex-indic-machine.rl"
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
break;
case 3:
-#line 84 "hb-ot-shape-complex-indic-machine.rl"
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (vowel_syllable); }}
break;
case 7:
-#line 85 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (standalone_cluster); }}
break;
case 4:
-#line 86 "hb-ot-shape-complex-indic-machine.rl"
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
break;
case 5:
@@ -1384,10 +1765,10 @@ _eof_trans:
case 1:
{{p = ((te))-1;} found_syllable (consonant_syllable); }
break;
- case 4:
+ case 5:
{{p = ((te))-1;} found_syllable (broken_cluster); }
break;
- case 5:
+ case 6:
{{p = ((te))-1;} found_syllable (non_indic_cluster); }
break;
}
@@ -1396,22 +1777,22 @@ _eof_trans:
case 8:
#line 1 "NONE"
{te = p+1;}
-#line 83 "hb-ot-shape-complex-indic-machine.rl"
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
{act = 1;}
break;
case 6:
#line 1 "NONE"
{te = p+1;}
-#line 86 "hb-ot-shape-complex-indic-machine.rl"
- {act = 4;}
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
+ {act = 5;}
break;
case 12:
#line 1 "NONE"
{te = p+1;}
-#line 87 "hb-ot-shape-complex-indic-machine.rl"
- {act = 5;}
+#line 94 "hb-ot-shape-complex-indic-machine.rl"
+ {act = 6;}
break;
-#line 1415 "hb-ot-shape-complex-indic-machine.hh"
+#line 1796 "hb-ot-shape-complex-indic-machine.hh"
}
_again:
@@ -1420,7 +1801,7 @@ _again:
#line 1 "NONE"
{ts = 0;}
break;
-#line 1424 "hb-ot-shape-complex-indic-machine.hh"
+#line 1805 "hb-ot-shape-complex-indic-machine.hh"
}
if ( ++p != pe )
@@ -1436,7 +1817,7 @@ _again:
}
-#line 121 "hb-ot-shape-complex-indic-machine.rl"
+#line 128 "hb-ot-shape-complex-indic-machine.rl"
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic.cc
index 9edefe305d..1e07d33177 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic.cc
@@ -1690,12 +1690,6 @@ clear_syllables (const hb_ot_shape_plan_t *plan HB_UNUSED,
}
-static hb_ot_shape_normalization_mode_t
-normalization_preference_indic (const hb_segment_properties_t *props HB_UNUSED)
-{
- return HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT;
-}
-
static bool
decompose_indic (const hb_ot_shape_normalize_context_t *c,
hb_codepoint_t ab,
@@ -1806,7 +1800,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_indic =
data_create_indic,
data_destroy_indic,
NULL, /* preprocess_text */
- normalization_preference_indic,
+ HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
decompose_indic,
compose_indic,
setup_masks_indic,
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar-machine.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar-machine.hh
index e282f0cfb1..a9c8dbeaac 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar-machine.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar-machine.hh
@@ -34,196 +34,197 @@
#line 36 "hb-ot-shape-complex-myanmar-machine.hh"
static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
- 1u, 30u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u,
+ 1u, 31u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u,
3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 16u, 3u, 29u, 3u, 29u, 3u, 29u,
3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 5u, 29u, 5u, 8u,
5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
3u, 30u, 3u, 29u, 1u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
- 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 0
+ 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 8u, 8u, 0
};
static const char _myanmar_syllable_machine_key_spans[] = {
- 30, 28, 25, 4, 25, 23, 21, 21,
+ 31, 28, 25, 4, 25, 23, 21, 21,
27, 27, 27, 27, 16, 27, 27, 27,
27, 27, 27, 27, 27, 27, 25, 4,
25, 23, 21, 21, 27, 27, 27, 27,
28, 27, 30, 27, 27, 27, 27, 27,
- 27, 27, 27, 27
+ 27, 27, 27, 27, 1
};
static const short _myanmar_syllable_machine_index_offsets[] = {
- 0, 31, 60, 86, 91, 117, 141, 163,
- 185, 213, 241, 269, 297, 314, 342, 370,
- 398, 426, 454, 482, 510, 538, 566, 592,
- 597, 623, 647, 669, 691, 719, 747, 775,
- 803, 832, 860, 891, 919, 947, 975, 1003,
- 1031, 1059, 1087, 1115
+ 0, 32, 61, 87, 92, 118, 142, 164,
+ 186, 214, 242, 270, 298, 315, 343, 371,
+ 399, 427, 455, 483, 511, 539, 567, 593,
+ 598, 624, 648, 670, 692, 720, 748, 776,
+ 804, 833, 861, 892, 920, 948, 976, 1004,
+ 1032, 1060, 1088, 1116, 1144
};
static const char _myanmar_syllable_machine_indicies[] = {
1, 1, 2, 3, 4, 4, 0, 5,
0, 6, 0, 1, 0, 0, 0, 7,
0, 8, 1, 0, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 0, 20,
- 21, 22, 22, 19, 23, 19, 24, 19,
- 19, 19, 19, 19, 19, 19, 25, 19,
- 19, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 19, 22, 22, 19, 23,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 36, 19, 19, 19, 19, 19, 19,
- 30, 19, 19, 19, 34, 19, 22, 22,
- 19, 23, 19, 22, 22, 19, 23, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 30,
- 19, 19, 19, 34, 19, 37, 19, 22,
- 22, 19, 23, 19, 30, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 30, 19, 22, 22, 19,
- 23, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 38, 19, 19, 19, 19, 19,
- 19, 30, 19, 22, 22, 19, 23, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 30,
- 19, 20, 19, 22, 22, 19, 23, 19,
- 24, 19, 19, 19, 19, 19, 19, 19,
- 39, 19, 19, 39, 19, 19, 19, 30,
- 40, 19, 19, 34, 19, 20, 19, 22,
- 22, 19, 23, 19, 24, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 30, 19, 19, 19, 34,
- 19, 20, 19, 22, 22, 19, 23, 19,
- 24, 19, 19, 19, 19, 19, 19, 19,
- 39, 19, 19, 19, 19, 19, 19, 30,
- 40, 19, 19, 34, 19, 20, 19, 22,
- 22, 19, 23, 19, 24, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 30, 40, 19, 19, 34,
- 19, 1, 1, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 1, 19, 20, 19, 22, 22, 19, 23,
- 19, 24, 19, 19, 19, 19, 19, 19,
- 19, 25, 19, 19, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 19, 20, 19,
- 22, 22, 19, 23, 19, 24, 19, 19,
- 19, 19, 19, 19, 19, 33, 19, 19,
- 19, 19, 19, 19, 30, 31, 32, 33,
- 34, 19, 20, 19, 22, 22, 19, 23,
- 19, 24, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 30, 31, 32, 33, 34, 19, 20, 19,
- 22, 22, 19, 23, 19, 24, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 30, 31, 32, 19,
- 34, 19, 20, 19, 22, 22, 19, 23,
- 19, 24, 19, 19, 19, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 30, 19, 32, 19, 34, 19, 20, 19,
- 22, 22, 19, 23, 19, 24, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 26, 19, 28, 19, 30, 31, 32, 33,
- 34, 19, 20, 19, 22, 22, 19, 23,
- 19, 24, 19, 19, 19, 19, 19, 19,
- 19, 33, 19, 19, 26, 19, 19, 19,
- 30, 31, 32, 33, 34, 19, 20, 19,
- 22, 22, 19, 23, 19, 24, 19, 19,
- 19, 19, 19, 19, 19, 19, 19, 19,
- 26, 27, 28, 19, 30, 31, 32, 33,
- 34, 19, 20, 21, 22, 22, 19, 23,
- 19, 24, 19, 19, 19, 19, 19, 19,
- 19, 25, 19, 19, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 19, 3, 3,
- 41, 5, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 42, 41, 41, 41, 41,
- 41, 41, 13, 41, 41, 41, 17, 41,
- 3, 3, 41, 5, 41, 3, 3, 41,
- 5, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 13, 41, 41, 41, 17, 41, 43,
- 41, 3, 3, 41, 5, 41, 13, 41,
- 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 13, 41, 3,
- 3, 41, 5, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 44, 41, 41, 41,
- 41, 41, 41, 13, 41, 3, 3, 41,
- 5, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 13, 41, 2, 41, 3, 3, 41,
- 5, 41, 6, 41, 41, 41, 41, 41,
- 41, 41, 45, 41, 41, 45, 41, 41,
- 41, 13, 46, 41, 41, 17, 41, 2,
- 41, 3, 3, 41, 5, 41, 6, 41,
- 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 13, 41, 41,
- 41, 17, 41, 2, 41, 3, 3, 41,
- 5, 41, 6, 41, 41, 41, 41, 41,
- 41, 41, 45, 41, 41, 41, 41, 41,
- 41, 13, 46, 41, 41, 17, 41, 2,
- 41, 3, 3, 41, 5, 41, 6, 41,
- 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 13, 46, 41,
- 41, 17, 41, 20, 21, 22, 22, 19,
- 23, 19, 24, 19, 19, 19, 19, 19,
- 19, 19, 47, 19, 19, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 19,
- 20, 48, 22, 22, 19, 23, 19, 24,
- 19, 19, 19, 19, 19, 19, 19, 25,
- 19, 19, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 19, 1, 1, 2, 3,
- 3, 3, 41, 5, 41, 6, 41, 1,
- 41, 41, 41, 1, 41, 8, 1, 41,
- 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 41, 2, 41, 3, 3, 41,
- 5, 41, 6, 41, 41, 41, 41, 41,
- 41, 41, 8, 41, 41, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 41, 2,
- 41, 3, 3, 41, 5, 41, 6, 41,
- 41, 41, 41, 41, 41, 41, 16, 41,
- 41, 41, 41, 41, 41, 13, 14, 15,
- 16, 17, 41, 2, 41, 3, 3, 41,
- 5, 41, 6, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 13, 14, 15, 16, 17, 41, 2,
- 41, 3, 3, 41, 5, 41, 6, 41,
- 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 13, 14, 15,
- 41, 17, 41, 2, 41, 3, 3, 41,
- 5, 41, 6, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 13, 41, 15, 41, 17, 41, 2,
- 41, 3, 3, 41, 5, 41, 6, 41,
- 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 9, 41, 11, 41, 13, 14, 15,
- 16, 17, 41, 2, 41, 3, 3, 41,
- 5, 41, 6, 41, 41, 41, 41, 41,
- 41, 41, 16, 41, 41, 9, 41, 41,
- 41, 13, 14, 15, 16, 17, 41, 2,
- 41, 3, 3, 41, 5, 41, 6, 41,
- 41, 41, 41, 41, 41, 41, 41, 41,
- 41, 9, 10, 11, 41, 13, 14, 15,
- 16, 17, 41, 2, 3, 3, 3, 41,
- 5, 41, 6, 41, 41, 41, 41, 41,
- 41, 41, 8, 41, 41, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 41, 0
+ 13, 14, 15, 16, 17, 18, 19, 0,
+ 21, 22, 23, 23, 20, 24, 20, 25,
+ 20, 20, 20, 20, 20, 20, 20, 26,
+ 20, 20, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 20, 23, 23, 20,
+ 24, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 37, 20, 20, 20, 20, 20,
+ 20, 31, 20, 20, 20, 35, 20, 23,
+ 23, 20, 24, 20, 23, 23, 20, 24,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 31, 20, 20, 20, 35, 20, 38, 20,
+ 23, 23, 20, 24, 20, 31, 20, 20,
+ 20, 20, 20, 20, 20, 39, 20, 20,
+ 20, 20, 20, 20, 31, 20, 23, 23,
+ 20, 24, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 39, 20, 20, 20, 20,
+ 20, 20, 31, 20, 23, 23, 20, 24,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 31, 20, 21, 20, 23, 23, 20, 24,
+ 20, 25, 20, 20, 20, 20, 20, 20,
+ 20, 40, 20, 20, 40, 20, 20, 20,
+ 31, 41, 20, 20, 35, 20, 21, 20,
+ 23, 23, 20, 24, 20, 25, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 31, 20, 20, 20,
+ 35, 20, 21, 20, 23, 23, 20, 24,
+ 20, 25, 20, 20, 20, 20, 20, 20,
+ 20, 40, 20, 20, 20, 20, 20, 20,
+ 31, 41, 20, 20, 35, 20, 21, 20,
+ 23, 23, 20, 24, 20, 25, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 31, 41, 20, 20,
+ 35, 20, 1, 1, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 1, 20, 21, 20, 23, 23, 20,
+ 24, 20, 25, 20, 20, 20, 20, 20,
+ 20, 20, 26, 20, 20, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 20, 21,
+ 20, 23, 23, 20, 24, 20, 25, 20,
+ 20, 20, 20, 20, 20, 20, 34, 20,
+ 20, 20, 20, 20, 20, 31, 32, 33,
+ 34, 35, 20, 21, 20, 23, 23, 20,
+ 24, 20, 25, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 31, 32, 33, 34, 35, 20, 21,
+ 20, 23, 23, 20, 24, 20, 25, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 31, 32, 33,
+ 20, 35, 20, 21, 20, 23, 23, 20,
+ 24, 20, 25, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 31, 20, 33, 20, 35, 20, 21,
+ 20, 23, 23, 20, 24, 20, 25, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 27, 20, 29, 20, 31, 32, 33,
+ 34, 35, 20, 21, 20, 23, 23, 20,
+ 24, 20, 25, 20, 20, 20, 20, 20,
+ 20, 20, 34, 20, 20, 27, 20, 20,
+ 20, 31, 32, 33, 34, 35, 20, 21,
+ 20, 23, 23, 20, 24, 20, 25, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 27, 28, 29, 20, 31, 32, 33,
+ 34, 35, 20, 21, 22, 23, 23, 20,
+ 24, 20, 25, 20, 20, 20, 20, 20,
+ 20, 20, 26, 20, 20, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 20, 3,
+ 3, 42, 5, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 43, 42, 42, 42,
+ 42, 42, 42, 13, 42, 42, 42, 17,
+ 42, 3, 3, 42, 5, 42, 3, 3,
+ 42, 5, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 13, 42, 42, 42, 17, 42,
+ 44, 42, 3, 3, 42, 5, 42, 13,
+ 42, 42, 42, 42, 42, 42, 42, 45,
+ 42, 42, 42, 42, 42, 42, 13, 42,
+ 3, 3, 42, 5, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 45, 42, 42,
+ 42, 42, 42, 42, 13, 42, 3, 3,
+ 42, 5, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 13, 42, 2, 42, 3, 3,
+ 42, 5, 42, 6, 42, 42, 42, 42,
+ 42, 42, 42, 46, 42, 42, 46, 42,
+ 42, 42, 13, 47, 42, 42, 17, 42,
+ 2, 42, 3, 3, 42, 5, 42, 6,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 13, 42,
+ 42, 42, 17, 42, 2, 42, 3, 3,
+ 42, 5, 42, 6, 42, 42, 42, 42,
+ 42, 42, 42, 46, 42, 42, 42, 42,
+ 42, 42, 13, 47, 42, 42, 17, 42,
+ 2, 42, 3, 3, 42, 5, 42, 6,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 13, 47,
+ 42, 42, 17, 42, 21, 22, 23, 23,
+ 20, 24, 20, 25, 20, 20, 20, 20,
+ 20, 20, 20, 48, 20, 20, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36,
+ 20, 21, 49, 23, 23, 20, 24, 20,
+ 25, 20, 20, 20, 20, 20, 20, 20,
+ 26, 20, 20, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 20, 1, 1, 2,
+ 3, 3, 3, 42, 5, 42, 6, 42,
+ 1, 42, 42, 42, 1, 42, 8, 1,
+ 42, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 42, 2, 42, 3, 3,
+ 42, 5, 42, 6, 42, 42, 42, 42,
+ 42, 42, 42, 8, 42, 42, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 42,
+ 2, 42, 3, 3, 42, 5, 42, 6,
+ 42, 42, 42, 42, 42, 42, 42, 16,
+ 42, 42, 42, 42, 42, 42, 13, 14,
+ 15, 16, 17, 42, 2, 42, 3, 3,
+ 42, 5, 42, 6, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 13, 14, 15, 16, 17, 42,
+ 2, 42, 3, 3, 42, 5, 42, 6,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 13, 14,
+ 15, 42, 17, 42, 2, 42, 3, 3,
+ 42, 5, 42, 6, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 13, 42, 15, 42, 17, 42,
+ 2, 42, 3, 3, 42, 5, 42, 6,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 9, 42, 11, 42, 13, 14,
+ 15, 16, 17, 42, 2, 42, 3, 3,
+ 42, 5, 42, 6, 42, 42, 42, 42,
+ 42, 42, 42, 16, 42, 42, 9, 42,
+ 42, 42, 13, 14, 15, 16, 17, 42,
+ 2, 42, 3, 3, 42, 5, 42, 6,
+ 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 9, 10, 11, 42, 13, 14,
+ 15, 16, 17, 42, 2, 3, 3, 3,
+ 42, 5, 42, 6, 42, 42, 42, 42,
+ 42, 42, 42, 8, 42, 42, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 42,
+ 51, 50, 0
};
static const char _myanmar_syllable_machine_trans_targs[] = {
0, 1, 22, 0, 0, 23, 29, 32,
35, 36, 40, 41, 42, 25, 38, 39,
- 37, 28, 43, 0, 2, 12, 0, 3,
- 9, 13, 14, 18, 19, 20, 5, 16,
- 17, 15, 8, 21, 4, 6, 7, 10,
- 11, 0, 24, 26, 27, 30, 31, 33,
- 34
+ 37, 28, 43, 44, 0, 2, 12, 0,
+ 3, 9, 13, 14, 18, 19, 20, 5,
+ 16, 17, 15, 8, 21, 4, 6, 7,
+ 10, 11, 0, 24, 26, 27, 30, 31,
+ 33, 34, 0, 0
};
static const char _myanmar_syllable_machine_trans_actions[] = {
3, 0, 0, 4, 5, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 6, 0, 0, 7, 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, 8, 0, 0, 0, 0, 0, 0,
- 0
+ 0, 0, 8, 0, 0, 0, 0, 0,
+ 0, 0, 9, 10
};
static const char _myanmar_syllable_machine_to_state_actions[] = {
@@ -232,7 +233,7 @@ static const char _myanmar_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
};
static const char _myanmar_syllable_machine_from_state_actions[] = {
@@ -241,16 +242,16 @@ static const char _myanmar_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
};
static const short _myanmar_syllable_machine_eof_trans[] = {
- 0, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 42, 42,
- 42, 42, 42, 42, 42, 42, 42, 42,
- 20, 20, 42, 42, 42, 42, 42, 42,
- 42, 42, 42, 42
+ 0, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 43, 43,
+ 43, 43, 43, 43, 43, 43, 43, 43,
+ 21, 21, 43, 43, 43, 43, 43, 43,
+ 43, 43, 43, 43, 51
};
static const int myanmar_syllable_machine_start = 0;
@@ -264,7 +265,7 @@ static const int myanmar_syllable_machine_en_main = 0;
-#line 90 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 93 "hb-ot-shape-complex-myanmar-machine.rl"
#define found_syllable(syllable_type) \
@@ -284,7 +285,7 @@ find_syllables (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 288 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 289 "hb-ot-shape-complex-myanmar-machine.hh"
{
cs = myanmar_syllable_machine_start;
ts = 0;
@@ -292,7 +293,7 @@ find_syllables (hb_buffer_t *buffer)
act = 0;
}
-#line 111 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 114 "hb-ot-shape-complex-myanmar-machine.rl"
p = 0;
@@ -301,7 +302,7 @@ find_syllables (hb_buffer_t *buffer)
unsigned int last = 0;
unsigned int syllable_serial = 1;
-#line 305 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 306 "hb-ot-shape-complex-myanmar-machine.hh"
{
int _slen;
int _trans;
@@ -315,7 +316,7 @@ _resume:
#line 1 "NONE"
{ts = p;}
break;
-#line 319 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 320 "hb-ot-shape-complex-myanmar-machine.hh"
}
_keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
@@ -334,30 +335,38 @@ _eof_trans:
switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
case 7:
-#line 83 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 85 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (consonant_syllable); }}
break;
case 5:
-#line 84 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 86 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (non_myanmar_cluster); }}
break;
+ case 10:
+#line 87 "hb-ot-shape-complex-myanmar-machine.rl"
+ {te = p+1;{ found_syllable (punctuation_cluster); }}
+ break;
case 4:
-#line 85 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 88 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (broken_cluster); }}
break;
case 3:
-#line 86 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p+1;{ found_syllable (non_myanmar_cluster); }}
break;
case 6:
-#line 83 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 85 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p;p--;{ found_syllable (consonant_syllable); }}
break;
case 8:
-#line 85 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 88 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p;p--;{ found_syllable (broken_cluster); }}
break;
-#line 361 "hb-ot-shape-complex-myanmar-machine.hh"
+ case 9:
+#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
+ {te = p;p--;{ found_syllable (non_myanmar_cluster); }}
+ break;
+#line 370 "hb-ot-shape-complex-myanmar-machine.hh"
}
_again:
@@ -366,7 +375,7 @@ _again:
#line 1 "NONE"
{ts = 0;}
break;
-#line 370 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 379 "hb-ot-shape-complex-myanmar-machine.hh"
}
if ( ++p != pe )
@@ -382,7 +391,7 @@ _again:
}
-#line 120 "hb-ot-shape-complex-myanmar-machine.rl"
+#line 123 "hb-ot-shape-complex-myanmar-machine.rl"
}
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar.cc
index 25ba7264ca..50209ffb0e 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar.cc
@@ -541,13 +541,6 @@ final_reordering (const hb_ot_shape_plan_t *plan,
}
-static hb_ot_shape_normalization_mode_t
-normalization_preference_myanmar (const hb_segment_properties_t *props HB_UNUSED)
-{
- return HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT;
-}
-
-
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_myanmar =
{
"myanmar",
@@ -556,7 +549,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_myanmar =
NULL, /* data_create */
NULL, /* data_destroy */
NULL, /* preprocess_text */
- normalization_preference_myanmar,
+ HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
NULL, /* decompose */
NULL, /* compose */
setup_masks_myanmar,
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-private.hh
index ac0072ba56..104726e8af 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-private.hh
@@ -44,7 +44,9 @@ enum hb_ot_shape_zero_width_marks_type_t {
// HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_EARLY,
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE,
HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
- HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE
+ HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
+
+ HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT = HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE
};
@@ -52,10 +54,13 @@ enum hb_ot_shape_zero_width_marks_type_t {
#define HB_COMPLEX_SHAPERS_IMPLEMENT_SHAPERS \
HB_COMPLEX_SHAPER_IMPLEMENT (default) /* should be first */ \
HB_COMPLEX_SHAPER_IMPLEMENT (arabic) \
+ HB_COMPLEX_SHAPER_IMPLEMENT (hangul) \
+ HB_COMPLEX_SHAPER_IMPLEMENT (hebrew) \
HB_COMPLEX_SHAPER_IMPLEMENT (indic) \
HB_COMPLEX_SHAPER_IMPLEMENT (myanmar) \
HB_COMPLEX_SHAPER_IMPLEMENT (sea) \
HB_COMPLEX_SHAPER_IMPLEMENT (thai) \
+ HB_COMPLEX_SHAPER_IMPLEMENT (tibetan) \
/* ^--- Add new shapers here */
@@ -105,12 +110,7 @@ struct hb_ot_complex_shaper_t
hb_font_t *font);
- /* normalization_preference()
- * Called during shape().
- * May be NULL.
- */
- hb_ot_shape_normalization_mode_t
- (*normalization_preference) (const hb_segment_properties_t *props);
+ hb_ot_shape_normalization_mode_t normalization_preference;
/* decompose()
* Called during shape()'s normalization.
@@ -189,19 +189,22 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
return &_hb_ot_complex_shaper_thai;
-#if 0
- /* Note:
- * Currently we don't have a separate Hangul shaper. The default shaper handles
- * Hangul by enabling jamo features. We may want to implement a separate shaper
- * in the future. See this thread for details of what such a shaper would do:
- *
- * http://lists.freedesktop.org/archives/harfbuzz/2013-April/003070.html
- */
/* Unicode-1.1 additions */
case HB_SCRIPT_HANGUL:
return &_hb_ot_complex_shaper_hangul;
-#endif
+
+
+ /* Unicode-2.0 additions */
+ case HB_SCRIPT_TIBETAN:
+
+ return &_hb_ot_complex_shaper_tibetan;
+
+
+ /* Unicode-1.1 additions */
+ case HB_SCRIPT_HEBREW:
+
+ return &_hb_ot_complex_shaper_hebrew;
/* ^--- Add new shapers here */
@@ -241,9 +244,6 @@ hb_ot_shape_complex_categorize (const hb_ot_shape_planner_t *planner)
case HB_SCRIPT_LAO:
case HB_SCRIPT_THAI:
- /* Unicode-2.0 additions */
- case HB_SCRIPT_TIBETAN:
-
/* Unicode-3.2 additions */
case HB_SCRIPT_TAGALOG:
case HB_SCRIPT_TAGBANWA:
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-sea.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-sea.cc
index da687ed646..6288a90c9a 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-sea.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-sea.cc
@@ -360,13 +360,6 @@ final_reordering (const hb_ot_shape_plan_t *plan,
}
-static hb_ot_shape_normalization_mode_t
-normalization_preference_sea (const hb_segment_properties_t *props HB_UNUSED)
-{
- return HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT;
-}
-
-
const hb_ot_complex_shaper_t _hb_ot_complex_shaper_sea =
{
"sea",
@@ -375,7 +368,7 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_sea =
NULL, /* data_create */
NULL, /* data_destroy */
NULL, /* preprocess_text */
- normalization_preference_sea,
+ HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT,
NULL, /* decompose */
NULL, /* compose */
setup_masks_sea,
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-thai.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-thai.cc
index 45945339d6..8664eca45c 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-thai.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-thai.cc
@@ -369,10 +369,10 @@ const hb_ot_complex_shaper_t _hb_ot_complex_shaper_thai =
NULL, /* data_create */
NULL, /* data_destroy */
preprocess_text_thai,
- NULL, /* normalization_preference */
+ HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
NULL, /* decompose */
NULL, /* compose */
NULL, /* setup_masks */
- HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_UNICODE_LATE,
+ HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT,
false,/* fallback_position */
};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-tibetan.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-tibetan.cc
new file mode 100644
index 0000000000..01465a426f
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-tibetan.cc
@@ -0,0 +1,61 @@
+/*
+ * Copyright © 2010,2012 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.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ot-shape-complex-private.hh"
+
+
+static const hb_tag_t tibetan_features[] =
+{
+ HB_TAG('a','b','v','s'),
+ HB_TAG('b','l','w','s'),
+ HB_TAG('a','b','v','m'),
+ HB_TAG('b','l','w','m'),
+ HB_TAG_NONE
+};
+
+static void
+collect_features_tibetan (hb_ot_shape_planner_t *plan)
+{
+ for (const hb_tag_t *script_features = tibetan_features; script_features && *script_features; script_features++)
+ plan->map.add_global_bool_feature (*script_features);
+}
+
+
+const hb_ot_complex_shaper_t _hb_ot_complex_shaper_tibetan =
+{
+ "default",
+ collect_features_tibetan,
+ NULL, /* override_features */
+ NULL, /* data_create */
+ NULL, /* data_destroy */
+ NULL, /* preprocess_text */
+ HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT,
+ NULL, /* decompose */
+ NULL, /* compose */
+ NULL, /* setup_masks */
+ HB_OT_SHAPE_ZERO_WIDTH_MARKS_DEFAULT,
+ true, /* fallback_position */
+};
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-fallback.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-fallback.cc
index 449b64e5ca..5d526c3a8e 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-fallback.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-fallback.cc
@@ -430,14 +430,12 @@ _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
hb_font_t *font,
hb_buffer_t *buffer)
{
- hb_mask_t kern_mask = plan->map.get_1_mask (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction) ?
- HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n'));
- if (!kern_mask) return;
+ if (!plan->has_kern) return;
unsigned int count = buffer->len;
OT::hb_apply_context_t c (1, font, buffer);
- c.set_lookup_mask (kern_mask);
+ c.set_lookup_mask (plan->kern_mask);
c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
hb_glyph_info_t *info = buffer->info;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize-private.hh
index fb8048caa2..c744e26451 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize-private.hh
@@ -36,6 +36,7 @@
struct hb_ot_shape_plan_t;
enum hb_ot_shape_normalization_mode_t {
+ HB_OT_SHAPE_NORMALIZATION_MODE_NONE,
HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED,
HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS, /* never composes base-to-base */
HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT, /* always fully decomposes and then recompose back */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize.cc
index 6531e1b215..2a6a439003 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize.cc
@@ -213,8 +213,9 @@ decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shor
}
static inline void
-handle_variation_selector_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end)
+handle_variation_selector_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end, bool short_circuit)
{
+ /* TODO Currently if there's a variation-selector we give-up, it's just too hard. */
hb_buffer_t * const buffer = c->buffer;
hb_font_t * const font = c->font;
for (; buffer->idx < end - 1;) {
@@ -250,27 +251,26 @@ handle_variation_selector_cluster (const hb_ot_shape_normalize_context_t *c, uns
}
static inline void
-decompose_multi_char_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end)
+decompose_multi_char_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end, bool short_circuit)
{
hb_buffer_t * const buffer = c->buffer;
- /* TODO Currently if there's a variation-selector we give-up, it's just too hard. */
for (unsigned int i = buffer->idx; i < end; i++)
if (unlikely (buffer->unicode->is_variation_selector (buffer->info[i].codepoint))) {
- handle_variation_selector_cluster (c, end);
+ handle_variation_selector_cluster (c, end, short_circuit);
return;
}
while (buffer->idx < end)
- decompose_current_character (c, false);
+ decompose_current_character (c, short_circuit);
}
static inline void
-decompose_cluster (const hb_ot_shape_normalize_context_t *c, bool short_circuit, unsigned int end)
+decompose_cluster (const hb_ot_shape_normalize_context_t *c, unsigned int end, bool might_short_circuit, bool always_short_circuit)
{
if (likely (c->buffer->idx + 1 == end))
- decompose_current_character (c, short_circuit);
+ decompose_current_character (c, might_short_circuit);
else
- decompose_multi_char_cluster (c, end);
+ decompose_multi_char_cluster (c, end, always_short_circuit);
}
@@ -289,9 +289,7 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
hb_buffer_t *buffer,
hb_font_t *font)
{
- hb_ot_shape_normalization_mode_t mode = plan->shaper->normalization_preference ?
- plan->shaper->normalization_preference (&buffer->props) :
- HB_OT_SHAPE_NORMALIZATION_MODE_DEFAULT;
+ hb_ot_shape_normalization_mode_t mode = plan->shaper->normalization_preference;
const hb_ot_shape_normalize_context_t c = {
plan,
buffer,
@@ -301,8 +299,10 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
plan->shaper->compose ? plan->shaper->compose : compose_unicode
};
- bool short_circuit = mode != HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED &&
- mode != HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT;
+ bool always_short_circuit = mode == HB_OT_SHAPE_NORMALIZATION_MODE_NONE;
+ bool might_short_circuit = always_short_circuit ||
+ (mode != HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED &&
+ mode != HB_OT_SHAPE_NORMALIZATION_MODE_COMPOSED_DIACRITICS_NO_SHORT_CIRCUIT);
unsigned int count;
/* We do a fairly straightforward yet custom normalization process in three
@@ -323,7 +323,7 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
if (buffer->cur().cluster != buffer->info[end].cluster)
break;
- decompose_cluster (&c, short_circuit, end);
+ decompose_cluster (&c, end, might_short_circuit, always_short_circuit);
}
buffer->swap_buffers ();
@@ -355,7 +355,8 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
}
- if (mode == HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED)
+ if (mode == HB_OT_SHAPE_NORMALIZATION_MODE_NONE ||
+ mode == HB_OT_SHAPE_NORMALIZATION_MODE_DECOMPOSED)
return;
/* Third round, recompose */
@@ -393,8 +394,9 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
return;
buffer->merge_out_clusters (starter, buffer->out_len);
buffer->out_len--; /* Remove the second composable. */
- buffer->out_info[starter].codepoint = composed; /* Modify starter and carry on. */
- set_glyph (buffer->out_info[starter], font);
+ /* Modify starter and carry on. */
+ buffer->out_info[starter].codepoint = composed;
+ buffer->out_info[starter].glyph_index() = glyph;
_hb_glyph_info_set_unicode_props (&buffer->out_info[starter], buffer->unicode);
continue;
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-private.hh
index cbfab5b40c..df81fa25d9 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape-private.hh
@@ -40,6 +40,10 @@ struct hb_ot_shape_plan_t
const struct hb_ot_complex_shaper_t *shaper;
hb_ot_map_t map;
const void *data;
+ hb_mask_t rtlm_mask, frac_mask, numr_mask, dnom_mask;
+ hb_mask_t kern_mask;
+ unsigned int has_frac : 1;
+ unsigned int has_kern : 1;
inline void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const
{
@@ -77,6 +81,17 @@ struct hb_ot_shape_planner_t
plan.props = props;
plan.shaper = shaper;
map.compile (plan.map);
+
+ plan.rtlm_mask = plan.map.get_1_mask (HB_TAG ('r','t','l','m'));
+ plan.frac_mask = plan.map.get_1_mask (HB_TAG ('f','r','a','c'));
+ plan.numr_mask = plan.map.get_1_mask (HB_TAG ('n','u','m','r'));
+ plan.dnom_mask = plan.map.get_1_mask (HB_TAG ('d','n','o','m'));
+
+ plan.kern_mask = plan.map.get_mask (HB_DIRECTION_IS_HORIZONTAL (plan.props.direction) ?
+ HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n'));
+
+ plan.has_frac = plan.frac_mask || (plan.numr_mask && plan.dnom_mask);
+ plan.has_kern = !!plan.kern_mask;
}
private:
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape.cc b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape.cc
index 63c36f936f..3080a1d03d 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape.cc
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape.cc
@@ -88,6 +88,10 @@ hb_ot_shape_collect_features (hb_ot_shape_planner_t *planner,
break;
}
+ map->add_feature (HB_TAG ('f','r','a','c'), 1, F_NONE);
+ map->add_feature (HB_TAG ('n','u','m','r'), 1, F_NONE);
+ map->add_feature (HB_TAG ('d','n','o','m'), 1, F_NONE);
+
if (planner->shaper->collect_features)
planner->shaper->collect_features (planner);
@@ -234,8 +238,7 @@ hb_insert_dotted_circle (hb_buffer_t *buffer, hb_font_t *font)
HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK)
return;
- hb_codepoint_t dottedcircle_glyph;
- if (!font->get_glyph (0x25CC, 0, &dottedcircle_glyph))
+ if (!font->has_glyph (0x25CC))
return;
hb_glyph_info_t dottedcircle;
@@ -292,7 +295,7 @@ hb_ot_mirror_chars (hb_ot_shape_context_t *c)
hb_buffer_t *buffer = c->buffer;
hb_unicode_funcs_t *unicode = buffer->unicode;
- hb_mask_t rtlm_mask = c->plan->map.get_1_mask (HB_TAG ('r','t','l','m'));
+ hb_mask_t rtlm_mask = c->plan->rtlm_mask;
unsigned int count = buffer->len;
hb_glyph_info_t *info = buffer->info;
@@ -306,13 +309,58 @@ hb_ot_mirror_chars (hb_ot_shape_context_t *c)
}
static inline void
-hb_ot_shape_setup_masks (hb_ot_shape_context_t *c)
+hb_ot_shape_setup_masks_fraction (hb_ot_shape_context_t *c)
+{
+ if (!c->plan->has_frac)
+ return;
+
+ hb_buffer_t *buffer = c->buffer;
+
+ /* TODO look in pre/post context text also. */
+ unsigned int count = buffer->len;
+ hb_glyph_info_t *info = buffer->info;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ if (info[i].codepoint == 0x2044) /* FRACTION SLASH */
+ {
+ unsigned int start = i, end = i + 1;
+ while (start &&
+ _hb_glyph_info_get_general_category (&info[start - 1]) ==
+ HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER)
+ start--;
+ while (end < count &&
+ _hb_glyph_info_get_general_category (&info[end]) ==
+ HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER)
+ end++;
+
+ for (unsigned int j = start; j < i; j++)
+ info[j].mask |= c->plan->numr_mask | c->plan->frac_mask;
+ info[i].mask |= c->plan->frac_mask;
+ for (unsigned int j = i + 1; j < end; j++)
+ info[j].mask |= c->plan->frac_mask | c->plan->dnom_mask;
+
+ i = end - 1;
+ }
+ }
+}
+
+static inline void
+hb_ot_shape_initialize_masks (hb_ot_shape_context_t *c)
{
hb_ot_map_t *map = &c->plan->map;
hb_buffer_t *buffer = c->buffer;
hb_mask_t global_mask = map->get_global_mask ();
buffer->reset_masks (global_mask);
+}
+
+static inline void
+hb_ot_shape_setup_masks (hb_ot_shape_context_t *c)
+{
+ hb_ot_map_t *map = &c->plan->map;
+ hb_buffer_t *buffer = c->buffer;
+
+ hb_ot_shape_setup_masks_fraction (c);
if (c->plan->shaper->setup_masks)
c->plan->shaper->setup_masks (c->plan, buffer, c->font);
@@ -358,6 +406,8 @@ hb_ot_substitute_default (hb_ot_shape_context_t *c)
if (c->plan->shaper->preprocess_text)
c->plan->shaper->preprocess_text (c->plan, buffer, c->font);
+ hb_ot_shape_initialize_masks (c);
+
hb_ot_mirror_chars (c);
HB_BUFFER_ALLOCATE_VAR (buffer, glyph_index);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot-shape.h b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape.h
new file mode 100644
index 0000000000..afe6fe9618
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot-shape.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright © 2013 Red Hat, 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.
+ *
+ * Red Hat Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_SHAPE_H
+#define HB_OT_SHAPE_H
+#define HB_OT_SHAPE_H_IN
+
+#include "hb.h"
+
+#include "hb-ot-layout.h"
+#include "hb-ot-tag.h"
+
+HB_BEGIN_DECLS
+
+/* TODO port to shape-plan / set. */
+void
+hb_ot_shape_glyphs_closure (hb_font_t *font,
+ hb_buffer_t *buffer,
+ const hb_feature_t *features,
+ unsigned int num_features,
+ hb_set_t *glyphs);
+
+void
+hb_ot_shape_plan_collect_lookups (hb_shape_plan_t *shape_plan,
+ hb_tag_t table_tag,
+ hb_set_t *lookup_indexes /* OUT */);
+
+HB_END_DECLS
+
+#undef HB_OT_SHAPE_H_IN
+#endif /* HB_OT_SHAPE_H */
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-ot.h b/src/3rdparty/harfbuzz-ng/src/hb-ot.h
index 8073906399..e9a280b7dd 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-ot.h
+++ b/src/3rdparty/harfbuzz-ng/src/hb-ot.h
@@ -32,17 +32,10 @@
#include "hb-ot-layout.h"
#include "hb-ot-tag.h"
+#include "hb-ot-shape.h"
HB_BEGIN_DECLS
-/* TODO remove */
-void
-hb_ot_shape_glyphs_closure (hb_font_t *font,
- hb_buffer_t *buffer,
- const hb_feature_t *features,
- unsigned int num_features,
- hb_set_t *glyphs);
-
HB_END_DECLS
#undef HB_OT_H_IN
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-private.hh
index 4b72260ed5..680b21e2cc 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-private.hh
@@ -808,6 +808,12 @@ hb_in_range (T u, T lo, T hi)
}
template <typename T> static inline bool
+hb_in_ranges (T u, T lo1, T hi1, T lo2, T hi2)
+{
+ return hb_in_range (u, lo1, hi1) || hb_in_range (u, lo2, hi2);
+}
+
+template <typename T> static inline bool
hb_in_ranges (T u, T lo1, T hi1, T lo2, T hi2, T lo3, T hi3)
{
return hb_in_range (u, lo1, hi1) || hb_in_range (u, lo2, hi2) || hb_in_range (u, lo3, hi3);
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-shaper-list.hh b/src/3rdparty/harfbuzz-ng/src/hb-shaper-list.hh
index b9c029e58f..da6d8e0be9 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-shaper-list.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-shaper-list.hh
@@ -52,4 +52,6 @@ HB_SHAPER_IMPLEMENT (uniscribe)
HB_SHAPER_IMPLEMENT (coretext)
#endif
+#ifdef HAVE_FALLBACK
HB_SHAPER_IMPLEMENT (fallback) /* <--- This should be last. */
+#endif
diff --git a/src/3rdparty/harfbuzz-ng/src/hb-unicode-private.hh b/src/3rdparty/harfbuzz-ng/src/hb-unicode-private.hh
index 779d8ae229..ba193e8fa5 100644
--- a/src/3rdparty/harfbuzz-ng/src/hb-unicode-private.hh
+++ b/src/3rdparty/harfbuzz-ng/src/hb-unicode-private.hh
@@ -106,7 +106,11 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
modified_combining_class (hb_codepoint_t unicode)
{
/* XXX This hack belongs to the Myanmar shaper. */
- if (unicode == 0x1037) unicode = 0x103A;
+ if (unlikely (unicode == 0x1037)) unicode = 0x103A;
+
+ /* XXX This hack belongs to the SEA shaper (for Tai Tham):
+ * Reorder SAKOT to ensure it comes after any tone marks. */
+ if (unlikely (unicode == 0x1A60)) return 254;
return _hb_modified_combining_class[combining_class (unicode)];
}
@@ -130,10 +134,10 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
* 6.3 is also added manually. The new Unicode 6.3 bidi formatting
* characters are encoded in a block that was Default_Ignorable already.
*
- * Note: While U+115F and U+1160 are Default_Ignorable, we do NOT want to
- * hide them, as the way Uniscribe has implemented them is with regular
- * spacing glyphs, and that's the way fonts are made to work. As such,
- * we make exceptions for those two.
+ * Note: While U+115F, U+1160, U+3164 and U+FFA0 are Default_Ignorable,
+ * we do NOT want to hide them, as the way Uniscribe has implemented them
+ * is with regular spacing glyphs, and that's the way fonts are made to work.
+ * As such, we make exceptions for those four.
*
* Gathered from:
* http://unicode.org/cldr/utility/list-unicodeset.jsp?a=[:DI:]&abb=on&ucd=on&esc=on
@@ -155,10 +159,10 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
* 200B..200F ;RIGHT-TO-LEFT MARK
* 202A..202E ;RIGHT-TO-LEFT OVERRIDE
* 2060..206F ;NOMINAL DIGIT SHAPES
- * 3164 ;HANGUL FILLER
+ * #3164 ;HANGUL FILLER
* FE00..FE0F ;VARIATION SELECTOR-16
* FEFF ;ZERO WIDTH NO-BREAK SPACE
- * FFA0 ;HALFWIDTH HANGUL FILLER
+ * #FFA0 ;HALFWIDTH HANGUL FILLER
* FFF0..FFF8 ;<unassigned-FFF8>
* 1D173..1D17A ;MUSICAL SYMBOL END PHRASE
* E0000..E0FFF ;<unassigned-E0FFF>
@@ -180,9 +184,8 @@ HB_UNICODE_FUNCS_IMPLEMENT_CALLBACKS_SIMPLE
case 0x20: return hb_in_ranges<hb_codepoint_t> (ch, 0x200B, 0x200F,
0x202A, 0x202E,
0x2060, 0x206F);
- case 0x31: return unlikely (ch == 0x3164);
case 0xFE: return hb_in_range<hb_codepoint_t> (ch, 0xFE00, 0xFE0F) || ch == 0xFEFF;
- case 0xFF: return hb_in_range<hb_codepoint_t> (ch, 0xFFF0, 0xFFF8) || ch == 0xFFA0;
+ case 0xFF: return hb_in_range<hb_codepoint_t> (ch, 0xFFF0, 0xFFF8);
default: return false;
}
}
diff --git a/src/3rdparty/harfbuzz.pri b/src/3rdparty/harfbuzz.pri
index 0d55867c74..bc002340ef 100644
--- a/src/3rdparty/harfbuzz.pri
+++ b/src/3rdparty/harfbuzz.pri
@@ -9,7 +9,6 @@ contains(QT_CONFIG, harfbuzz) {
$$QT_HARFBUZZ_DIR/src/hb-buffer-serialize.cc \
$$QT_HARFBUZZ_DIR/src/hb-common.cc \
$$QT_HARFBUZZ_DIR/src/hb-face.cc \
- $$QT_HARFBUZZ_DIR/src/hb-fallback-shape.cc \
$$QT_HARFBUZZ_DIR/src/hb-font.cc \
$$QT_HARFBUZZ_DIR/src/hb-ot-tag.cc \
$$QT_HARFBUZZ_DIR/src/hb-set.cc \
@@ -65,11 +64,14 @@ contains(QT_CONFIG, harfbuzz) {
$$QT_HARFBUZZ_DIR/src/hb-ot-shape.cc \
$$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-arabic.cc \
$$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-default.cc \
+ $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-hangul.cc \
+ $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-hebrew.cc \
$$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-indic.cc \
$$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-indic-table.cc \
$$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-myanmar.cc \
$$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-sea.cc \
$$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-thai.cc \
+ $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-tibetan.cc \
$$QT_HARFBUZZ_DIR/src/hb-ot-shape-fallback.cc \
$$QT_HARFBUZZ_DIR/src/hb-ot-shape-normalize.cc
@@ -96,6 +98,7 @@ contains(QT_CONFIG, harfbuzz) {
HEADERS += \
$$QT_HARFBUZZ_DIR/src/hb-ot.h \
$$QT_HARFBUZZ_DIR/src/hb-ot-layout.h \
+ $$QT_HARFBUZZ_DIR/src/hb-ot-shape.h \
$$QT_HARFBUZZ_DIR/src/hb-ot-tag.h
DEFINES += HAVE_CONFIG_H