add additional constant/unchanging parameters to env record, in text-builder.sml

This commit is contained in:
2025-09-01 01:07:26 +01:00
parent 95c6af3ec7
commit 634bc6f577

View File

@@ -45,6 +45,8 @@ struct
, fw: Real32.real , fw: Real32.real
, fh: Real32.real , fh: Real32.real
, msgs: MailboxType.t list , msgs: MailboxType.t list
, searchList: int vector
, searchLen: int
} }
fun accToDrawMsg (textAcc, cursorAcc, bgAcc, env: env_data) = fun accToDrawMsg (textAcc, cursorAcc, bgAcc, env: env_data) =
@@ -312,18 +314,18 @@ struct
) )
| [] => accToDrawMsg (acc, cursorAcc, bgAcc, env) | [] => accToDrawMsg (acc, cursorAcc, bgAcc, env)
fun isInSearchRange (absIdx, searchPos, searchHd, searchLen) = fun isInSearchRange (absIdx, searchPos, searchList, searchLen) =
let val searchIdx = Vector.sub (searchHd, searchPos) let val searchIdx = Vector.sub (searchList, searchPos)
in absIdx >= searchIdx andalso absIdx < searchIdx + searchLen in absIdx >= searchIdx andalso absIdx < searchIdx + searchLen
end end
fun isAfterSearchRange (absIdx, searchPos, searchHd, searchLen) = fun isAfterSearchRange (absIdx, searchPos, searchList, searchLen) =
let val searchIdx = Vector.sub (searchHd, searchPos) let val searchIdx = Vector.sub (searchList, searchPos)
in absIdx >= searchIdx + searchLen in absIdx >= searchIdx + searchLen
end end
fun advanceSearchPos (absIdx, searchPos, searchHd, searchLen) = fun advanceSearchPos (absIdx, searchPos, searchList, searchLen) =
if isAfterSearchRange (absIdx, searchPos, searchHd, searchLen) then if isAfterSearchRange (absIdx, searchPos, searchList, searchLen) then
searchPos + 1 searchPos + 1
else else
searchPos searchPos
@@ -340,11 +342,9 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env: env_data , env: env_data
, searchHd
, searchPos , searchPos
, searchLen
) = ) =
if searchPos = Vector.length searchHd then if searchPos = Vector.length (#searchList env) then
(* exhausted search list so call normal build function *) (* exhausted search list so call normal build function *)
buildTextString buildTextString
( pos ( pos
@@ -362,9 +362,9 @@ struct
else else
let let
val searchPos = val searchPos =
advanceSearchPos (absIdx, searchPos, searchHd, searchLen) advanceSearchPos (absIdx, searchPos, #searchList env, #searchLen env)
in in
if searchPos = Vector.length searchHd then if searchPos = Vector.length (#searchList env) then
(* exhausted search list so call normal build function *) (* exhausted search list so call normal build function *)
buildTextString buildTextString
( pos ( pos
@@ -387,7 +387,10 @@ struct
* else, just skip as usual *) * else, just skip as usual *)
if absIdx <> cursorPos then if absIdx <> cursorPos then
(* not in cursur *) (* not in cursur *)
if isInSearchRange (absIdx, searchPos, searchHd, searchLen) then if
isInSearchRange
(absIdx, searchPos, #searchList env, #searchLen env)
then
(* draw *) (* draw *)
let let
(* todo: temp colours *) (* todo: temp colours *)
@@ -411,9 +414,7 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env , env
, searchHd
, searchPos , searchPos
, searchLen
) )
end end
else else
@@ -429,9 +430,7 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env , env
, searchHd
, searchPos , searchPos
, searchLen
) )
else else
(* in cursor *) (* in cursor *)
@@ -452,9 +451,7 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env , env
, searchHd
, searchPos , searchPos
, searchLen
) )
end end
| #"\n" => | #"\n" =>
@@ -473,9 +470,7 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env , env
, searchHd
, searchPos , searchPos
, searchLen
) )
else else
(* in cursor position, so build cursorAcc *) (* in cursor position, so build cursorAcc *)
@@ -496,9 +491,7 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env , env
, searchHd
, searchPos , searchPos
, searchLen
) )
end end
else else
@@ -510,7 +503,10 @@ struct
if absIdx <> cursorPos then if absIdx <> cursorPos then
(* not equal to cursor *) (* not equal to cursor *)
if posX + xSpace < #w env then if posX + xSpace < #w env then
if isInSearchRange (absIdx, searchPos, searchHd, searchLen) then if
isInSearchRange
(absIdx, searchPos, #searchList env, #searchLen env)
then
let let
val {fw, fh, ...} = env val {fw, fh, ...} = env
@@ -543,9 +539,7 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env , env
, searchHd
, searchPos , searchPos
, searchLen
) )
end end
else else
@@ -567,9 +561,7 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env , env
, searchHd
, searchPos , searchPos
, searchLen
) )
end end
else if posY + ySpace < #h env then else if posY + ySpace < #h env then
@@ -592,9 +584,7 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env , env
, searchHd
, searchPos , searchPos
, searchLen
) )
end end
else else
@@ -625,9 +615,7 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env , env
, searchHd
, searchPos , searchPos
, searchLen
) )
end end
else if posY + ySpace < #h env then else if posY + ySpace < #h env then
@@ -650,9 +638,7 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env , env
, searchHd
, searchPos , searchPos
, searchLen
) )
end end
else else
@@ -675,9 +661,7 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env , env
, searchHd
, searchPos , searchPos
, searchLen
) )
| [] => accToDrawMsg (acc, cursorAcc, bgAcc, env) | [] => accToDrawMsg (acc, cursorAcc, bgAcc, env)
end end
@@ -715,7 +699,14 @@ struct
end end
fun initEnv fun initEnv
(windowWidth, windowHeight, floatWindowWidth, floatWindowHeight, msgs) = ( windowWidth
, windowHeight
, floatWindowWidth
, floatWindowHeight
, msgs
, searchList
, searchLen
) =
if TC.textLineWidth > windowWidth then if TC.textLineWidth > windowWidth then
{ w = windowWidth { w = windowWidth
, h = windowHeight , h = windowHeight
@@ -730,6 +721,8 @@ struct
, hg = 0.219 , hg = 0.219
, hb = 0.25 , hb = 0.25
, msgs = msgs , msgs = msgs
, searchList = searchList
, searchLen = searchLen
} }
else else
let let
@@ -749,6 +742,8 @@ struct
, hg = 0.219 , hg = 0.219
, hb = 0.25 , hb = 0.25
, msgs = msgs , msgs = msgs
, searchList = searchList
, searchLen = searchLen
} }
end end
@@ -787,6 +782,8 @@ struct
, floatWindowWidth , floatWindowWidth
, floatWindowHeight , floatWindowHeight
, msgs , msgs
, searchList
, String.size searchString
) )
val {startX, startY, ...} = env val {startX, startY, ...} = env
@@ -805,9 +802,7 @@ struct
, cursorAcc , cursorAcc
, bgAcc , bgAcc
, env , env
, searchList
, searchPos , searchPos
, String.size searchString
) )
end end
| (_, _) => | (_, _) =>