move buffer around when calling 'SearchList.buildRange'

This commit is contained in:
2025-09-30 05:40:57 +01:00
parent e03eecf940
commit 45fbd85183
4 changed files with 18 additions and 15 deletions

View File

@@ -17,7 +17,8 @@ struct
val msgs = SEARCH (buffer, searchString, time) :: msgs
val buffer = LineGap.goToIdx (low - 1111, buffer)
val searchList = SearchList.buildRange (buffer, searchString, low + 1111)
val (buffer, searchList) =
SearchList.buildRange (buffer, searchString, low + 1111)
val buffer = LineGap.goToIdx (low, buffer)
in
@@ -239,7 +240,7 @@ struct
val initialMsg = SEARCH (buffer, searchString, time) :: initialMsg
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
val searchList =
val (buffer, searchList) =
SearchList.buildRange (buffer, searchString, cursorIdx + 1111)
(* If we have deleted from the buffer so that cursorIdx
@@ -717,7 +718,7 @@ struct
val initialMsg = SEARCH (buffer, #searchString app, time) :: initialMsg
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
val searchList =
val (buffer, searchList) =
SearchList.buildRange (buffer, searchString, cursorIdx + 1111)
val cursorIdx = 0
@@ -765,7 +766,8 @@ struct
val initialMsg = SEARCH (buffer, searchString, time) :: initialMsg
val buffer = LineGap.goToIdx (low - 1111, buffer)
val searchList = SearchList.buildRange (buffer, searchString, low + 1111)
val (buffer, searchList) =
SearchList.buildRange (buffer, searchString, low + 1111)
val buffer = LineGap.goToIdx (low, buffer)
in
@@ -823,7 +825,7 @@ struct
val initialMsg = SEARCH (buffer, searchString, time) :: initialMsg
val buffer = LineGap.goToIdx (low - 1111, buffer)
val searchList =
val (buffer, searchList) =
SearchList.buildRange (buffer, searchString, low + 1111)
val buffer = LineGap.goToIdx (low, buffer)
@@ -855,7 +857,7 @@ struct
val initialMsg = SEARCH (buffer, searchString, time) :: initialMsg
val buffer = LineGap.goToIdx (low - 1111, buffer)
val searchList =
val (buffer, searchList) =
SearchList.buildRange (buffer, searchString, low + 1111)
val buffer = LineGap.goToIdx (low, buffer)
@@ -884,7 +886,7 @@ struct
val initialMsg = SEARCH (buffer, searchString, time) :: initialMsg
val buffer = LineGap.goToIdx (low - 1111, buffer)
val searchList =
val (buffer, searchList) =
SearchList.buildRange (buffer, searchString, low + 1111)
val buffer = LineGap.goToIdx (origLow, buffer)
@@ -998,7 +1000,7 @@ struct
val initialMsg = SEARCH (buffer, searchString, time) :: initialMsg
val buffer = LineGap.goToIdx (low - 1111, buffer)
val searchList =
val (buffer, searchList) =
SearchList.buildRange (buffer, searchString, low + 1111)
val buffer = LineGap.goToIdx (low, buffer)

View File

@@ -29,7 +29,8 @@ struct
val searchCursorIdx = searchCursorIdx + 1
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
val tempSearchList = buildTempSearchList (searchString, buffer, cursorIdx)
val (buffer, tempSearchList) =
buildTempSearchList (searchString, buffer, cursorIdx)
in
NormalSearchFinish.onSearchChanged
( app
@@ -120,7 +121,7 @@ struct
val {cursorIdx, buffer, ...} = app
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
val tempSearchList =
val (buffer, tempSearchList) =
buildTempSearchList (searchString, buffer, cursorIdx)
in
NormalSearchFinish.onSearchChanged

View File

@@ -242,9 +242,9 @@ struct
SOME nfa =>
Nfa.getMatchesInRange
(#idx buffer, finishIdx, buffer : LineGap.t, nfa)
| NONE => PersistentVector.empty
| NONE => (buffer, PersistentVector.empty)
else
PersistentVector.empty
(buffer, PersistentVector.empty)
fun nextMatch (cursorIdx, searchList, count) = raise Fail "todo: reimplement"

View File

@@ -171,11 +171,12 @@ struct
local
fun loop (pos, buffer, nfa, origNfa, startPos, acc, lastIdx) =
if pos = #textLength buffer then
acc
(buffer, acc)
else if pos > lastIdx then
acc
(buffer, acc)
else
let
val buffer = LineGap.goToIdx (pos, buffer)
val chr = LineGap.sub (pos, buffer)
val (nfa, state) = rebuild (nfa, chr, pos)
in
@@ -202,7 +203,6 @@ struct
loop (pos + 1, buffer, nfa, origNfa, startPos, acc, lastIdx)
end
in
(* Prerequisite: move buffer to 'start' parameter before calling *)
fun getMatchesInRange (startIdx, finishIdx, buffer: LineGap.t, nfa) =
loop (startIdx, buffer, nfa, nfa, 0, PersistentVector.empty, finishIdx)
end