wisp
 
(Arne Babenhauserheide)
2013-08-20: parsing the hashbang works

parsing the hashbang works

diff --git a/wisp-guile.w b/wisp-guile.w
--- a/wisp-guile.w
+++ b/wisp-guile.w
@@ -264,17 +264,56 @@ define : split-wisp-lines text
         call-with-input-string text nostringandbracketbreaks
         . splitlines 
 
+define : wisp2lisp-parse lisp prev lines
+    . "Parse the body of the wisp-code."
+    append lisp lines
+
+define : wisp2lisp-initial-comments lisp prev lines
+    . "Keep all starting comments: do not start them with a bracket."
+    let initial-comments : (lisp lisp) (prev prev) (lines lines)
+        if : equal? lines '() ; file only contained comments, maybe including the hashbang
+            . lisp
+            if : line-empty? prev
+                initial-comments : append lisp : list : line-merge-comment prev
+                    . (list-ref lines 0) (list-tail lines 1)
+                wisp2lisp-parse lisp prev lines
+
+define : wisp2lisp lines
+    . "Parse indentation in the lines to add the correct brackets."
+    if : equal? lines '()
+        . '()
+        let parsehashbang ; process the first line up to the content
+            : lisp '() ; the processed lines
+              prev : list-ref lines 0
+              unprocessed lines
+            if 
+                and
+                    equal? lisp '() ; really the first line
+                    equal? 0 : line-indent prev
+                    string-prefix? "#!" : line-content prev
+                parsehashbang : append lisp : list : line-merge-comment prev
+                    . (list-ref unprocessed 1) (list-tail unprocessed 1)
+                append lisp unprocessed ; wisp2lisp-initial-comments lisp prev unprocessed
 
 ; first step: Be able to mirror a file to stdout
-let* 
+let*
     : filename : list-ref ( command-line ) 1
       text : read-whole-file filename
       ; Lines consist of lines with indent, content and comment. See
       ; line-indent, line-content, line-comment and the other
       ; line-functions for details.
       lines : linestoindented : split-wisp-lines text
+      lisp : wisp2lisp lines
     ; display : list-ref lines 100 ; seems good
-    let : : line : list-ref lines 158
+    let show : (processed '()) (unprocessed lisp)
+        when : not : equal? unprocessed '()
+            display : line-content : list-ref unprocessed 0
+            display ";"
+            display : line-comment : list-ref unprocessed 0
+            newline
+            show  (append processed (list (list-ref unprocessed 0))) (list-tail unprocessed 1)
+    
+    let : : line : list-ref lisp 158
         display : line-indent line
         display ","
         display : line-content  line