about summary refs log tree commit diff stats
path: root/tangle
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2017-04-20 12:44:38 -0700
committerKartik K. Agaram <vc@akkartik.com>2017-04-20 12:44:38 -0700
commit84537b81bd210ba5eadf618a7858be7db1ae4350 (patch)
tree856fb5f59a3d22285e62069b8bf251d5f4814499 /tangle
parentb7df1a7aabd5d4b57629c484daf060bfea2aaef3 (diff)
downloadmu-84537b81bd210ba5eadf618a7858be7db1ae4350.tar.gz
3839
Fix CI.

In the process I also fixed a bug in the tangle/ utility.
Diffstat (limited to 'tangle')
-rw-r--r--tangle/003tangle.cc9
-rw-r--r--tangle/003tangle.test.cc14
2 files changed, 20 insertions, 3 deletions
diff --git a/tangle/003tangle.cc b/tangle/003tangle.cc
index 3573c11f..7eb62f27 100644
--- a/tangle/003tangle.cc
+++ b/tangle/003tangle.cc
@@ -251,10 +251,13 @@ void slurp_tangle_string(istream& in, ostream& out) {
   in.get();
   char c;
   while (in >> c) {
-    if (c == '\\')  // only works for double-quotes
+    if (c == '\\') {
+      // skip backslash and save next character unconditionally
+      in >> c;
+      out << c;
       continue;
-    if (c == '"')
-      break;
+    }
+    if (c == '"') break;
     out << c;
   }
 }
diff --git a/tangle/003tangle.test.cc b/tangle/003tangle.test.cc
index 88901ef7..6d6b88a7 100644
--- a/tangle/003tangle.test.cc
+++ b/tangle/003tangle.test.cc
@@ -76,6 +76,20 @@ void test_tangle_with_tanglecomments_inside_directive() {
   CHECK_TRACE_DOESNT_CONTAIN("tangle", "//: 1");
 }
 
+void test_tangle_with_multiword_directives() {
+  istringstream in("a b\nc\n:(after \"a b\")\nd\n");
+  list<Line> dummy;
+  tangle(in, dummy);
+  CHECK_TRACE_CONTENTS("tangle", "a bdc");
+}
+
+void test_tangle_with_quoted_multiword_directives() {
+  istringstream in("a \"b\"\nc\n:(after \"a \\\"b\\\"\")\nd\n");
+  list<Line> dummy;
+  tangle(in, dummy);
+  CHECK_TRACE_CONTENTS("tangle", "a \"b\"dc");
+}
+
 void test_tangle2() {
   istringstream in("a\nb\nc\n:(after b)\nd\n");
   list<Line> dummy;