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