|  | /* | 
|  | * JSON lexer | 
|  | * | 
|  | * Copyright IBM, Corp. 2009 | 
|  | * | 
|  | * Authors: | 
|  | *  Anthony Liguori   <aliguori@us.ibm.com> | 
|  | * | 
|  | * 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 "qapi/qmp/qstring.h" | 
|  | #include "qapi/qmp/qlist.h" | 
|  |  | 
|  | typedef enum json_token_type { | 
|  | JSON_OPERATOR = 100, | 
|  | JSON_INTEGER, | 
|  | JSON_FLOAT, | 
|  | JSON_KEYWORD, | 
|  | JSON_STRING, | 
|  | JSON_ESCAPE, | 
|  | JSON_SKIP, | 
|  | JSON_ERROR, | 
|  | } JSONTokenType; | 
|  |  | 
|  | typedef struct JSONLexer JSONLexer; | 
|  |  | 
|  | typedef void (JSONLexerEmitter)(JSONLexer *, QString *, JSONTokenType, int x, int y); | 
|  |  | 
|  | struct JSONLexer | 
|  | { | 
|  | JSONLexerEmitter *emit; | 
|  | int state; | 
|  | QString *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 |