mirror of
https://github.com/yhirose/cpp-peglib.git
synced 2024-12-22 20:05:31 +00:00
Fixed missing comma problem in JSON output from PEG playground parser
This commit is contained in:
parent
bbeadfa937
commit
51b13a4291
@ -18,10 +18,9 @@ std::string escape_json(const std::string& s) {
|
|||||||
return o.str();
|
return o.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::function<void(size_t, size_t, const std::string&)> makeJSONFormatter(std::string& json) {
|
std::function<void(size_t, size_t, const std::string&)> makeJSONFormatter(std::string& json, bool& init) {
|
||||||
auto init = std::make_shared<bool>(true);
|
init = true;
|
||||||
|
return [&](size_t ln, size_t col, const std::string& msg) mutable {
|
||||||
return [&json, init](size_t ln, size_t col, const std::string& msg) mutable {
|
|
||||||
if (!init) {
|
if (!init) {
|
||||||
json += ",";
|
json += ",";
|
||||||
}
|
}
|
||||||
@ -30,12 +29,14 @@ std::function<void(size_t, size_t, const std::string&)> makeJSONFormatter(std::s
|
|||||||
json += R"("col":)" + std::to_string(col) + ",";
|
json += R"("col":)" + std::to_string(col) + ",";
|
||||||
json += R"("msg":")" + escape_json(msg) + R"(")";
|
json += R"("msg":")" + escape_json(msg) + R"(")";
|
||||||
json += "}";
|
json += "}";
|
||||||
*init = false;
|
|
||||||
|
init = false;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
bool parse_grammar(const std::string& text, peg::parser& peg, std::string& json) {
|
bool parse_grammar(const std::string& text, peg::parser& peg, std::string& json) {
|
||||||
peg.log = makeJSONFormatter(json);
|
bool init;
|
||||||
|
peg.log = makeJSONFormatter(json, init);
|
||||||
json += "[";
|
json += "[";
|
||||||
auto ret = peg.load_grammar(text.data(), text.size());
|
auto ret = peg.load_grammar(text.data(), text.size());
|
||||||
json += "]";
|
json += "]";
|
||||||
@ -45,7 +46,8 @@ bool parse_grammar(const std::string& text, peg::parser& peg, std::string& json)
|
|||||||
bool parse_code(const std::string& text, peg::parser& peg, std::string& json,
|
bool parse_code(const std::string& text, peg::parser& peg, std::string& json,
|
||||||
std::shared_ptr<peg::Ast>& ast) {
|
std::shared_ptr<peg::Ast>& ast) {
|
||||||
peg.enable_ast();
|
peg.enable_ast();
|
||||||
peg.log = makeJSONFormatter(json);
|
bool init;
|
||||||
|
peg.log = makeJSONFormatter(json, init);
|
||||||
json += "[";
|
json += "[";
|
||||||
auto ret = peg.parse_n(text.data(), text.size(), ast);
|
auto ret = peg.parse_n(text.data(), text.size(), ast);
|
||||||
json += "]";
|
json += "]";
|
||||||
|
File diff suppressed because one or more lines are too long
BIN
docs/native.wasm
BIN
docs/native.wasm
Binary file not shown.
Loading…
Reference in New Issue
Block a user