xref: /aosp_15_r20/external/harfbuzz_ng/src/hb-buffer-deserialize-text-unicode.hh (revision 2d1272b857b1f7575e6e246373e1cb218663db8a)
1*2d1272b8SAndroid Build Coastguard Worker 
2*2d1272b8SAndroid Build Coastguard Worker #line 1 "hb-buffer-deserialize-text-unicode.rl"
3*2d1272b8SAndroid Build Coastguard Worker /*
4*2d1272b8SAndroid Build Coastguard Worker  * Copyright © 2013  Google, Inc.
5*2d1272b8SAndroid Build Coastguard Worker  *
6*2d1272b8SAndroid Build Coastguard Worker  *  This is part of HarfBuzz, a text shaping library.
7*2d1272b8SAndroid Build Coastguard Worker  *
8*2d1272b8SAndroid Build Coastguard Worker  * Permission is hereby granted, without written agreement and without
9*2d1272b8SAndroid Build Coastguard Worker  * license or royalty fees, to use, copy, modify, and distribute this
10*2d1272b8SAndroid Build Coastguard Worker  * software and its documentation for any purpose, provided that the
11*2d1272b8SAndroid Build Coastguard Worker  * above copyright notice and the following two paragraphs appear in
12*2d1272b8SAndroid Build Coastguard Worker  * all copies of this software.
13*2d1272b8SAndroid Build Coastguard Worker  *
14*2d1272b8SAndroid Build Coastguard Worker  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
15*2d1272b8SAndroid Build Coastguard Worker  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
16*2d1272b8SAndroid Build Coastguard Worker  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
17*2d1272b8SAndroid Build Coastguard Worker  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
18*2d1272b8SAndroid Build Coastguard Worker  * DAMAGE.
19*2d1272b8SAndroid Build Coastguard Worker  *
20*2d1272b8SAndroid Build Coastguard Worker  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
21*2d1272b8SAndroid Build Coastguard Worker  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
22*2d1272b8SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
23*2d1272b8SAndroid Build Coastguard Worker  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
24*2d1272b8SAndroid Build Coastguard Worker  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
25*2d1272b8SAndroid Build Coastguard Worker  *
26*2d1272b8SAndroid Build Coastguard Worker  * Google Author(s): Behdad Esfahbod
27*2d1272b8SAndroid Build Coastguard Worker  */
28*2d1272b8SAndroid Build Coastguard Worker 
29*2d1272b8SAndroid Build Coastguard Worker #ifndef HB_BUFFER_DESERIALIZE_TEXT_UNICODE_HH
30*2d1272b8SAndroid Build Coastguard Worker #define HB_BUFFER_DESERIALIZE_TEXT_UNICODE_HH
31*2d1272b8SAndroid Build Coastguard Worker 
32*2d1272b8SAndroid Build Coastguard Worker #include "hb.hh"
33*2d1272b8SAndroid Build Coastguard Worker 
34*2d1272b8SAndroid Build Coastguard Worker 
35*2d1272b8SAndroid Build Coastguard Worker #line 36 "hb-buffer-deserialize-text-unicode.hh"
36*2d1272b8SAndroid Build Coastguard Worker static const unsigned char _deserialize_text_unicode_trans_keys[] = {
37*2d1272b8SAndroid Build Coastguard Worker 	0u, 0u, 9u, 117u, 43u, 102u, 48u, 102u, 48u, 57u, 9u, 124u, 9u, 124u, 9u, 124u,
38*2d1272b8SAndroid Build Coastguard Worker 	9u, 124u, 0
39*2d1272b8SAndroid Build Coastguard Worker };
40*2d1272b8SAndroid Build Coastguard Worker 
41*2d1272b8SAndroid Build Coastguard Worker static const char _deserialize_text_unicode_key_spans[] = {
42*2d1272b8SAndroid Build Coastguard Worker 	0, 109, 60, 55, 10, 116, 116, 116,
43*2d1272b8SAndroid Build Coastguard Worker 	116
44*2d1272b8SAndroid Build Coastguard Worker };
45*2d1272b8SAndroid Build Coastguard Worker 
46*2d1272b8SAndroid Build Coastguard Worker static const short _deserialize_text_unicode_index_offsets[] = {
47*2d1272b8SAndroid Build Coastguard Worker 	0, 0, 110, 171, 227, 238, 355, 472,
48*2d1272b8SAndroid Build Coastguard Worker 	589
49*2d1272b8SAndroid Build Coastguard Worker };
50*2d1272b8SAndroid Build Coastguard Worker 
51*2d1272b8SAndroid Build Coastguard Worker static const char _deserialize_text_unicode_indicies[] = {
52*2d1272b8SAndroid Build Coastguard Worker 	0, 0, 0, 0, 0, 1, 1,
53*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
54*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
55*2d1272b8SAndroid Build Coastguard Worker 	0, 1, 1, 1, 1, 1, 1, 1,
56*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
57*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
58*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
59*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
60*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
61*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 2, 1, 1,
62*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
63*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
64*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
65*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 2, 1, 3,
66*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 4, 4, 4, 4,
67*2d1272b8SAndroid Build Coastguard Worker 	4, 4, 4, 4, 4, 4, 1, 1,
68*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 4, 4, 4,
69*2d1272b8SAndroid Build Coastguard Worker 	4, 4, 4, 1, 1, 1, 1, 1,
70*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
71*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
72*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 4, 4, 4,
73*2d1272b8SAndroid Build Coastguard Worker 	4, 4, 4, 1, 4, 4, 4, 4,
74*2d1272b8SAndroid Build Coastguard Worker 	4, 4, 4, 4, 4, 4, 1, 1,
75*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 4, 4, 4,
76*2d1272b8SAndroid Build Coastguard Worker 	4, 4, 4, 1, 1, 1, 1, 1,
77*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
78*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
79*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 4, 4, 4,
80*2d1272b8SAndroid Build Coastguard Worker 	4, 4, 4, 1, 5, 6, 6, 6,
81*2d1272b8SAndroid Build Coastguard Worker 	6, 6, 6, 6, 6, 6, 1, 7,
82*2d1272b8SAndroid Build Coastguard Worker 	7, 7, 7, 7, 1, 1, 1, 1,
83*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
84*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 7, 1,
85*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
86*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 8, 8,
87*2d1272b8SAndroid Build Coastguard Worker 	8, 8, 8, 8, 8, 8, 8, 8,
88*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 9, 1, 1, 1, 8,
89*2d1272b8SAndroid Build Coastguard Worker 	8, 8, 8, 8, 8, 1, 1, 1,
90*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
91*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
92*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 8,
93*2d1272b8SAndroid Build Coastguard Worker 	8, 8, 8, 8, 8, 1, 1, 1,
94*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
95*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
96*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 10, 1, 11, 11, 11, 11,
97*2d1272b8SAndroid Build Coastguard Worker 	11, 1, 1, 1, 1, 1, 1, 1,
98*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
99*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 11, 1, 1, 1, 1,
100*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
101*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
102*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
103*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
104*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
105*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
106*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
107*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
108*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
109*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
110*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 0,
111*2d1272b8SAndroid Build Coastguard Worker 	1, 12, 12, 12, 12, 12, 1, 1,
112*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
113*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
114*2d1272b8SAndroid Build Coastguard Worker 	12, 1, 1, 1, 1, 1, 1, 1,
115*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
116*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
117*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
118*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
119*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
120*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
121*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
122*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
123*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
124*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
125*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 13, 1, 12, 12,
126*2d1272b8SAndroid Build Coastguard Worker 	12, 12, 12, 1, 1, 1, 1, 1,
127*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
128*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 12, 1, 1,
129*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
130*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 14, 14, 14,
131*2d1272b8SAndroid Build Coastguard Worker 	14, 14, 14, 14, 14, 14, 14, 1,
132*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
133*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
134*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
135*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
136*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
137*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
138*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
139*2d1272b8SAndroid Build Coastguard Worker 	1, 1, 1, 1, 1, 1, 1, 1,
140*2d1272b8SAndroid Build Coastguard Worker 	1, 13, 1, 0
141*2d1272b8SAndroid Build Coastguard Worker };
142*2d1272b8SAndroid Build Coastguard Worker 
143*2d1272b8SAndroid Build Coastguard Worker static const char _deserialize_text_unicode_trans_targs[] = {
144*2d1272b8SAndroid Build Coastguard Worker 	1, 0, 2, 3, 5, 7, 8, 6,
145*2d1272b8SAndroid Build Coastguard Worker 	5, 4, 1, 6, 6, 1, 8
146*2d1272b8SAndroid Build Coastguard Worker };
147*2d1272b8SAndroid Build Coastguard Worker 
148*2d1272b8SAndroid Build Coastguard Worker static const char _deserialize_text_unicode_trans_actions[] = {
149*2d1272b8SAndroid Build Coastguard Worker 	0, 0, 1, 0, 2, 2, 2, 3,
150*2d1272b8SAndroid Build Coastguard Worker 	0, 4, 3, 0, 5, 5, 0
151*2d1272b8SAndroid Build Coastguard Worker };
152*2d1272b8SAndroid Build Coastguard Worker 
153*2d1272b8SAndroid Build Coastguard Worker static const char _deserialize_text_unicode_eof_actions[] = {
154*2d1272b8SAndroid Build Coastguard Worker 	0, 0, 0, 0, 0, 3, 0, 5,
155*2d1272b8SAndroid Build Coastguard Worker 	5
156*2d1272b8SAndroid Build Coastguard Worker };
157*2d1272b8SAndroid Build Coastguard Worker 
158*2d1272b8SAndroid Build Coastguard Worker static const int deserialize_text_unicode_start = 1;
159*2d1272b8SAndroid Build Coastguard Worker static const int deserialize_text_unicode_first_final = 5;
160*2d1272b8SAndroid Build Coastguard Worker static const int deserialize_text_unicode_error = 0;
161*2d1272b8SAndroid Build Coastguard Worker 
162*2d1272b8SAndroid Build Coastguard Worker static const int deserialize_text_unicode_en_main = 1;
163*2d1272b8SAndroid Build Coastguard Worker 
164*2d1272b8SAndroid Build Coastguard Worker 
165*2d1272b8SAndroid Build Coastguard Worker #line 79 "hb-buffer-deserialize-text-unicode.rl"
166*2d1272b8SAndroid Build Coastguard Worker 
167*2d1272b8SAndroid Build Coastguard Worker 
168*2d1272b8SAndroid Build Coastguard Worker static hb_bool_t
_hb_buffer_deserialize_text_unicode(hb_buffer_t * buffer,const char * buf,unsigned int buf_len,const char ** end_ptr,hb_font_t * font)169*2d1272b8SAndroid Build Coastguard Worker _hb_buffer_deserialize_text_unicode (hb_buffer_t *buffer,
170*2d1272b8SAndroid Build Coastguard Worker 				     const char *buf,
171*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int buf_len,
172*2d1272b8SAndroid Build Coastguard Worker 				     const char **end_ptr,
173*2d1272b8SAndroid Build Coastguard Worker 				     hb_font_t *font)
174*2d1272b8SAndroid Build Coastguard Worker {
175*2d1272b8SAndroid Build Coastguard Worker   const char *p = buf, *pe = buf + buf_len, *eof = pe, *orig_pe = pe;
176*2d1272b8SAndroid Build Coastguard Worker 
177*2d1272b8SAndroid Build Coastguard Worker   while (p < pe && ISSPACE (*p))
178*2d1272b8SAndroid Build Coastguard Worker     p++;
179*2d1272b8SAndroid Build Coastguard Worker   if (p < pe && *p == (buffer->len ? '|' : '<'))
180*2d1272b8SAndroid Build Coastguard Worker     *end_ptr = ++p;
181*2d1272b8SAndroid Build Coastguard Worker 
182*2d1272b8SAndroid Build Coastguard Worker   const char *end = strchr ((char *) p, '>');
183*2d1272b8SAndroid Build Coastguard Worker   if (end)
184*2d1272b8SAndroid Build Coastguard Worker     pe = eof = end;
185*2d1272b8SAndroid Build Coastguard Worker   else
186*2d1272b8SAndroid Build Coastguard Worker   {
187*2d1272b8SAndroid Build Coastguard Worker     end = strrchr ((char *) p, '|');
188*2d1272b8SAndroid Build Coastguard Worker     if (end)
189*2d1272b8SAndroid Build Coastguard Worker       pe = eof = end;
190*2d1272b8SAndroid Build Coastguard Worker     else
191*2d1272b8SAndroid Build Coastguard Worker       pe = eof = p;
192*2d1272b8SAndroid Build Coastguard Worker   }
193*2d1272b8SAndroid Build Coastguard Worker 
194*2d1272b8SAndroid Build Coastguard Worker 
195*2d1272b8SAndroid Build Coastguard Worker   const char *tok = nullptr;
196*2d1272b8SAndroid Build Coastguard Worker   int cs;
197*2d1272b8SAndroid Build Coastguard Worker   hb_glyph_info_t info = {0};
198*2d1272b8SAndroid Build Coastguard Worker   const hb_glyph_position_t pos = {0};
199*2d1272b8SAndroid Build Coastguard Worker 
200*2d1272b8SAndroid Build Coastguard Worker #line 201 "hb-buffer-deserialize-text-unicode.hh"
201*2d1272b8SAndroid Build Coastguard Worker 	{
202*2d1272b8SAndroid Build Coastguard Worker 	cs = deserialize_text_unicode_start;
203*2d1272b8SAndroid Build Coastguard Worker 	}
204*2d1272b8SAndroid Build Coastguard Worker 
205*2d1272b8SAndroid Build Coastguard Worker #line 206 "hb-buffer-deserialize-text-unicode.hh"
206*2d1272b8SAndroid Build Coastguard Worker 	{
207*2d1272b8SAndroid Build Coastguard Worker 	int _slen;
208*2d1272b8SAndroid Build Coastguard Worker 	int _trans;
209*2d1272b8SAndroid Build Coastguard Worker 	const unsigned char *_keys;
210*2d1272b8SAndroid Build Coastguard Worker 	const char *_inds;
211*2d1272b8SAndroid Build Coastguard Worker 	if ( p == pe )
212*2d1272b8SAndroid Build Coastguard Worker 		goto _test_eof;
213*2d1272b8SAndroid Build Coastguard Worker 	if ( cs == 0 )
214*2d1272b8SAndroid Build Coastguard Worker 		goto _out;
215*2d1272b8SAndroid Build Coastguard Worker _resume:
216*2d1272b8SAndroid Build Coastguard Worker 	_keys = _deserialize_text_unicode_trans_keys + (cs<<1);
217*2d1272b8SAndroid Build Coastguard Worker 	_inds = _deserialize_text_unicode_indicies + _deserialize_text_unicode_index_offsets[cs];
218*2d1272b8SAndroid Build Coastguard Worker 
219*2d1272b8SAndroid Build Coastguard Worker 	_slen = _deserialize_text_unicode_key_spans[cs];
220*2d1272b8SAndroid Build Coastguard Worker 	_trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
221*2d1272b8SAndroid Build Coastguard Worker 		(*p) <= _keys[1] ?
222*2d1272b8SAndroid Build Coastguard Worker 		(*p) - _keys[0] : _slen ];
223*2d1272b8SAndroid Build Coastguard Worker 
224*2d1272b8SAndroid Build Coastguard Worker 	cs = _deserialize_text_unicode_trans_targs[_trans];
225*2d1272b8SAndroid Build Coastguard Worker 
226*2d1272b8SAndroid Build Coastguard Worker 	if ( _deserialize_text_unicode_trans_actions[_trans] == 0 )
227*2d1272b8SAndroid Build Coastguard Worker 		goto _again;
228*2d1272b8SAndroid Build Coastguard Worker 
229*2d1272b8SAndroid Build Coastguard Worker 	switch ( _deserialize_text_unicode_trans_actions[_trans] ) {
230*2d1272b8SAndroid Build Coastguard Worker 	case 1:
231*2d1272b8SAndroid Build Coastguard Worker #line 38 "hb-buffer-deserialize-text-unicode.rl"
232*2d1272b8SAndroid Build Coastguard Worker 	{
233*2d1272b8SAndroid Build Coastguard Worker 	hb_memset (&info, 0, sizeof (info));
234*2d1272b8SAndroid Build Coastguard Worker }
235*2d1272b8SAndroid Build Coastguard Worker 	break;
236*2d1272b8SAndroid Build Coastguard Worker 	case 2:
237*2d1272b8SAndroid Build Coastguard Worker #line 51 "hb-buffer-deserialize-text-unicode.rl"
238*2d1272b8SAndroid Build Coastguard Worker 	{
239*2d1272b8SAndroid Build Coastguard Worker 	tok = p;
240*2d1272b8SAndroid Build Coastguard Worker }
241*2d1272b8SAndroid Build Coastguard Worker 	break;
242*2d1272b8SAndroid Build Coastguard Worker 	case 4:
243*2d1272b8SAndroid Build Coastguard Worker #line 55 "hb-buffer-deserialize-text-unicode.rl"
244*2d1272b8SAndroid Build Coastguard Worker 	{if (!parse_hex (tok, p, &info.codepoint )) return false; }
245*2d1272b8SAndroid Build Coastguard Worker 	break;
246*2d1272b8SAndroid Build Coastguard Worker 	case 3:
247*2d1272b8SAndroid Build Coastguard Worker #line 55 "hb-buffer-deserialize-text-unicode.rl"
248*2d1272b8SAndroid Build Coastguard Worker 	{if (!parse_hex (tok, p, &info.codepoint )) return false; }
249*2d1272b8SAndroid Build Coastguard Worker #line 42 "hb-buffer-deserialize-text-unicode.rl"
250*2d1272b8SAndroid Build Coastguard Worker 	{
251*2d1272b8SAndroid Build Coastguard Worker 	buffer->add_info (info);
252*2d1272b8SAndroid Build Coastguard Worker 	if (unlikely (!buffer->successful))
253*2d1272b8SAndroid Build Coastguard Worker 	  return false;
254*2d1272b8SAndroid Build Coastguard Worker 	if (buffer->have_positions)
255*2d1272b8SAndroid Build Coastguard Worker 	  buffer->pos[buffer->len - 1] = pos;
256*2d1272b8SAndroid Build Coastguard Worker 	*end_ptr = p;
257*2d1272b8SAndroid Build Coastguard Worker }
258*2d1272b8SAndroid Build Coastguard Worker 	break;
259*2d1272b8SAndroid Build Coastguard Worker 	case 5:
260*2d1272b8SAndroid Build Coastguard Worker #line 57 "hb-buffer-deserialize-text-unicode.rl"
261*2d1272b8SAndroid Build Coastguard Worker 	{ if (!parse_uint (tok, p, &info.cluster )) return false; }
262*2d1272b8SAndroid Build Coastguard Worker #line 42 "hb-buffer-deserialize-text-unicode.rl"
263*2d1272b8SAndroid Build Coastguard Worker 	{
264*2d1272b8SAndroid Build Coastguard Worker 	buffer->add_info (info);
265*2d1272b8SAndroid Build Coastguard Worker 	if (unlikely (!buffer->successful))
266*2d1272b8SAndroid Build Coastguard Worker 	  return false;
267*2d1272b8SAndroid Build Coastguard Worker 	if (buffer->have_positions)
268*2d1272b8SAndroid Build Coastguard Worker 	  buffer->pos[buffer->len - 1] = pos;
269*2d1272b8SAndroid Build Coastguard Worker 	*end_ptr = p;
270*2d1272b8SAndroid Build Coastguard Worker }
271*2d1272b8SAndroid Build Coastguard Worker 	break;
272*2d1272b8SAndroid Build Coastguard Worker #line 273 "hb-buffer-deserialize-text-unicode.hh"
273*2d1272b8SAndroid Build Coastguard Worker 	}
274*2d1272b8SAndroid Build Coastguard Worker 
275*2d1272b8SAndroid Build Coastguard Worker _again:
276*2d1272b8SAndroid Build Coastguard Worker 	if ( cs == 0 )
277*2d1272b8SAndroid Build Coastguard Worker 		goto _out;
278*2d1272b8SAndroid Build Coastguard Worker 	if ( ++p != pe )
279*2d1272b8SAndroid Build Coastguard Worker 		goto _resume;
280*2d1272b8SAndroid Build Coastguard Worker 	_test_eof: {}
281*2d1272b8SAndroid Build Coastguard Worker 	if ( p == eof )
282*2d1272b8SAndroid Build Coastguard Worker 	{
283*2d1272b8SAndroid Build Coastguard Worker 	switch ( _deserialize_text_unicode_eof_actions[cs] ) {
284*2d1272b8SAndroid Build Coastguard Worker 	case 3:
285*2d1272b8SAndroid Build Coastguard Worker #line 55 "hb-buffer-deserialize-text-unicode.rl"
286*2d1272b8SAndroid Build Coastguard Worker 	{if (!parse_hex (tok, p, &info.codepoint )) return false; }
287*2d1272b8SAndroid Build Coastguard Worker #line 42 "hb-buffer-deserialize-text-unicode.rl"
288*2d1272b8SAndroid Build Coastguard Worker 	{
289*2d1272b8SAndroid Build Coastguard Worker 	buffer->add_info (info);
290*2d1272b8SAndroid Build Coastguard Worker 	if (unlikely (!buffer->successful))
291*2d1272b8SAndroid Build Coastguard Worker 	  return false;
292*2d1272b8SAndroid Build Coastguard Worker 	if (buffer->have_positions)
293*2d1272b8SAndroid Build Coastguard Worker 	  buffer->pos[buffer->len - 1] = pos;
294*2d1272b8SAndroid Build Coastguard Worker 	*end_ptr = p;
295*2d1272b8SAndroid Build Coastguard Worker }
296*2d1272b8SAndroid Build Coastguard Worker 	break;
297*2d1272b8SAndroid Build Coastguard Worker 	case 5:
298*2d1272b8SAndroid Build Coastguard Worker #line 57 "hb-buffer-deserialize-text-unicode.rl"
299*2d1272b8SAndroid Build Coastguard Worker 	{ if (!parse_uint (tok, p, &info.cluster )) return false; }
300*2d1272b8SAndroid Build Coastguard Worker #line 42 "hb-buffer-deserialize-text-unicode.rl"
301*2d1272b8SAndroid Build Coastguard Worker 	{
302*2d1272b8SAndroid Build Coastguard Worker 	buffer->add_info (info);
303*2d1272b8SAndroid Build Coastguard Worker 	if (unlikely (!buffer->successful))
304*2d1272b8SAndroid Build Coastguard Worker 	  return false;
305*2d1272b8SAndroid Build Coastguard Worker 	if (buffer->have_positions)
306*2d1272b8SAndroid Build Coastguard Worker 	  buffer->pos[buffer->len - 1] = pos;
307*2d1272b8SAndroid Build Coastguard Worker 	*end_ptr = p;
308*2d1272b8SAndroid Build Coastguard Worker }
309*2d1272b8SAndroid Build Coastguard Worker 	break;
310*2d1272b8SAndroid Build Coastguard Worker #line 311 "hb-buffer-deserialize-text-unicode.hh"
311*2d1272b8SAndroid Build Coastguard Worker 	}
312*2d1272b8SAndroid Build Coastguard Worker 	}
313*2d1272b8SAndroid Build Coastguard Worker 
314*2d1272b8SAndroid Build Coastguard Worker 	_out: {}
315*2d1272b8SAndroid Build Coastguard Worker 	}
316*2d1272b8SAndroid Build Coastguard Worker 
317*2d1272b8SAndroid Build Coastguard Worker #line 115 "hb-buffer-deserialize-text-unicode.rl"
318*2d1272b8SAndroid Build Coastguard Worker 
319*2d1272b8SAndroid Build Coastguard Worker 
320*2d1272b8SAndroid Build Coastguard Worker   if (pe < orig_pe && *pe == '>')
321*2d1272b8SAndroid Build Coastguard Worker   {
322*2d1272b8SAndroid Build Coastguard Worker     pe++;
323*2d1272b8SAndroid Build Coastguard Worker     if (p == pe)
324*2d1272b8SAndroid Build Coastguard Worker       p++;
325*2d1272b8SAndroid Build Coastguard Worker   }
326*2d1272b8SAndroid Build Coastguard Worker 
327*2d1272b8SAndroid Build Coastguard Worker   *end_ptr = p;
328*2d1272b8SAndroid Build Coastguard Worker 
329*2d1272b8SAndroid Build Coastguard Worker   return p == pe;
330*2d1272b8SAndroid Build Coastguard Worker }
331*2d1272b8SAndroid Build Coastguard Worker 
332*2d1272b8SAndroid Build Coastguard Worker #endif /* HB_BUFFER_DESERIALIZE_TEXT_UNICODE_HH */
333