(Arne Babenhauserheide)
2013-05-03: can split into lines can split into lines
diff --git a/wisp.w b/wisp.w --- a/wisp.w +++ b/wisp.w @@ -103,8 +103,23 @@ define : nostringandbracketbreaks inport . text -; As next part we have to split a single line into indentation, content and comment. -define : splitline inport +; As next part we have split a text into a list of lines which we can process one by one. +define : splitlines inport + let + : lines '() + nextchar : read-char inport + nextline "" + while : not : eof-object? nextchar + if : not : or (char=? nextchar #\newline ) (char=? nextchar #\linefeed ) + set! nextline : string-append nextline : string nextchar + begin + set! lines : append lines (list nextline) + set! nextline "" + set! nextchar : read-char inport + . lines + +; Now we have to split a single line into indentation, content and comment. +define : splitindent inport let : nextchar : read-char inport inindentunderbar #t @@ -134,7 +149,7 @@ define : splitline inport set! comment : string-append comment : string nextchar continue ; check whether we stay in the commentcheck - when : and commentstart : char=? nextchar : char : string-ref commentstartidentifier commentidentifierindex + when : and commentstart : char=? nextchar : string-ref commentstartidentifier commentidentifierindex set! commentidentifierindex : + commentidentifierindex 1 set! comment : string-append comment : string nextchar when : = commentidentifierindex : - commentstartidentifierlength 1 @@ -145,7 +160,7 @@ define : splitline inport set! comment "" continue ; if we cannot complete the commentcheck, we did not start a real comment. Append it to the content - when : and commentstart : not : char=? nextchar : char : string-ref commentstartidentifier commentidentifierindex + when : and commentstart : not : char=? nextchar : string-ref commentstartidentifier commentidentifierindex set! commentstart #f set! content : string-append content comment set! comment "" @@ -168,10 +183,13 @@ let* origfile : open-file filename "r" ; mode nextchar : read-char origfile text "" + lines '() while : not : eof-object? nextchar set! text : string-append text : string nextchar set! nextchar : read-char origfile set! text : call-with-input-string text nostringandbracketbreaks - display text + ; display text + set! lines : call-with-input-string text splitlines + ; display : list-ref lines 0 newline