Annotation of parser3/src/lib/json/json.h, revision 1.1

1.1     ! moko        1: /*
        !             2:  * Copyright (C) 2009 Vincent Hanquez <vincent@snarc.org>
        !             3:  *
        !             4:  * This program is free software; you can redistribute it and/or modify
        !             5:  * it under the terms of the GNU Lesser General Public License as published
        !             6:  * by the Free Software Foundation; version 2.1 or version 3.0 only.
        !             7:  *
        !             8:  * This program is distributed in the hope that it will be useful,
        !             9:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            10:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            11:  * GNU General Public License for more details.
        !            12:  */
        !            13: 
        !            14: #ifndef JSON_H
        !            15: #define JSON_H
        !            16: 
        !            17: #include "pa_config_includes.h"
        !            18: 
        !            19: #ifdef __cplusplus
        !            20: extern "C" {
        !            21: #endif
        !            22: 
        !            23: typedef enum 
        !            24: {
        !            25:        JSON_NONE,
        !            26:        JSON_ARRAY_BEGIN,
        !            27:        JSON_OBJECT_BEGIN,
        !            28:        JSON_ARRAY_END,
        !            29:        JSON_OBJECT_END,
        !            30:        JSON_INT,
        !            31:        JSON_FLOAT,
        !            32:        JSON_STRING,
        !            33:        JSON_KEY,
        !            34:        JSON_TRUE,
        !            35:        JSON_FALSE,
        !            36:        JSON_NULL,
        !            37: } json_type;
        !            38: 
        !            39: typedef enum
        !            40: {
        !            41:        /* SUCCESS = 0 */
        !            42:        /* running out of memory */
        !            43:        JSON_ERROR_NO_MEMORY = 1,
        !            44:        /* character < 32, except space newline tab */
        !            45:        JSON_ERROR_BAD_CHAR,
        !            46:        /* trying to pop more object/array than pushed on the stack */
        !            47:        JSON_ERROR_POP_EMPTY,
        !            48:        /* trying to pop wrong type of mode. popping array in object mode, vice versa */
        !            49:        JSON_ERROR_POP_UNEXPECTED_MODE,
        !            50:        /* reach nesting limit on stack */
        !            51:        JSON_ERROR_NESTING_LIMIT,
        !            52:        /* reach data limit on buffer */
        !            53:        JSON_ERROR_DATA_LIMIT,
        !            54:        /* comment are not allowed with current configuration */
        !            55:        JSON_ERROR_COMMENT_NOT_ALLOWED,
        !            56:        /* unexpected char in the current parser context */
        !            57:        JSON_ERROR_UNEXPECTED_CHAR,
        !            58:        /* unicode low surrogate missing after high surrogate */
        !            59:        JSON_ERROR_UNICODE_MISSING_LOW_SURROGATE,
        !            60:        /* unicode low surrogate missing without previous high surrogate */
        !            61:        JSON_ERROR_UNICODE_UNEXPECTED_LOW_SURROGATE,
        !            62:        /* found a comma not in structure (array/object) */
        !            63:        JSON_ERROR_COMMA_OUT_OF_STRUCTURE,
        !            64:        /* callback returns error */
        !            65:        JSON_ERROR_CALLBACK,
        !            66: } json_error;
        !            67: 
        !            68: #define LIBJSON_DEFAULT_STACK_SIZE 256
        !            69: #define LIBJSON_DEFAULT_BUFFER_SIZE 4096
        !            70: 
        !            71: typedef int (*json_parser_callback)(void *userdata, int type, const char *data, uint32_t length);
        !            72: 
        !            73: typedef struct {
        !            74:        uint32_t buffer_initial_size;
        !            75:        uint32_t max_nesting;
        !            76:        uint32_t max_data;
        !            77:        int allow_c_comments;
        !            78:        int allow_yaml_comments;
        !            79:        void * (*user_malloc)(size_t size);
        !            80:        void * (*user_realloc)(void *ptr, size_t size);
        !            81:        void (*user_free)(void *ptr);
        !            82: } json_config;
        !            83: 
        !            84: typedef struct json_parser {
        !            85:        json_config config;
        !            86: 
        !            87:        /* SAJ callback */
        !            88:        json_parser_callback callback;
        !            89:        void *userdata;
        !            90: 
        !            91:        /* parser state */
        !            92:        uint8_t state;
        !            93:        uint8_t save_state;
        !            94:        uint8_t expecting_key;
        !            95:        uint16_t unicode_multi;
        !            96:        json_type type;
        !            97: 
        !            98:        /* state stack */
        !            99:        uint8_t *stack;
        !           100:        uint32_t stack_offset;
        !           101:        uint32_t stack_size;
        !           102: 
        !           103:        /* parse buffer */
        !           104:        char *buffer;
        !           105:        uint32_t buffer_size;
        !           106:        uint32_t buffer_offset;
        !           107: } json_parser;
        !           108: 
        !           109: /** json_parser_init initialize a parser structure taking a config,
        !           110:  * a config and its userdata.
        !           111:  * return JSON_ERROR_NO_MEMORY if memory allocation failed or SUCCESS.  */
        !           112: int json_parser_init(json_parser *parser, json_config *cfg,
        !           113:                      json_parser_callback callback, void *userdata);
        !           114: 
        !           115: /** json_parser_free freed memory structure allocated by the parser */
        !           116: int json_parser_free(json_parser *parser);
        !           117: 
        !           118: /** json_parser_string append a string s with a specific length to the parser
        !           119:  * return 0 if everything went ok, a JSON_ERROR_* otherwise.
        !           120:  * the user can supplied a valid processed pointer that will
        !           121:  * be fill with the number of processed characters before returning */
        !           122: int json_parser_string(json_parser *parser, const char *string,
        !           123:                        uint32_t length, uint32_t *processed);
        !           124: 
        !           125: /** json_parser_char append one single char to the parser
        !           126:  * return 0 if everything went ok, a JSON_ERROR_* otherwise */
        !           127: int json_parser_char(json_parser *parser, unsigned char next_char);
        !           128: 
        !           129: /** json_parser_is_done return 0 is the parser isn't in a finish state. !0 if it is */
        !           130: int json_parser_is_done(json_parser *parser);
        !           131: 
        !           132: #ifdef __cplusplus
        !           133: }
        !           134: #endif
        !           135: 
        !           136: #endif /* JSON_H */

E-mail: