;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 (cond ((null? haystack) (error "Ran out of text to process in string")) ;If it's an escape sequence ((eqv? (s-car rest) "\\") (token-content-add (loop delim (s-cddr rest) line) ;TODO - escape sequences, currently ignored (s-cadr rest))) ;Or the end of the string ((eqv? (s-car rest) delim) ;Yup, construct a token (token delim (s-car rest) linenum (s-cdr rest))) ;Regular character (else (token-content-add (loop delim (s-cdr rest) linenum) (s-car rest))))) #f))