return kson;
}
+const kson_node_t *kson_vquery(const kson_node_t *nodes, const kson_node_t *root, int depth, va_list ap)
+{
+ const kson_node_t *p = root;
+ while (p && depth > 0) {
+ if (p->type == KSON_TYPE_BRACE) {
+ long i;
+ const char *q = va_arg(ap, const char*);
+ for (i = 0; i < (long)p->n; ++i) {
+ const kson_node_t *r = &nodes[i];
+ if (r->key && strcmp(r->key, q) == 0) {
+ p = r;
+ break;
+ }
+ }
+ if (i == (long)p->n) p = 0;
+ } else if (p->type == KSON_TYPE_BRACKET) {
+ long i = va_arg(ap, long);
+ p = i < (long)p->n? &nodes[p->v.child[i]] : 0;
+ } else break;
+ --depth;
+ }
+ return p;
+}
+
+const kson_node_t *kson_query(const kson_t *kson, int depth, ...)
+{
+ const kson_node_t *p;
+ va_list ap;
+ va_start(ap, depth);
+ p = kson_vquery(kson->nodes, kson->nodes, depth, ap);
+ va_end(ap);
+ return p;
+}
+
void kson_format_recur(const kson_node_t *nodes, int depth, const kson_node_t *p)
{
long i;
} else {
if (p->type != KSON_TYPE_NO_QUOTE)
putchar(p->type == KSON_TYPE_SGL_QUOTE? '\'' : '"');
- printf("%s", p->v.str);
+ fputs(p->v.str, stdout);
if (p->type != KSON_TYPE_NO_QUOTE)
putchar(p->type == KSON_TYPE_SGL_QUOTE? '\'' : '"');
}
putchar('\n');
}
-const kson_node_t *kson_vquery(const kson_node_t *nodes, const kson_node_t *root, int depth, va_list ap)
-{
- const kson_node_t *p = root;
- while (p && depth > 0) {
- if (p->type == KSON_TYPE_BRACE) {
- long i;
- const char *q = va_arg(ap, const char*);
- for (i = 0; i < (long)p->n; ++i) {
- const kson_node_t *r = &nodes[i];
- if (r->key && strcmp(r->key, q) == 0) {
- p = r;
- break;
- }
- }
- if (i == (long)p->n) p = 0;
- } else if (p->type == KSON_TYPE_BRACKET) {
- long i = va_arg(ap, long);
- p = i < (long)p->n? &nodes[p->v.child[i]] : 0;
- } else break;
- --depth;
- }
- return p;
-}
-
-const kson_node_t *kson_query(const kson_t *kson, int depth, ...)
-{
- const kson_node_t *p;
- va_list ap;
- va_start(ap, depth);
- p = kson_vquery(kson->nodes, kson->nodes, depth, ap);
- va_end(ap);
- return p;
-}
-
#ifdef KSON_MAIN
#define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x))
int main(int argc, char *argv[])