about summary refs log tree commit diff stats
path: root/013literal_string.cc
diff options
context:
space:
mode:
Diffstat (limited to '013literal_string.cc')
-rw-r--r--013literal_string.cc20
1 files changed, 20 insertions, 0 deletions
diff --git a/013literal_string.cc b/013literal_string.cc
index 41644b1c..3d60a30f 100644
--- a/013literal_string.cc
+++ b/013literal_string.cc
@@ -69,6 +69,26 @@ string slurp_quoted(istream& in) {
     return;
   }
 
+:(after "string reagent::to_string()")
+  if (!properties.at(0).second.empty() && properties.at(0).second.at(0) == "literal-string") {
+    return emit_literal_string(name);
+  }
+
+:(code)
+string emit_literal_string(string name) {
+  size_t pos = 0;
+  while (pos != string::npos)
+    pos = replace(name, "\n", "\\n", pos);
+  return "{name: \""+name+"\", properties: [_: \"literal-string\"]}";
+}
+
+size_t replace(string& str, const string& from, const string& to, size_t n) {
+  size_t result = str.find(from, n);
+  if (result != string::npos)
+    str.replace(result, from.length(), to);
+  return result;
+}
+
 :(scenario string_literal_nested)
 recipe main [
   1:address:array:character <- copy [abc [def]]