(Arne Babenhauserheide)
2014-08-16: prepare for chunk-reading. prepare for chunk-reading.
diff --git a/wisp-scheme.w b/wisp-scheme.w
--- a/wisp-scheme.w
+++ b/wisp-scheme.w
@@ -17,7 +17,7 @@
use-modules : (srfi srfi-1) last
-define : wisp-scheme-reader port
+define : wisp-scheme-read-chunk port
let loop
: indent-and-symbols : list ; '((5 "(foobar)" "\"yobble\"")(3 "#t"))
inindent #t
@@ -25,6 +25,7 @@ define : wisp-scheme-reader port
incomment #f
currentindent 0
currentsymbols '()
+ emptylines 0
let : : next-char : peek-char port
cond
: eof-object? next-char
@@ -38,6 +39,7 @@ define : wisp-scheme-reader port
. #f ; incomment
1+ currentindent
. currentsymbols
+ . emptylines
: and inunderscoreindent : equal? #\_ next-char
read-char port ; remove char
loop
@@ -47,6 +49,7 @@ define : wisp-scheme-reader port
. #f ; incomment
1+ currentindent
. currentsymbols
+ . emptylines
; any char but whitespace *after* underscoreindent is
; an error. This is stricter than the current wisp
; syntax definition. TODO: Fix the definition. Better
@@ -55,11 +58,11 @@ define : wisp-scheme-reader port
throw 'wisp-syntax-error "initial underscores without following whitespace at beginning of the line after" : last indent-and-symbols
: equal? #\newline next-char
read-char port ; remove the newline
- let ; distinguish pure whitespace lines and lines
- ; with comment by giving the former zero
- ; indent. Lines with a comment at zero indent get
- ; indent -1 for the same reason - meaning not
- ; actually empty.
+ let* ; distinguish pure whitespace lines and lines
+ ; with comment by giving the former zero
+ ; indent. Lines with a comment at zero indent
+ ; get indent -1 for the same reason - meaning
+ ; not actually empty.
:
indent
cond
@@ -71,13 +74,15 @@ define : wisp-scheme-reader port
. currentindent
else
. 0
+ parsedline : list : append (list indent) currentsymbols
loop
- append indent-and-symbols : list : append (list indent) currentsymbols
+ append indent-and-symbols parsedline
. #t ; inindent
equal? #\_ : peek-char port
. #f ; incomment
. 0
. '()
+ . emptylines
: equal? #t incomment
read-char port ; remove one comment character
loop
@@ -87,6 +92,7 @@ define : wisp-scheme-reader port
. #t ; incomment
. currentindent
. currentsymbols
+ . emptylines
: equal? #\space next-char ; remove whitespace when not in indent
read-char port ; remove char
loop
@@ -96,6 +102,7 @@ define : wisp-scheme-reader port
. #f ; incomment
. currentindent
. currentsymbols
+ . emptylines
; | cludge to appease the former wisp parser
; | which had a prblem with the literal comment
; v char.
@@ -107,6 +114,7 @@ define : wisp-scheme-reader port
. #t ; incomment
. currentindent
. currentsymbols
+ . emptylines
else ; use the reader
loop
. indent-and-symbols
@@ -115,6 +123,7 @@ define : wisp-scheme-reader port
. #f ; incomment
. currentindent
append currentsymbols : list : read port
+ . emptylines
@@ -122,7 +131,7 @@ define : wisp-scheme-reader port
; expected:
; ((2 (foo)) (2) (0) (0) (2 foo : moo
; ) (4 #{.}# [goo #{.}# hoo]))
-display : call-with-input-string " (foo) ; bar\n ; nop \n; nup \n \n\n foo : moo \"\n\" \n___ . [goo . hoo]" wisp-scheme-reader
+display : call-with-input-string " (foo) ; bar\n ; nop \n; nup \n \n\n foo : moo \"\n\" \n___ . [goo . hoo]" wisp-scheme-read-chunk
newline
-display : call-with-input-string " (foo) \n___. [goo . hoo]" wisp-scheme-reader
+display : call-with-input-string " (foo) \n___. [goo . hoo]" wisp-scheme-read-chunk
newline