/*
|
* Copyright 2007-2009, Lloyd Hilaiel.
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions are
|
* met:
|
*
|
* 1. Redistributions of source code must retain the above copyright
|
* notice, this list of conditions and the following disclaimer.
|
*
|
* 2. Redistributions in binary form must reproduce the above copyright
|
* notice, this list of conditions and the following disclaimer in
|
* the documentation and/or other materials provided with the
|
* distribution.
|
*
|
* 3. Neither the name of Lloyd Hilaiel nor the names of its
|
* contributors may be used to endorse or promote products derived
|
* from this software without specific prior written permission.
|
*
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
* POSSIBILITY OF SUCH DAMAGE.
|
*/
|
|
#ifndef __YAJL_PARSER_H__
|
#define __YAJL_PARSER_H__
|
|
#include "api/yajl_parse.h"
|
#include "yajl_bytestack.h"
|
#include "yajl_buf.h"
|
|
|
typedef enum {
|
yajl_state_start = 0,
|
yajl_state_parse_complete,
|
yajl_state_parse_error,
|
yajl_state_lexical_error,
|
yajl_state_map_start,
|
yajl_state_map_sep,
|
yajl_state_map_need_val,
|
yajl_state_map_got_val,
|
yajl_state_map_need_key,
|
yajl_state_array_start,
|
yajl_state_array_got_val,
|
yajl_state_array_need_val
|
} yajl_state;
|
|
struct yajl_handle_t {
|
const yajl_callbacks * callbacks;
|
void * ctx;
|
yajl_lexer lexer;
|
const char * parseError;
|
/* the number of bytes consumed from the last client buffer,
|
* in the case of an error this will be an error offset, in the
|
* case of an error this can be used as the error offset */
|
unsigned int bytesConsumed;
|
/* temporary storage for decoded strings */
|
yajl_buf decodeBuf;
|
/* a stack of states. access with yajl_state_XXX routines */
|
yajl_bytestack stateStack;
|
/* memory allocation routines */
|
yajl_alloc_funcs alloc;
|
};
|
|
yajl_status
|
yajl_do_parse(yajl_handle handle, const unsigned char * jsonText,
|
unsigned int jsonTextLen);
|
|
unsigned char *
|
yajl_render_error_string(yajl_handle hand, const unsigned char * jsonText,
|
unsigned int jsonTextLen, int verbose);
|
|
|
#endif
|