Validate utf8
This commit is contained in:
@@ -1,9 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "weaseljson.h"
|
||||
#include <cstdint>
|
||||
#include <cstdio>
|
||||
#include <vector>
|
||||
|
||||
inline Callbacks printCallbacks() {
|
||||
Callbacks result;
|
||||
@@ -27,87 +25,6 @@ inline Callbacks printCallbacks() {
|
||||
return result;
|
||||
}
|
||||
|
||||
struct MinifyState {
|
||||
bool isKey = false;
|
||||
struct Cursor {
|
||||
int64_t index;
|
||||
bool isObject;
|
||||
};
|
||||
void on_begin_value() {
|
||||
if (!stack.empty()) {
|
||||
auto &back = stack.back();
|
||||
if (back.isObject && back.index % 2 == 0 && back.index > 0) {
|
||||
printf(",");
|
||||
}
|
||||
if (back.isObject && back.index % 2 == 1 && back.index > 0) {
|
||||
printf(":");
|
||||
}
|
||||
if (!back.isObject && back.index > 0) {
|
||||
printf(",");
|
||||
}
|
||||
++back.index;
|
||||
}
|
||||
}
|
||||
std::vector<Cursor> stack;
|
||||
};
|
||||
|
||||
inline Callbacks minifyCallbacks() {
|
||||
Callbacks result;
|
||||
result.on_begin_object = +[](void *p) {
|
||||
auto *state = (MinifyState *)p;
|
||||
state->on_begin_value();
|
||||
state->stack.push_back({0, true});
|
||||
printf("{");
|
||||
};
|
||||
result.on_end_object = +[](void *p) {
|
||||
auto *state = (MinifyState *)p;
|
||||
state->stack.pop_back();
|
||||
printf("}");
|
||||
};
|
||||
result.on_begin_string = +[](void *p) {
|
||||
auto *state = (MinifyState *)p;
|
||||
state->on_begin_value();
|
||||
printf("\"");
|
||||
};
|
||||
result.on_string_data =
|
||||
+[](void *, const char *buf, int len) { printf("%.*s", len, buf); };
|
||||
result.on_end_string = +[](void *p) { printf("\""); };
|
||||
result.on_begin_array = +[](void *p) {
|
||||
auto *state = (MinifyState *)p;
|
||||
state->on_begin_value();
|
||||
state->stack.push_back({0, false});
|
||||
printf("[");
|
||||
};
|
||||
result.on_end_array = +[](void *p) {
|
||||
auto *state = (MinifyState *)p;
|
||||
state->stack.pop_back();
|
||||
printf("]");
|
||||
};
|
||||
result.on_begin_number = +[](void *p) {
|
||||
auto *state = (MinifyState *)p;
|
||||
state->on_begin_value();
|
||||
};
|
||||
result.on_number_data =
|
||||
+[](void *, const char *buf, int len) { printf("%.*s", len, buf); };
|
||||
result.on_end_number = +[](void *) {};
|
||||
result.on_true_literal = +[](void *p) {
|
||||
auto *state = (MinifyState *)p;
|
||||
state->on_begin_value();
|
||||
printf("true");
|
||||
};
|
||||
result.on_false_literal = +[](void *p) {
|
||||
auto *state = (MinifyState *)p;
|
||||
state->on_begin_value();
|
||||
printf("false");
|
||||
};
|
||||
result.on_null_literal = +[](void *p) {
|
||||
auto *state = (MinifyState *)p;
|
||||
state->on_begin_value();
|
||||
printf("null");
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
inline Callbacks noopCallbacks() {
|
||||
Callbacks result;
|
||||
result.on_begin_object = +[](void *) {};
|
||||
|
||||
Reference in New Issue
Block a user