1 /*
   2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   3  *
   4  * This code is free software; you can redistribute it and/or modify it
   5  * under the terms of the GNU General Public License version 2 only, as
   6  * published by the Free Software Foundation.  Oracle designates this
   7  * particular file as subject to the "Classpath" exception as provided
   8  * by Oracle in the LICENSE file that accompanied this code.
   9  *
  10  * This code is distributed in the hope that it will be useful, but WITHOUT
  11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13  * version 2 for more details (a copy is included in the LICENSE file that
  14  * accompanied this code).
  15  *
  16  * You should have received a copy of the GNU General Public License version
  17  * 2 along with this work; if not, write to the Free Software Foundation,
  18  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19  *
  20  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  21  * or visit www.oracle.com if you need additional information or have any
  22  * questions.
  23  */
  24 
  25 // This file is available under and governed by the GNU General Public
  26 // License version 2 only, as published by the Free Software Foundation.
  27 // However, the following notice accompanied the original version of this
  28 // file:
  29 //
  30 
  31 #line 1 "hb-buffer-deserialize-json.rl"
  32 /*
  33  * Copyright © 2013  Google, Inc.
  34  *
  35  *  This is part of HarfBuzz, a text shaping library.
  36  *
  37  * Permission is hereby granted, without written agreement and without
  38  * license or royalty fees, to use, copy, modify, and distribute this
  39  * software and its documentation for any purpose, provided that the
  40  * above copyright notice and the following two paragraphs appear in
  41  * all copies of this software.
  42  *
  43  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  44  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  45  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  46  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  47  * DAMAGE.
  48  *
  49  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  50  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  51  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  52  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  53  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  54  *
  55  * Google Author(s): Behdad Esfahbod
  56  */
  57 
  58 #ifndef HB_BUFFER_DESERIALIZE_JSON_HH
  59 #define HB_BUFFER_DESERIALIZE_JSON_HH
  60 
  61 #include "hb-private.hh"
  62 
  63 
  64 #line 36 "hb-buffer-deserialize-json.hh"
  65 static const unsigned char _deserialize_json_trans_keys[] = {
  66         0u, 0u, 9u, 123u, 9u, 34u, 97u, 103u, 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u,
  67         48u, 57u, 9u, 125u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u,
  68         9u, 125u, 9u, 125u, 108u, 108u, 34u, 34u, 9u, 58u, 9u, 57u, 9u, 125u, 9u, 125u,
  69         120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u,
  70         9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u,
  71         65u, 122u, 34u, 122u, 9u, 125u, 9u, 125u, 9u, 93u, 9u, 123u, 0u, 0u, 0
  72 };
  73 
  74 static const char _deserialize_json_key_spans[] = {
  75         0, 115, 26, 7, 2, 1, 50, 49,
  76         10, 117, 117, 117, 1, 50, 49, 10,
  77         117, 117, 1, 1, 50, 49, 117, 117,
  78         2, 1, 50, 49, 10, 117, 117, 1,
  79         50, 49, 10, 117, 117, 1, 50, 49,
  80         58, 89, 117, 117, 85, 115, 0
  81 };
  82 
  83 static const short _deserialize_json_index_offsets[] = {
  84         0, 0, 116, 143, 151, 154, 156, 207,
  85         257, 268, 386, 504, 622, 624, 675, 725,
  86         736, 854, 972, 974, 976, 1027, 1077, 1195,
  87         1313, 1316, 1318, 1369, 1419, 1430, 1548, 1666,
  88         1668, 1719, 1769, 1780, 1898, 2016, 2018, 2069,
  89         2119, 2178, 2268, 2386, 2504, 2590, 2706
  90 };
  91 
  92 static const char _deserialize_json_indicies[] = {
  93         0, 0, 0, 0, 0, 1, 1,
  94         1, 1, 1, 1, 1, 1, 1, 1,
  95         1, 1, 1, 1, 1, 1, 1, 1,
  96         0, 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         1, 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, 1,
 103         1, 1, 1, 1, 1, 1, 1, 1,
 104         1, 1, 1, 1, 1, 1, 1, 1,
 105         1, 1, 1, 1, 1, 1, 1, 1,
 106         1, 1, 1, 1, 1, 1, 1, 1,
 107         1, 1, 1, 2, 1, 3, 3, 3,
 108         3, 3, 1, 1, 1, 1, 1, 1,
 109         1, 1, 1, 1, 1, 1, 1, 1,
 110         1, 1, 1, 1, 3, 1, 4, 1,
 111         5, 1, 6, 7, 1, 1, 8, 1,
 112         9, 10, 1, 11, 1, 11, 11, 11,
 113         11, 11, 1, 1, 1, 1, 1, 1,
 114         1, 1, 1, 1, 1, 1, 1, 1,
 115         1, 1, 1, 1, 11, 1, 1, 1,
 116         1, 1, 1, 1, 1, 1, 1, 1,
 117         1, 1, 1, 1, 1, 1, 1, 1,
 118         1, 1, 1, 1, 1, 1, 12, 1,
 119         12, 12, 12, 12, 12, 1, 1, 1,
 120         1, 1, 1, 1, 1, 1, 1, 1,
 121         1, 1, 1, 1, 1, 1, 1, 12,
 122         1, 1, 1, 1, 1, 1, 1, 1,
 123         1, 1, 1, 1, 13, 1, 1, 14,
 124         15, 15, 15, 15, 15, 15, 15, 15,
 125         15, 1, 16, 17, 17, 17, 17, 17,
 126         17, 17, 17, 17, 1, 18, 18, 18,
 127         18, 18, 1, 1, 1, 1, 1, 1,
 128         1, 1, 1, 1, 1, 1, 1, 1,
 129         1, 1, 1, 1, 18, 1, 1, 1,
 130         1, 1, 1, 1, 1, 1, 1, 1,
 131         19, 1, 1, 1, 1, 1, 1, 1,
 132         1, 1, 1, 1, 1, 1, 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, 20, 1, 21, 21, 21, 21, 21,
 142         1, 1, 1, 1, 1, 1, 1, 1,
 143         1, 1, 1, 1, 1, 1, 1, 1,
 144         1, 1, 21, 1, 1, 1, 1, 1,
 145         1, 1, 1, 1, 1, 1, 3, 1,
 146         1, 1, 1, 1, 1, 1, 1, 1,
 147         1, 1, 1, 1, 1, 1, 1, 1,
 148         1, 1, 1, 1, 1, 1, 1, 1,
 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, 1, 1, 1, 22,
 156         1, 18, 18, 18, 18, 18, 1, 1,
 157         1, 1, 1, 1, 1, 1, 1, 1,
 158         1, 1, 1, 1, 1, 1, 1, 1,
 159         18, 1, 1, 1, 1, 1, 1, 1,
 160         1, 1, 1, 1, 19, 1, 1, 1,
 161         17, 17, 17, 17, 17, 17, 17, 17,
 162         17, 17, 1, 1, 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, 1, 1, 1, 1, 20, 1, 23,
 171         1, 23, 23, 23, 23, 23, 1, 1,
 172         1, 1, 1, 1, 1, 1, 1, 1,
 173         1, 1, 1, 1, 1, 1, 1, 1,
 174         23, 1, 1, 1, 1, 1, 1, 1,
 175         1, 1, 1, 1, 1, 1, 1, 1,
 176         1, 1, 1, 1, 1, 1, 1, 1,
 177         1, 1, 24, 1, 24, 24, 24, 24,
 178         24, 1, 1, 1, 1, 1, 1, 1,
 179         1, 1, 1, 1, 1, 1, 1, 1,
 180         1, 1, 1, 24, 1, 1, 1, 1,
 181         1, 1, 1, 1, 1, 1, 1, 1,
 182         25, 1, 1, 26, 27, 27, 27, 27,
 183         27, 27, 27, 27, 27, 1, 28, 29,
 184         29, 29, 29, 29, 29, 29, 29, 29,
 185         1, 30, 30, 30, 30, 30, 1, 1,
 186         1, 1, 1, 1, 1, 1, 1, 1,
 187         1, 1, 1, 1, 1, 1, 1, 1,
 188         30, 1, 1, 1, 1, 1, 1, 1,
 189         1, 1, 1, 1, 31, 1, 1, 1,
 190         1, 1, 1, 1, 1, 1, 1, 1,
 191         1, 1, 1, 1, 1, 1, 1, 1,
 192         1, 1, 1, 1, 1, 1, 1, 1,
 193         1, 1, 1, 1, 1, 1, 1, 1,
 194         1, 1, 1, 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, 32, 1, 30,
 200         30, 30, 30, 30, 1, 1, 1, 1,
 201         1, 1, 1, 1, 1, 1, 1, 1,
 202         1, 1, 1, 1, 1, 1, 30, 1,
 203         1, 1, 1, 1, 1, 1, 1, 1,
 204         1, 1, 31, 1, 1, 1, 29, 29,
 205         29, 29, 29, 29, 29, 29, 29, 29,
 206         1, 1, 1, 1, 1, 1, 1, 1,
 207         1, 1, 1, 1, 1, 1, 1, 1,
 208         1, 1, 1, 1, 1, 1, 1, 1,
 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, 32, 1, 33, 1, 34,
 215         1, 34, 34, 34, 34, 34, 1, 1,
 216         1, 1, 1, 1, 1, 1, 1, 1,
 217         1, 1, 1, 1, 1, 1, 1, 1,
 218         34, 1, 1, 1, 1, 1, 1, 1,
 219         1, 1, 1, 1, 1, 1, 1, 1,
 220         1, 1, 1, 1, 1, 1, 1, 1,
 221         1, 1, 35, 1, 35, 35, 35, 35,
 222         35, 1, 1, 1, 1, 1, 1, 1,
 223         1, 1, 1, 1, 1, 1, 1, 1,
 224         1, 1, 1, 35, 1, 1, 1, 1,
 225         1, 1, 1, 1, 1, 1, 1, 1,
 226         1, 1, 1, 36, 37, 37, 37, 37,
 227         37, 37, 37, 37, 37, 1, 38, 38,
 228         38, 38, 38, 1, 1, 1, 1, 1,
 229         1, 1, 1, 1, 1, 1, 1, 1,
 230         1, 1, 1, 1, 1, 38, 1, 1,
 231         1, 1, 1, 1, 1, 1, 1, 1,
 232         1, 39, 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, 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, 40, 1, 38, 38, 38, 38,
 243         38, 1, 1, 1, 1, 1, 1, 1,
 244         1, 1, 1, 1, 1, 1, 1, 1,
 245         1, 1, 1, 38, 1, 1, 1, 1,
 246         1, 1, 1, 1, 1, 1, 1, 39,
 247         1, 1, 1, 41, 41, 41, 41, 41,
 248         41, 41, 41, 41, 41, 1, 1, 1,
 249         1, 1, 1, 1, 1, 1, 1, 1,
 250         1, 1, 1, 1, 1, 1, 1, 1,
 251         1, 1, 1, 1, 1, 1, 1, 1,
 252         1, 1, 1, 1, 1, 1, 1, 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         40, 1, 42, 43, 1, 44, 1, 44,
 258         44, 44, 44, 44, 1, 1, 1, 1,
 259         1, 1, 1, 1, 1, 1, 1, 1,
 260         1, 1, 1, 1, 1, 1, 44, 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, 1, 1, 1,
 264         45, 1, 45, 45, 45, 45, 45, 1,
 265         1, 1, 1, 1, 1, 1, 1, 1,
 266         1, 1, 1, 1, 1, 1, 1, 1,
 267         1, 45, 1, 1, 1, 1, 1, 1,
 268         1, 1, 1, 1, 1, 1, 46, 1,
 269         1, 47, 48, 48, 48, 48, 48, 48,
 270         48, 48, 48, 1, 49, 50, 50, 50,
 271         50, 50, 50, 50, 50, 50, 1, 51,
 272         51, 51, 51, 51, 1, 1, 1, 1,
 273         1, 1, 1, 1, 1, 1, 1, 1,
 274         1, 1, 1, 1, 1, 1, 51, 1,
 275         1, 1, 1, 1, 1, 1, 1, 1,
 276         1, 1, 52, 1, 1, 1, 1, 1,
 277         1, 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, 1, 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, 53, 1, 51, 51, 51,
 287         51, 51, 1, 1, 1, 1, 1, 1,
 288         1, 1, 1, 1, 1, 1, 1, 1,
 289         1, 1, 1, 1, 51, 1, 1, 1,
 290         1, 1, 1, 1, 1, 1, 1, 1,
 291         52, 1, 1, 1, 50, 50, 50, 50,
 292         50, 50, 50, 50, 50, 50, 1, 1,
 293         1, 1, 1, 1, 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, 1,
 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, 53, 1, 54, 1, 54, 54, 54,
 302         54, 54, 1, 1, 1, 1, 1, 1,
 303         1, 1, 1, 1, 1, 1, 1, 1,
 304         1, 1, 1, 1, 54, 1, 1, 1,
 305         1, 1, 1, 1, 1, 1, 1, 1,
 306         1, 1, 1, 1, 1, 1, 1, 1,
 307         1, 1, 1, 1, 1, 1, 55, 1,
 308         55, 55, 55, 55, 55, 1, 1, 1,
 309         1, 1, 1, 1, 1, 1, 1, 1,
 310         1, 1, 1, 1, 1, 1, 1, 55,
 311         1, 1, 1, 1, 1, 1, 1, 1,
 312         1, 1, 1, 1, 56, 1, 1, 57,
 313         58, 58, 58, 58, 58, 58, 58, 58,
 314         58, 1, 59, 60, 60, 60, 60, 60,
 315         60, 60, 60, 60, 1, 61, 61, 61,
 316         61, 61, 1, 1, 1, 1, 1, 1,
 317         1, 1, 1, 1, 1, 1, 1, 1,
 318         1, 1, 1, 1, 61, 1, 1, 1,
 319         1, 1, 1, 1, 1, 1, 1, 1,
 320         62, 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, 1, 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, 63, 1, 61, 61, 61, 61, 61,
 331         1, 1, 1, 1, 1, 1, 1, 1,
 332         1, 1, 1, 1, 1, 1, 1, 1,
 333         1, 1, 61, 1, 1, 1, 1, 1,
 334         1, 1, 1, 1, 1, 1, 62, 1,
 335         1, 1, 60, 60, 60, 60, 60, 60,
 336         60, 60, 60, 60, 1, 1, 1, 1,
 337         1, 1, 1, 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, 1, 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, 63,
 345         1, 64, 1, 64, 64, 64, 64, 64,
 346         1, 1, 1, 1, 1, 1, 1, 1,
 347         1, 1, 1, 1, 1, 1, 1, 1,
 348         1, 1, 64, 1, 1, 1, 1, 1,
 349         1, 1, 1, 1, 1, 1, 1, 1,
 350         1, 1, 1, 1, 1, 1, 1, 1,
 351         1, 1, 1, 1, 65, 1, 65, 65,
 352         65, 65, 65, 1, 1, 1, 1, 1,
 353         1, 1, 1, 1, 1, 1, 1, 1,
 354         1, 1, 1, 1, 1, 65, 1, 66,
 355         1, 1, 1, 1, 1, 1, 1, 1,
 356         1, 1, 1, 1, 1, 67, 68, 68,
 357         68, 68, 68, 68, 68, 68, 68, 1,
 358         69, 69, 69, 69, 69, 69, 69, 69,
 359         69, 69, 69, 69, 69, 69, 69, 69,
 360         69, 69, 69, 69, 69, 69, 69, 69,
 361         69, 69, 1, 1, 1, 1, 1, 1,
 362         69, 69, 69, 69, 69, 69, 69, 69,
 363         69, 69, 69, 69, 69, 69, 69, 69,
 364         69, 69, 69, 69, 69, 69, 69, 69,
 365         69, 69, 1, 70, 1, 1, 1, 1,
 366         1, 1, 1, 1, 1, 1, 71, 71,
 367         1, 71, 71, 71, 71, 71, 71, 71,
 368         71, 71, 71, 1, 1, 1, 1, 1,
 369         1, 1, 71, 71, 71, 71, 71, 71,
 370         71, 71, 71, 71, 71, 71, 71, 71,
 371         71, 71, 71, 71, 71, 71, 71, 71,
 372         71, 71, 71, 71, 1, 1, 1, 1,
 373         71, 1, 71, 71, 71, 71, 71, 71,
 374         71, 71, 71, 71, 71, 71, 71, 71,
 375         71, 71, 71, 71, 71, 71, 71, 71,
 376         71, 71, 71, 71, 1, 72, 72, 72,
 377         72, 72, 1, 1, 1, 1, 1, 1,
 378         1, 1, 1, 1, 1, 1, 1, 1,
 379         1, 1, 1, 1, 72, 1, 1, 1,
 380         1, 1, 1, 1, 1, 1, 1, 1,
 381         73, 1, 1, 1, 1, 1, 1, 1,
 382         1, 1, 1, 1, 1, 1, 1, 1,
 383         1, 1, 1, 1, 1, 1, 1, 1,
 384         1, 1, 1, 1, 1, 1, 1, 1,
 385         1, 1, 1, 1, 1, 1, 1, 1,
 386         1, 1, 1, 1, 1, 1, 1, 1,
 387         1, 1, 1, 1, 1, 1, 1, 1,
 388         1, 1, 1, 1, 1, 1, 1, 1,
 389         1, 1, 1, 1, 1, 1, 1, 1,
 390         1, 1, 1, 1, 1, 1, 1, 1,
 391         1, 74, 1, 72, 72, 72, 72, 72,
 392         1, 1, 1, 1, 1, 1, 1, 1,
 393         1, 1, 1, 1, 1, 1, 1, 1,
 394         1, 1, 72, 1, 1, 1, 1, 1,
 395         1, 1, 1, 1, 1, 1, 73, 1,
 396         1, 1, 75, 75, 75, 75, 75, 75,
 397         75, 75, 75, 75, 1, 1, 1, 1,
 398         1, 1, 1, 1, 1, 1, 1, 1,
 399         1, 1, 1, 1, 1, 1, 1, 1,
 400         1, 1, 1, 1, 1, 1, 1, 1,
 401         1, 1, 1, 1, 1, 1, 1, 1,
 402         1, 1, 1, 1, 1, 1, 1, 1,
 403         1, 1, 1, 1, 1, 1, 1, 1,
 404         1, 1, 1, 1, 1, 1, 1, 1,
 405         1, 1, 1, 1, 1, 1, 1, 74,
 406         1, 76, 76, 76, 76, 76, 1, 1,
 407         1, 1, 1, 1, 1, 1, 1, 1,
 408         1, 1, 1, 1, 1, 1, 1, 1,
 409         76, 1, 1, 1, 1, 1, 1, 1,
 410         1, 1, 1, 1, 77, 1, 1, 1,
 411         1, 1, 1, 1, 1, 1, 1, 1,
 412         1, 1, 1, 1, 1, 1, 1, 1,
 413         1, 1, 1, 1, 1, 1, 1, 1,
 414         1, 1, 1, 1, 1, 1, 1, 1,
 415         1, 1, 1, 1, 1, 1, 1, 1,
 416         1, 1, 1, 1, 1, 78, 1, 0,
 417         0, 0, 0, 0, 1, 1, 1, 1,
 418         1, 1, 1, 1, 1, 1, 1, 1,
 419         1, 1, 1, 1, 1, 1, 0, 1,
 420         1, 1, 1, 1, 1, 1, 1, 1,
 421         1, 1, 1, 1, 1, 1, 1, 1,
 422         1, 1, 1, 1, 1, 1, 1, 1,
 423         1, 1, 1, 1, 1, 1, 1, 1,
 424         1, 1, 1, 1, 1, 1, 1, 1,
 425         1, 1, 1, 1, 1, 1, 1, 1,
 426         1, 1, 1, 1, 1, 1, 1, 1,
 427         1, 1, 1, 1, 1, 1, 1, 1,
 428         1, 1, 1, 1, 1, 1, 1, 1,
 429         1, 1, 1, 1, 1, 1, 1, 1,
 430         1, 1, 1, 1, 1, 1, 1, 1,
 431         1, 2, 1, 1, 0
 432 };
 433 
 434 static const char _deserialize_json_trans_targs[] = {
 435         1, 0, 2, 2, 3, 4, 18, 24,
 436         37, 5, 12, 6, 7, 8, 9, 11,
 437         9, 11, 10, 2, 44, 10, 44, 13,
 438         14, 15, 16, 17, 16, 17, 10, 2,
 439         44, 19, 20, 21, 22, 23, 10, 2,
 440         44, 23, 25, 31, 26, 27, 28, 29,
 441         30, 29, 30, 10, 2, 44, 32, 33,
 442         34, 35, 36, 35, 36, 10, 2, 44,
 443         38, 39, 40, 42, 43, 41, 10, 41,
 444         10, 2, 44, 43, 44, 45, 46
 445 };
 446 
 447 static const char _deserialize_json_trans_actions[] = {
 448         0, 0, 1, 0, 0, 0, 0, 0,
 449         0, 0, 0, 0, 0, 2, 2, 2,
 450         0, 0, 3, 3, 4, 0, 5, 0,
 451         0, 2, 2, 2, 0, 0, 6, 6,
 452         7, 0, 0, 0, 2, 2, 8, 8,
 453         9, 0, 0, 0, 0, 0, 2, 2,
 454         2, 0, 0, 10, 10, 11, 0, 0,
 455         2, 2, 2, 0, 0, 12, 12, 13,
 456         0, 0, 0, 2, 2, 2, 14, 0,
 457         15, 15, 16, 0, 0, 0, 0
 458 };
 459 
 460 static const int deserialize_json_start = 1;
 461 static const int deserialize_json_first_final = 44;
 462 static const int deserialize_json_error = 0;
 463 
 464 static const int deserialize_json_en_main = 1;
 465 
 466 
 467 #line 97 "hb-buffer-deserialize-json.rl"
 468 
 469 
 470 static hb_bool_t
 471 _hb_buffer_deserialize_glyphs_json (hb_buffer_t *buffer,
 472                                     const char *buf,
 473                                     unsigned int buf_len,
 474                                     const char **end_ptr,
 475                                     hb_font_t *font)
 476 {
 477   const char *p = buf, *pe = buf + buf_len;
 478 
 479   /* Ensure we have positions. */
 480   (void) hb_buffer_get_glyph_positions (buffer, NULL);
 481 
 482   while (p < pe && ISSPACE (*p))
 483     p++;
 484   if (p < pe && *p == (buffer->len ? ',' : '['))
 485   {
 486     *end_ptr = ++p;
 487   }
 488 
 489   const char *tok = NULL;
 490   int cs;
 491   hb_glyph_info_t info = {0};
 492   hb_glyph_position_t pos = {0};
 493 
 494 #line 466 "hb-buffer-deserialize-json.hh"
 495         {
 496         cs = deserialize_json_start;
 497         }
 498 
 499 #line 471 "hb-buffer-deserialize-json.hh"
 500         {
 501         int _slen;
 502         int _trans;
 503         const unsigned char *_keys;
 504         const char *_inds;
 505         if ( p == pe )
 506                 goto _test_eof;
 507         if ( cs == 0 )
 508                 goto _out;
 509 _resume:
 510         _keys = _deserialize_json_trans_keys + (cs<<1);
 511         _inds = _deserialize_json_indicies + _deserialize_json_index_offsets[cs];
 512 
 513         _slen = _deserialize_json_key_spans[cs];
 514         _trans = _inds[ _slen > 0 && _keys[0] <=(*p) &&
 515                 (*p) <= _keys[1] ?
 516                 (*p) - _keys[0] : _slen ];
 517 
 518         cs = _deserialize_json_trans_targs[_trans];
 519 
 520         if ( _deserialize_json_trans_actions[_trans] == 0 )
 521                 goto _again;
 522 
 523         switch ( _deserialize_json_trans_actions[_trans] ) {
 524         case 1:
 525 #line 38 "hb-buffer-deserialize-json.rl"
 526         {
 527         memset (&info, 0, sizeof (info));
 528         memset (&pos , 0, sizeof (pos ));
 529 }
 530         break;
 531         case 5:
 532 #line 43 "hb-buffer-deserialize-json.rl"
 533         {
 534         buffer->add_info (info);
 535         if (buffer->in_error)
 536           return false;
 537         buffer->pos[buffer->len - 1] = pos;
 538         *end_ptr = p;
 539 }
 540         break;
 541         case 2:
 542 #line 51 "hb-buffer-deserialize-json.rl"
 543         {
 544         tok = p;
 545 }
 546         break;
 547         case 14:
 548 #line 55 "hb-buffer-deserialize-json.rl"
 549         {
 550         if (!hb_font_glyph_from_string (font,
 551                                         tok, p - tok,
 552                                         &info.codepoint))
 553           return false;
 554 }
 555         break;
 556         case 15:
 557 #line 62 "hb-buffer-deserialize-json.rl"
 558         { if (!parse_uint (tok, p, &info.codepoint)) return false; }
 559         break;
 560         case 8:
 561 #line 63 "hb-buffer-deserialize-json.rl"
 562         { if (!parse_uint (tok, p, &info.cluster )) return false; }
 563         break;
 564         case 10:
 565 #line 64 "hb-buffer-deserialize-json.rl"
 566         { if (!parse_int  (tok, p, &pos.x_offset )) return false; }
 567         break;
 568         case 12:
 569 #line 65 "hb-buffer-deserialize-json.rl"
 570         { if (!parse_int  (tok, p, &pos.y_offset )) return false; }
 571         break;
 572         case 3:
 573 #line 66 "hb-buffer-deserialize-json.rl"
 574         { if (!parse_int  (tok, p, &pos.x_advance)) return false; }
 575         break;
 576         case 6:
 577 #line 67 "hb-buffer-deserialize-json.rl"
 578         { if (!parse_int  (tok, p, &pos.y_advance)) return false; }
 579         break;
 580         case 16:
 581 #line 62 "hb-buffer-deserialize-json.rl"
 582         { if (!parse_uint (tok, p, &info.codepoint)) return false; }
 583 #line 43 "hb-buffer-deserialize-json.rl"
 584         {
 585         buffer->add_info (info);
 586         if (buffer->in_error)
 587           return false;
 588         buffer->pos[buffer->len - 1] = pos;
 589         *end_ptr = p;
 590 }
 591         break;
 592         case 9:
 593 #line 63 "hb-buffer-deserialize-json.rl"
 594         { if (!parse_uint (tok, p, &info.cluster )) return false; }
 595 #line 43 "hb-buffer-deserialize-json.rl"
 596         {
 597         buffer->add_info (info);
 598         if (buffer->in_error)
 599           return false;
 600         buffer->pos[buffer->len - 1] = pos;
 601         *end_ptr = p;
 602 }
 603         break;
 604         case 11:
 605 #line 64 "hb-buffer-deserialize-json.rl"
 606         { if (!parse_int  (tok, p, &pos.x_offset )) return false; }
 607 #line 43 "hb-buffer-deserialize-json.rl"
 608         {
 609         buffer->add_info (info);
 610         if (buffer->in_error)
 611           return false;
 612         buffer->pos[buffer->len - 1] = pos;
 613         *end_ptr = p;
 614 }
 615         break;
 616         case 13:
 617 #line 65 "hb-buffer-deserialize-json.rl"
 618         { if (!parse_int  (tok, p, &pos.y_offset )) return false; }
 619 #line 43 "hb-buffer-deserialize-json.rl"
 620         {
 621         buffer->add_info (info);
 622         if (buffer->in_error)
 623           return false;
 624         buffer->pos[buffer->len - 1] = pos;
 625         *end_ptr = p;
 626 }
 627         break;
 628         case 4:
 629 #line 66 "hb-buffer-deserialize-json.rl"
 630         { if (!parse_int  (tok, p, &pos.x_advance)) return false; }
 631 #line 43 "hb-buffer-deserialize-json.rl"
 632         {
 633         buffer->add_info (info);
 634         if (buffer->in_error)
 635           return false;
 636         buffer->pos[buffer->len - 1] = pos;
 637         *end_ptr = p;
 638 }
 639         break;
 640         case 7:
 641 #line 67 "hb-buffer-deserialize-json.rl"
 642         { if (!parse_int  (tok, p, &pos.y_advance)) return false; }
 643 #line 43 "hb-buffer-deserialize-json.rl"
 644         {
 645         buffer->add_info (info);
 646         if (buffer->in_error)
 647           return false;
 648         buffer->pos[buffer->len - 1] = pos;
 649         *end_ptr = p;
 650 }
 651         break;
 652 #line 624 "hb-buffer-deserialize-json.hh"
 653         }
 654 
 655 _again:
 656         if ( cs == 0 )
 657                 goto _out;
 658         if ( ++p != pe )
 659                 goto _resume;
 660         _test_eof: {}
 661         _out: {}
 662         }
 663 
 664 #line 125 "hb-buffer-deserialize-json.rl"
 665 
 666 
 667   *end_ptr = p;
 668 
 669   return p == pe && *(p-1) != ']';
 670 }
 671 
 672 #endif /* HB_BUFFER_DESERIALIZE_JSON_HH */