;Returns a string token or #f (define (collect-string-token haystack line) (if (string-delim? (s-cdr haystack)) (let loop ((delim (s-car haystack)) (rest (s-cdr haystack)) (linenum line)) ;If we're out of text (if (null? s-car haystack) (error "Ran out of text to process in string") ;If it's an escape sequence (if (eqv? (s-car rest) "\\") (cons (string-append (s-car rest) (car (loop (s-cdr rest)))) (cdr (loop (s-cdr rest)))) ;Or the end of the string (if (eqv? (s-car rest) delim) (cons (s-car rest) (s-cddr rest)) ;Regular character (cons (string-append (s-car rest) (car (loop (s-cdr rest)))) (cdr (loop (s-cdr rest)))))))) #f))