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"
36static 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
43static 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
50static 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
57static 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
281static 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
291static 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
301static 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
308static const int deserialize_text_start = 1;
309static const int deserialize_text_first_final = 13;
310static const int deserialize_text_error = 0;
311
312static const int deserialize_text_en_main = 1;
313
314
315#line 91 "hb-buffer-deserialize-text.rl"
316
317
318static hb_bool_t
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