(cl:in-package #:text.editing)
(defun buffer-length (input)
(c:item-count (c:buffer (search-input-cursor input))))
(defun buffer-ref (input index)
(let* ((cursor (search-input-cursor input))
(old-index (search-input-index input))
(diff (- index old-index)))
(format *trace-output* "~D -> ~D~%" old-index index)
(loop :repeat diff :do (forward-item* cursor))
(setf (search-input-index input) index))
(loop :repeat diff :do (backward-item* cursor))
(setf (search-input-index input) index)))
(item-after-cursor* cursor)))
(defun make-buffer-layout ()
(one-more-re-nightmare::make-layout :array-type 'search-input
(text.editing.test::call-with-buffer
(let ((input (make-search-input :cursor (point buffer) :index 0)))
(one-more-re-nightmare:first-match "f«o+» *«b$+»" input :layout (make-buffer-layout))))