2013-04-24 13:57:34 +08:00
/*
Copyright ( c ) 2009 Dave Gamble
Permission is hereby granted , dispose of charge , to any person obtaining a copy
of this software and associated documentation files ( the " Software " ) , to deal
in the Software without restriction , including without limitation the rights
to use , copy , modify , merge , publish , distribute , sublicense , and / or sell
copies of the Software , and to permit persons to whom the Software is
furnished to do so , subject to the following conditions :
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software .
THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR
IMPLIED , INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY ,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT . IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER
LIABILITY , WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM ,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE .
*/
/* Esoteric Software: Removed everything except parsing, shorter method names, more get methods, double to float, formatted. */
# ifndef SPINE_JSON_H_
# define SPINE_JSON_H_
2013-12-19 09:50:37 +08:00
# ifdef __cplusplus
extern " C " {
# endif
2013-04-24 13:57:34 +08:00
/* Json Types: */
# define Json_False 0
# define Json_True 1
# define Json_NULL 2
# define Json_Number 3
# define Json_String 4
# define Json_Array 5
# define Json_Object 6
2014-10-15 11:23:02 +08:00
# ifndef SPINE_JSON_HAVE_PREV
/* Spine doesn't use the "prev" link in the Json sibling lists. */
# define SPINE_JSON_HAVE_PREV 0
# endif
2013-04-24 13:57:34 +08:00
/* The Json structure: */
typedef struct Json {
struct Json * next ;
2014-10-15 11:23:02 +08:00
# if SPINE_JSON_HAVE_PREV
2013-12-19 09:50:37 +08:00
struct Json * prev ; /* next/prev allow you to walk array/object chains. Alternatively, use getSize/getItem */
2014-10-15 11:23:02 +08:00
# endif
2013-04-24 13:57:34 +08:00
struct Json * child ; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
int type ; /* The type of the item, as above. */
2013-12-19 09:50:37 +08:00
int size ; /* The number of children. */
2013-04-24 13:57:34 +08:00
2013-12-19 09:50:37 +08:00
const char * valueString ; /* The item's string, if type==Json_String */
int valueInt ; /* The item's number, if type==Json_Number */
float valueFloat ; /* The item's number, if type==Json_Number */
2013-04-24 13:57:34 +08:00
const char * name ; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
} Json ;
/* Supply a block of JSON, and this returns a Json object you can interrogate. Call Json_dispose when finished. */
Json * Json_create ( const char * value ) ;
/* Delete a Json entity and all subentities. */
void Json_dispose ( Json * json ) ;
/* Get item "string" from object. Case insensitive. */
Json * Json_getItem ( Json * json , const char * string ) ;
const char * Json_getString ( Json * json , const char * name , const char * defaultValue ) ;
float Json_getFloat ( Json * json , const char * name , float defaultValue ) ;
int Json_getInt ( Json * json , const char * name , int defaultValue ) ;
/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when Json_create() returns 0. 0 when Json_create() succeeds. */
const char * Json_getError ( void ) ;
2013-12-19 09:50:37 +08:00
# ifdef __cplusplus
}
# endif
2013-04-24 13:57:34 +08:00
# endif /* SPINE_JSON_H_ */