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-private.hh"
33
34
35 #line 36 "hb-buffer-deserialize-text.hh"
36 static const unsigned char _deserialize_text_trans_keys[] = {
37 0u, 0u, 9u, 122u, 45u, 57u, 48u, 57u, 45u, 57u, 48u, 57u, 48u, 57u, 45u, 57u,
38 48u, 57u, 44u, 44u, 45u, 57u, 48u, 57u, 44u, 57u, 9u, 124u, 9u, 124u, 0u, 0u,
39 9u, 122u, 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_key_spans[] = {
44 0, 114, 13, 10, 13, 10, 10, 13,
45 10, 1, 13, 10, 14, 116, 116, 0,
46 114, 116, 116, 116, 116, 116, 116, 116,
47 116, 116, 116
48 };
49
50 static const short _deserialize_text_index_offsets[] = {
51 0, 0, 115, 129, 140, 154, 165, 176,
52 190, 201, 203, 217, 228, 243, 360, 477,
53 478, 593, 710, 827, 944, 1061, 1178, 1295,
54 1412, 1529, 1646
55 };
56
57 static const char _deserialize_text_indicies[] = {
58 0, 0, 0, 0, 0, 1, 1,
59 1, 1, 1, 1, 1, 1, 1, 1,
60 1, 1, 1, 1, 1, 1, 1, 1,
61 0, 1, 1, 1, 1, 1, 1, 1,
62 1, 1, 1, 1, 1, 1, 1, 1,
63 2, 3, 3, 3, 3, 3, 3, 3,
64 3, 3, 1, 1, 1, 1, 1, 1,
65 1, 4, 4, 4, 4, 4, 4, 4,
66 4, 4, 4, 4, 4, 4, 4, 4,
67 4, 4, 4, 4, 4, 4, 4, 4,
68 4, 4, 4, 1, 1, 1, 1, 1,
69 1, 4, 4, 4, 4, 4, 4, 4,
70 4, 4, 4, 4, 4, 4, 4, 4,
71 4, 4, 4, 4, 4, 4, 4, 4,
72 4, 4, 4, 1, 5, 1, 1, 6,
73 7, 7, 7, 7, 7, 7, 7, 7,
74 7, 1, 8, 9, 9, 9, 9, 9,
75 9, 9, 9, 9, 1, 10, 1, 1,
76 11, 12, 12, 12, 12, 12, 12, 12,
77 12, 12, 1, 13, 14, 14, 14, 14,
78 14, 14, 14, 14, 14, 1, 15, 16,
79 16, 16, 16, 16, 16, 16, 16, 16,
80 1, 17, 1, 1, 18, 19, 19, 19,
81 19, 19, 19, 19, 19, 19, 1, 20,
82 21, 21, 21, 21, 21, 21, 21, 21,
83 21, 1, 22, 1, 23, 1, 1, 24,
84 25, 25, 25, 25, 25, 25, 25, 25,
85 25, 1, 26, 27, 27, 27, 27, 27,
86 27, 27, 27, 27, 1, 22, 1, 1,
87 1, 21, 21, 21, 21, 21, 21, 21,
88 21, 21, 21, 1, 28, 28, 28, 28,
89 28, 1, 1, 1, 1, 1, 1, 1,
90 1, 1, 1, 1, 1, 1, 1, 1,
91 1, 1, 1, 28, 1, 1, 1, 1,
92 1, 1, 1, 1, 1, 1, 29, 1,
93 1, 1, 1, 1, 1, 1, 1, 1,
94 1, 1, 1, 1, 1, 1, 1, 1,
95 30, 1, 1, 31, 1, 1, 1, 1,
96 1, 1, 1, 1, 1, 1, 1, 1,
97 1, 1, 1, 1, 1, 1, 1, 1,
98 1, 1, 1, 1, 1, 1, 1, 1,
99 32, 1, 1, 1, 1, 1, 1, 1,
100 1, 1, 1, 1, 1, 1, 1, 1,
101 1, 1, 1, 1, 1, 1, 1, 1,
102 1, 1, 1, 1, 1, 1, 1, 33,
103 1, 34, 34, 34, 34, 34, 1, 1,
104 1, 1, 1, 1, 1, 1, 1, 1,
105 1, 1, 1, 1, 1, 1, 1, 1,
106 34, 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, 1, 1, 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, 1, 1, 1, 35, 1, 1,
114 1, 1, 1, 1, 1, 1, 1, 1,
115 1, 1, 1, 1, 1, 1, 1, 1,
116 1, 1, 1, 1, 1, 1, 1, 1,
117 1, 1, 1, 1, 36, 1, 1, 0,
118 0, 0, 0, 0, 1, 1, 1, 1,
119 1, 1, 1, 1, 1, 1, 1, 1,
120 1, 1, 1, 1, 1, 1, 0, 1,
121 1, 1, 1, 1, 1, 1, 1, 1,
122 1, 1, 1, 1, 1, 1, 2, 3,
123 3, 3, 3, 3, 3, 3, 3, 3,
124 1, 1, 1, 1, 1, 1, 1, 4,
125 4, 4, 4, 4, 4, 4, 4, 4,
126 4, 4, 4, 4, 4, 4, 4, 4,
127 4, 4, 4, 4, 4, 4, 4, 4,
128 4, 1, 1, 1, 1, 1, 1, 4,
129 4, 4, 4, 4, 4, 4, 4, 4,
130 4, 4, 4, 4, 4, 4, 4, 4,
131 4, 4, 4, 4, 4, 4, 4, 4,
132 4, 1, 28, 28, 28, 28, 28, 1,
133 1, 1, 1, 1, 1, 1, 1, 1,
134 1, 1, 1, 1, 1, 1, 1, 1,
135 1, 28, 1, 1, 1, 1, 1, 1,
136 1, 1, 1, 1, 29, 1, 1, 1,
137 1, 37, 37, 37, 37, 37, 37, 37,
138 37, 37, 37, 1, 1, 1, 30, 1,
139 1, 31, 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, 32, 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, 1, 1, 1,
146 1, 1, 1, 1, 1, 33, 1, 38,
147 38, 38, 38, 38, 1, 1, 1, 1,
148 1, 1, 1, 1, 1, 1, 1, 1,
149 1, 1, 1, 1, 1, 1, 38, 1,
150 1, 1, 1, 1, 1, 1, 1, 1,
151 1, 1, 39, 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, 40, 1, 1, 1, 1,
158 1, 1, 1, 1, 1, 1, 1, 1,
159 1, 1, 1, 1, 1, 1, 1, 1,
160 1, 1, 1, 1, 1, 1, 1, 1,
161 1, 1, 41, 1, 42, 42, 42, 42,
162 42, 1, 1, 1, 1, 1, 1, 1,
163 1, 1, 1, 1, 1, 1, 1, 1,
164 1, 1, 1, 42, 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 43, 1, 1, 1, 1, 1, 1, 1,
173 1, 1, 1, 1, 1, 1, 1, 1,
174 1, 1, 1, 1, 1, 1, 1, 1,
175 1, 1, 1, 1, 1, 1, 1, 44,
176 1, 42, 42, 42, 42, 42, 1, 1,
177 1, 1, 1, 1, 1, 1, 1, 1,
178 1, 1, 1, 1, 1, 1, 1, 1,
179 42, 1, 1, 1, 1, 1, 1, 1,
180 1, 1, 1, 1, 1, 1, 1, 1,
181 14, 14, 14, 14, 14, 14, 14, 14,
182 14, 14, 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, 43, 1, 1,
187 1, 1, 1, 1, 1, 1, 1, 1,
188 1, 1, 1, 1, 1, 1, 1, 1,
189 1, 1, 1, 1, 1, 1, 1, 1,
190 1, 1, 1, 1, 44, 1, 38, 38,
191 38, 38, 38, 1, 1, 1, 1, 1,
192 1, 1, 1, 1, 1, 1, 1, 1,
193 1, 1, 1, 1, 1, 38, 1, 1,
194 1, 1, 1, 1, 1, 1, 1, 1,
195 1, 39, 1, 1, 1, 9, 9, 9,
196 9, 9, 9, 9, 9, 9, 9, 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, 40, 1, 1, 1, 1, 1,
202 1, 1, 1, 1, 1, 1, 1, 1,
203 1, 1, 1, 1, 1, 1, 1, 1,
204 1, 1, 1, 1, 1, 1, 1, 1,
205 1, 41, 1, 45, 45, 45, 45, 45,
206 1, 1, 1, 1, 1, 1, 1, 1,
207 1, 1, 1, 1, 1, 1, 1, 1,
208 1, 1, 45, 1, 1, 1, 1, 1,
209 1, 1, 1, 1, 1, 46, 1, 1,
210 1, 1, 1, 1, 1, 1, 1, 1,
211 1, 1, 1, 1, 1, 1, 1, 1,
212 1, 1, 47, 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, 48,
216 1, 1, 1, 1, 1, 1, 1, 1,
217 1, 1, 1, 1, 1, 1, 1, 1,
218 1, 1, 1, 1, 1, 1, 1, 1,
219 1, 1, 1, 1, 1, 1, 49, 1,
220 50, 50, 50, 50, 50, 1, 1, 1,
221 1, 1, 1, 1, 1, 1, 1, 1,
222 1, 1, 1, 1, 1, 1, 1, 50,
223 1, 1, 1, 1, 1, 1, 1, 1,
224 1, 1, 51, 1, 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, 52, 1, 1, 1,
231 1, 1, 1, 1, 1, 1, 1, 1,
232 1, 1, 1, 1, 1, 1, 1, 1,
233 1, 1, 1, 1, 1, 1, 1, 1,
234 1, 1, 1, 53, 1, 50, 50, 50,
235 50, 50, 1, 1, 1, 1, 1, 1,
236 1, 1, 1, 1, 1, 1, 1, 1,
237 1, 1, 1, 1, 50, 1, 1, 1,
238 1, 1, 1, 1, 1, 1, 1, 51,
239 1, 1, 1, 1, 27, 27, 27, 27,
240 27, 27, 27, 27, 27, 27, 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, 52, 1, 1, 1, 1, 1, 1,
246 1, 1, 1, 1, 1, 1, 1, 1,
247 1, 1, 1, 1, 1, 1, 1, 1,
248 1, 1, 1, 1, 1, 1, 1, 1,
249 53, 1, 45, 45, 45, 45, 45, 1,
250 1, 1, 1, 1, 1, 1, 1, 1,
251 1, 1, 1, 1, 1, 1, 1, 1,
252 1, 45, 1, 1, 1, 1, 1, 1,
253 1, 1, 1, 1, 46, 1, 1, 1,
254 1, 54, 54, 54, 54, 54, 54, 54,
255 54, 54, 54, 1, 1, 1, 1, 1,
256 1, 47, 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, 48, 1,
260 1, 1, 1, 1, 1, 1, 1, 1,
261 1, 1, 1, 1, 1, 1, 1, 1,
262 1, 1, 1, 1, 1, 1, 1, 1,
263 1, 1, 1, 1, 1, 49, 1, 28,
264 28, 28, 28, 28, 1, 1, 1, 1,
265 1, 1, 1, 1, 1, 1, 1, 1,
266 1, 1, 1, 1, 1, 1, 28, 1,
267 1, 1, 1, 1, 1, 1, 1, 1,
268 1, 29, 1, 55, 55, 1, 55, 55,
269 55, 55, 55, 55, 55, 55, 55, 55,
270 1, 1, 1, 30, 1, 1, 31, 55,
271 55, 55, 55, 55, 55, 55, 55, 55,
272 55, 55, 55, 55, 55, 55, 55, 55,
273 55, 55, 55, 55, 55, 55, 55, 55,
274 55, 1, 1, 32, 1, 55, 1, 55,
275 55, 55, 55, 55, 55, 55, 55, 55,
276 55, 55, 55, 55, 55, 55, 55, 55,
277 55, 55, 55, 55, 55, 55, 55, 55,
278 55, 1, 33, 1, 0
279 };
280
281 static const char _deserialize_text_trans_targs[] = {
282 1, 0, 13, 17, 26, 3, 18, 21,
283 18, 21, 5, 19, 20, 19, 20, 22,
284 25, 8, 9, 12, 9, 12, 10, 11,
285 23, 24, 23, 24, 14, 2, 6, 7,
286 15, 16, 14, 15, 16, 17, 14, 4,
287 15, 16, 14, 15, 16, 14, 2, 7,
288 15, 16, 14, 2, 15, 16, 25, 26
289 };
290
291 static const char _deserialize_text_trans_actions[] = {
292 0, 0, 1, 1, 1, 2, 2, 2,
293 0, 0, 2, 2, 2, 0, 0, 2,
294 2, 2, 2, 2, 0, 0, 3, 2,
295 2, 2, 0, 0, 4, 5, 5, 5,
296 4, 4, 0, 0, 0, 0, 6, 7,
297 6, 6, 8, 8, 8, 9, 10, 10,
298 9, 9, 11, 12, 11, 11, 0, 0
299 };
300
301 static const char _deserialize_text_eof_actions[] = {
302 0, 0, 0, 0, 0, 0, 0, 0,
303 0, 0, 0, 0, 0, 4, 0, 0,
304 0, 4, 6, 8, 8, 6, 9, 11,
305 11, 9, 4
306 };
307
308 static const int deserialize_text_start = 1;
309 static const int deserialize_text_first_final = 13;
310 static const int deserialize_text_error = 0;
311
312 static const int deserialize_text_en_main = 1;
313
314
315 #line 91 "hb-buffer-deserialize-text.rl"
316
317
318 static hb_bool_t
_hb_buffer_deserialize_glyphs_text(hb_buffer_t * buffer,const char * buf,unsigned int buf_len,const char ** end_ptr,hb_font_t * font)319 _hb_buffer_deserialize_glyphs_text (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;
326
327 /* Ensure we have positions. */
328 (void) hb_buffer_get_glyph_positions (buffer, NULL);
329
330 while (p < pe && ISSPACE (*p))
331 p++;
332 if (p < pe && *p == (buffer->len ? '|' : '['))
333 {
334 *end_ptr = ++p;
335 }
336
337 const char *eof = pe, *tok = NULL;
338 int cs;
339 hb_glyph_info_t info = {0};
340 hb_glyph_position_t pos = {0};
341
342 #line 343 "hb-buffer-deserialize-text.hh"
343 {
344 cs = deserialize_text_start;
345 }
346
347 #line 348 "hb-buffer-deserialize-text.hh"
348 {
349 int _slen;
350 int _trans;
351 const unsigned char *_keys;
352 const char *_inds;
353 if ( p == pe )
354 goto _test_eof;
355 if ( cs == 0 )
356 goto _out;
357 _resume:
358 _keys = _deserialize_text_trans_keys + (cs<<1);
359 _inds = _deserialize_text_indicies + _deserialize_text_index_offsets[cs];
360
361 _slen = _deserialize_text_key_spans[cs];
362 _trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
363 (*p) <= _keys[1] ?
364 (*p) - _keys[0] : _slen ];
365
366 cs = _deserialize_text_trans_targs[_trans];
367
368 if ( _deserialize_text_trans_actions[_trans] == 0 )
369 goto _again;
370
371 switch ( _deserialize_text_trans_actions[_trans] ) {
372 case 2:
373 #line 51 "hb-buffer-deserialize-text.rl"
374 {
375 tok = p;
376 }
377 break;
378 case 5:
379 #line 55 "hb-buffer-deserialize-text.rl"
380 {
381 if (!hb_font_glyph_from_string (font,
382 tok, p - tok,
383 &info.codepoint))
384 return false;
385 }
386 break;
387 case 10:
388 #line 62 "hb-buffer-deserialize-text.rl"
389 { if (!parse_uint (tok, p, &info.cluster )) return false; }
390 break;
391 case 3:
392 #line 63 "hb-buffer-deserialize-text.rl"
393 { if (!parse_int (tok, p, &pos.x_offset )) return false; }
394 break;
395 case 12:
396 #line 64 "hb-buffer-deserialize-text.rl"
397 { if (!parse_int (tok, p, &pos.y_offset )) return false; }
398 break;
399 case 7:
400 #line 65 "hb-buffer-deserialize-text.rl"
401 { if (!parse_int (tok, p, &pos.x_advance)) return false; }
402 break;
403 case 1:
404 #line 38 "hb-buffer-deserialize-text.rl"
405 {
406 memset (&info, 0, sizeof (info));
407 memset (&pos , 0, sizeof (pos ));
408 }
409 #line 51 "hb-buffer-deserialize-text.rl"
410 {
411 tok = p;
412 }
413 break;
414 case 4:
415 #line 55 "hb-buffer-deserialize-text.rl"
416 {
417 if (!hb_font_glyph_from_string (font,
418 tok, p - tok,
419 &info.codepoint))
420 return false;
421 }
422 #line 43 "hb-buffer-deserialize-text.rl"
423 {
424 buffer->add_info (info);
425 if (buffer->in_error)
426 return false;
427 buffer->pos[buffer->len - 1] = pos;
428 *end_ptr = p;
429 }
430 break;
431 case 9:
432 #line 62 "hb-buffer-deserialize-text.rl"
433 { if (!parse_uint (tok, p, &info.cluster )) return false; }
434 #line 43 "hb-buffer-deserialize-text.rl"
435 {
436 buffer->add_info (info);
437 if (buffer->in_error)
438 return false;
439 buffer->pos[buffer->len - 1] = pos;
440 *end_ptr = p;
441 }
442 break;
443 case 11:
444 #line 64 "hb-buffer-deserialize-text.rl"
445 { if (!parse_int (tok, p, &pos.y_offset )) return false; }
446 #line 43 "hb-buffer-deserialize-text.rl"
447 {
448 buffer->add_info (info);
449 if (buffer->in_error)
450 return false;
451 buffer->pos[buffer->len - 1] = pos;
452 *end_ptr = p;
453 }
454 break;
455 case 6:
456 #line 65 "hb-buffer-deserialize-text.rl"
457 { if (!parse_int (tok, p, &pos.x_advance)) return false; }
458 #line 43 "hb-buffer-deserialize-text.rl"
459 {
460 buffer->add_info (info);
461 if (buffer->in_error)
462 return false;
463 buffer->pos[buffer->len - 1] = pos;
464 *end_ptr = p;
465 }
466 break;
467 case 8:
468 #line 66 "hb-buffer-deserialize-text.rl"
469 { if (!parse_int (tok, p, &pos.y_advance)) return false; }
470 #line 43 "hb-buffer-deserialize-text.rl"
471 {
472 buffer->add_info (info);
473 if (buffer->in_error)
474 return false;
475 buffer->pos[buffer->len - 1] = pos;
476 *end_ptr = p;
477 }
478 break;
479 #line 480 "hb-buffer-deserialize-text.hh"
480 }
481
482 _again:
483 if ( cs == 0 )
484 goto _out;
485 if ( ++p != pe )
486 goto _resume;
487 _test_eof: {}
488 if ( p == eof )
489 {
490 switch ( _deserialize_text_eof_actions[cs] ) {
491 case 4:
492 #line 55 "hb-buffer-deserialize-text.rl"
493 {
494 if (!hb_font_glyph_from_string (font,
495 tok, p - tok,
496 &info.codepoint))
497 return false;
498 }
499 #line 43 "hb-buffer-deserialize-text.rl"
500 {
501 buffer->add_info (info);
502 if (buffer->in_error)
503 return false;
504 buffer->pos[buffer->len - 1] = pos;
505 *end_ptr = p;
506 }
507 break;
508 case 9:
509 #line 62 "hb-buffer-deserialize-text.rl"
510 { if (!parse_uint (tok, p, &info.cluster )) return false; }
511 #line 43 "hb-buffer-deserialize-text.rl"
512 {
513 buffer->add_info (info);
514 if (buffer->in_error)
515 return false;
516 buffer->pos[buffer->len - 1] = pos;
517 *end_ptr = p;
518 }
519 break;
520 case 11:
521 #line 64 "hb-buffer-deserialize-text.rl"
522 { if (!parse_int (tok, p, &pos.y_offset )) return false; }
523 #line 43 "hb-buffer-deserialize-text.rl"
524 {
525 buffer->add_info (info);
526 if (buffer->in_error)
527 return false;
528 buffer->pos[buffer->len - 1] = pos;
529 *end_ptr = p;
530 }
531 break;
532 case 6:
533 #line 65 "hb-buffer-deserialize-text.rl"
534 { if (!parse_int (tok, p, &pos.x_advance)) return false; }
535 #line 43 "hb-buffer-deserialize-text.rl"
536 {
537 buffer->add_info (info);
538 if (buffer->in_error)
539 return false;
540 buffer->pos[buffer->len - 1] = pos;
541 *end_ptr = p;
542 }
543 break;
544 case 8:
545 #line 66 "hb-buffer-deserialize-text.rl"
546 { if (!parse_int (tok, p, &pos.y_advance)) return false; }
547 #line 43 "hb-buffer-deserialize-text.rl"
548 {
549 buffer->add_info (info);
550 if (buffer->in_error)
551 return false;
552 buffer->pos[buffer->len - 1] = pos;
553 *end_ptr = p;
554 }
555 break;
556 #line 557 "hb-buffer-deserialize-text.hh"
557 }
558 }
559
560 _out: {}
561 }
562
563 #line 119 "hb-buffer-deserialize-text.rl"
564
565
566 *end_ptr = p;
567
568 return p == pe && *(p-1) != ']';
569 }
570
571 #endif /* HB_BUFFER_DESERIALIZE_TEXT_HH */
572