(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