-
- int c = GetChar();
-
- if (! charInString(c, "isoa"))
- continue;
-
- JSONNode * newNode = JSONNodeNew(JSONNodeKind_Nul);
-
- if (result == NULL)
- g_DrawNode = result = newNode;
-
- if (node != NULL)
- JSONNodePush(node, newNode);
-
- node = newNode;
- g_CurrNode = node;
-
- switch (c) {
- case 'i': {
- node->kind = JSONNodeKind_Int;
- GetStr(node, predInt);
- break;
+ else if (node->kind ==JSONNodeKind_Int) {
+ if (editingNode) {
+ GetInput(node, c);
+ }
+ else {
+ /**/ if (c == 'i' && node->parent != NULL) { node = JSONNodePush(node->parent, JSONNodeNew(JSONNodeKind_Int)); editingNode = true; }
+ else if (c == 's' && node->parent != NULL) { node = JSONNodePush(node->parent, JSONNodeNew(JSONNodeKind_Str)); editingNode = true; }
+ else if (c == 'o' && node->parent != NULL) { node = JSONNodePush(node->parent, JSONNodeNew(JSONNodeKind_Obj)); editingNode = true; }
+ else if (c == 'a' && node->parent != NULL) { node = JSONNodePush(node->parent, JSONNodeNew(JSONNodeKind_Arr)); editingNode = true; }
+ else if (c == 'h') { if (node->prev != NULL) g_CurrNode = node = node->prev; }
+ else if (c == 'l') { if (node->next != NULL) g_CurrNode = node = node->next; }
+ else if (c == 'k') { if (node->parent != NULL) g_CurrNode = node = node->parent; }
+ else if (c == 'j') { if (node->firstChild != NULL) g_CurrNode = node = node->firstChild; }
+ else if (c == ' ') { editingNode = true; }
+ else if (isBackspace(c)) { g_CurrNode = node = JSONNodeRemove(node); }
+
+ g_CurrNode = node;
+ }