(Arne Babenhauserheide)
2013-04-22: starting with wisp in wisp starting with wisp in wisp
diff --git a/wisp.w b/wisp.w
--- a/wisp.w
+++ b/wisp.w
@@ -3,13 +3,56 @@
; first step: Be able to mirror a file to stdout
+let ((i (display
+ 1)))
+ display 1
+
+let : : a "rcie
+rcie
+crie"
+ display "
+"
+
let*
: filename : list-ref ( command-line ) 1
origfile : open-file filename "r" ; mode
nextchar : read-char origfile
- while : not : eof-object? nextchar
- display nextchar
- set! nextchar : read-char origfile
+ ; Replace end of line characters in brackets and strings
+ let*
+ : text ""
+ incomment #f
+ instring #f
+ inbrackets 0
+ while : not : eof-object? nextchar
+ when : and ( char=? nextchar #\" ) ( not incomment )
+ set! instring : not instring
+ display instring
+ when : and ( char=? nextchar #\; ) ( not incomment ) ( not instring )
+ set! incomment #t
+ when
+ and incomment
+ not instring
+ or
+ char=? nextchar #\newline
+ char=? nextchar #\linefeed
+ set! incomment #f
+ ; TODO: This still treats cod as in brackets which is not, possibly because it cannot cope with char literals: #\( and #\)
+ when : and ( char=? nextchar #\( ) ( not instring ) ( not incomment )
+ set! inbrackets : + inbrackets 1
+ when : and ( char=? nextchar #\) ) ( not instring ) ( not incomment )
+ set! inbrackets : - inbrackets 1
+
+ if : or instring : > inbrackets 0
+ if : char=? nextchar #\linefeed
+ set! text : string-append text "\\LINE_BREAK_N"
+ if : char=? nextchar #\newline
+ set! text : string-append text "\\LINE_BREAK_R"
+ set! text : string-append text : string nextchar
+ ; when not in brackets or string: just append the char
+ set! text : string-append text : string nextchar
+
+ set! nextchar : read-char origfile
+ display text
newline