blob: c61c2c701a6609809a78b5ea4bb0f5573213fbd5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
(define-module (c line-fold)
:use-module (srfi srfi-1)
:use-module (srfi srfi-71)
:export (fold-lines))
(define (line-continued? line)
(and (not (string-null? line))
(char=? #\\ (string-ref line (1- (string-length line))))))
(define (strip-backslash line)
(string-drop-right line 1))
(define (fold-lines string)
(with-output-to-string
(lambda ()
(let loop ((lines (string-split string #\newline)))
(cond ((null? lines) 'NOOP)
((null? (cdr lines))
;; TODO error message if last character is a backslash
(display (car lines))
(newline))
(else
(let ((to-merge remaining (span line-continued? lines)))
(for-each display (map strip-backslash to-merge))
(display (car remaining))
(newline)
(for-each (lambda _ (newline))
(iota (length to-merge)))
(loop (cdr remaining)))))))))
|