(unless end (setf end (length seq)))
(let ((i start) (n (- end start)))
(labels ((copy (i buf start end)
- (do ((j i (1+ j))
- (k start (1+ k)))
- ((>= k end))
- (setf (char seq j) (schar buf k))))
+ (replace seq buf :start1 i :start2 start :end2 end))
(snarf (buf start end)
(let ((m (- end start)))
(cond ((< m n)
(flet ((snarf (buf start end)
(let ((pos (position #\newline buf :start start :end end)))
(push (make-charbuf-slice buf start (or pos end)) slices)
- (if pos
- (values (concatenate-charbuf-slices (nreverse slices))
- (1+ pos))
- (values nil 0))))
- (fail ()
- (values (concatenate-charbuf-slices (nreverse slices)) t)))
- (charbuf-scanner-map scanner #'snarf #'fail)))))
+ (values pos (and pos (1+ pos))))))
+ (multiple-value-bind (result eofp)
+ (charbuf-scanner-map scanner #'snarf)
+ (declare (ignore result))
+ (values (concatenate-charbuf-slices (nreverse slices))) eofp)))))
;;;----- That's all, folks --------------------------------------------------