From cac0d02fabc316429e72000371cd09b5134a3f84 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Fri, 15 Nov 2024 05:37:53 +0000 Subject: [PATCH] initial implementation of building search list --- fcore/app-with.sml | 24 +++++++++++ fcore/build-search-list.sml | 81 ++++++++++++++++++++++++++++++++++++ fcore/search-list.sml | 11 +++++ shf | Bin 1246152 -> 1246152 bytes shf.mlb | 1 + 5 files changed, 117 insertions(+) create mode 100644 fcore/build-search-list.sml diff --git a/fcore/app-with.sml b/fcore/app-with.sml index 68163da..1a5c1b1 100644 --- a/fcore/app-with.sml +++ b/fcore/app-with.sml @@ -98,4 +98,28 @@ struct , startLine = startLine } end + + fun searchListAndBuffer (app: app_type, newSearchList, newBuffer) = + let + val + { searchList = _ + , buffer = _ + , mode + , searchString + , cursorIdx + , windowWidth + , windowHeight + , startLine + } = app + in + { searchList = newSearchList + , buffer = newBuffer + , mode = mode + , searchString = searchString + , cursorIdx = cursorIdx + , windowWidth = windowWidth + , windowHeight = windowHeight + , startLine = startLine + } + end end diff --git a/fcore/build-search-list.sml b/fcore/build-search-list.sml new file mode 100644 index 0000000..04d6952 --- /dev/null +++ b/fcore/build-search-list.sml @@ -0,0 +1,81 @@ +structure BuildSearchList = +struct + fun helpNextMatch (idx, hd, tl, absIdx, searchString, matchedChrs) = + if idx = String.size hd then + case tl of + tlhd :: tltl => + helpNextMatch (0, tlhd, tltl, absIdx, searchString, matchedChrs) + | [] => + NONE + else + let + val hdChr = String.sub (hd, idx) + val searchChr = String.sub (searchString, matchedChrs) + in + if hdChr = searchChr then + if matchedChrs + 1 = String.size searchString then + let + val matchedIdx = absIdx - String.size searchString - 1 + in + SOME matchedIdx + end + else + helpNextMatch + (idx + 1, hd, tl, absIdx + 1, searchString, matchedChrs + 1) + else + helpNextMatch (idx + 1, hd, tl, absIdx + 1, searchString, 0) + end + + fun nextMatch (bufferIdx, absIdx, rightStrings, searchString) = + case rightStrings of + hd :: tl => + let + val strIdx = absIdx - bufferIdx + in + if strIdx < String.size hd then + helpNextMatch (strIdx, hd, tl, absIdx, searchString, 0) + else + (case tl of + tlhd :: tltl => + let + val strIdx = strIdx - String.size hd + in + helpNextMatch (strIdx, tlhd, tltl, absIdx, searchString, 0) + end + | [] => NONE) + end + | [] => NONE + + fun helpBuild (app, origIdx, absIdx, buffer, searchString, searchList) = + let + val buffer = LineGap.goToIdx (absIdx, buffer) + val {idx = bufferIdx, rightStrings, ...} = buffer + in + case nextMatch (bufferIdx, absIdx, rightStrings, searchString) of + SOME matchedIdx => + let + val searchList = SearchList.append (matchedIdx, searchList) + in + helpBuild + (app, origIdx, matchedIdx, buffer, searchString, searchList) + end + | NONE => + let + val buffer = LineGap.goToIdx (origIdx, buffer) + val searchList = SearchList.goToNum (origIdx, searchList) + in + AppWith.searchListAndBuffer (app, searchList, buffer) + end + end + + fun build (app, cursorIdx, buffer, searchString) = + if String.size searchString > 0 then + let + val buffer = LineGap.goToStart buffer + in + helpBuild + (app, cursorIdx, 0, buffer, searchString, SearchList.empty) + end + else + app +end diff --git a/fcore/search-list.sml b/fcore/search-list.sml index cf38b57..c2f7fac 100644 --- a/fcore/search-list.sml +++ b/fcore/search-list.sml @@ -2,8 +2,12 @@ signature SEARCH_LIST = sig type t = {left: int vector list, right: int vector list} val empty: t + val insert: int * t -> t + val append: int * t -> t val delete: int * int * t -> t + + val goToNum: int * t -> t val mapFromNum: int * int * t -> t end @@ -148,6 +152,13 @@ struct else insLeft (new, left, right) | [] => insLeft (new, left, right) + fun helpAppend (new, left, right) = + case right of + hd :: tl => helpAppend (new, joinEndOfLeft (hd, left), tl) + | [] => {left = joinEndOfLeft (Vector.fromList [new], left), right = right} + + fun append (new, {left, right}: t) = helpAppend (new, left, right) + fun helpGoToNumLeft (num, left, right) = case left of hd :: tl => diff --git a/shf b/shf index 6d62b206dc71e15ca2b5c3fc7e65de05ddc0ce3a..960d02f5dab58e070e9a68030e26f207ec9db66e 100755 GIT binary patch delta 19979 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 qStF+9w9gqQOnBm{$7YUn^q<)~r=3*_% delta 20114 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 p%LC55c6noj@sB(