wisp
 
(Arne Babenhauserheide)
2016-10-11: refactor Speak-indirect to work more directly towards the structure

refactor Speak-indirect to work more directly towards the structure of Speak.

diff --git a/examples/enter-three-witches.w b/examples/enter-three-witches.w
--- a/examples/enter-three-witches.w
+++ b/examples/enter-three-witches.w
@@ -118,7 +118,6 @@ define-syntax Speak
   with-ellipsis :::
    syntax-case x ()
      ;; Support form for modifiers: enclose by double parens (used later)
-     ;; when using this name, print all lines indented, with the name in front.
      : _ (((name :::))) ((mod :::)) (word :::) line :::
          #` begin
             say-name : quasiquote : name ::: mod :::
@@ -144,16 +143,16 @@ define-syntax Speak-indirect
         syntax-case x ()
             ;; Adjust name and lines for Speak for the case where I
             ;; cannot match for the whole name.
-            ;; input: (name1 name2 ... (word ...) ...)
+            ;; input: (((name1 name2 ... (word ...) ...)))
             
             ;; grab the lines one by one from the back
-            : _ ((lines ...)) symbols ... (lastline ...)
-              #` Speak-indirect (((lastline ...) lines ...)) symbols ...
-            ;; start with the last line: create a deeply nested list as helper
-            : _ symbols ... (lastline ...)
-              #` Speak-indirect (((lastline ...))) symbols ...
-            ;; no more lines remain at the end: the rest must be the 
-            : _ ((lines ...)) name ...
+            : _ (((symbols ... (word ...)))) lines ...
+              #` Speak-indirect (((symbols ...))) (word ...) lines ...
+            ;; start with the last line
+            : _ (((symbols ... (word ...))))
+              #` Speak-indirect (((symbols ...))) (word ...)
+            ;; no more lines remain at the end: the rest must be the name
+            : _ (((name ...))) lines ...
               #` Speak (((name ...))) lines ...
 
 
@@ -177,9 +176,8 @@ define-syntax Enter
            : _ symbols ::: ; FIXME: This prevents checking at compiletime :(
                ; this does not correctly make the second name part of
                ; the name, preventing differentiation between name and
-               ; modifier, therefore we have to do that in the Speak
-               ; macro
-               #` Speak-indirect name symbols :::
+               ; modifier
+               #` Speak-indirect (((name symbols :::)))
        ;; process the rest of the names
        Enter b ...
        ;; record that the name was introduced. I do not see a way to do