- (multiple-value-bind (parsed-line squash-prev) (funcall (funcall parser line) prev)
- (if squash-prev
- (parse-lines (cdr lines) parsed-line)
- (cons prev (parse-lines (cdr lines) parsed-line)))))))
+ (multiple-value-bind (parsed-line squash-prev suspension) (funcall (funcall parser line) prev)
+ (cond
+ (squash-prev (parse-lines (cdr lines) parsed-line))
+ (suspension
+ (let*
+ ((regex-to-find (car suspension))
+ (function-to-call (cadr suspension))
+ (pos
+ (position-if
+ (lambda (line) (cl-ppcre:scan regex-to-find line))
+ (cdr lines))))
+ (append
+ (list
+ prev
+ (funcall function-to-call (subseq (cdr lines) 0 (or pos (length lines)))))
+ (parse-lines (nthcdr (1+ pos) (cdr lines))))))
+ (t (cons prev (parse-lines (cdr lines) parsed-line))))))))