about summary refs log tree commit diff stats
path: root/013literal_string.cc
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-06-13 23:17:13 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-06-13 23:17:13 -0700
commit7cc045d93e1b328cb741173c3746d7c1b91d50d0 (patch)
tree6dea5c03b95fe4f0c2cb263e6b745a80217595c2 /013literal_string.cc
parent06462ccda6484b6b0cb7094398942f37defc098b (diff)
downloadmu-7cc045d93e1b328cb741173c3746d7c1b91d50d0.tar.gz
1560
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]]