/* * JSON lexer * * Copyright IBM, Corp. 2009 * * Authors: * Anthony Liguori * * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. * See the COPYING.LIB file in the top-level directory. * */ #ifndef QEMU_JSON_LEXER_H #define QEMU_JSON_LEXER_H #include "glib-compat.h" typedef enum json_token_type { JSON_MIN = 100, JSON_LCURLY = JSON_MIN, JSON_RCURLY, JSON_LSQUARE, JSON_RSQUARE, JSON_COLON, JSON_COMMA, JSON_INTEGER, JSON_FLOAT, JSON_KEYWORD, JSON_STRING, JSON_ESCAPE, JSON_SKIP, JSON_ERROR, } JSONTokenType; typedef struct JSONLexer JSONLexer; typedef void (JSONLexerEmitter)(JSONLexer *, GString *, JSONTokenType, int x, int y); struct JSONLexer { JSONLexerEmitter *emit; int state; GString *token; int x, y; }; void json_lexer_init(JSONLexer *lexer, JSONLexerEmitter func); int json_lexer_feed(JSONLexer *lexer, const char *buffer, size_t size); int json_lexer_flush(JSONLexer *lexer); void json_lexer_destroy(JSONLexer *lexer); #endif