add function to build search list from specific range

This commit is contained in:
2024-11-16 12:27:14 +00:00
parent f2b4f256ec
commit 09d9945201
3 changed files with 45 additions and 5 deletions

View File

@@ -46,7 +46,7 @@ struct
end end
| [] => NONE | [] => NONE
fun helpBuild (app, origIdx, absIdx, buffer, searchString, searchList) = fun helpFromStart (app, origIdx, absIdx, buffer, searchString, searchList) =
let let
val buffer = LineGap.goToIdx (absIdx, buffer) val buffer = LineGap.goToIdx (absIdx, buffer)
val {idx = bufferIdx, rightStrings, ...} = buffer val {idx = bufferIdx, rightStrings, ...} = buffer
@@ -56,7 +56,7 @@ struct
let let
val searchList = SearchList.append (matchedIdx, searchList) val searchList = SearchList.append (matchedIdx, searchList)
in in
helpBuild helpFromStart
(app, origIdx, matchedIdx + 1, buffer, searchString, searchList) (app, origIdx, matchedIdx + 1, buffer, searchString, searchList)
end end
| NONE => | NONE =>
@@ -68,14 +68,54 @@ struct
end end
end end
fun build (app, cursorIdx, buffer, searchString) = fun fromStart (app, cursorIdx, buffer, searchString) =
if String.size searchString > 0 then if String.size searchString > 0 then
let let
val buffer = LineGap.goToStart buffer val buffer = LineGap.goToStart buffer
in in
helpBuild helpFromStart
(app, cursorIdx, 0, buffer, searchString, SearchList.empty) (app, cursorIdx, 0, buffer, searchString, SearchList.empty)
end end
else else
app app
(* searches for matchedIdx within a range from the buffer instead of from start *)
fun helpFromRange
(app, origIdx, curIdx, finishIdx, buffer, searchString, searchList) =
let
val buffer = LineGap.goToIdx (curIdx, buffer) val {idx = bufferIdx, rightStrings, ...} = buffer in
case nextMatch (bufferIdx, curIdx, rightStrings, searchString) of
SOME matchedIdx =>
if matchedIdx > finishIdx then
let
val buffer = LineGap.goToIdx (origIdx, buffer)
val searchList = SearchList.goToNum (origIdx, searchList)
in
AppWith.searchList (app, searchList, buffer, searchString)
end
else
let
val searchList = SearchList.insert (matchedIdx, searchList)
in
helpFromRange
( app, origIdx, matchedIdx + 1, finishIdx
, buffer, searchString, searchList
)
end
| NONE =>
let
val buffer = LineGap.goToIdx (origIdx, buffer)
val searchList = SearchList.goToNum (origIdx, searchList)
in
AppWith.searchList (app, searchList, buffer, searchString)
end
end
fun fromRange (app, startIdx, finishIdx, buffer, searchString, searchList) =
let
val buffer = LineGap.goToIdx (startIdx, buffer)
in
helpFromRange
(app, startIdx, startIdx, finishIdx, buffer, searchString, searchList)
end
end end

View File

@@ -64,7 +64,7 @@ struct
val app = AppType.init (lineGap, 1920, 1080) val app = AppType.init (lineGap, 1920, 1080)
(* todo: remove temp line below which tests search list *) (* todo: remove temp line below which tests search list *)
val app = BuildSearchList.build (app, 0, lineGap, "val ") val app = BuildSearchList.fromStart (app, 0, lineGap, "val ")
(* create mailboxes for CML communication *) (* create mailboxes for CML communication *)
val inputMailbox = Mailbox.mailbox () val inputMailbox = Mailbox.mailbox ()

BIN
shf

Binary file not shown.