
#line 1 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
/*
 * Copyright © 2011,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
 */

#ifndef HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH
#define HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH

#include "hb-private.hh"


#line 36 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
	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, 8u, 8u, 0
};

static const char _myanmar_syllable_machine_key_spans[] = {
	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, 1
};

static const short _myanmar_syllable_machine_index_offsets[] = {
	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, 1, 0, 0, 0, 0, 7, 
	0, 8, 1, 0, 9, 10, 11, 12, 
	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, 34, 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, 34, 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, 1, 
	42, 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, 16, 
	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, 16, 
	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, 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, 0, 6, 0, 0, 7, 
	0, 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, 9, 10
};

static const char _myanmar_syllable_machine_to_state_actions[] = {
	1, 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 _myanmar_syllable_machine_from_state_actions[] = {
	2, 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 _myanmar_syllable_machine_eof_trans[] = {
	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;
static const int myanmar_syllable_machine_first_final = 0;
static const int myanmar_syllable_machine_error = -1;

static const int myanmar_syllable_machine_en_main = 0;


#line 36 "../../src/hb-ot-shape-complex-myanmar-machine.rl"



#line 93 "../../src/hb-ot-shape-complex-myanmar-machine.rl"


#define found_syllable(syllable_type) \
  HB_STMT_START { \
    if (0) fprintf (stderr, "syllable %d..%d %s\n", last, p+1, #syllable_type); \
    for (unsigned int i = last; i < p+1; i++) \
      info[i].syllable() = (syllable_serial << 4) | syllable_type; \
    last = p+1; \
    syllable_serial++; \
    if (unlikely (syllable_serial == 16)) syllable_serial = 1; \
  } HB_STMT_END

static void
find_syllables (hb_buffer_t *buffer)
{
  unsigned int p, pe, eof, ts HB_UNUSED, te HB_UNUSED, act HB_UNUSED;
  int cs;
  hb_glyph_info_t *info = buffer->info;
  
#line 289 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
	{
	cs = myanmar_syllable_machine_start;
	ts = 0;
	te = 0;
	act = 0;
	}

#line 114 "../../src/hb-ot-shape-complex-myanmar-machine.rl"


  p = 0;
  pe = eof = buffer->len;

  unsigned int last = 0;
  unsigned int syllable_serial = 1;
  
#line 306 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
	{
	int _slen;
	int _trans;
	const unsigned char *_keys;
	const char *_inds;
	if ( p == pe )
		goto _test_eof;
_resume:
	switch ( _myanmar_syllable_machine_from_state_actions[cs] ) {
	case 2:
#line 1 "NONE"
	{ts = p;}
	break;
#line 320 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
	}

	_keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
	_inds = _myanmar_syllable_machine_indicies + _myanmar_syllable_machine_index_offsets[cs];

	_slen = _myanmar_syllable_machine_key_spans[cs];
	_trans = _inds[ _slen > 0 && _keys[0] <=( info[p].myanmar_category()) &&
		( info[p].myanmar_category()) <= _keys[1] ?
		( info[p].myanmar_category()) - _keys[0] : _slen ];

_eof_trans:
	cs = _myanmar_syllable_machine_trans_targs[_trans];

	if ( _myanmar_syllable_machine_trans_actions[_trans] == 0 )
		goto _again;

	switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
	case 7:
#line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
	{te = p+1;{ found_syllable (consonant_syllable); }}
	break;
	case 5:
#line 86 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
	{te = p+1;{ found_syllable (non_myanmar_cluster); }}
	break;
	case 10:
#line 87 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
	{te = p+1;{ found_syllable (punctuation_cluster); }}
	break;
	case 4:
#line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
	{te = p+1;{ found_syllable (broken_cluster); }}
	break;
	case 3:
#line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
	{te = p+1;{ found_syllable (non_myanmar_cluster); }}
	break;
	case 6:
#line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
	{te = p;p--;{ found_syllable (consonant_syllable); }}
	break;
	case 8:
#line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
	{te = p;p--;{ found_syllable (broken_cluster); }}
	break;
	case 9:
#line 89 "../../src/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.tmp"
	}

_again:
	switch ( _myanmar_syllable_machine_to_state_actions[cs] ) {
	case 1:
#line 1 "NONE"
	{ts = 0;}
	break;
#line 379 "hb-ot-shape-complex-myanmar-machine.hh.tmp"
	}

	if ( ++p != pe )
		goto _resume;
	_test_eof: {}
	if ( p == eof )
	{
	if ( _myanmar_syllable_machine_eof_trans[cs] > 0 ) {
		_trans = _myanmar_syllable_machine_eof_trans[cs] - 1;
		goto _eof_trans;
	}
	}

	}

#line 123 "../../src/hb-ot-shape-complex-myanmar-machine.rl"

}

#undef found_syllable

#endif /* HB_OT_SHAPE_COMPLEX_MYANMAR_MACHINE_HH */
