12#define JSON_BEGIN() int __i = STRING_ITERATOR_SAVE(_json)
13#define JSON_FAIL(reason) goto fail
17 STRING_ITERATOR_LOAD(_json, __i); \
79 bool required =
false;
80 for (
int n = 0; ; ++n)
185 JSON_FAIL(
"expected ( '\"' | '\\' | 'n' | 't' )");
186 case '"': esc =
"\"";
break;
187 case '\\': esc =
"\\";
break;
188 case 'n': esc =
"\n";
break;
189 case 't': esc =
"\t";
break;
190 case 'u': esc =
"\\u";
break;
191 case '/': esc =
"/";
break;
223 if (c <
'0' || c >
'9')
225 if (c ==
'.' && needdot)
248 if (c <
'0' || c >
'9')
253 if (s ==
"" && c ==
'0')
276 part = strreplace(
" ",
"", part);
277 part = strreplace(
"\n",
"", part);
278 trimmed =
strcat(trimmed, part);
284 part = strreplace(
" ",
"", part);
285 part = strreplace(
"\n",
"", part);
286 trimmed =
strcat(trimmed, part);
294 if (o < esc || esc < 0)
298 trimmed =
strcat(trimmed, part);
305 trimmed =
strcat(trimmed, part);
325 for (
int i = 1, n = buf_getsize(buf); i < n; i += 2)
326 if (bufstr_get(buf, i) == key)
327 return bufstr_get(buf, i + 1);
340 for (
int i = 0, n = buf_getsize(buf); i < n; ++i)
341 print(bufstr_get(buf, i),
"\n");
351 " \"m_string\": \"\\\"string\\\"\",\n"
353 " \"m_bool\": true,\n"
354 " \"m_null\": null,\n"
#define STRING_ITERATOR(this, s, i)
#define STRING_ITERATOR_NEXT(this)
#define STRING_ITERATOR_UNGET(this)
#define STRING_ITERATOR_SET(this, s, i)
#define STRING_ITERATOR_GET(this)
#define STRING_ITERATOR_PEEK(this)
ERASEABLE bool _json_parse_float()
ERASEABLE void json_del(int buf)
ERASEABLE int json_parse(string in, bool() func)
ERASEABLE bool _json_parse_number()
#define JSON_FAIL(reason)
ERASEABLE bool _json_parse_true()
ERASEABLE bool _json_parse_array()
ERASEABLE string json_get(int buf, string key)
ERASEABLE bool _json_parse_pair()
ERASEABLE bool _json_parse_false()
int _json_buffer
Store interleaved keys/values in a string buffer.
ERASEABLE bool _json_parse_null()
string _json_temp
Last read string.
ERASEABLE bool _json_parse_object()
Parse a json object.
int _json_keys
Current keys.
string _json_ns
Current namespace.
ERASEABLE bool _json_parse_string(bool add)
ERASEABLE void json_dump(int buf)
ERASEABLE bool _json_parse_int()
ERASEABLE bool _json_parse_value()
ERASEABLE bool _json_parse_members()
#define WITH(type, name, value, block)
strcat(_("^F4Countdown stopped!"), "\n^BG", _("Teams are too unbalanced."))
ERASEABLE string cons(string a, string b)
#define TEST(suite, test)
Use UpperCamelCase for suite and test only.
#define EXPECT_NE(val1, val2)
#define SUCCEED()
Must be present at the end of a test.