1 
2 #line 1 "hb-buffer-deserialize-text.rl"
3 /*
4  * Copyright © 2013  Google, Inc.
5  *
6  *  This is part of HarfBuzz, a text shaping library.
7  *
8  * Permission is hereby granted, without written agreement and without
9  * license or royalty fees, to use, copy, modify, and distribute this
10  * software and its documentation for any purpose, provided that the
11  * above copyright notice and the following two paragraphs appear in
12  * all copies of this software.
13  *
14  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
15  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
16  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
17  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
18  * DAMAGE.
19  *
20  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
21  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
22  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
23  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
24  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
25  *
26  * Google Author(s): Behdad Esfahbod
27  */
28 
29 #ifndef HB_BUFFER_DESERIALIZE_TEXT_HH
30 #define HB_BUFFER_DESERIALIZE_TEXT_HH
31 
32 #include "hb.hh"
33 
34 
35 #line 36 "hb-buffer-deserialize-text.hh"
36 static const unsigned char _deserialize_text_trans_keys[] = {
37 	0u, 0u, 9u, 91u, 85u, 85u, 43u, 43u, 48u, 102u, 9u, 85u, 48u, 57u, 45u, 57u,
38 	48u, 57u, 48u, 57u, 45u, 57u, 48u, 57u, 44u, 44u, 45u, 57u, 48u, 57u, 44u, 57u,
39 	43u, 124u, 45u, 57u, 48u, 57u, 9u, 124u, 9u, 124u, 0u, 0u, 9u, 85u, 9u, 124u,
40 	9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u,
41 	9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 0
42 };
43 
44 static const char _deserialize_text_key_spans[] = {
45 	0, 83, 1, 1, 55, 77, 10, 13,
46 	10, 10, 13, 10, 1, 13, 10, 14,
47 	82, 13, 10, 116, 116, 0, 77, 116,
48 	116, 116, 116, 116, 116, 116, 116, 116,
49 	116, 116, 116, 116, 116
50 };
51 
52 static const short _deserialize_text_index_offsets[] = {
53 	0, 0, 84, 86, 88, 144, 222, 233,
54 	247, 258, 269, 283, 294, 296, 310, 321,
55 	336, 419, 433, 444, 561, 678, 679, 757,
56 	874, 991, 1108, 1225, 1342, 1459, 1576, 1693,
57 	1810, 1927, 2044, 2161, 2278
58 };
59 
60 static const char _deserialize_text_indicies[] = {
61 	0, 0, 0, 0, 0, 1, 1,
62 	1, 1, 1, 1, 1, 1, 1, 1,
63 	1, 1, 1, 1, 1, 1, 1, 1,
64 	0, 1, 1, 1, 1, 1, 1, 1,
65 	1, 1, 1, 1, 1, 1, 1, 1,
66 	1, 1, 1, 1, 1, 1, 1, 1,
67 	1, 1, 1, 1, 2, 1, 1, 1,
68 	1, 1, 1, 1, 1, 1, 1, 1,
69 	1, 1, 1, 1, 1, 1, 1, 1,
70 	1, 1, 1, 1, 1, 1, 1, 1,
71 	1, 1, 1, 3, 1, 4, 1, 5,
72 	1, 6, 6, 6, 6, 6, 6, 6,
73 	6, 6, 6, 1, 1, 1, 1, 1,
74 	1, 1, 6, 6, 6, 6, 6, 6,
75 	1, 1, 1, 1, 1, 1, 1, 1,
76 	1, 1, 1, 1, 1, 1, 1, 1,
77 	1, 1, 1, 1, 1, 1, 1, 1,
78 	1, 1, 6, 6, 6, 6, 6, 6,
79 	1, 7, 7, 7, 7, 7, 1, 1,
80 	1, 1, 1, 1, 1, 1, 1, 1,
81 	1, 1, 1, 1, 1, 1, 1, 1,
82 	7, 1, 1, 1, 1, 1, 1, 1,
83 	1, 1, 1, 1, 1, 1, 1, 1,
84 	1, 1, 1, 1, 1, 1, 1, 1,
85 	1, 1, 1, 1, 1, 1, 1, 1,
86 	1, 1, 1, 1, 1, 1, 1, 1,
87 	1, 1, 1, 1, 1, 1, 1, 1,
88 	1, 1, 1, 1, 1, 4, 1, 8,
89 	9, 9, 9, 9, 9, 9, 9, 9,
90 	9, 1, 10, 1, 1, 11, 12, 12,
91 	12, 12, 12, 12, 12, 12, 12, 1,
92 	13, 14, 14, 14, 14, 14, 14, 14,
93 	14, 14, 1, 15, 16, 16, 16, 16,
94 	16, 16, 16, 16, 16, 1, 17, 1,
95 	1, 18, 19, 19, 19, 19, 19, 19,
96 	19, 19, 19, 1, 20, 21, 21, 21,
97 	21, 21, 21, 21, 21, 21, 1, 22,
98 	1, 23, 1, 1, 24, 25, 25, 25,
99 	25, 25, 25, 25, 25, 25, 1, 26,
100 	27, 27, 27, 27, 27, 27, 27, 27,
101 	27, 1, 22, 1, 1, 1, 21, 21,
102 	21, 21, 21, 21, 21, 21, 21, 21,
103 	1, 28, 28, 1, 1, 1, 1, 1,
104 	1, 1, 1, 1, 1, 1, 1, 1,
105 	1, 1, 1, 28, 1, 1, 28, 1,
106 	1, 1, 1, 1, 1, 1, 1, 1,
107 	1, 1, 1, 1, 1, 1, 1, 1,
108 	1, 1, 1, 1, 1, 1, 1, 1,
109 	1, 1, 28, 28, 1, 1, 1, 1,
110 	1, 1, 1, 1, 1, 1, 1, 1,
111 	1, 1, 1, 1, 1, 1, 1, 1,
112 	1, 1, 1, 1, 1, 1, 1, 1,
113 	1, 1, 28, 1, 29, 1, 1, 30,
114 	31, 31, 31, 31, 31, 31, 31, 31,
115 	31, 1, 32, 33, 33, 33, 33, 33,
116 	33, 33, 33, 33, 1, 34, 34, 34,
117 	34, 34, 1, 1, 1, 1, 1, 1,
118 	1, 1, 1, 1, 1, 1, 1, 1,
119 	1, 1, 1, 1, 34, 1, 1, 1,
120 	1, 1, 1, 1, 1, 1, 1, 1,
121 	1, 1, 1, 1, 35, 35, 35, 35,
122 	35, 35, 35, 35, 35, 35, 1, 1,
123 	1, 36, 37, 1, 1, 35, 35, 35,
124 	35, 35, 35, 1, 1, 1, 1, 1,
125 	1, 1, 1, 1, 1, 1, 1, 1,
126 	1, 1, 1, 1, 1, 1, 1, 1,
127 	1, 1, 1, 1, 1, 35, 35, 35,
128 	35, 35, 35, 1, 1, 1, 1, 1,
129 	1, 1, 1, 1, 1, 1, 1, 1,
130 	1, 1, 1, 1, 1, 1, 1, 1,
131 	38, 1, 39, 39, 39, 39, 39, 1,
132 	1, 1, 1, 1, 1, 1, 1, 1,
133 	1, 1, 1, 1, 1, 1, 1, 1,
134 	1, 39, 1, 1, 1, 1, 1, 1,
135 	1, 1, 1, 1, 1, 1, 1, 1,
136 	1, 1, 1, 1, 1, 1, 1, 1,
137 	1, 1, 1, 1, 1, 1, 1, 40,
138 	1, 1, 1, 1, 1, 1, 1, 1,
139 	1, 1, 1, 1, 1, 1, 1, 1,
140 	1, 1, 1, 1, 1, 1, 1, 1,
141 	1, 1, 1, 1, 1, 1, 1, 1,
142 	1, 1, 1, 1, 1, 1, 1, 1,
143 	1, 1, 1, 1, 1, 1, 1, 1,
144 	1, 1, 1, 1, 1, 1, 1, 1,
145 	1, 1, 1, 1, 1, 41, 1, 1,
146 	7, 7, 7, 7, 7, 1, 1, 1,
147 	1, 1, 1, 1, 1, 1, 1, 1,
148 	1, 1, 1, 1, 1, 1, 1, 7,
149 	1, 1, 1, 1, 1, 1, 1, 1,
150 	1, 1, 1, 1, 1, 1, 1, 1,
151 	1, 1, 1, 1, 1, 1, 1, 1,
152 	1, 1, 1, 1, 1, 1, 1, 1,
153 	1, 1, 1, 1, 1, 1, 1, 1,
154 	1, 1, 1, 1, 1, 1, 1, 1,
155 	1, 1, 1, 1, 4, 1, 42, 42,
156 	42, 42, 42, 1, 1, 1, 1, 1,
157 	1, 1, 1, 1, 1, 1, 1, 1,
158 	1, 1, 1, 1, 1, 42, 1, 1,
159 	1, 1, 1, 1, 1, 1, 1, 1,
160 	1, 1, 1, 1, 1, 1, 1, 1,
161 	1, 1, 1, 1, 1, 1, 1, 1,
162 	1, 1, 1, 43, 1, 1, 1, 1,
163 	1, 1, 1, 1, 1, 1, 1, 1,
164 	1, 1, 1, 1, 1, 1, 1, 1,
165 	1, 1, 1, 1, 1, 1, 1, 1,
166 	1, 1, 1, 1, 1, 1, 1, 1,
167 	1, 1, 1, 1, 1, 1, 1, 1,
168 	1, 1, 1, 1, 1, 1, 1, 1,
169 	1, 1, 1, 1, 1, 1, 1, 1,
170 	1, 44, 1, 42, 42, 42, 42, 42,
171 	1, 1, 1, 1, 1, 1, 1, 1,
172 	1, 1, 1, 1, 1, 1, 1, 1,
173 	1, 1, 42, 1, 1, 1, 1, 1,
174 	1, 1, 1, 1, 1, 1, 1, 1,
175 	1, 1, 45, 45, 45, 45, 45, 45,
176 	45, 45, 45, 45, 1, 1, 1, 1,
177 	43, 1, 1, 1, 1, 1, 1, 1,
178 	1, 1, 1, 1, 1, 1, 1, 1,
179 	1, 1, 1, 1, 1, 1, 1, 1,
180 	1, 1, 1, 1, 1, 1, 1, 1,
181 	1, 1, 1, 1, 1, 1, 1, 1,
182 	1, 1, 1, 1, 1, 1, 1, 1,
183 	1, 1, 1, 1, 1, 1, 1, 1,
184 	1, 1, 1, 1, 1, 1, 44, 1,
185 	47, 47, 47, 47, 47, 46, 46, 46,
186 	46, 46, 46, 46, 46, 46, 46, 46,
187 	46, 46, 46, 46, 46, 46, 46, 47,
188 	46, 46, 46, 46, 46, 46, 46, 46,
189 	46, 46, 48, 1, 46, 46, 46, 46,
190 	46, 46, 46, 46, 46, 46, 46, 46,
191 	46, 46, 46, 46, 49, 46, 46, 50,
192 	46, 46, 46, 46, 46, 46, 46, 46,
193 	46, 46, 46, 46, 46, 46, 46, 46,
194 	46, 46, 46, 46, 46, 46, 46, 46,
195 	46, 46, 46, 51, 52, 46, 46, 46,
196 	46, 46, 46, 46, 46, 46, 46, 46,
197 	46, 46, 46, 46, 46, 46, 46, 46,
198 	46, 46, 46, 46, 46, 46, 46, 46,
199 	46, 46, 46, 53, 46, 54, 54, 54,
200 	54, 54, 28, 28, 28, 28, 28, 28,
201 	28, 28, 28, 28, 28, 28, 28, 28,
202 	28, 28, 28, 28, 54, 28, 28, 28,
203 	28, 28, 28, 28, 28, 28, 28, 55,
204 	1, 28, 28, 28, 28, 28, 28, 28,
205 	28, 28, 28, 28, 28, 28, 28, 28,
206 	28, 56, 28, 28, 57, 28, 28, 28,
207 	28, 28, 28, 28, 28, 28, 28, 28,
208 	28, 28, 28, 28, 28, 28, 28, 28,
209 	28, 28, 28, 28, 28, 28, 28, 28,
210 	58, 59, 28, 28, 28, 28, 28, 28,
211 	28, 28, 28, 28, 28, 28, 28, 28,
212 	28, 28, 28, 28, 28, 28, 28, 28,
213 	28, 28, 28, 28, 28, 28, 28, 28,
214 	60, 28, 61, 61, 61, 61, 61, 1,
215 	1, 1, 1, 1, 1, 1, 1, 1,
216 	1, 1, 1, 1, 1, 1, 1, 1,
217 	1, 61, 1, 1, 1, 1, 1, 1,
218 	1, 1, 1, 1, 1, 62, 1, 1,
219 	1, 1, 1, 1, 1, 1, 1, 1,
220 	1, 1, 1, 1, 1, 1, 1, 1,
221 	1, 1, 1, 1, 1, 1, 1, 1,
222 	1, 1, 1, 1, 1, 1, 1, 1,
223 	1, 1, 1, 1, 1, 1, 1, 1,
224 	1, 1, 1, 1, 1, 1, 63, 1,
225 	1, 1, 1, 1, 1, 1, 1, 1,
226 	1, 1, 1, 1, 1, 1, 1, 1,
227 	1, 1, 1, 1, 1, 1, 1, 1,
228 	1, 1, 1, 1, 1, 64, 1, 65,
229 	65, 65, 65, 65, 1, 1, 1, 1,
230 	1, 1, 1, 1, 1, 1, 1, 1,
231 	1, 1, 1, 1, 1, 1, 65, 1,
232 	1, 1, 1, 1, 1, 1, 1, 1,
233 	1, 1, 1, 1, 1, 1, 1, 1,
234 	1, 1, 1, 1, 1, 1, 1, 1,
235 	1, 1, 1, 1, 1, 1, 1, 1,
236 	1, 1, 1, 1, 1, 1, 1, 1,
237 	1, 1, 1, 1, 1, 1, 1, 1,
238 	1, 1, 1, 1, 1, 1, 1, 1,
239 	1, 1, 1, 40, 1, 1, 1, 1,
240 	1, 1, 1, 1, 1, 1, 1, 1,
241 	1, 1, 1, 1, 1, 1, 1, 1,
242 	1, 1, 1, 1, 1, 1, 1, 1,
243 	1, 1, 66, 1, 67, 67, 67, 67,
244 	67, 46, 46, 46, 46, 46, 46, 46,
245 	46, 46, 46, 46, 46, 46, 46, 46,
246 	46, 46, 46, 67, 46, 46, 46, 46,
247 	46, 46, 46, 46, 46, 46, 48, 1,
248 	46, 46, 46, 46, 46, 46, 46, 46,
249 	46, 46, 46, 46, 46, 46, 46, 46,
250 	49, 46, 46, 50, 46, 46, 46, 46,
251 	46, 46, 46, 46, 46, 46, 46, 46,
252 	46, 46, 46, 46, 46, 46, 46, 46,
253 	46, 46, 46, 46, 46, 46, 46, 51,
254 	52, 46, 46, 46, 46, 46, 46, 46,
255 	46, 46, 46, 46, 46, 46, 46, 46,
256 	46, 46, 46, 46, 46, 46, 46, 46,
257 	46, 46, 46, 46, 46, 46, 46, 53,
258 	46, 68, 68, 68, 68, 68, 1, 1,
259 	1, 1, 1, 1, 1, 1, 1, 1,
260 	1, 1, 1, 1, 1, 1, 1, 1,
261 	68, 1, 1, 1, 1, 1, 1, 1,
262 	1, 1, 1, 69, 1, 1, 1, 1,
263 	1, 1, 1, 1, 1, 1, 1, 1,
264 	1, 1, 1, 1, 1, 1, 1, 1,
265 	70, 1, 1, 1, 1, 1, 1, 1,
266 	1, 1, 1, 1, 1, 1, 1, 1,
267 	1, 1, 1, 1, 1, 1, 1, 1,
268 	1, 1, 1, 1, 1, 43, 1, 1,
269 	1, 1, 1, 1, 1, 1, 1, 1,
270 	1, 1, 1, 1, 1, 1, 1, 1,
271 	1, 1, 1, 1, 1, 1, 1, 1,
272 	1, 1, 1, 1, 71, 1, 72, 72,
273 	72, 72, 72, 1, 1, 1, 1, 1,
274 	1, 1, 1, 1, 1, 1, 1, 1,
275 	1, 1, 1, 1, 1, 72, 1, 1,
276 	1, 1, 1, 1, 1, 1, 1, 1,
277 	73, 1, 1, 1, 1, 1, 1, 1,
278 	1, 1, 1, 1, 1, 1, 1, 1,
279 	1, 1, 1, 1, 1, 1, 1, 1,
280 	1, 1, 1, 1, 1, 1, 1, 1,
281 	1, 1, 1, 1, 1, 1, 1, 1,
282 	1, 1, 1, 1, 1, 1, 1, 1,
283 	1, 1, 74, 1, 1, 1, 1, 1,
284 	1, 1, 1, 1, 1, 1, 1, 1,
285 	1, 1, 1, 1, 1, 1, 1, 1,
286 	1, 1, 1, 1, 1, 1, 1, 1,
287 	1, 75, 1, 72, 72, 72, 72, 72,
288 	1, 1, 1, 1, 1, 1, 1, 1,
289 	1, 1, 1, 1, 1, 1, 1, 1,
290 	1, 1, 72, 1, 1, 1, 1, 1,
291 	1, 1, 1, 1, 1, 73, 1, 1,
292 	1, 1, 27, 27, 27, 27, 27, 27,
293 	27, 27, 27, 27, 1, 1, 1, 1,
294 	1, 1, 1, 1, 1, 1, 1, 1,
295 	1, 1, 1, 1, 1, 1, 1, 1,
296 	1, 1, 1, 1, 1, 1, 1, 1,
297 	1, 1, 1, 1, 1, 1, 1, 74,
298 	1, 1, 1, 1, 1, 1, 1, 1,
299 	1, 1, 1, 1, 1, 1, 1, 1,
300 	1, 1, 1, 1, 1, 1, 1, 1,
301 	1, 1, 1, 1, 1, 1, 75, 1,
302 	68, 68, 68, 68, 68, 1, 1, 1,
303 	1, 1, 1, 1, 1, 1, 1, 1,
304 	1, 1, 1, 1, 1, 1, 1, 68,
305 	1, 1, 1, 1, 1, 1, 1, 1,
306 	1, 1, 69, 1, 1, 1, 1, 76,
307 	76, 76, 76, 76, 76, 76, 76, 76,
308 	76, 1, 1, 1, 1, 1, 1, 70,
309 	1, 1, 1, 1, 1, 1, 1, 1,
310 	1, 1, 1, 1, 1, 1, 1, 1,
311 	1, 1, 1, 1, 1, 1, 1, 1,
312 	1, 1, 1, 1, 43, 1, 1, 1,
313 	1, 1, 1, 1, 1, 1, 1, 1,
314 	1, 1, 1, 1, 1, 1, 1, 1,
315 	1, 1, 1, 1, 1, 1, 1, 1,
316 	1, 1, 1, 71, 1, 77, 77, 77,
317 	77, 77, 1, 1, 1, 1, 1, 1,
318 	1, 1, 1, 1, 1, 1, 1, 1,
319 	1, 1, 1, 1, 77, 1, 1, 1,
320 	1, 1, 1, 1, 1, 1, 1, 1,
321 	1, 1, 1, 1, 1, 1, 1, 1,
322 	1, 1, 1, 1, 1, 1, 1, 1,
323 	1, 1, 1, 1, 1, 1, 1, 1,
324 	1, 1, 1, 1, 1, 1, 1, 1,
325 	1, 1, 1, 1, 1, 1, 1, 1,
326 	1, 1, 1, 1, 1, 1, 1, 1,
327 	1, 78, 1, 1, 1, 1, 1, 1,
328 	1, 1, 1, 1, 1, 1, 1, 1,
329 	1, 1, 1, 1, 1, 1, 1, 1,
330 	1, 1, 1, 1, 1, 1, 1, 1,
331 	79, 1, 77, 77, 77, 77, 77, 1,
332 	1, 1, 1, 1, 1, 1, 1, 1,
333 	1, 1, 1, 1, 1, 1, 1, 1,
334 	1, 77, 1, 1, 1, 1, 1, 1,
335 	1, 1, 1, 1, 1, 1, 1, 1,
336 	1, 33, 33, 33, 33, 33, 33, 33,
337 	33, 33, 33, 1, 1, 1, 1, 1,
338 	1, 1, 1, 1, 1, 1, 1, 1,
339 	1, 1, 1, 1, 1, 1, 1, 1,
340 	1, 1, 1, 1, 1, 1, 1, 1,
341 	1, 1, 1, 1, 1, 1, 78, 1,
342 	1, 1, 1, 1, 1, 1, 1, 1,
343 	1, 1, 1, 1, 1, 1, 1, 1,
344 	1, 1, 1, 1, 1, 1, 1, 1,
345 	1, 1, 1, 1, 1, 79, 1, 61,
346 	61, 61, 61, 61, 1, 1, 1, 1,
347 	1, 1, 1, 1, 1, 1, 1, 1,
348 	1, 1, 1, 1, 1, 1, 61, 1,
349 	1, 1, 1, 1, 1, 1, 1, 1,
350 	1, 1, 62, 1, 1, 1, 14, 14,
351 	14, 14, 14, 14, 14, 14, 14, 14,
352 	1, 1, 1, 1, 1, 1, 1, 1,
353 	1, 1, 1, 1, 1, 1, 1, 1,
354 	1, 1, 1, 1, 1, 1, 1, 1,
355 	1, 1, 1, 1, 1, 1, 1, 1,
356 	1, 1, 1, 63, 1, 1, 1, 1,
357 	1, 1, 1, 1, 1, 1, 1, 1,
358 	1, 1, 1, 1, 1, 1, 1, 1,
359 	1, 1, 1, 1, 1, 1, 1, 1,
360 	1, 1, 64, 1, 0
361 };
362 
363 static const char _deserialize_text_trans_targs[] = {
364 	1, 0, 2, 25, 3, 4, 19, 5,
365 	23, 24, 8, 27, 36, 27, 36, 30,
366 	33, 11, 12, 15, 12, 15, 13, 14,
367 	31, 32, 31, 32, 26, 18, 34, 35,
368 	34, 35, 20, 19, 6, 21, 22, 20,
369 	21, 22, 20, 21, 22, 24, 26, 26,
370 	7, 9, 10, 16, 21, 29, 26, 7,
371 	9, 10, 16, 21, 29, 28, 17, 21,
372 	29, 28, 29, 29, 28, 7, 10, 29,
373 	28, 7, 21, 29, 33, 28, 21, 29
374 };
375 
376 static const char _deserialize_text_trans_actions[] = {
377 	0, 0, 0, 0, 1, 0, 2, 0,
378 	2, 2, 3, 4, 4, 5, 5, 4,
379 	4, 3, 3, 3, 0, 0, 6, 3,
380 	4, 4, 5, 5, 5, 3, 4, 4,
381 	5, 5, 7, 8, 9, 7, 7, 0,
382 	0, 0, 10, 10, 10, 8, 12, 13,
383 	14, 14, 14, 15, 11, 11, 17, 18,
384 	18, 18, 0, 16, 16, 19, 20, 19,
385 	19, 0, 0, 13, 10, 21, 21, 10,
386 	22, 23, 22, 22, 5, 24, 24, 24
387 };
388 
389 static const char _deserialize_text_eof_actions[] = {
390 	0, 0, 0, 0, 0, 0, 0, 0,
391 	0, 0, 0, 0, 0, 0, 0, 0,
392 	0, 0, 0, 7, 0, 0, 0, 10,
393 	10, 11, 16, 19, 0, 11, 10, 22,
394 	22, 10, 24, 24, 19
395 };
396 
397 static const int deserialize_text_start = 1;
398 static const int deserialize_text_first_final = 19;
399 static const int deserialize_text_error = 0;
400 
401 static const int deserialize_text_en_main = 1;
402 
403 
404 #line 114 "hb-buffer-deserialize-text.rl"
405 
406 
407 static hb_bool_t
_hb_buffer_deserialize_text(hb_buffer_t * buffer,const char * buf,unsigned int buf_len,const char ** end_ptr,hb_font_t * font)408 _hb_buffer_deserialize_text (hb_buffer_t *buffer,
409 				    const char *buf,
410 				    unsigned int buf_len,
411 				    const char **end_ptr,
412 				    hb_font_t *font)
413 {
414   const char *p = buf, *pe = buf + buf_len;
415 
416   /* Ensure we have positions. */
417   (void) hb_buffer_get_glyph_positions (buffer, nullptr);
418 
419   while (p < pe && ISSPACE (*p))
420     p++;
421 
422   const char *eof = pe, *tok = nullptr;
423   int cs;
424   hb_glyph_info_t info = {0};
425   hb_glyph_position_t pos = {0};
426 
427 #line 428 "hb-buffer-deserialize-text.hh"
428 	{
429 	cs = deserialize_text_start;
430 	}
431 
432 #line 433 "hb-buffer-deserialize-text.hh"
433 	{
434 	int _slen;
435 	int _trans;
436 	const unsigned char *_keys;
437 	const char *_inds;
438 	if ( p == pe )
439 		goto _test_eof;
440 	if ( cs == 0 )
441 		goto _out;
442 _resume:
443 	_keys = _deserialize_text_trans_keys + (cs<<1);
444 	_inds = _deserialize_text_indicies + _deserialize_text_index_offsets[cs];
445 
446 	_slen = _deserialize_text_key_spans[cs];
447 	_trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
448 		(*p) <= _keys[1] ?
449 		(*p) - _keys[0] : _slen ];
450 
451 	cs = _deserialize_text_trans_targs[_trans];
452 
453 	if ( _deserialize_text_trans_actions[_trans] == 0 )
454 		goto _again;
455 
456 	switch ( _deserialize_text_trans_actions[_trans] ) {
457 	case 1:
458 #line 38 "hb-buffer-deserialize-text.rl"
459 	{
460 	memset (&info, 0, sizeof (info));
461 	memset (&pos , 0, sizeof (pos ));
462 }
463 	break;
464 	case 3:
465 #line 51 "hb-buffer-deserialize-text.rl"
466 	{
467 	tok = p;
468 }
469 	break;
470 	case 5:
471 #line 55 "hb-buffer-deserialize-text.rl"
472 	{ if (unlikely (!buffer->ensure_glyphs ())) return false; }
473 	break;
474 	case 8:
475 #line 56 "hb-buffer-deserialize-text.rl"
476 	{ if (unlikely (!buffer->ensure_unicode ())) return false; }
477 	break;
478 	case 18:
479 #line 58 "hb-buffer-deserialize-text.rl"
480 	{
481 	/* TODO Unescape delimeters. */
482 	if (!hb_font_glyph_from_string (font,
483 					tok, p - tok,
484 					&info.codepoint))
485 	  return false;
486 }
487 	break;
488 	case 9:
489 #line 66 "hb-buffer-deserialize-text.rl"
490 	{if (!parse_hex (tok, p, &info.codepoint )) return false; }
491 	break;
492 	case 21:
493 #line 68 "hb-buffer-deserialize-text.rl"
494 	{ if (!parse_uint (tok, p, &info.cluster )) return false; }
495 	break;
496 	case 6:
497 #line 69 "hb-buffer-deserialize-text.rl"
498 	{ if (!parse_int  (tok, p, &pos.x_offset )) return false; }
499 	break;
500 	case 23:
501 #line 70 "hb-buffer-deserialize-text.rl"
502 	{ if (!parse_int  (tok, p, &pos.y_offset )) return false; }
503 	break;
504 	case 20:
505 #line 71 "hb-buffer-deserialize-text.rl"
506 	{ if (!parse_int  (tok, p, &pos.x_advance)) return false; }
507 	break;
508 	case 15:
509 #line 38 "hb-buffer-deserialize-text.rl"
510 	{
511 	memset (&info, 0, sizeof (info));
512 	memset (&pos , 0, sizeof (pos ));
513 }
514 #line 51 "hb-buffer-deserialize-text.rl"
515 	{
516 	tok = p;
517 }
518 	break;
519 	case 4:
520 #line 51 "hb-buffer-deserialize-text.rl"
521 	{
522 	tok = p;
523 }
524 #line 55 "hb-buffer-deserialize-text.rl"
525 	{ if (unlikely (!buffer->ensure_glyphs ())) return false; }
526 	break;
527 	case 2:
528 #line 51 "hb-buffer-deserialize-text.rl"
529 	{
530 	tok = p;
531 }
532 #line 56 "hb-buffer-deserialize-text.rl"
533 	{ if (unlikely (!buffer->ensure_unicode ())) return false; }
534 	break;
535 	case 16:
536 #line 58 "hb-buffer-deserialize-text.rl"
537 	{
538 	/* TODO Unescape delimeters. */
539 	if (!hb_font_glyph_from_string (font,
540 					tok, p - tok,
541 					&info.codepoint))
542 	  return false;
543 }
544 #line 43 "hb-buffer-deserialize-text.rl"
545 	{
546 	buffer->add_info (info);
547 	if (unlikely (!buffer->successful))
548 	  return false;
549 	buffer->pos[buffer->len - 1] = pos;
550 	*end_ptr = p;
551 }
552 	break;
553 	case 7:
554 #line 66 "hb-buffer-deserialize-text.rl"
555 	{if (!parse_hex (tok, p, &info.codepoint )) return false; }
556 #line 43 "hb-buffer-deserialize-text.rl"
557 	{
558 	buffer->add_info (info);
559 	if (unlikely (!buffer->successful))
560 	  return false;
561 	buffer->pos[buffer->len - 1] = pos;
562 	*end_ptr = p;
563 }
564 	break;
565 	case 10:
566 #line 68 "hb-buffer-deserialize-text.rl"
567 	{ if (!parse_uint (tok, p, &info.cluster )) return false; }
568 #line 43 "hb-buffer-deserialize-text.rl"
569 	{
570 	buffer->add_info (info);
571 	if (unlikely (!buffer->successful))
572 	  return false;
573 	buffer->pos[buffer->len - 1] = pos;
574 	*end_ptr = p;
575 }
576 	break;
577 	case 22:
578 #line 70 "hb-buffer-deserialize-text.rl"
579 	{ if (!parse_int  (tok, p, &pos.y_offset )) return false; }
580 #line 43 "hb-buffer-deserialize-text.rl"
581 	{
582 	buffer->add_info (info);
583 	if (unlikely (!buffer->successful))
584 	  return false;
585 	buffer->pos[buffer->len - 1] = pos;
586 	*end_ptr = p;
587 }
588 	break;
589 	case 19:
590 #line 71 "hb-buffer-deserialize-text.rl"
591 	{ if (!parse_int  (tok, p, &pos.x_advance)) return false; }
592 #line 43 "hb-buffer-deserialize-text.rl"
593 	{
594 	buffer->add_info (info);
595 	if (unlikely (!buffer->successful))
596 	  return false;
597 	buffer->pos[buffer->len - 1] = pos;
598 	*end_ptr = p;
599 }
600 	break;
601 	case 24:
602 #line 72 "hb-buffer-deserialize-text.rl"
603 	{ if (!parse_int  (tok, p, &pos.y_advance)) return false; }
604 #line 43 "hb-buffer-deserialize-text.rl"
605 	{
606 	buffer->add_info (info);
607 	if (unlikely (!buffer->successful))
608 	  return false;
609 	buffer->pos[buffer->len - 1] = pos;
610 	*end_ptr = p;
611 }
612 	break;
613 	case 12:
614 #line 38 "hb-buffer-deserialize-text.rl"
615 	{
616 	memset (&info, 0, sizeof (info));
617 	memset (&pos , 0, sizeof (pos ));
618 }
619 #line 51 "hb-buffer-deserialize-text.rl"
620 	{
621 	tok = p;
622 }
623 #line 55 "hb-buffer-deserialize-text.rl"
624 	{ if (unlikely (!buffer->ensure_glyphs ())) return false; }
625 	break;
626 	case 14:
627 #line 38 "hb-buffer-deserialize-text.rl"
628 	{
629 	memset (&info, 0, sizeof (info));
630 	memset (&pos , 0, sizeof (pos ));
631 }
632 #line 51 "hb-buffer-deserialize-text.rl"
633 	{
634 	tok = p;
635 }
636 #line 58 "hb-buffer-deserialize-text.rl"
637 	{
638 	/* TODO Unescape delimeters. */
639 	if (!hb_font_glyph_from_string (font,
640 					tok, p - tok,
641 					&info.codepoint))
642 	  return false;
643 }
644 	break;
645 	case 17:
646 #line 58 "hb-buffer-deserialize-text.rl"
647 	{
648 	/* TODO Unescape delimeters. */
649 	if (!hb_font_glyph_from_string (font,
650 					tok, p - tok,
651 					&info.codepoint))
652 	  return false;
653 }
654 #line 55 "hb-buffer-deserialize-text.rl"
655 	{ if (unlikely (!buffer->ensure_glyphs ())) return false; }
656 #line 43 "hb-buffer-deserialize-text.rl"
657 	{
658 	buffer->add_info (info);
659 	if (unlikely (!buffer->successful))
660 	  return false;
661 	buffer->pos[buffer->len - 1] = pos;
662 	*end_ptr = p;
663 }
664 	break;
665 	case 11:
666 #line 38 "hb-buffer-deserialize-text.rl"
667 	{
668 	memset (&info, 0, sizeof (info));
669 	memset (&pos , 0, sizeof (pos ));
670 }
671 #line 51 "hb-buffer-deserialize-text.rl"
672 	{
673 	tok = p;
674 }
675 #line 58 "hb-buffer-deserialize-text.rl"
676 	{
677 	/* TODO Unescape delimeters. */
678 	if (!hb_font_glyph_from_string (font,
679 					tok, p - tok,
680 					&info.codepoint))
681 	  return false;
682 }
683 #line 43 "hb-buffer-deserialize-text.rl"
684 	{
685 	buffer->add_info (info);
686 	if (unlikely (!buffer->successful))
687 	  return false;
688 	buffer->pos[buffer->len - 1] = pos;
689 	*end_ptr = p;
690 }
691 	break;
692 	case 13:
693 #line 38 "hb-buffer-deserialize-text.rl"
694 	{
695 	memset (&info, 0, sizeof (info));
696 	memset (&pos , 0, sizeof (pos ));
697 }
698 #line 51 "hb-buffer-deserialize-text.rl"
699 	{
700 	tok = p;
701 }
702 #line 58 "hb-buffer-deserialize-text.rl"
703 	{
704 	/* TODO Unescape delimeters. */
705 	if (!hb_font_glyph_from_string (font,
706 					tok, p - tok,
707 					&info.codepoint))
708 	  return false;
709 }
710 #line 55 "hb-buffer-deserialize-text.rl"
711 	{ if (unlikely (!buffer->ensure_glyphs ())) return false; }
712 #line 43 "hb-buffer-deserialize-text.rl"
713 	{
714 	buffer->add_info (info);
715 	if (unlikely (!buffer->successful))
716 	  return false;
717 	buffer->pos[buffer->len - 1] = pos;
718 	*end_ptr = p;
719 }
720 	break;
721 #line 722 "hb-buffer-deserialize-text.hh"
722 	}
723 
724 _again:
725 	if ( cs == 0 )
726 		goto _out;
727 	if ( ++p != pe )
728 		goto _resume;
729 	_test_eof: {}
730 	if ( p == eof )
731 	{
732 	switch ( _deserialize_text_eof_actions[cs] ) {
733 	case 16:
734 #line 58 "hb-buffer-deserialize-text.rl"
735 	{
736 	/* TODO Unescape delimeters. */
737 	if (!hb_font_glyph_from_string (font,
738 					tok, p - tok,
739 					&info.codepoint))
740 	  return false;
741 }
742 #line 43 "hb-buffer-deserialize-text.rl"
743 	{
744 	buffer->add_info (info);
745 	if (unlikely (!buffer->successful))
746 	  return false;
747 	buffer->pos[buffer->len - 1] = pos;
748 	*end_ptr = p;
749 }
750 	break;
751 	case 7:
752 #line 66 "hb-buffer-deserialize-text.rl"
753 	{if (!parse_hex (tok, p, &info.codepoint )) return false; }
754 #line 43 "hb-buffer-deserialize-text.rl"
755 	{
756 	buffer->add_info (info);
757 	if (unlikely (!buffer->successful))
758 	  return false;
759 	buffer->pos[buffer->len - 1] = pos;
760 	*end_ptr = p;
761 }
762 	break;
763 	case 10:
764 #line 68 "hb-buffer-deserialize-text.rl"
765 	{ if (!parse_uint (tok, p, &info.cluster )) return false; }
766 #line 43 "hb-buffer-deserialize-text.rl"
767 	{
768 	buffer->add_info (info);
769 	if (unlikely (!buffer->successful))
770 	  return false;
771 	buffer->pos[buffer->len - 1] = pos;
772 	*end_ptr = p;
773 }
774 	break;
775 	case 22:
776 #line 70 "hb-buffer-deserialize-text.rl"
777 	{ if (!parse_int  (tok, p, &pos.y_offset )) return false; }
778 #line 43 "hb-buffer-deserialize-text.rl"
779 	{
780 	buffer->add_info (info);
781 	if (unlikely (!buffer->successful))
782 	  return false;
783 	buffer->pos[buffer->len - 1] = pos;
784 	*end_ptr = p;
785 }
786 	break;
787 	case 19:
788 #line 71 "hb-buffer-deserialize-text.rl"
789 	{ if (!parse_int  (tok, p, &pos.x_advance)) return false; }
790 #line 43 "hb-buffer-deserialize-text.rl"
791 	{
792 	buffer->add_info (info);
793 	if (unlikely (!buffer->successful))
794 	  return false;
795 	buffer->pos[buffer->len - 1] = pos;
796 	*end_ptr = p;
797 }
798 	break;
799 	case 24:
800 #line 72 "hb-buffer-deserialize-text.rl"
801 	{ if (!parse_int  (tok, p, &pos.y_advance)) return false; }
802 #line 43 "hb-buffer-deserialize-text.rl"
803 	{
804 	buffer->add_info (info);
805 	if (unlikely (!buffer->successful))
806 	  return false;
807 	buffer->pos[buffer->len - 1] = pos;
808 	*end_ptr = p;
809 }
810 	break;
811 	case 11:
812 #line 38 "hb-buffer-deserialize-text.rl"
813 	{
814 	memset (&info, 0, sizeof (info));
815 	memset (&pos , 0, sizeof (pos ));
816 }
817 #line 51 "hb-buffer-deserialize-text.rl"
818 	{
819 	tok = p;
820 }
821 #line 58 "hb-buffer-deserialize-text.rl"
822 	{
823 	/* TODO Unescape delimeters. */
824 	if (!hb_font_glyph_from_string (font,
825 					tok, p - tok,
826 					&info.codepoint))
827 	  return false;
828 }
829 #line 43 "hb-buffer-deserialize-text.rl"
830 	{
831 	buffer->add_info (info);
832 	if (unlikely (!buffer->successful))
833 	  return false;
834 	buffer->pos[buffer->len - 1] = pos;
835 	*end_ptr = p;
836 }
837 	break;
838 #line 839 "hb-buffer-deserialize-text.hh"
839 	}
840 	}
841 
842 	_out: {}
843 	}
844 
845 #line 138 "hb-buffer-deserialize-text.rl"
846 
847 
848   *end_ptr = p;
849 
850   return p == pe && *(p-1) != ']';
851 }
852 
853 #endif /* HB_BUFFER_DESERIALIZE_TEXT_HH */
854