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