Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2020-03-29 21:11:56 +0300
committerAnna Henningsen <anna@addaleax.net>2020-04-02 18:25:57 +0300
commit72e521f5e891b61c88d3452fcf4abab3cdf0f848 (patch)
tree443c45ac5b37367536cce85564b712a42fab55dc /src/json_utils.cc
parentc4b381a1311ef7d77b9e13dc4b1448649823ba02 (diff)
src: move JSONWriter into its own file
The JSONWriter feature is not inherently related to the report feature in any way. As a drive-by fix, remove a number of unused header includes. PR-URL: https://github.com/nodejs/node/pull/32552 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com>
Diffstat (limited to 'src/json_utils.cc')
-rw-r--r--src/json_utils.cc67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/json_utils.cc b/src/json_utils.cc
new file mode 100644
index 00000000000..aa03a6d7305
--- /dev/null
+++ b/src/json_utils.cc
@@ -0,0 +1,67 @@
+#include "json_utils.h"
+
+namespace node {
+
+std::string EscapeJsonChars(const std::string& str) {
+ const std::string control_symbols[0x20] = {
+ "\\u0000", "\\u0001", "\\u0002", "\\u0003", "\\u0004", "\\u0005",
+ "\\u0006", "\\u0007", "\\b", "\\t", "\\n", "\\v", "\\f", "\\r",
+ "\\u000e", "\\u000f", "\\u0010", "\\u0011", "\\u0012", "\\u0013",
+ "\\u0014", "\\u0015", "\\u0016", "\\u0017", "\\u0018", "\\u0019",
+ "\\u001a", "\\u001b", "\\u001c", "\\u001d", "\\u001e", "\\u001f"
+ };
+
+ std::string ret;
+ size_t last_pos = 0;
+ size_t pos = 0;
+ for (; pos < str.size(); ++pos) {
+ std::string replace;
+ char ch = str[pos];
+ if (ch == '\\') {
+ replace = "\\\\";
+ } else if (ch == '\"') {
+ replace = "\\\"";
+ } else {
+ size_t num = static_cast<size_t>(ch);
+ if (num < 0x20) replace = control_symbols[num];
+ }
+ if (!replace.empty()) {
+ if (pos > last_pos) {
+ ret += str.substr(last_pos, pos - last_pos);
+ }
+ last_pos = pos + 1;
+ ret += replace;
+ }
+ }
+ // Append any remaining symbols.
+ if (last_pos < str.size()) {
+ ret += str.substr(last_pos, pos - last_pos);
+ }
+ return ret;
+}
+
+std::string Reindent(const std::string& str, int indent_depth) {
+ std::string indent;
+ for (int i = 0; i < indent_depth; i++) indent += ' ';
+
+ std::string out;
+ std::string::size_type pos = 0;
+ do {
+ std::string::size_type prev_pos = pos;
+ pos = str.find('\n', pos);
+
+ out.append(indent);
+
+ if (pos == std::string::npos) {
+ out.append(str, prev_pos, std::string::npos);
+ break;
+ } else {
+ pos++;
+ out.append(str, prev_pos, pos - prev_pos);
+ }
+ } while (true);
+
+ return out;
+}
+
+} // namespace node