#!/home/arne/wisp/wisp-multiline.sh
; !#
; we need to be able to replace end-of-line characters in brackets and strings
;; define : nostringandbracketbreaks inport
;; ; Replace end of line characters in brackets and strings
;; let*
;; : nextchar : read-char inport
;; text ""
;; incomment #f
;; instring #f
;; inbrackets 0
;; incharform 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
;;
; first step: Be able to mirror a file to stdout
let*
: filename : list-ref ( command-line ) 1
origfile : open-file filename "r" ; mode
nextchar : read-char origfile
text ""
while : not : eof-object? nextchar
set! text : string-append text : string nextchar
set! nextchar : read-char origfile
display text
newline
; (modify-syntax-entry ?: "w")