diff --git a/src/Statement.cc b/src/Statement.cc index 6dbb996d..4e7afa1b 100644 --- a/src/Statement.cc +++ b/src/Statement.cc @@ -61,8 +61,46 @@ void NativeStatement::writeJsonOutput(ostream &output) const { output << R"({"statementName": "native")" - << R"(, "string": ")" << native_statement << R"(")" - << "}"; + << R"(, "string": ")"; + + // A similar code is in VerbatimStatement::writeJsonOutput() + for (auto ch : native_statement) + switch (ch) + { + case '\b': + output << R"(\b)"; + break; + + case '\f': + output << R"(\f)"; + break; + + case '\n': + output << R"(\n)"; + break; + + case '\r': + output << R"(\r)"; + break; + + case '\t': + output << R"(\t)"; + break; + + case '"': + output << R"(\")"; + break; + + case '\\': + output << R"(\\)"; + break; + + default: + output << ch; + break; + } + + output << R"("})"; } VerbatimStatement::VerbatimStatement(string verbatim_statement_arg) : @@ -80,8 +118,46 @@ void VerbatimStatement::writeJsonOutput(ostream &output) const { output << R"({"statementName": "verbatim")" - << R"(, "string": ")" << verbatim_statement << R"(")" - << "}"; + << R"(, "string": ")"; + + // A similar code is in NativeStatement::writeJsonOutput() + for (auto ch : verbatim_statement) + switch (ch) + { + case '\b': + output << R"(\b)"; + break; + + case '\f': + output << R"(\f)"; + break; + + case '\n': + output << R"(\n)"; + break; + + case '\r': + output << R"(\r)"; + break; + + case '\t': + output << R"(\t)"; + break; + + case '"': + output << R"(\")"; + break; + + case '\\': + output << R"(\\)"; + break; + + default: + output << ch; + break; + } + + output << R"("})"; } void