pass DFA to 'SearchList.buildRange' function, so that we don't need to parse search string into DFA each time
This commit is contained in:
@@ -18,7 +18,7 @@ struct
|
|||||||
|
|
||||||
val buffer = LineGap.goToIdx (low - 1111, buffer)
|
val buffer = LineGap.goToIdx (low - 1111, buffer)
|
||||||
val (buffer, searchList) =
|
val (buffer, searchList) =
|
||||||
SearchList.buildRange (buffer, searchString, low + 1111)
|
SearchList.buildRange (buffer, searchString, low + 1111, #dfa app)
|
||||||
|
|
||||||
val buffer = LineGap.goToIdx (low, buffer)
|
val buffer = LineGap.goToIdx (low, buffer)
|
||||||
in
|
in
|
||||||
@@ -241,7 +241,8 @@ struct
|
|||||||
|
|
||||||
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
|
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
|
||||||
val (buffer, searchList) =
|
val (buffer, searchList) =
|
||||||
SearchList.buildRange (buffer, searchString, cursorIdx + 1111)
|
SearchList.buildRange
|
||||||
|
(buffer, searchString, cursorIdx + 1111, #dfa app)
|
||||||
|
|
||||||
(* If we have deleted from the buffer so that cursorIdx
|
(* If we have deleted from the buffer so that cursorIdx
|
||||||
* is no longer a valid idx,
|
* is no longer a valid idx,
|
||||||
@@ -705,7 +706,7 @@ struct
|
|||||||
|
|
||||||
fun deleteToStart (app: app_type, time) : AppType.app_type =
|
fun deleteToStart (app: app_type, time) : AppType.app_type =
|
||||||
let
|
let
|
||||||
val {cursorIdx, buffer, windowWidth, windowHeight, searchString, ...} =
|
val {cursorIdx, buffer, windowWidth, windowHeight, searchString, dfa, ...} =
|
||||||
app
|
app
|
||||||
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
||||||
val cursorIdx = Cursor.viDlrForDelete (buffer, cursorIdx, 1)
|
val cursorIdx = Cursor.viDlrForDelete (buffer, cursorIdx, 1)
|
||||||
@@ -719,7 +720,7 @@ struct
|
|||||||
|
|
||||||
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
|
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
|
||||||
val (buffer, searchList) =
|
val (buffer, searchList) =
|
||||||
SearchList.buildRange (buffer, searchString, cursorIdx + 1111)
|
SearchList.buildRange (buffer, searchString, cursorIdx + 1111, dfa)
|
||||||
|
|
||||||
val cursorIdx = 0
|
val cursorIdx = 0
|
||||||
val startLine = 0
|
val startLine = 0
|
||||||
@@ -756,7 +757,7 @@ struct
|
|||||||
|
|
||||||
fun helpDeleteToMatch (app: app_type, low, high, time) =
|
fun helpDeleteToMatch (app: app_type, low, high, time) =
|
||||||
let
|
let
|
||||||
val {buffer, searchString, ...} = app
|
val {buffer, searchString, dfa, ...} = app
|
||||||
val buffer = LineGap.goToIdx (high, buffer)
|
val buffer = LineGap.goToIdx (high, buffer)
|
||||||
val length = high - low
|
val length = high - low
|
||||||
val initialMsg = Fn.initMsgs (low, length, buffer)
|
val initialMsg = Fn.initMsgs (low, length, buffer)
|
||||||
@@ -767,7 +768,7 @@ struct
|
|||||||
|
|
||||||
val buffer = LineGap.goToIdx (low - 1111, buffer)
|
val buffer = LineGap.goToIdx (low - 1111, buffer)
|
||||||
val (buffer, searchList) =
|
val (buffer, searchList) =
|
||||||
SearchList.buildRange (buffer, searchString, low + 1111)
|
SearchList.buildRange (buffer, searchString, low + 1111, dfa)
|
||||||
|
|
||||||
val buffer = LineGap.goToIdx (low, buffer)
|
val buffer = LineGap.goToIdx (low, buffer)
|
||||||
in
|
in
|
||||||
@@ -804,7 +805,7 @@ struct
|
|||||||
|
|
||||||
fun deleteInsideWord (app: app_type, time) =
|
fun deleteInsideWord (app: app_type, time) =
|
||||||
let
|
let
|
||||||
val {buffer, cursorIdx, searchString, ...} = app
|
val {buffer, cursorIdx, searchString, dfa, ...} = app
|
||||||
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
||||||
|
|
||||||
val low = Cursor.prevWordStrict (buffer, cursorIdx, 1)
|
val low = Cursor.prevWordStrict (buffer, cursorIdx, 1)
|
||||||
@@ -826,7 +827,7 @@ struct
|
|||||||
|
|
||||||
val buffer = LineGap.goToIdx (low - 1111, buffer)
|
val buffer = LineGap.goToIdx (low - 1111, buffer)
|
||||||
val (buffer, searchList) =
|
val (buffer, searchList) =
|
||||||
SearchList.buildRange (buffer, searchString, low + 1111)
|
SearchList.buildRange (buffer, searchString, low + 1111, dfa)
|
||||||
|
|
||||||
val buffer = LineGap.goToIdx (low, buffer)
|
val buffer = LineGap.goToIdx (low, buffer)
|
||||||
in
|
in
|
||||||
@@ -839,7 +840,7 @@ struct
|
|||||||
|
|
||||||
fun deleteInsideWORD (app: app_type, time) =
|
fun deleteInsideWORD (app: app_type, time) =
|
||||||
let
|
let
|
||||||
val {buffer, cursorIdx, searchString, ...} = app
|
val {buffer, cursorIdx, searchString, dfa, ...} = app
|
||||||
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
||||||
|
|
||||||
val low = Cursor.prevWORDStrict (buffer, cursorIdx, 1)
|
val low = Cursor.prevWORDStrict (buffer, cursorIdx, 1)
|
||||||
@@ -858,7 +859,7 @@ struct
|
|||||||
|
|
||||||
val buffer = LineGap.goToIdx (low - 1111, buffer)
|
val buffer = LineGap.goToIdx (low - 1111, buffer)
|
||||||
val (buffer, searchList) =
|
val (buffer, searchList) =
|
||||||
SearchList.buildRange (buffer, searchString, low + 1111)
|
SearchList.buildRange (buffer, searchString, low + 1111, dfa)
|
||||||
|
|
||||||
val buffer = LineGap.goToIdx (low, buffer)
|
val buffer = LineGap.goToIdx (low, buffer)
|
||||||
in
|
in
|
||||||
@@ -874,7 +875,7 @@ struct
|
|||||||
NormalFinish.clearMode app
|
NormalFinish.clearMode app
|
||||||
else
|
else
|
||||||
let
|
let
|
||||||
val {cursorIdx, buffer, searchString, ...} = app
|
val {cursorIdx, buffer, searchString, dfa, ...} = app
|
||||||
val low = origLow + 1
|
val low = origLow + 1
|
||||||
val length = high - low
|
val length = high - low
|
||||||
|
|
||||||
@@ -887,7 +888,7 @@ struct
|
|||||||
|
|
||||||
val buffer = LineGap.goToIdx (low - 1111, buffer)
|
val buffer = LineGap.goToIdx (low - 1111, buffer)
|
||||||
val (buffer, searchList) =
|
val (buffer, searchList) =
|
||||||
SearchList.buildRange (buffer, searchString, low + 1111)
|
SearchList.buildRange (buffer, searchString, low + 1111, dfa)
|
||||||
|
|
||||||
val buffer = LineGap.goToIdx (origLow, buffer)
|
val buffer = LineGap.goToIdx (origLow, buffer)
|
||||||
in
|
in
|
||||||
@@ -970,7 +971,7 @@ struct
|
|||||||
|
|
||||||
fun deletePair (app: app_type, time) =
|
fun deletePair (app: app_type, time) =
|
||||||
let
|
let
|
||||||
val {cursorIdx, buffer, ...} = app
|
val {cursorIdx, buffer, dfa, ...} = app
|
||||||
val otherIdx = Cursor.matchPair (buffer, cursorIdx)
|
val otherIdx = Cursor.matchPair (buffer, cursorIdx)
|
||||||
in
|
in
|
||||||
if otherIdx = cursorIdx then
|
if otherIdx = cursorIdx then
|
||||||
@@ -1001,7 +1002,7 @@ struct
|
|||||||
|
|
||||||
val buffer = LineGap.goToIdx (low - 1111, buffer)
|
val buffer = LineGap.goToIdx (low - 1111, buffer)
|
||||||
val (buffer, searchList) =
|
val (buffer, searchList) =
|
||||||
SearchList.buildRange (buffer, searchString, low + 1111)
|
SearchList.buildRange (buffer, searchString, low + 1111, dfa)
|
||||||
|
|
||||||
val buffer = LineGap.goToIdx (low, buffer)
|
val buffer = LineGap.goToIdx (low, buffer)
|
||||||
in
|
in
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ struct
|
|||||||
, floatWindowHeight
|
, floatWindowHeight
|
||||||
, searchCursorIdx
|
, searchCursorIdx
|
||||||
, searchScrollColumn
|
, searchScrollColumn
|
||||||
|
, caseSensitive
|
||||||
)
|
)
|
||||||
|
|
||||||
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
||||||
@@ -121,6 +122,7 @@ struct
|
|||||||
, floatWindowHeight
|
, floatWindowHeight
|
||||||
, searchCursorIdx
|
, searchCursorIdx
|
||||||
, searchScrollColumn
|
, searchScrollColumn
|
||||||
|
, caseSensitive
|
||||||
)
|
)
|
||||||
|
|
||||||
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
val buffer = LineGap.goToIdx (cursorIdx, buffer)
|
||||||
|
|||||||
@@ -4,8 +4,14 @@ struct
|
|||||||
open InputMsg
|
open InputMsg
|
||||||
open MailboxType
|
open MailboxType
|
||||||
|
|
||||||
fun buildTempSearchList (searchString, buffer, cursorIdx) =
|
fun buildTempSearchList (searchString, buffer, cursorIdx, caseSensitive) =
|
||||||
SearchList.buildRange (buffer, searchString, cursorIdx + 1111)
|
let
|
||||||
|
val dfa =
|
||||||
|
if caseSensitive then CaseSensitiveDfa.fromString searchString
|
||||||
|
else CaseInsensitiveDfa.fromString searchString
|
||||||
|
in
|
||||||
|
SearchList.buildRange (buffer, searchString, cursorIdx + 1111, dfa)
|
||||||
|
end
|
||||||
|
|
||||||
fun addChr
|
fun addChr
|
||||||
( app: app_type
|
( app: app_type
|
||||||
@@ -34,7 +40,7 @@ struct
|
|||||||
|
|
||||||
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
|
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
|
||||||
val (buffer, tempSearchList) =
|
val (buffer, tempSearchList) =
|
||||||
buildTempSearchList (searchString, buffer, cursorIdx)
|
buildTempSearchList (searchString, buffer, cursorIdx, caseSensitive)
|
||||||
in
|
in
|
||||||
NormalSearchFinish.onSearchChanged
|
NormalSearchFinish.onSearchChanged
|
||||||
( app
|
( app
|
||||||
@@ -58,7 +64,8 @@ struct
|
|||||||
end
|
end
|
||||||
|
|
||||||
(* save search string and tempSearchList and return to normal mode *)
|
(* save search string and tempSearchList and return to normal mode *)
|
||||||
fun saveSearch (app: app_type, searchString, tempSearchList, time) =
|
fun saveSearch
|
||||||
|
(app: app_type, searchString, tempSearchList, caseSensitive, time) =
|
||||||
let
|
let
|
||||||
val
|
val
|
||||||
{ buffer
|
{ buffer
|
||||||
@@ -94,7 +101,9 @@ struct
|
|||||||
|
|
||||||
val mode = NORMAL_MODE ""
|
val mode = NORMAL_MODE ""
|
||||||
|
|
||||||
val dfa = raise Fail "todo"
|
val dfa =
|
||||||
|
if caseSensitive then CaseSensitiveDfa.fromString searchString
|
||||||
|
else CaseInsensitiveDfa.fromString searchString
|
||||||
in
|
in
|
||||||
NormalSearchModeWith.returnToNormalMode
|
NormalSearchModeWith.returnToNormalMode
|
||||||
(app, buffer, searchString, tempSearchList, startLine, mode, dfa, msgs)
|
(app, buffer, searchString, tempSearchList, startLine, mode, dfa, msgs)
|
||||||
@@ -129,7 +138,7 @@ struct
|
|||||||
val {cursorIdx, buffer, ...} = app
|
val {cursorIdx, buffer, ...} = app
|
||||||
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
|
val buffer = LineGap.goToIdx (cursorIdx - 1111, buffer)
|
||||||
val (buffer, tempSearchList) =
|
val (buffer, tempSearchList) =
|
||||||
buildTempSearchList (searchString, buffer, cursorIdx)
|
buildTempSearchList (searchString, buffer, cursorIdx, caseSensitive)
|
||||||
in
|
in
|
||||||
NormalSearchFinish.onSearchChanged
|
NormalSearchFinish.onSearchChanged
|
||||||
( app
|
( app
|
||||||
@@ -224,7 +233,8 @@ struct
|
|||||||
, caseSensitive
|
, caseSensitive
|
||||||
)
|
)
|
||||||
| KEY_ESC => exitToNormalMode app
|
| KEY_ESC => exitToNormalMode app
|
||||||
| KEY_ENTER => saveSearch (app, searchString, tempSearchList, time)
|
| KEY_ENTER =>
|
||||||
|
saveSearch (app, searchString, tempSearchList, caseSensitive, time)
|
||||||
| ARROW_LEFT =>
|
| ARROW_LEFT =>
|
||||||
moveLeft
|
moveLeft
|
||||||
( app
|
( app
|
||||||
|
|||||||
@@ -159,25 +159,18 @@ struct
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
fun buildRange (buffer, searchString, finishIdx) =
|
fun buildRange (buffer, searchString, finishIdx, dfa) =
|
||||||
if String.size searchString > 0 then
|
if String.size searchString > 0 andalso Vector.length dfa > 0 then
|
||||||
let
|
rangeLoop
|
||||||
val dfa = DfaGen.fromString searchString
|
( dfa
|
||||||
in
|
, #idx buffer
|
||||||
if Vector.length dfa = 0 then
|
, buffer
|
||||||
(buffer, PersistentVector.empty)
|
, finishIdx
|
||||||
else
|
, PersistentVector.empty
|
||||||
rangeLoop
|
, 0
|
||||||
( dfa
|
, #idx buffer
|
||||||
, #idx buffer
|
, ~1
|
||||||
, buffer
|
)
|
||||||
, finishIdx
|
|
||||||
, PersistentVector.empty
|
|
||||||
, 0
|
|
||||||
, #idx buffer
|
|
||||||
, ~1
|
|
||||||
)
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
(buffer, PersistentVector.empty)
|
(buffer, PersistentVector.empty)
|
||||||
|
|
||||||
|
|||||||
@@ -59,11 +59,12 @@ struct
|
|||||||
, floatWindowHeight
|
, floatWindowHeight
|
||||||
, searchCursorIdx
|
, searchCursorIdx
|
||||||
, searchScrollColumn
|
, searchScrollColumn
|
||||||
|
, caseSensitive
|
||||||
) =
|
) =
|
||||||
let
|
let
|
||||||
val r: Real32.real = 0.67
|
val r: Real32.real = 0.1
|
||||||
val g: Real32.real = 0.51
|
val g: Real32.real = 0.1
|
||||||
val b: Real32.real = 0.83
|
val b: Real32.real = 0.1
|
||||||
val z: Real32.real = 0.1
|
val z: Real32.real = 0.1
|
||||||
|
|
||||||
val width = endX - startX
|
val width = endX - startX
|
||||||
@@ -101,17 +102,31 @@ struct
|
|||||||
val xpos = Int.min (endX, xpos)
|
val xpos = Int.min (endX, xpos)
|
||||||
val x = Real32.fromInt xpos
|
val x = Real32.fromInt xpos
|
||||||
in
|
in
|
||||||
PipeCursor.lerp
|
if caseSensitive then
|
||||||
( x
|
CozetteAscii.make
|
||||||
, fPosY
|
( #"?"
|
||||||
, 0.01
|
, x
|
||||||
, TextConstants.scale
|
, fPosY
|
||||||
, floatWindowWidth
|
, 0.01
|
||||||
, floatWindowHeight
|
, TC.scale
|
||||||
, r
|
, floatWindowWidth
|
||||||
, g
|
, floatWindowWidth
|
||||||
, b
|
, r
|
||||||
)
|
, g
|
||||||
|
, b
|
||||||
|
)
|
||||||
|
else
|
||||||
|
PipeCursor.lerp
|
||||||
|
( x
|
||||||
|
, fPosY
|
||||||
|
, 0.01
|
||||||
|
, TC.scale
|
||||||
|
, floatWindowWidth
|
||||||
|
, floatWindowHeight
|
||||||
|
, r
|
||||||
|
, g
|
||||||
|
, b
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
val posX = startX + TC.xSpace
|
val posX = startX + TC.xSpace
|
||||||
|
|||||||
Reference in New Issue
Block a user