clean line_gap.sml a little - done with this now
This commit is contained in:
190
src/line_gap.sml
190
src/line_gap.sml
@@ -53,97 +53,6 @@ struct
|
|||||||
, rightLines = []
|
, rightLines = []
|
||||||
}
|
}
|
||||||
|
|
||||||
(* TEST CODE *)
|
|
||||||
local
|
|
||||||
fun lineBreaksToString vec =
|
|
||||||
(Vector.foldr (fn (el, acc) => Int.toString el ^ ", " ^ acc) "" vec)
|
|
||||||
^ "\n"
|
|
||||||
|
|
||||||
fun checkLineBreaks (v1, v2) =
|
|
||||||
if v1 = v2 then
|
|
||||||
()
|
|
||||||
else
|
|
||||||
let
|
|
||||||
val _ = print ("broken: " ^ (lineBreaksToString v1))
|
|
||||||
val _ = print ("fixed: " ^ (lineBreaksToString v2))
|
|
||||||
in
|
|
||||||
()
|
|
||||||
end
|
|
||||||
|
|
||||||
fun goToStart (leftStrings, leftLines, accStrings, accLines) =
|
|
||||||
case (leftStrings, leftLines) of
|
|
||||||
(lsHd :: lsTl, llHd :: llTl) =>
|
|
||||||
goToStart (lsTl, llTl, lsHd :: accStrings, llHd :: accLines)
|
|
||||||
| (_, _) => (accStrings, accLines)
|
|
||||||
|
|
||||||
fun verifyLineList (strings, lines) =
|
|
||||||
case (strings, lines) of
|
|
||||||
(strHd :: strTl, lHd :: lTl) =>
|
|
||||||
let
|
|
||||||
val checkLines = countLineBreaks strHd
|
|
||||||
in
|
|
||||||
if checkLines = lHd then
|
|
||||||
verifyLineList (strTl, lTl)
|
|
||||||
else
|
|
||||||
let
|
|
||||||
val _ = print "line metadata is incorrect\n"
|
|
||||||
val _ = checkLineBreaks (lHd, checkLines)
|
|
||||||
in
|
|
||||||
raise Empty
|
|
||||||
end
|
|
||||||
end
|
|
||||||
| (_, _) => print "verified lines; no problems\n"
|
|
||||||
in
|
|
||||||
fun verifyLines (buffer: t) =
|
|
||||||
let
|
|
||||||
val (strings, lines) =
|
|
||||||
goToStart
|
|
||||||
( #leftStrings buffer
|
|
||||||
, #leftLines buffer
|
|
||||||
, #rightStrings buffer
|
|
||||||
, #rightLines buffer
|
|
||||||
)
|
|
||||||
in
|
|
||||||
verifyLineList (strings, lines)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local
|
|
||||||
fun calcIndexList (accIdx, lst) =
|
|
||||||
case lst of
|
|
||||||
[] => accIdx
|
|
||||||
| hd :: tl => calcIndexList (String.size hd + accIdx, tl)
|
|
||||||
|
|
||||||
fun calcIndexStart lst = calcIndexList (0, lst)
|
|
||||||
in
|
|
||||||
fun verifyIndex (buffer: t) =
|
|
||||||
let
|
|
||||||
val bufferIdx = #idx buffer
|
|
||||||
val correctIdx = calcIndexStart (#leftStrings buffer)
|
|
||||||
|
|
||||||
val _ =
|
|
||||||
if bufferIdx = correctIdx then
|
|
||||||
print "idx is correct\n"
|
|
||||||
else
|
|
||||||
let
|
|
||||||
val msg = String.concat
|
|
||||||
[ "idx is incorrect;"
|
|
||||||
, "bufferIdx: "
|
|
||||||
, Int.toString bufferIdx
|
|
||||||
, "; correctIdx: "
|
|
||||||
, Int.toString correctIdx
|
|
||||||
, "\n"
|
|
||||||
]
|
|
||||||
val _ = print msg
|
|
||||||
val _ = raise Size
|
|
||||||
in
|
|
||||||
print msg
|
|
||||||
end
|
|
||||||
in
|
|
||||||
()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local
|
local
|
||||||
fun helpToString (acc, input) =
|
fun helpToString (acc, input) =
|
||||||
case input of
|
case input of
|
||||||
@@ -1234,8 +1143,6 @@ struct
|
|||||||
in
|
in
|
||||||
VectorSlice.vector slice
|
VectorSlice.vector slice
|
||||||
end
|
end
|
||||||
|
|
||||||
val nextLine = curLine + Vector.length newLines
|
|
||||||
in
|
in
|
||||||
(* Try joining new string with left head if possible. *)
|
(* Try joining new string with left head if possible. *)
|
||||||
(case (leftStrings, leftLines) of
|
(case (leftStrings, leftLines) of
|
||||||
@@ -1270,7 +1177,7 @@ struct
|
|||||||
* once buffer is done deleting. *)
|
* once buffer is done deleting. *)
|
||||||
deleteRightFromHere
|
deleteRightFromHere
|
||||||
( curIdx + String.size newString
|
( curIdx + String.size newString
|
||||||
, nextLine
|
, curLine + Vector.length newLines
|
||||||
, nextIdx
|
, nextIdx
|
||||||
, finish
|
, finish
|
||||||
, newLeftStringsHd :: leftStringsTl
|
, newLeftStringsHd :: leftStringsTl
|
||||||
@@ -1292,11 +1199,10 @@ struct
|
|||||||
, rightStringsTl
|
, rightStringsTl
|
||||||
, rightLinesTl
|
, rightLinesTl
|
||||||
)
|
)
|
||||||
|
|
||||||
| (_, _) =>
|
| (_, _) =>
|
||||||
deleteRightFromHere
|
deleteRightFromHere
|
||||||
( nextIdx
|
( nextIdx
|
||||||
, nextLine
|
, curLine + Vector.length newLines
|
||||||
, nextIdx
|
, nextIdx
|
||||||
, finish
|
, finish
|
||||||
, newString :: leftStrings
|
, newString :: leftStrings
|
||||||
@@ -1681,7 +1587,6 @@ struct
|
|||||||
else
|
else
|
||||||
Vector.fromList []
|
Vector.fromList []
|
||||||
end
|
end
|
||||||
|
|
||||||
in
|
in
|
||||||
{ idx = prevIdx + sub1Length
|
{ idx = prevIdx + sub1Length
|
||||||
, line =
|
, line =
|
||||||
@@ -1875,4 +1780,95 @@ struct
|
|||||||
else
|
else
|
||||||
buffer
|
buffer
|
||||||
end
|
end
|
||||||
|
|
||||||
|
(* TEST CODE *)
|
||||||
|
local
|
||||||
|
fun lineBreaksToString vec =
|
||||||
|
(Vector.foldr (fn (el, acc) => Int.toString el ^ ", " ^ acc) "" vec)
|
||||||
|
^ "\n"
|
||||||
|
|
||||||
|
fun checkLineBreaks (v1, v2) =
|
||||||
|
if v1 = v2 then
|
||||||
|
()
|
||||||
|
else
|
||||||
|
let
|
||||||
|
val _ = print ("broken: " ^ (lineBreaksToString v1))
|
||||||
|
val _ = print ("fixed: " ^ (lineBreaksToString v2))
|
||||||
|
in
|
||||||
|
()
|
||||||
|
end
|
||||||
|
|
||||||
|
fun goToStart (leftStrings, leftLines, accStrings, accLines) =
|
||||||
|
case (leftStrings, leftLines) of
|
||||||
|
(lsHd :: lsTl, llHd :: llTl) =>
|
||||||
|
goToStart (lsTl, llTl, lsHd :: accStrings, llHd :: accLines)
|
||||||
|
| (_, _) => (accStrings, accLines)
|
||||||
|
|
||||||
|
fun verifyLineList (strings, lines) =
|
||||||
|
case (strings, lines) of
|
||||||
|
(strHd :: strTl, lHd :: lTl) =>
|
||||||
|
let
|
||||||
|
val checkLines = countLineBreaks strHd
|
||||||
|
in
|
||||||
|
if checkLines = lHd then
|
||||||
|
verifyLineList (strTl, lTl)
|
||||||
|
else
|
||||||
|
let
|
||||||
|
val _ = print "line metadata is incorrect\n"
|
||||||
|
val _ = checkLineBreaks (lHd, checkLines)
|
||||||
|
in
|
||||||
|
raise Empty
|
||||||
|
end
|
||||||
|
end
|
||||||
|
| (_, _) => print "verified lines; no problems\n"
|
||||||
|
in
|
||||||
|
fun verifyLines (buffer: t) =
|
||||||
|
let
|
||||||
|
val (strings, lines) =
|
||||||
|
goToStart
|
||||||
|
( #leftStrings buffer
|
||||||
|
, #leftLines buffer
|
||||||
|
, #rightStrings buffer
|
||||||
|
, #rightLines buffer
|
||||||
|
)
|
||||||
|
in
|
||||||
|
verifyLineList (strings, lines)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local
|
||||||
|
fun calcIndexList (accIdx, lst) =
|
||||||
|
case lst of
|
||||||
|
[] => accIdx
|
||||||
|
| hd :: tl => calcIndexList (String.size hd + accIdx, tl)
|
||||||
|
|
||||||
|
fun calcIndexStart lst = calcIndexList (0, lst)
|
||||||
|
in
|
||||||
|
fun verifyIndex (buffer: t) =
|
||||||
|
let
|
||||||
|
val bufferIdx = #idx buffer
|
||||||
|
val correctIdx = calcIndexStart (#leftStrings buffer)
|
||||||
|
|
||||||
|
val _ =
|
||||||
|
if bufferIdx = correctIdx then
|
||||||
|
print "idx is correct\n"
|
||||||
|
else
|
||||||
|
let
|
||||||
|
val msg = String.concat
|
||||||
|
[ "idx is incorrect;"
|
||||||
|
, "bufferIdx: "
|
||||||
|
, Int.toString bufferIdx
|
||||||
|
, "; correctIdx: "
|
||||||
|
, Int.toString correctIdx
|
||||||
|
, "\n"
|
||||||
|
]
|
||||||
|
val _ = print msg
|
||||||
|
val _ = raise Size
|
||||||
|
in
|
||||||
|
print msg
|
||||||
|
end
|
||||||
|
in
|
||||||
|
()
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user