(Arne Babenhauserheide)
2015-09-12: simplify the end-with-period code a lot. simplify the end-with-period code a lot.
diff --git a/wisp-scheme.w b/wisp-scheme.w --- a/wisp-scheme.w +++ b/wisp-scheme.w @@ -222,34 +222,14 @@ define : indent-reduce-to-level indentat lambda : x ; get the levels car : cdr x -define : chunk-ends-with-period currentsymbols port +define : chunk-ends-with-period currentsymbols next-char . "Check whether indent-and-symbols ends with a period, indicating the end of a chunk." - define : ref-last li - list-ref li : - (length li) 1 - define : drop-last li - drop-right li 1 and : not : null? currentsymbols - equal? #\newline : peek-char port + equal? #\newline next-char equal? repr-dot - ref-last currentsymbols - -define : indent-and-lines-drop-last-symbol indent-and-symbols - . "Check whether indent-and-symbols ends with a period, indicating the end of a chunk." - define : drop-last li - drop-right li 1 - define : ref-last li - list-ref li : - (length li) 1 - define : set-last! li val - list-set! li : - (length li) 1 - . val - when : not : null? indent-and-symbols - set-last! indent-and-symbols - drop-last : ref-last indent-and-symbols - . indent-and-symbols + list-ref currentsymbols (- (length currentsymbols) 1) define : wisp-scheme-read-chunk-lines port - define : finalize indent-and-symbols currentindent currentsymbols - append indent-and-symbols : list : append (list currentindent) currentsymbols let loop : indent-and-symbols : list ; '((5 "(foobar)" "\"yobble\"")(3 "#t")) inindent #t @@ -265,18 +245,18 @@ define : wisp-scheme-read-chunk-lines po ; after two empty lines work ; (otherwise it shows one more line). . indent-and-symbols - : chunk-ends-with-period currentsymbols port - ; the line ends with a period. This is forbidden in SRFI-119. - ; use it to end the line in the REPL without hitting return thrice. - indent-and-lines-drop-last-symbol - finalize indent-and-symbols currentindent currentsymbols else let : : next-char : peek-char port cond : eof-object? next-char - finalize indent-and-symbols currentindent currentsymbols + append indent-and-symbols : list : append (list currentindent) currentsymbols : and inindent (zero? currentindent) (not incomment) (not (null? indent-and-symbols)) (not inunderscoreindent) (not (or (equal? #\space next-char) (equal? #\newline next-char) (equal? (string-ref ";" 0) next-char))) append indent-and-symbols ; top-level form ends chunk + : chunk-ends-with-period currentsymbols next-char + ; the line ends with a period. This is forbidden in + ; SRFI-119. Use it to end the line in the REPL without + ; showing continuation dots (...). + append indent-and-symbols : list : append (list currentindent) (drop-right currentsymbols 1) : and inindent : equal? #\space next-char read-char port ; remove char loop