(Arne Babenhauserheide)
2014-08-17: some work on processing lines. Currently with error. some work on processing lines. Currently with error.
diff --git a/wisp-scheme.w b/wisp-scheme.w --- a/wisp-scheme.w +++ b/wisp-scheme.w @@ -104,6 +104,9 @@ define : wisp-scheme-read-chunk-lines po else . 0 parsedline : append (list indent) currentsymbols + ; TODO: If the line is empty, . Either do it here and do not add it, just + ; increment the empty line counter, or strip it later. Replace indent + ; -1 by indent 0 afterwards. loop append indent-and-symbols : list parsedline . #t ; inindent @@ -210,7 +213,7 @@ define : wisp-indentation-to-parens line 1- : length indentation-levels current-line '() ; current-line empty: required end condition 1 - '() ; no unprocessed: required end condition 2 + '() ; unprocessed empty: required end condition 2 '() ; indentation-levels: There is nothing more to process else loop @@ -220,14 +223,30 @@ define : wisp-indentation-to-parens line length indentation-levels current-line '() ; current-line empty: required end condition 1 - '() ; no unprocessed: required end condition 2 + '() ; unprocessed empty: required end condition 2 '() ; indentation-levels: There is nothing more to process else ; now we come to the line-comparisons and indentation-counting. let* : next-line : car unprocessed cond + : line-empty-code? current-line + ; We cannot process indentation without + ; code. Just switch to the next line. This should + ; only happen at the start of the recursion. + loop + . processed + . next-line + cdr unprocessed + . indentation-levels + : line-empty-code? next-line + ; FIXME: this throws ERROR: Wrong type to apply: "." + loop + . processed + . current-line + cdr unprocessed + . indentation-levels else - throw 'wisp-not-implemented "Still need to implement the real comparisons." + throw 'wisp-not-implemented "Still need to implement the line comparisons." @@ -236,7 +255,7 @@ define : wisp-scheme-read-chunk port . "Read and parse one chunk of wisp-code" let : : lines : wisp-scheme-read-chunk-lines port ; TODO: process indentation. - . lines + wisp-indentation-to-parens lines define : wisp-scheme-read-all port . "Read all chunks from the given port"