switch (r) {
case '+':
t.read(':');
if (t.matches('{')) {
NodeImpl n = NodeImpl.parse(map, t, 0);
JsopWriter diff = new JsopBuilder();
diff.tag('+').key(path);
n.append(diff, Integer.MAX_VALUE, 0, Integer.MAX_VALUE, false);
buffer(path, diff);
} else {
String value = t.readRawValue().trim();
JsopWriter diff = new JsopBuilder();
diff.tag('+').key(path);
diff.encodedValue(value);
buffer(path, diff);
}
break;
case '-': {
JsopWriter diff = new JsopBuilder();
diff.tag('-').value(path);
buffer(path, diff);
break;
}
case '^':
t.read(':');
String value;
if (t.matches(JsopReader.NULL)) {
JsopWriter diff = new JsopBuilder();
diff.tag('^').key(path).value(null);
buffer(path, diff);
} else {
value = t.readRawValue().trim();
JsopWriter diff = new JsopBuilder();
diff.tag('^').key(path).encodedValue(value);
buffer(path, diff);
}
break;
case '>': {
t.read(':');
JsopWriter diff = new JsopBuilder();
if (t.matches('{')) {
String position = t.readString();
t.read(':');
String to = t.readString();
t.read('}');
if (!PathUtils.isAbsolute(to)) {
to = PathUtils.concat(rootPath, to);
}
diff.tag('>').key(path);
diff.object().key(position);
diff.value(to).endObject();
} else {
String to = t.readString();
if (!PathUtils.isAbsolute(to)) {
to = PathUtils.concat(rootPath, to);
}
diff.tag('>').key(path);
diff.value(to);
}
buffer(path, diff);
break;
}
default: