add function to build search list from specific range
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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 ()
|
||||||
|
|||||||
Reference in New Issue
Block a user