44 #define JSMN_API static 46 #define JSMN_API extern 80 typedef struct jsmntok {
85 #ifdef JSMN_PARENT_LINKS 111 jsmntok_t *tokens,
const unsigned int num_tokens);
118 const size_t num_tokens) {
120 if (parser->
toknext >= num_tokens) {
123 tok = &tokens[parser->
toknext++];
126 #ifdef JSMN_PARENT_LINKS 136 const int start,
const int end) {
138 token->
start = start;
148 const size_t num_tokens) {
154 for (; parser->
pos < len && js[parser->
pos] !=
'\0'; parser->
pos++) {
155 switch (js[parser->
pos]) {
172 if (js[parser->
pos] < 32 || js[parser->
pos] >= 127) {
184 if (tokens == NULL) {
194 #ifdef JSMN_PARENT_LINKS 206 const size_t num_tokens) {
209 int start = parser->
pos;
214 for (; parser->
pos < len && js[parser->
pos] !=
'\0'; parser->
pos++) {
215 char c = js[parser->
pos];
219 if (tokens == NULL) {
228 #ifdef JSMN_PARENT_LINKS 235 if (c ==
'\\' && parser->
pos + 1 < len) {
238 switch (js[parser->
pos]) {
252 for (i = 0; i < 4 && parser->
pos < len && js[parser->
pos] !=
'\0';
255 if (!((js[parser->
pos] >= 48 && js[parser->
pos] <= 57) ||
256 (js[parser->
pos] >= 65 && js[parser->
pos] <= 70) ||
257 (js[parser->
pos] >= 97 && js[parser->
pos] <= 102))) {
280 jsmntok_t *tokens,
const unsigned int num_tokens) {
286 for (; parser->
pos < len && js[parser->
pos] !=
'\0'; parser->
pos++) {
295 if (tokens == NULL) {
311 #ifdef JSMN_PARENT_LINKS 321 if (tokens == NULL) {
325 #ifdef JSMN_PARENT_LINKS 329 token = &tokens[parser->
toknext - 1];
331 if (token->
start != -1 && token->
end == -1) {
332 if (token->
type != type) {
335 token->
end = parser->
pos + 1;
339 if (token->parent == -1) {
345 token = &tokens[token->parent];
348 for (i = parser->
toknext - 1; i >= 0; i--) {
350 if (token->
start != -1 && token->
end == -1) {
351 if (token->
type != type) {
355 token->
end = parser->
pos + 1;
363 for (; i >= 0; i--) {
365 if (token->
start != -1 && token->
end == -1) {
378 if (parser->
toksuper != -1 && tokens != NULL) {
391 if (tokens != NULL && parser->
toksuper != -1 &&
394 #ifdef JSMN_PARENT_LINKS 397 for (i = parser->
toknext - 1; i >= 0; i--) {
399 if (tokens[i].start != -1 && tokens[i].end == -1) {
425 if (tokens != NULL && parser->
toksuper != -1) {
441 if (parser->
toksuper != -1 && tokens != NULL) {
454 if (tokens != NULL) {
455 for (i = parser->
toknext - 1; i >= 0; i--) {
457 if (tokens[i].start != -1 && tokens[i].end == -1) {
jsmntype_t
Definition: jsmn.h:57
unsigned int toknext
Definition: jsmn.h:96
JSMN_API void jsmn_init(jsmn_parser *parser)
Definition: jsmn.h:470
static int jsmn_parse_string(jsmn_parser *parser, const char *js, const size_t len, jsmntok_t *tokens, const size_t num_tokens)
Definition: jsmn.h:204
static int jsmn_parse_primitive(jsmn_parser *parser, const char *js, const size_t len, jsmntok_t *tokens, const size_t num_tokens)
Definition: jsmn.h:146
JSMN_API int jsmn_parse(jsmn_parser *parser, const char *js, const size_t len, jsmntok_t *tokens, const unsigned int num_tokens)
Definition: jsmn.h:279
jsmntype_t type
Definition: jsmn.h:81
int toksuper
Definition: jsmn.h:97
int start
Definition: jsmn.h:82
int end
Definition: jsmn.h:83
static void jsmn_fill_token(jsmntok_t *token, const jsmntype_t type, const int start, const int end)
Definition: jsmn.h:135
#define JSMN_API
Definition: jsmn.h:46
static jsmntok_t * jsmn_alloc_token(jsmn_parser *parser, jsmntok_t *tokens, const size_t num_tokens)
Definition: jsmn.h:117
int size
Definition: jsmn.h:84
unsigned int pos
Definition: jsmn.h:95
jsmnerr
Definition: jsmn.h:65