xref: /aosp_15_r20/external/harfbuzz_ng/src/hb-buffer-deserialize-text-glyphs.hh (revision 2d1272b857b1f7575e6e246373e1cb218663db8a)
1 
2 #line 1 "hb-buffer-deserialize-text-glyphs.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_GLYPHS_HH
30 #define HB_BUFFER_DESERIALIZE_TEXT_GLYPHS_HH
31 
32 #include "hb.hh"
33 
34 
35 #line 36 "hb-buffer-deserialize-text-glyphs.hh"
36 static const unsigned char _deserialize_text_glyphs_trans_keys[] = {
37 	0u, 0u, 48u, 57u, 45u, 57u, 48u, 57u, 45u, 57u, 48u, 57u, 48u, 57u, 45u, 57u,
38 	48u, 57u, 44u, 44u, 45u, 57u, 48u, 57u, 44u, 57u, 43u, 124u, 9u, 124u, 9u, 124u,
39 	9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u,
40 	9u, 124u, 9u, 124u, 9u, 124u, 0
41 };
42 
43 static const char _deserialize_text_glyphs_key_spans[] = {
44 	0, 10, 13, 10, 13, 10, 10, 13,
45 	10, 1, 13, 10, 14, 82, 116, 116,
46 	116, 116, 116, 116, 116, 116, 116, 116,
47 	116, 116, 116
48 };
49 
50 static const short _deserialize_text_glyphs_index_offsets[] = {
51 	0, 0, 11, 25, 36, 50, 61, 72,
52 	86, 97, 99, 113, 124, 139, 222, 339,
53 	456, 573, 690, 807, 924, 1041, 1158, 1275,
54 	1392, 1509, 1626
55 };
56 
57 static const char _deserialize_text_glyphs_indicies[] = {
58 	0, 2, 2, 2, 2, 2, 2,
59 	2, 2, 2, 1, 3, 1, 1, 4,
60 	5, 5, 5, 5, 5, 5, 5, 5,
61 	5, 1, 6, 7, 7, 7, 7, 7,
62 	7, 7, 7, 7, 1, 8, 1, 1,
63 	9, 10, 10, 10, 10, 10, 10, 10,
64 	10, 10, 1, 11, 12, 12, 12, 12,
65 	12, 12, 12, 12, 12, 1, 13, 14,
66 	14, 14, 14, 14, 14, 14, 14, 14,
67 	1, 15, 1, 1, 16, 17, 17, 17,
68 	17, 17, 17, 17, 17, 17, 1, 18,
69 	19, 19, 19, 19, 19, 19, 19, 19,
70 	19, 1, 20, 1, 21, 1, 1, 22,
71 	23, 23, 23, 23, 23, 23, 23, 23,
72 	23, 1, 24, 25, 25, 25, 25, 25,
73 	25, 25, 25, 25, 1, 20, 1, 1,
74 	1, 19, 19, 19, 19, 19, 19, 19,
75 	19, 19, 19, 1, 26, 26, 1, 1,
76 	1, 1, 1, 1, 1, 1, 1, 1,
77 	1, 1, 1, 1, 1, 1, 26, 1,
78 	1, 26, 1, 1, 1, 1, 1, 1,
79 	1, 1, 1, 1, 1, 1, 1, 1,
80 	1, 1, 1, 1, 1, 1, 1, 1,
81 	1, 1, 1, 1, 1, 26, 26, 1,
82 	1, 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, 26, 1, 28,
86 	28, 28, 28, 28, 27, 27, 27, 27,
87 	27, 27, 27, 27, 27, 27, 27, 27,
88 	27, 27, 27, 27, 27, 27, 28, 27,
89 	27, 29, 27, 27, 27, 27, 27, 27,
90 	27, 30, 1, 27, 27, 27, 27, 27,
91 	27, 27, 27, 27, 27, 27, 27, 27,
92 	27, 27, 27, 31, 27, 27, 32, 27,
93 	27, 27, 27, 27, 27, 27, 27, 27,
94 	27, 27, 27, 27, 27, 27, 27, 27,
95 	27, 27, 27, 27, 27, 27, 27, 27,
96 	27, 27, 33, 1, 27, 27, 27, 27,
97 	27, 27, 27, 27, 27, 27, 27, 27,
98 	27, 27, 27, 27, 27, 27, 27, 27,
99 	27, 27, 27, 27, 27, 27, 27, 27,
100 	27, 27, 28, 27, 34, 34, 34, 34,
101 	34, 26, 26, 26, 26, 26, 26, 26,
102 	26, 26, 26, 26, 26, 26, 26, 26,
103 	26, 26, 26, 34, 26, 26, 35, 26,
104 	26, 26, 26, 26, 26, 26, 36, 1,
105 	26, 26, 26, 26, 26, 26, 26, 26,
106 	26, 26, 26, 26, 26, 26, 26, 26,
107 	37, 26, 26, 38, 26, 26, 26, 26,
108 	26, 26, 26, 26, 26, 26, 26, 26,
109 	26, 26, 26, 26, 26, 26, 26, 26,
110 	26, 26, 26, 26, 26, 26, 26, 39,
111 	1, 26, 26, 26, 26, 26, 26, 26,
112 	26, 26, 26, 26, 26, 26, 26, 26,
113 	26, 26, 26, 26, 26, 26, 26, 26,
114 	26, 26, 26, 26, 26, 26, 26, 40,
115 	26, 41, 41, 41, 41, 41, 1, 1,
116 	1, 1, 1, 1, 1, 1, 1, 1,
117 	1, 1, 1, 1, 1, 1, 1, 1,
118 	41, 1, 1, 1, 1, 1, 1, 1,
119 	1, 1, 1, 1, 1, 1, 1, 1,
120 	1, 1, 1, 1, 1, 1, 1, 1,
121 	1, 1, 1, 1, 1, 1, 1, 1,
122 	1, 1, 1, 1, 1, 1, 1, 1,
123 	1, 1, 1, 1, 1, 1, 1, 1,
124 	1, 1, 1, 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, 1, 1, 1,
128 	1, 1, 1, 1, 1, 1, 1, 1,
129 	1, 1, 1, 1, 42, 1, 43, 43,
130 	43, 43, 43, 1, 1, 1, 1, 1,
131 	1, 1, 1, 1, 1, 1, 1, 1,
132 	1, 1, 1, 1, 1, 43, 1, 1,
133 	1, 1, 1, 1, 1, 1, 1, 1,
134 	1, 1, 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, 1,
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, 44, 1, 41, 41, 41, 41, 41,
145 	1, 1, 1, 1, 1, 1, 1, 1,
146 	1, 1, 1, 1, 1, 1, 1, 1,
147 	1, 1, 41, 1, 1, 1, 1, 1,
148 	1, 1, 1, 1, 1, 1, 1, 1,
149 	1, 1, 45, 45, 45, 45, 45, 45,
150 	45, 45, 45, 45, 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, 1, 1, 1, 1,
156 	1, 1, 1, 1, 1, 1, 1, 1,
157 	1, 1, 1, 1, 1, 1, 1, 1,
158 	1, 1, 1, 1, 1, 1, 42, 1,
159 	46, 46, 46, 46, 46, 1, 1, 1,
160 	1, 1, 1, 1, 1, 1, 1, 1,
161 	1, 1, 1, 1, 1, 1, 1, 46,
162 	1, 1, 47, 1, 1, 1, 1, 1,
163 	1, 1, 1, 48, 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, 1, 1, 1, 1, 1, 1, 1,
171 	1, 1, 1, 1, 1, 1, 1, 1,
172 	1, 1, 1, 1, 1, 1, 1, 1,
173 	1, 1, 1, 49, 1, 50, 50, 50,
174 	50, 50, 1, 1, 1, 1, 1, 1,
175 	1, 1, 1, 1, 1, 1, 1, 1,
176 	1, 1, 1, 1, 50, 1, 1, 51,
177 	1, 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, 1, 1,
185 	1, 1, 1, 1, 1, 1, 1, 1,
186 	1, 1, 1, 1, 1, 1, 1, 1,
187 	1, 1, 1, 1, 1, 1, 1, 1,
188 	52, 1, 50, 50, 50, 50, 50, 1,
189 	1, 1, 1, 1, 1, 1, 1, 1,
190 	1, 1, 1, 1, 1, 1, 1, 1,
191 	1, 50, 1, 1, 51, 1, 1, 1,
192 	1, 1, 1, 1, 1, 1, 1, 1,
193 	1, 12, 12, 12, 12, 12, 12, 12,
194 	12, 12, 12, 1, 1, 1, 1, 1,
195 	1, 1, 1, 1, 1, 1, 1, 1,
196 	1, 1, 1, 1, 1, 1, 1, 1,
197 	1, 1, 1, 1, 1, 1, 1, 1,
198 	1, 1, 1, 1, 1, 1, 1, 1,
199 	1, 1, 1, 1, 1, 1, 1, 1,
200 	1, 1, 1, 1, 1, 1, 1, 1,
201 	1, 1, 1, 1, 1, 1, 1, 1,
202 	1, 1, 1, 1, 1, 52, 1, 46,
203 	46, 46, 46, 46, 1, 1, 1, 1,
204 	1, 1, 1, 1, 1, 1, 1, 1,
205 	1, 1, 1, 1, 1, 1, 46, 1,
206 	1, 47, 1, 1, 1, 1, 1, 1,
207 	1, 1, 48, 1, 1, 1, 7, 7,
208 	7, 7, 7, 7, 7, 7, 7, 7,
209 	1, 1, 1, 1, 1, 1, 1, 1,
210 	1, 1, 1, 1, 1, 1, 1, 1,
211 	1, 1, 1, 1, 1, 1, 1, 1,
212 	1, 1, 1, 1, 1, 1, 1, 1,
213 	1, 1, 1, 1, 1, 1, 1, 1,
214 	1, 1, 1, 1, 1, 1, 1, 1,
215 	1, 1, 1, 1, 1, 1, 1, 1,
216 	1, 1, 1, 1, 1, 1, 1, 1,
217 	1, 1, 49, 1, 53, 53, 53, 53,
218 	53, 1, 1, 1, 1, 1, 1, 1,
219 	1, 1, 1, 1, 1, 1, 1, 1,
220 	1, 1, 1, 53, 1, 1, 54, 1,
221 	1, 1, 1, 1, 1, 1, 55, 1,
222 	1, 1, 1, 1, 1, 1, 1, 1,
223 	1, 1, 1, 1, 1, 1, 1, 1,
224 	1, 1, 1, 56, 1, 1, 1, 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, 1, 1, 1,
229 	1, 1, 1, 1, 1, 1, 1, 1,
230 	1, 1, 1, 1, 1, 1, 1, 1,
231 	1, 1, 1, 1, 1, 1, 1, 57,
232 	1, 58, 58, 58, 58, 58, 1, 1,
233 	1, 1, 1, 1, 1, 1, 1, 1,
234 	1, 1, 1, 1, 1, 1, 1, 1,
235 	58, 1, 1, 59, 1, 1, 1, 1,
236 	1, 1, 1, 60, 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, 1, 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, 1, 1, 1, 1, 1, 1,
244 	1, 1, 1, 1, 1, 1, 1, 1,
245 	1, 1, 1, 1, 1, 1, 1, 1,
246 	1, 1, 1, 1, 61, 1, 58, 58,
247 	58, 58, 58, 1, 1, 1, 1, 1,
248 	1, 1, 1, 1, 1, 1, 1, 1,
249 	1, 1, 1, 1, 1, 58, 1, 1,
250 	59, 1, 1, 1, 1, 1, 1, 1,
251 	60, 1, 1, 1, 1, 25, 25, 25,
252 	25, 25, 25, 25, 25, 25, 25, 1,
253 	1, 1, 1, 1, 1, 1, 1, 1,
254 	1, 1, 1, 1, 1, 1, 1, 1,
255 	1, 1, 1, 1, 1, 1, 1, 1,
256 	1, 1, 1, 1, 1, 1, 1, 1,
257 	1, 1, 1, 1, 1, 1, 1, 1,
258 	1, 1, 1, 1, 1, 1, 1, 1,
259 	1, 1, 1, 1, 1, 1, 1, 1,
260 	1, 1, 1, 1, 1, 1, 1, 1,
261 	1, 61, 1, 53, 53, 53, 53, 53,
262 	1, 1, 1, 1, 1, 1, 1, 1,
263 	1, 1, 1, 1, 1, 1, 1, 1,
264 	1, 1, 53, 1, 1, 54, 1, 1,
265 	1, 1, 1, 1, 1, 55, 1, 1,
266 	1, 1, 62, 62, 62, 62, 62, 62,
267 	62, 62, 62, 62, 1, 1, 1, 1,
268 	1, 1, 56, 1, 1, 1, 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, 1, 1, 1, 1,
273 	1, 1, 1, 1, 1, 1, 1, 1,
274 	1, 1, 1, 1, 1, 1, 1, 1,
275 	1, 1, 1, 1, 1, 1, 57, 1,
276 	0
277 };
278 
279 static const char _deserialize_text_glyphs_trans_targs[] = {
280 	16, 0, 18, 3, 19, 22, 19, 22,
281 	5, 20, 21, 20, 21, 23, 26, 8,
282 	9, 12, 9, 12, 10, 11, 24, 25,
283 	24, 25, 15, 15, 14, 1, 2, 6,
284 	7, 13, 15, 1, 2, 6, 7, 13,
285 	14, 17, 14, 17, 14, 18, 17, 1,
286 	4, 14, 17, 1, 14, 17, 1, 2,
287 	7, 14, 17, 1, 2, 14, 26
288 };
289 
290 static const char _deserialize_text_glyphs_trans_actions[] = {
291 	1, 0, 1, 1, 1, 1, 0, 0,
292 	1, 1, 1, 0, 0, 1, 1, 1,
293 	1, 1, 0, 0, 2, 1, 1, 1,
294 	0, 0, 0, 4, 3, 5, 5, 5,
295 	5, 4, 6, 7, 7, 7, 7, 0,
296 	6, 8, 8, 0, 0, 0, 9, 10,
297 	10, 9, 11, 12, 11, 13, 14, 14,
298 	14, 13, 15, 16, 16, 15, 0
299 };
300 
301 static const char _deserialize_text_glyphs_eof_actions[] = {
302 	0, 0, 0, 0, 0, 0, 0, 0,
303 	0, 0, 0, 0, 0, 0, 3, 6,
304 	8, 0, 8, 9, 11, 11, 9, 13,
305 	15, 15, 13
306 };
307 
308 static const int deserialize_text_glyphs_start = 14;
309 static const int deserialize_text_glyphs_first_final = 14;
310 static const int deserialize_text_glyphs_error = 0;
311 
312 static const int deserialize_text_glyphs_en_main = 14;
313 
314 
315 #line 98 "hb-buffer-deserialize-text-glyphs.rl"
316 
317 
318 static hb_bool_t
_hb_buffer_deserialize_text_glyphs(hb_buffer_t * buffer,const char * buf,unsigned int buf_len,const char ** end_ptr,hb_font_t * font)319 _hb_buffer_deserialize_text_glyphs (hb_buffer_t *buffer,
320 				    const char *buf,
321 				    unsigned int buf_len,
322 				    const char **end_ptr,
323 				    hb_font_t *font)
324 {
325   const char *p = buf, *pe = buf + buf_len, *eof = pe, *orig_pe = pe;
326 
327   /* Ensure we have positions. */
328   (void) hb_buffer_get_glyph_positions (buffer, nullptr);
329 
330   while (p < pe && ISSPACE (*p))
331     p++;
332   if (p < pe && *p == (buffer->len ? '|' : '['))
333     *end_ptr = ++p;
334 
335   const char *end = strchr ((char *) p, ']');
336   if (end)
337     pe = eof = end;
338   else
339   {
340     end = strrchr ((char *) p, '|');
341     if (end)
342       pe = eof = end;
343     else
344       pe = eof = p;
345   }
346 
347   const char *tok = nullptr;
348   int cs;
349   hb_glyph_info_t info = {0};
350   hb_glyph_position_t pos = {0};
351 
352 #line 353 "hb-buffer-deserialize-text-glyphs.hh"
353 	{
354 	cs = deserialize_text_glyphs_start;
355 	}
356 
357 #line 358 "hb-buffer-deserialize-text-glyphs.hh"
358 	{
359 	int _slen;
360 	int _trans;
361 	const unsigned char *_keys;
362 	const char *_inds;
363 	if ( p == pe )
364 		goto _test_eof;
365 	if ( cs == 0 )
366 		goto _out;
367 _resume:
368 	_keys = _deserialize_text_glyphs_trans_keys + (cs<<1);
369 	_inds = _deserialize_text_glyphs_indicies + _deserialize_text_glyphs_index_offsets[cs];
370 
371 	_slen = _deserialize_text_glyphs_key_spans[cs];
372 	_trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
373 		(*p) <= _keys[1] ?
374 		(*p) - _keys[0] : _slen ];
375 
376 	cs = _deserialize_text_glyphs_trans_targs[_trans];
377 
378 	if ( _deserialize_text_glyphs_trans_actions[_trans] == 0 )
379 		goto _again;
380 
381 	switch ( _deserialize_text_glyphs_trans_actions[_trans] ) {
382 	case 1:
383 #line 51 "hb-buffer-deserialize-text-glyphs.rl"
384 	{
385 	tok = p;
386 }
387 	break;
388 	case 7:
389 #line 55 "hb-buffer-deserialize-text-glyphs.rl"
390 	{
391 	/* TODO Unescape delimiters. */
392 	if (!hb_font_glyph_from_string (font,
393 					tok, p - tok,
394 					&info.codepoint))
395 	  return false;
396 }
397 	break;
398 	case 14:
399 #line 63 "hb-buffer-deserialize-text-glyphs.rl"
400 	{ if (!parse_uint (tok, p, &info.cluster )) return false; }
401 	break;
402 	case 2:
403 #line 64 "hb-buffer-deserialize-text-glyphs.rl"
404 	{ if (!parse_int  (tok, p, &pos.x_offset )) return false; }
405 	break;
406 	case 16:
407 #line 65 "hb-buffer-deserialize-text-glyphs.rl"
408 	{ if (!parse_int  (tok, p, &pos.y_offset )) return false; }
409 	break;
410 	case 10:
411 #line 66 "hb-buffer-deserialize-text-glyphs.rl"
412 	{ if (!parse_int  (tok, p, &pos.x_advance)) return false; }
413 	break;
414 	case 12:
415 #line 67 "hb-buffer-deserialize-text-glyphs.rl"
416 	{ if (!parse_int  (tok, p, &pos.y_advance)) return false; }
417 	break;
418 	case 4:
419 #line 38 "hb-buffer-deserialize-text-glyphs.rl"
420 	{
421 	hb_memset (&info, 0, sizeof (info));
422 	hb_memset (&pos , 0, sizeof (pos ));
423 }
424 #line 51 "hb-buffer-deserialize-text-glyphs.rl"
425 	{
426 	tok = p;
427 }
428 	break;
429 	case 6:
430 #line 55 "hb-buffer-deserialize-text-glyphs.rl"
431 	{
432 	/* TODO Unescape delimiters. */
433 	if (!hb_font_glyph_from_string (font,
434 					tok, p - tok,
435 					&info.codepoint))
436 	  return false;
437 }
438 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
439 	{
440 	buffer->add_info (info);
441 	if (unlikely (!buffer->successful))
442 	  return false;
443 	buffer->pos[buffer->len - 1] = pos;
444 	*end_ptr = p;
445 }
446 	break;
447 	case 13:
448 #line 63 "hb-buffer-deserialize-text-glyphs.rl"
449 	{ if (!parse_uint (tok, p, &info.cluster )) return false; }
450 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
451 	{
452 	buffer->add_info (info);
453 	if (unlikely (!buffer->successful))
454 	  return false;
455 	buffer->pos[buffer->len - 1] = pos;
456 	*end_ptr = p;
457 }
458 	break;
459 	case 15:
460 #line 65 "hb-buffer-deserialize-text-glyphs.rl"
461 	{ if (!parse_int  (tok, p, &pos.y_offset )) return false; }
462 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
463 	{
464 	buffer->add_info (info);
465 	if (unlikely (!buffer->successful))
466 	  return false;
467 	buffer->pos[buffer->len - 1] = pos;
468 	*end_ptr = p;
469 }
470 	break;
471 	case 9:
472 #line 66 "hb-buffer-deserialize-text-glyphs.rl"
473 	{ if (!parse_int  (tok, p, &pos.x_advance)) return false; }
474 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
475 	{
476 	buffer->add_info (info);
477 	if (unlikely (!buffer->successful))
478 	  return false;
479 	buffer->pos[buffer->len - 1] = pos;
480 	*end_ptr = p;
481 }
482 	break;
483 	case 11:
484 #line 67 "hb-buffer-deserialize-text-glyphs.rl"
485 	{ if (!parse_int  (tok, p, &pos.y_advance)) return false; }
486 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
487 	{
488 	buffer->add_info (info);
489 	if (unlikely (!buffer->successful))
490 	  return false;
491 	buffer->pos[buffer->len - 1] = pos;
492 	*end_ptr = p;
493 }
494 	break;
495 	case 8:
496 #line 68 "hb-buffer-deserialize-text-glyphs.rl"
497 	{ if (!parse_uint (tok, p, &info.mask    )) return false; }
498 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
499 	{
500 	buffer->add_info (info);
501 	if (unlikely (!buffer->successful))
502 	  return false;
503 	buffer->pos[buffer->len - 1] = pos;
504 	*end_ptr = p;
505 }
506 	break;
507 	case 5:
508 #line 38 "hb-buffer-deserialize-text-glyphs.rl"
509 	{
510 	hb_memset (&info, 0, sizeof (info));
511 	hb_memset (&pos , 0, sizeof (pos ));
512 }
513 #line 51 "hb-buffer-deserialize-text-glyphs.rl"
514 	{
515 	tok = p;
516 }
517 #line 55 "hb-buffer-deserialize-text-glyphs.rl"
518 	{
519 	/* TODO Unescape delimiters. */
520 	if (!hb_font_glyph_from_string (font,
521 					tok, p - tok,
522 					&info.codepoint))
523 	  return false;
524 }
525 	break;
526 	case 3:
527 #line 38 "hb-buffer-deserialize-text-glyphs.rl"
528 	{
529 	hb_memset (&info, 0, sizeof (info));
530 	hb_memset (&pos , 0, sizeof (pos ));
531 }
532 #line 51 "hb-buffer-deserialize-text-glyphs.rl"
533 	{
534 	tok = p;
535 }
536 #line 55 "hb-buffer-deserialize-text-glyphs.rl"
537 	{
538 	/* TODO Unescape delimiters. */
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-glyphs.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 #line 554 "hb-buffer-deserialize-text-glyphs.hh"
554 	}
555 
556 _again:
557 	if ( cs == 0 )
558 		goto _out;
559 	if ( ++p != pe )
560 		goto _resume;
561 	_test_eof: {}
562 	if ( p == eof )
563 	{
564 	switch ( _deserialize_text_glyphs_eof_actions[cs] ) {
565 	case 6:
566 #line 55 "hb-buffer-deserialize-text-glyphs.rl"
567 	{
568 	/* TODO Unescape delimiters. */
569 	if (!hb_font_glyph_from_string (font,
570 					tok, p - tok,
571 					&info.codepoint))
572 	  return false;
573 }
574 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
575 	{
576 	buffer->add_info (info);
577 	if (unlikely (!buffer->successful))
578 	  return false;
579 	buffer->pos[buffer->len - 1] = pos;
580 	*end_ptr = p;
581 }
582 	break;
583 	case 13:
584 #line 63 "hb-buffer-deserialize-text-glyphs.rl"
585 	{ if (!parse_uint (tok, p, &info.cluster )) return false; }
586 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
587 	{
588 	buffer->add_info (info);
589 	if (unlikely (!buffer->successful))
590 	  return false;
591 	buffer->pos[buffer->len - 1] = pos;
592 	*end_ptr = p;
593 }
594 	break;
595 	case 15:
596 #line 65 "hb-buffer-deserialize-text-glyphs.rl"
597 	{ if (!parse_int  (tok, p, &pos.y_offset )) return false; }
598 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
599 	{
600 	buffer->add_info (info);
601 	if (unlikely (!buffer->successful))
602 	  return false;
603 	buffer->pos[buffer->len - 1] = pos;
604 	*end_ptr = p;
605 }
606 	break;
607 	case 9:
608 #line 66 "hb-buffer-deserialize-text-glyphs.rl"
609 	{ if (!parse_int  (tok, p, &pos.x_advance)) return false; }
610 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
611 	{
612 	buffer->add_info (info);
613 	if (unlikely (!buffer->successful))
614 	  return false;
615 	buffer->pos[buffer->len - 1] = pos;
616 	*end_ptr = p;
617 }
618 	break;
619 	case 11:
620 #line 67 "hb-buffer-deserialize-text-glyphs.rl"
621 	{ if (!parse_int  (tok, p, &pos.y_advance)) return false; }
622 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
623 	{
624 	buffer->add_info (info);
625 	if (unlikely (!buffer->successful))
626 	  return false;
627 	buffer->pos[buffer->len - 1] = pos;
628 	*end_ptr = p;
629 }
630 	break;
631 	case 8:
632 #line 68 "hb-buffer-deserialize-text-glyphs.rl"
633 	{ if (!parse_uint (tok, p, &info.mask    )) return false; }
634 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
635 	{
636 	buffer->add_info (info);
637 	if (unlikely (!buffer->successful))
638 	  return false;
639 	buffer->pos[buffer->len - 1] = pos;
640 	*end_ptr = p;
641 }
642 	break;
643 	case 3:
644 #line 38 "hb-buffer-deserialize-text-glyphs.rl"
645 	{
646 	hb_memset (&info, 0, sizeof (info));
647 	hb_memset (&pos , 0, sizeof (pos ));
648 }
649 #line 51 "hb-buffer-deserialize-text-glyphs.rl"
650 	{
651 	tok = p;
652 }
653 #line 55 "hb-buffer-deserialize-text-glyphs.rl"
654 	{
655 	/* TODO Unescape delimiters. */
656 	if (!hb_font_glyph_from_string (font,
657 					tok, p - tok,
658 					&info.codepoint))
659 	  return false;
660 }
661 #line 43 "hb-buffer-deserialize-text-glyphs.rl"
662 	{
663 	buffer->add_info (info);
664 	if (unlikely (!buffer->successful))
665 	  return false;
666 	buffer->pos[buffer->len - 1] = pos;
667 	*end_ptr = p;
668 }
669 	break;
670 #line 671 "hb-buffer-deserialize-text-glyphs.hh"
671 	}
672 	}
673 
674 	_out: {}
675 	}
676 
677 #line 136 "hb-buffer-deserialize-text-glyphs.rl"
678 
679 
680   if (pe < orig_pe && *pe == ']')
681   {
682     pe++;
683     if (p == pe)
684       p++;
685   }
686 
687   *end_ptr = p;
688 
689   return p == pe;
690 }
691 
692 #endif /* HB_BUFFER_DESERIALIZE_TEXT_GLYPHS_HH */
693