12910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner/* 22910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * JSON lexer 32910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * 42910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * Copyright IBM, Corp. 2009 52910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * 62910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * Authors: 72910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * Anthony Liguori <aliguori@us.ibm.com> 82910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * 92910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 102910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * See the COPYING.LIB file in the top-level directory. 112910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * 122910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner */ 132910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 142910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#ifndef QEMU_JSON_LEXER_H 152910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define QEMU_JSON_LEXER_H 162910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 172910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#include "qstring.h" 182910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#include "qlist.h" 192910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 202910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnertypedef enum json_token_type { 212910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner JSON_OPERATOR = 100, 222910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner JSON_INTEGER, 232910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner JSON_FLOAT, 242910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner JSON_KEYWORD, 252910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner JSON_STRING, 262910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner JSON_ESCAPE, 272910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner JSON_SKIP, 282910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner} JSONTokenType; 292910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 302910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnertypedef struct JSONLexer JSONLexer; 312910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 322910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnertypedef void (JSONLexerEmitter)(JSONLexer *, QString *, JSONTokenType, int x, int y); 332910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 342910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnerstruct JSONLexer 352910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner{ 362910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner JSONLexerEmitter *emit; 372910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner int state; 382910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner QString *token; 392910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner int x, y; 402910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner}; 412910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 422910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnervoid json_lexer_init(JSONLexer *lexer, JSONLexerEmitter func); 432910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 442910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnerint json_lexer_feed(JSONLexer *lexer, const char *buffer, size_t size); 452910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 462910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnerint json_lexer_flush(JSONLexer *lexer); 472910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 482910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnervoid json_lexer_destroy(JSONLexer *lexer); 492910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 502910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#endif 51