#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AC_PROG_CXX
-#AC_PROG_AWK
AC_PROG_CC
AC_PROG_CPP
AC_PROG_INSTALL
-#AC_PROG_LN_S
-#AC_PROG_MAKE_SET
-AC_PROG_LIBTOOL
+AC_PROG_RANLIB
+AM_PROG_CC_C_O
#
doc/yoink.6
extra/Makefile
extra/yoink.spec
- src/Makefile
- src/Moof/yajl/Makefile])
+ src/Makefile])
+ #src/Moof/yajl/Makefile])
AC_CONFIG_HEADERS([src/config.h])
-SUBDIRS = Moof/yajl
-
-
-noinst_LTLIBRARIES = libmoof.la
-
-libmoof_la_SOURCES = \
- Moof/Aabb.cc \
- Moof/Aabb.hh \
- Moof/Animation.cc \
- Moof/Animation.hh \
- Moof/Camera.cc \
- Moof/Camera.hh \
- Moof/ConvertUTF.c \
- Moof/ConvertUTF.h \
- Moof/Cullable.hh \
- Moof/Deserializer.cc \
- Moof/Deserializer.hh \
- Moof/Dispatcher.cc \
- Moof/Dispatcher.hh \
- Moof/Drawable.hh \
- Moof/Engine.cc \
- Moof/Engine.hh \
- Moof/Entity.hh \
- Moof/Event.hh \
- Moof/Exception.hh \
- Moof/Frustum.cc \
- Moof/Frustum.hh \
- Moof/Hash.cc \
- Moof/Hash.hh \
- Moof/Interpolator.hh \
- Moof/Log.cc \
- Moof/Log.hh \
- Moof/Math.hh \
- Moof/Mippleton.hh \
- Moof/Octree.cc \
- Moof/Octree.hh \
- Moof/OpenGL.hh \
- Moof/Plane.cc \
- Moof/Plane.hh \
- Moof/Random.cc \
- Moof/Random.hh \
- Moof/Rectangle.cc \
- Moof/Rectangle.hh \
- Moof/Resource.cc \
- Moof/Resource.hh \
- Moof/RK4.hh \
- Moof/Scene.cc \
- Moof/Scene.hh \
- Moof/Serializable.cc \
- Moof/Serializable.hh \
- Moof/Serializer.cc \
- Moof/Serializer.hh \
- Moof/Settings.cc \
- Moof/Settings.hh \
- Moof/Sound.cc \
- Moof/Sound.hh \
- Moof/Sphere.cc \
- Moof/Sphere.hh \
- Moof/StringTools.cc \
- Moof/StringTools.hh \
- Moof/Texture.cc \
- Moof/Texture.hh \
- Moof/Thread.hh \
- Moof/Tilemap.cc \
- Moof/Tilemap.hh \
- Moof/Timer.cc \
- Moof/Timer.hh \
- Moof/Video.cc \
- Moof/Video.hh \
- Moof/fastevents.c \
- Moof/fastevents.h \
- $(ENDLIST)
-
-libmoof_la_CPPFLAGS = -I$(top_srcdir)/src/Moof -I$(top_srcdir)/src/Moof/yajl/src
-libmoof_la_LIBADD = $(top_srcdir)/src/Moof/yajl/libyajl.la
-
-
-bin_PROGRAMS = yoink
-
-yoink_SOURCES = \
- Character.cc \
- Character.hh \
- Hud.cc \
- Hud.hh \
- TilemapFont.cc \
- TilemapFont.hh \
- Typesetter.cc \
- Typesetter.hh \
- YoinkApp.cc \
- YoinkApp.hh \
- $(ENDLIST)
+#
+# Yoink
+# Process this file with automake to produce a Makefile.
+#
+
+
+#
+# libmoof.a
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+noinst_LIBRARIES = libmoof.a
+
+libmoof_a_SOURCES = \
+ Moof/Aabb.cc \
+ Moof/Aabb.hh \
+ Moof/Animation.cc \
+ Moof/Animation.hh \
+ Moof/Camera.cc \
+ Moof/Camera.hh \
+ Moof/ConvertUTF.c \
+ Moof/ConvertUTF.h \
+ Moof/Cullable.hh \
+ Moof/Deserializer.cc \
+ Moof/Deserializer.hh \
+ Moof/Dispatcher.cc \
+ Moof/Dispatcher.hh \
+ Moof/Drawable.hh \
+ Moof/Engine.cc \
+ Moof/Engine.hh \
+ Moof/Entity.hh \
+ Moof/Event.hh \
+ Moof/Exception.hh \
+ Moof/Frustum.cc \
+ Moof/Frustum.hh \
+ Moof/Hash.cc \
+ Moof/Hash.hh \
+ Moof/Interpolator.hh \
+ Moof/Log.cc \
+ Moof/Log.hh \
+ Moof/Math.hh \
+ Moof/Mippleton.hh \
+ Moof/Octree.cc \
+ Moof/Octree.hh \
+ Moof/OpenGL.hh \
+ Moof/Plane.cc \
+ Moof/Plane.hh \
+ Moof/Random.cc \
+ Moof/Random.hh \
+ Moof/Rectangle.cc \
+ Moof/Rectangle.hh \
+ Moof/Resource.cc \
+ Moof/Resource.hh \
+ Moof/RK4.hh \
+ Moof/Scene.cc \
+ Moof/Scene.hh \
+ Moof/Serializable.cc \
+ Moof/Serializable.hh \
+ Moof/Serializer.cc \
+ Moof/Serializer.hh \
+ Moof/Settings.cc \
+ Moof/Settings.hh \
+ Moof/Sound.cc \
+ Moof/Sound.hh \
+ Moof/Sphere.cc \
+ Moof/Sphere.hh \
+ Moof/StringTools.cc \
+ Moof/StringTools.hh \
+ Moof/Texture.cc \
+ Moof/Texture.hh \
+ Moof/Thread.hh \
+ Moof/Tilemap.cc \
+ Moof/Tilemap.hh \
+ Moof/Timer.cc \
+ Moof/Timer.hh \
+ Moof/Video.cc \
+ Moof/Video.hh \
+ Moof/fastevents.c \
+ Moof/fastevents.h \
+ $(ENDLIST)
+
+libmoof_a_SOURCES += \
+ Moof/yajl/src/yajl.c \
+ Moof/yajl/src/yajl_alloc.c \
+ Moof/yajl/src/yajl_alloc.h \
+ Moof/yajl/src/yajl_buf.c \
+ Moof/yajl/src/yajl_buf.h \
+ Moof/yajl/src/yajl_bytestack.h \
+ Moof/yajl/src/yajl_encode.c \
+ Moof/yajl/src/yajl_encode.h \
+ Moof/yajl/src/yajl_gen.c \
+ Moof/yajl/src/yajl_lex.c \
+ Moof/yajl/src/yajl_lex.h \
+ Moof/yajl/src/yajl_parser.c \
+ Moof/yajl/src/yajl_parser.h \
+ $(ENDLIST)
+
+libmoof_a_CPPFLAGS = -I$(top_srcdir)/src/Moof -I$(top_srcdir)/src/Moof/yajl/src
-yoink_CPPFLAGS = -I$(top_srcdir)/src/Moof
-yoink_LDADD = libmoof.la
+EXTRA_DIST = Moof/cml Moof/stlplus Moof/yajl
-EXTRA_DIST = Moof/cml Moof/stlplus Moof/yajl
+#
+# yoink
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+bin_PROGRAMS = yoink
+
+yoink_SOURCES = \
+ Character.cc \
+ Character.hh \
+ Hud.cc \
+ Hud.hh \
+ TilemapFont.cc \
+ TilemapFont.hh \
+ Typesetter.cc \
+ Typesetter.hh \
+ YoinkApp.cc \
+ YoinkApp.hh \
+ $(ENDLIST)
+
+yoink_CPPFLAGS = -I$(top_srcdir)/src/Moof
+yoink_LDADD = libmoof.a
YOINK_ENVIRONMENT = YOINK_DATADIR="$(top_srcdir)/data"
+++ /dev/null
-
-# Here is an automake file which can be used to build yajl as a convenience
-# library. I also had to rename src/api to src/yajl and change cpp include
-# directives accordingly in order to allow clients to use the more appropriate
-# #include <yajl/yajl_parse.h> syntax. -- Chaz
-
-noinst_LTLIBRARIES = libyajl.la
-
-libyajl_la_SOURCES = \
- src/yajl.c \
- src/yajl_alloc.c \
- src/yajl_alloc.h \
- src/yajl_buf.c \
- src/yajl_buf.h \
- src/yajl_bytestack.h \
- src/yajl_encode.c \
- src/yajl_encode.h \
- src/yajl_gen.c \
- src/yajl_lex.c \
- src/yajl_lex.h \
- src/yajl_parser.c \
- src/yajl_parser.h \
- $(ENDLIST)
-
-noinst_HEADERS = \
- src/yajl/yajl_common.h \
- src/yajl/yajl_gen.h \
- src/yajl/yajl_parse.h \
- $(ENDLIST)
-
-libyajl_la_CPPFLAGS = -Isrc
-
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include "yajl/yajl_parse.h"
+#include "api/yajl_parse.h"
#include "yajl_lex.h"
#include "yajl_parser.h"
#include "yajl_alloc.h"
#ifndef __YAJL_ALLOC_H__
#define __YAJL_ALLOC_H__
-#include "yajl/yajl_common.h"
+#include "api/yajl_common.h"
#define YA_MALLOC(afs, sz) (afs)->malloc((afs)->ctx, (sz))
#define YA_FREE(afs, ptr) (afs)->free((afs)->ctx, (ptr))
#ifndef __YAJL_BUF_H__
#define __YAJL_BUF_H__
-#include "yajl/yajl_common.h"
+#include "api/yajl_common.h"
#include "yajl_alloc.h"
/*
#ifndef __YAJL_BYTESTACK_H__
#define __YAJL_BYTESTACK_H__
-#include "yajl/yajl_common.h"
+#include "api/yajl_common.h"
#define YAJL_BS_INC 128
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include "yajl/yajl_gen.h"
+#include "api/yajl_gen.h"
#include "yajl_buf.h"
#include "yajl_encode.h"
#ifndef __YAJL_LEX_H__
#define __YAJL_LEX_H__
-#include "yajl/yajl_common.h"
+#include "api/yajl_common.h"
typedef enum {
yajl_tok_bool,
#ifndef __YAJL_PARSER_H__
#define __YAJL_PARSER_H__
-#include "yajl/yajl_parse.h"
+#include "api/yajl_parse.h"
#include "yajl_bytestack.h"
#include "yajl_buf.h"
--- /dev/null
+/*
+ * 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_COMMON_H__
+#define __YAJL_COMMON_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define YAJL_MAX_DEPTH 128
+
+/* msft dll export gunk. To build a DLL on windows, you
+ * must define WIN32, YAJL_SHARED, and YAJL_BUILD. To use a shared
+ * DLL, you must define YAJL_SHARED and WIN32 */
+#if defined(WIN32) && defined(YAJL_SHARED)
+# ifdef YAJL_BUILD
+# define YAJL_API __declspec(dllexport)
+# else
+# define YAJL_API __declspec(dllimport)
+# endif
+#else
+# define YAJL_API
+#endif
+
+/** pointer to a malloc function, supporting client overriding memory
+ * allocation routines */
+typedef void * (*yajl_malloc_func)(void *ctx, unsigned int sz);
+
+/** pointer to a free function, supporting client overriding memory
+ * allocation routines */
+typedef void (*yajl_free_func)(void *ctx, void * ptr);
+
+/** pointer to a realloc function which can resize an allocation. */
+typedef void * (*yajl_realloc_func)(void *ctx, void * ptr, unsigned int sz);
+
+/** A structure which can be passed to yajl_*_alloc routines to allow the
+ * client to specify memory allocation functions to be used. */
+typedef struct
+{
+ /** pointer to a function that can allocate uninitialized memory */
+ yajl_malloc_func malloc;
+ /** pointer to a function that can resize memory allocations */
+ yajl_realloc_func realloc;
+ /** pointer to a function that can free memory allocated using
+ * reallocFunction or mallocFunction */
+ yajl_free_func free;
+ /** a context pointer that will be passed to above allocation routines */
+ void * ctx;
+} yajl_alloc_funcs;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+/*
+ * 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.
+ */
+
+/**
+ * \file yajl_gen.h
+ * Interface to YAJL's JSON generation facilities.
+ */
+
+#include <yajl/yajl_common.h>
+
+#ifndef __YAJL_GEN_H__
+#define __YAJL_GEN_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ /** generator status codes */
+ typedef enum {
+ /** no error */
+ yajl_gen_status_ok = 0,
+ /** at a point where a map key is generated, a function other than
+ * yajl_gen_string was called */
+ yajl_gen_keys_must_be_strings,
+ /** YAJL's maximum generation depth was exceeded. see
+ * YAJL_MAX_DEPTH */
+ yajl_max_depth_exceeded,
+ /** A generator function (yajl_gen_XXX) was called while in an error
+ * state */
+ yajl_gen_in_error_state,
+ /** A complete JSON document has been generated */
+ yajl_gen_generation_complete
+ } yajl_gen_status;
+
+ /** an opaque handle to a generator */
+ typedef struct yajl_gen_t * yajl_gen;
+
+ /** configuration structure for the generator */
+ typedef struct {
+ /** generate indented (beautiful) output */
+ unsigned int beautify;
+ /** an opportunity to define an indent string. such as \\t or
+ * some number of spaces. default is four spaces ' '. This
+ * member is only relevant when beautify is true */
+ const char * indentString;
+ } yajl_gen_config;
+
+ /** allocate a generator handle
+ * \param config a pointer to a structure containing parameters which
+ * configure the behavior of the json generator
+ * \param allocFuncs an optional pointer to a structure which allows
+ * the client to overide the memory allocation
+ * used by yajl. May be NULL, in which case
+ * malloc/free/realloc will be used.
+ *
+ * \returns an allocated handle on success, NULL on failure (bad params)
+ */
+ yajl_gen YAJL_API yajl_gen_alloc(const yajl_gen_config * config,
+ const yajl_alloc_funcs * allocFuncs);
+
+ /** free a generator handle */
+ void YAJL_API yajl_gen_free(yajl_gen handle);
+
+ yajl_gen_status YAJL_API yajl_gen_integer(yajl_gen hand, long int number);
+ yajl_gen_status YAJL_API yajl_gen_double(yajl_gen hand, double number);
+ yajl_gen_status YAJL_API yajl_gen_number(yajl_gen hand,
+ const char * num,
+ unsigned int len);
+ yajl_gen_status YAJL_API yajl_gen_string(yajl_gen hand,
+ const unsigned char * str,
+ unsigned int len);
+ yajl_gen_status YAJL_API yajl_gen_null(yajl_gen hand);
+ yajl_gen_status YAJL_API yajl_gen_bool(yajl_gen hand, int boolean);
+ yajl_gen_status YAJL_API yajl_gen_map_open(yajl_gen hand);
+ yajl_gen_status YAJL_API yajl_gen_map_close(yajl_gen hand);
+ yajl_gen_status YAJL_API yajl_gen_array_open(yajl_gen hand);
+ yajl_gen_status YAJL_API yajl_gen_array_close(yajl_gen hand);
+
+ /** access the null terminated generator buffer. If incrementally
+ * outputing JSON, one should call yajl_gen_clear to clear the
+ * buffer. This allows stream generation. */
+ yajl_gen_status YAJL_API yajl_gen_get_buf(yajl_gen hand,
+ const unsigned char ** buf,
+ unsigned int * len);
+
+ /** clear yajl's output buffer, but maintain all internal generation
+ * state. This function will not "reset" the generator state, and is
+ * intended to enable incremental JSON outputing. */
+ void YAJL_API yajl_gen_clear(yajl_gen hand);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+/*
+ * 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.
+ */
+
+/**
+ * \file yajl_parse.h
+ * Interface to YAJL's JSON parsing facilities.
+ */
+
+#include <yajl/yajl_common.h>
+
+#ifndef __YAJL_PARSE_H__
+#define __YAJL_PARSE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ /** error codes returned from this interface */
+ typedef enum {
+ /** no error was encountered */
+ yajl_status_ok,
+ /** a client callback returned zero, stopping the parse */
+ yajl_status_client_canceled,
+ /** The parse cannot yet complete because more json input text
+ * is required, call yajl_parse with the next buffer of input text.
+ * (pertinent only when stream parsing) */
+ yajl_status_insufficient_data,
+ /** An error occured during the parse. Call yajl_get_error for
+ * more information about the encountered error */
+ yajl_status_error
+ } yajl_status;
+
+ /** attain a human readable, english, string for an error */
+ const char * YAJL_API yajl_status_to_string(yajl_status code);
+
+ /** an opaque handle to a parser */
+ typedef struct yajl_handle_t * yajl_handle;
+
+ /** yajl is an event driven parser. this means as json elements are
+ * parsed, you are called back to do something with the data. The
+ * functions in this table indicate the various events for which
+ * you will be called back. Each callback accepts a "context"
+ * pointer, this is a void * that is passed into the yajl_parse
+ * function which the client code may use to pass around context.
+ *
+ * All callbacks return an integer. If non-zero, the parse will
+ * continue. If zero, the parse will be canceled and
+ * yajl_status_client_canceled will be returned from the parse.
+ *
+ * Note about handling of numbers:
+ * yajl will only convert numbers that can be represented in a double
+ * or a long int. All other numbers will be passed to the client
+ * in string form using the yajl_number callback. Furthermore, if
+ * yajl_number is not NULL, it will always be used to return numbers,
+ * that is yajl_integer and yajl_double will be ignored. If
+ * yajl_number is NULL but one of yajl_integer or yajl_double are
+ * defined, parsing of a number larger than is representable
+ * in a double or long int will result in a parse error.
+ */
+ typedef struct {
+ int (* yajl_null)(void * ctx);
+ int (* yajl_boolean)(void * ctx, int boolVal);
+ int (* yajl_integer)(void * ctx, long integerVal);
+ int (* yajl_double)(void * ctx, double doubleVal);
+ /** A callback which passes the string representation of the number
+ * back to the client. Will be used for all numbers when present */
+ int (* yajl_number)(void * ctx, const char * numberVal,
+ unsigned int numberLen);
+
+ /** strings are returned as pointers into the JSON text when,
+ * possible, as a result, they are _not_ null padded */
+ int (* yajl_string)(void * ctx, const unsigned char * stringVal,
+ unsigned int stringLen);
+
+ int (* yajl_start_map)(void * ctx);
+ int (* yajl_map_key)(void * ctx, const unsigned char * key,
+ unsigned int stringLen);
+ int (* yajl_end_map)(void * ctx);
+
+ int (* yajl_start_array)(void * ctx);
+ int (* yajl_end_array)(void * ctx);
+ } yajl_callbacks;
+
+ /** configuration structure for the generator */
+ typedef struct {
+ /** if nonzero, javascript style comments will be allowed in
+ * the json input, both slash star and slash slash */
+ unsigned int allowComments;
+ /** if nonzero, invalid UTF8 strings will cause a parse
+ * error */
+ unsigned int checkUTF8;
+ } yajl_parser_config;
+
+ /** allocate a parser handle
+ * \param callbacks a yajl callbacks structure specifying the
+ * functions to call when different JSON entities
+ * are encountered in the input text. May be NULL,
+ * which is only useful for validation.
+ * \param config configuration parameters for the parse.
+ * \param ctx a context pointer that will be passed to callbacks.
+ */
+ yajl_handle YAJL_API yajl_alloc(const yajl_callbacks * callbacks,
+ const yajl_parser_config * config,
+ const yajl_alloc_funcs * allocFuncs,
+ void * ctx);
+
+ /** free a parser handle */
+ void YAJL_API yajl_free(yajl_handle handle);
+
+ /** Parse some json!
+ * \param hand - a handle to the json parser allocated with yajl_alloc
+ * \param jsonText - a pointer to the UTF8 json text to be parsed
+ * \param jsonTextLength - the length, in bytes, of input text
+ */
+ yajl_status YAJL_API yajl_parse(yajl_handle hand,
+ const unsigned char * jsonText,
+ unsigned int jsonTextLength);
+
+ /** Parse any remaining buffered json.
+ * Since yajl is a stream-based parser, without an explicit end of
+ * input, yajl sometimes can't decide if content at the end of the
+ * stream is valid or not. For example, if "1" has been fed in,
+ * yajl can't know whether another digit is next or some character
+ * that would terminate the integer token.
+ *
+ * \param hand - a handle to the json parser allocated with yajl_alloc
+ */
+ yajl_status yajl_parse_complete(yajl_handle hand);
+
+ /** get an error string describing the state of the
+ * parse.
+ *
+ * If verbose is non-zero, the message will include the JSON
+ * text where the error occured, along with an arrow pointing to
+ * the specific char.
+ *
+ * A dynamically allocated string will be returned which should
+ * be freed with yajl_free_error
+ */
+ unsigned char * YAJL_API yajl_get_error(yajl_handle hand, int verbose,
+ const unsigned char * jsonText,
+ unsigned int jsonTextLength);
+
+ /** free an error returned from yajl_get_error */
+ void YAJL_API yajl_free_error(yajl_handle hand, unsigned char * str);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif