remove debugging print statements from line_gap.sml
This commit is contained in:
210
src/line_gap.sml
210
src/line_gap.sml
@@ -54,8 +54,10 @@ struct
|
|||||||
}
|
}
|
||||||
|
|
||||||
(* TEST CODE *)
|
(* TEST CODE *)
|
||||||
|
local
|
||||||
fun lineBreaksToString vec =
|
fun lineBreaksToString vec =
|
||||||
(Vector.foldr (fn (el, acc) => Int.toString el ^ ", " ^ acc) "" vec) ^ "\n"
|
(Vector.foldr (fn (el, acc) => Int.toString el ^ ", " ^ acc) "" vec)
|
||||||
|
^ "\n"
|
||||||
|
|
||||||
fun checkLineBreaks (v1, v2) =
|
fun checkLineBreaks (v1, v2) =
|
||||||
if v1 = v2 then
|
if v1 = v2 then
|
||||||
@@ -91,7 +93,7 @@ struct
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
| (_, _) => print "verified lines; no problems\n"
|
| (_, _) => print "verified lines; no problems\n"
|
||||||
|
in
|
||||||
fun verifyLines (buffer: t) =
|
fun verifyLines (buffer: t) =
|
||||||
let
|
let
|
||||||
val (strings, lines) =
|
val (strings, lines) =
|
||||||
@@ -104,14 +106,16 @@ struct
|
|||||||
in
|
in
|
||||||
verifyLineList (strings, lines)
|
verifyLineList (strings, lines)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local
|
||||||
fun calcIndexList (accIdx, lst) =
|
fun calcIndexList (accIdx, lst) =
|
||||||
case lst of
|
case lst of
|
||||||
[] => accIdx
|
[] => accIdx
|
||||||
| hd :: tl => calcIndexList (String.size hd + accIdx, tl)
|
| hd :: tl => calcIndexList (String.size hd + accIdx, tl)
|
||||||
|
|
||||||
fun calcIndexStart lst = calcIndexList (0, lst)
|
fun calcIndexStart lst = calcIndexList (0, lst)
|
||||||
|
in
|
||||||
fun verifyIndex (buffer: t) =
|
fun verifyIndex (buffer: t) =
|
||||||
let
|
let
|
||||||
val bufferIdx = #idx buffer
|
val bufferIdx = #idx buffer
|
||||||
@@ -138,7 +142,7 @@ struct
|
|||||||
in
|
in
|
||||||
()
|
()
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local
|
local
|
||||||
fun helpToString (acc, input) =
|
fun helpToString (acc, input) =
|
||||||
@@ -199,14 +203,10 @@ struct
|
|||||||
local
|
local
|
||||||
fun forwardLinearSearch (findNum, idx, lines) =
|
fun forwardLinearSearch (findNum, idx, lines) =
|
||||||
if idx = Vector.length lines then
|
if idx = Vector.length lines then
|
||||||
let val _ = print "203\n"
|
idx
|
||||||
in idx
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
let
|
let
|
||||||
val _ = print "before curval\n"
|
|
||||||
val curVal = Vector.sub (lines, idx)
|
val curVal = Vector.sub (lines, idx)
|
||||||
val _ = print (Int.toString curVal ^ "\n")
|
|
||||||
in
|
in
|
||||||
if curVal > findNum then idx
|
if curVal > findNum then idx
|
||||||
else forwardLinearSearch (findNum, idx + 1, lines)
|
else forwardLinearSearch (findNum, idx + 1, lines)
|
||||||
@@ -219,7 +219,6 @@ struct
|
|||||||
if high >= low then
|
if high >= low then
|
||||||
let
|
let
|
||||||
val midVal = Vector.sub (lines, mid)
|
val midVal = Vector.sub (lines, mid)
|
||||||
val _ = print "218\n"
|
|
||||||
in
|
in
|
||||||
if midVal = findNum then
|
if midVal = findNum then
|
||||||
mid
|
mid
|
||||||
@@ -228,10 +227,10 @@ struct
|
|||||||
else
|
else
|
||||||
helpBinSearch (findNum, lines, low, mid - 1)
|
helpBinSearch (findNum, lines, low, mid - 1)
|
||||||
end
|
end
|
||||||
|
else if mid >= 0 then
|
||||||
|
forwardLinearSearch (findNum, mid, lines)
|
||||||
else
|
else
|
||||||
let val _ = print "229\n"
|
0
|
||||||
in if mid >= 0 then forwardLinearSearch (findNum, mid, lines) else 0
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
in
|
in
|
||||||
fun forwardBinSearch (findNum, lines) =
|
fun forwardBinSearch (findNum, lines) =
|
||||||
@@ -1025,7 +1024,6 @@ struct
|
|||||||
in
|
in
|
||||||
fun insert (idx, newString, buffer: t) =
|
fun insert (idx, newString, buffer: t) =
|
||||||
let
|
let
|
||||||
val _ = print "inserting...\n"
|
|
||||||
val newLines = countLineBreaks newString
|
val newLines = countLineBreaks newString
|
||||||
in
|
in
|
||||||
ins
|
ins
|
||||||
@@ -1042,9 +1040,6 @@ struct
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
fun println str =
|
|
||||||
print (str ^ "\n")
|
|
||||||
|
|
||||||
(* Delete function and helper functions for it. *)
|
(* Delete function and helper functions for it. *)
|
||||||
local
|
local
|
||||||
fun deleteRightFromHere
|
fun deleteRightFromHere
|
||||||
@@ -1061,14 +1056,9 @@ struct
|
|||||||
(rightStringsHd :: rightStringsTl, rightLinesHd :: rightLinesTl) =>
|
(rightStringsHd :: rightStringsTl, rightLinesHd :: rightLinesTl) =>
|
||||||
let
|
let
|
||||||
val nextIdx = moveIdx + String.size rightStringsHd
|
val nextIdx = moveIdx + String.size rightStringsHd
|
||||||
val _ = println "1021"
|
|
||||||
val _ = println ("origIdx = " ^ Int.toString origIdx)
|
|
||||||
in
|
in
|
||||||
if nextIdx < finish then
|
if nextIdx < finish then
|
||||||
(* Keep moving right. *)
|
(* Keep moving right. *)
|
||||||
let
|
|
||||||
val _ = println "971"
|
|
||||||
in
|
|
||||||
deleteRightFromHere
|
deleteRightFromHere
|
||||||
( origIdx
|
( origIdx
|
||||||
, origLine
|
, origLine
|
||||||
@@ -1079,39 +1069,28 @@ struct
|
|||||||
, rightStringsTl
|
, rightStringsTl
|
||||||
, rightLinesTl
|
, rightLinesTl
|
||||||
)
|
)
|
||||||
end
|
|
||||||
else if nextIdx > finish then
|
else if nextIdx > finish then
|
||||||
(* Base case: delete from the start of this string and stop moving. *)
|
(* Base case: delete from the start of this string and stop moving. *)
|
||||||
let
|
let
|
||||||
(* Delete part of string. *)
|
(* Delete part of string. *)
|
||||||
val newStrStart = finish - moveIdx
|
val newStrStart = finish - moveIdx
|
||||||
val _ = println
|
|
||||||
("old len = " ^ Int.toString (String.size rightStringsHd))
|
|
||||||
val _ = println
|
|
||||||
("new len = "
|
|
||||||
^ Int.toString (String.size rightStringsHd - newStrStart))
|
|
||||||
val newStr = String.substring
|
val newStr = String.substring
|
||||||
( rightStringsHd
|
( rightStringsHd
|
||||||
, newStrStart
|
, newStrStart
|
||||||
, String.size rightStringsHd - newStrStart
|
, String.size rightStringsHd - newStrStart
|
||||||
)
|
)
|
||||||
val _ = println
|
|
||||||
("actual len = " ^ Int.toString (String.size newStr))
|
|
||||||
|
|
||||||
(* Delete from line vector if we need to. *)
|
(* Delete from line vector if we need to. *)
|
||||||
val newLines =
|
val newLines =
|
||||||
if Vector.length rightLinesHd > 0 then
|
if Vector.length rightLinesHd > 0 then
|
||||||
let
|
let
|
||||||
val _ = println "996"
|
|
||||||
val lineDeleteStart =
|
val lineDeleteStart =
|
||||||
forwardBinSearch (newStrStart, rightLinesHd)
|
forwardBinSearch (newStrStart, rightLinesHd)
|
||||||
val _ = println ("1100 = " ^ Int.toString newStrStart)
|
|
||||||
in
|
in
|
||||||
if lineDeleteStart < Vector.length rightLinesHd then
|
if lineDeleteStart < Vector.length rightLinesHd then
|
||||||
let
|
let
|
||||||
val lineDeleteLength =
|
val lineDeleteLength =
|
||||||
Vector.length rightLinesHd - lineDeleteStart
|
Vector.length rightLinesHd - lineDeleteStart
|
||||||
val _ = println "1105"
|
|
||||||
in
|
in
|
||||||
Vector.tabulate (lineDeleteLength, fn idx =>
|
Vector.tabulate (lineDeleteLength, fn idx =>
|
||||||
Vector.sub (rightLinesHd, idx + lineDeleteStart)
|
Vector.sub (rightLinesHd, idx + lineDeleteStart)
|
||||||
@@ -1122,7 +1101,6 @@ struct
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
rightLinesHd (* empty vector *)
|
rightLinesHd (* empty vector *)
|
||||||
val _ = println "1073"
|
|
||||||
in
|
in
|
||||||
{ idx = origIdx
|
{ idx = origIdx
|
||||||
, line = origLine
|
, line = origLine
|
||||||
@@ -1134,9 +1112,6 @@ struct
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
(* Delete this node fully, but delete no further. *)
|
(* Delete this node fully, but delete no further. *)
|
||||||
let
|
|
||||||
val _ = println "1085"
|
|
||||||
in
|
|
||||||
{ idx = origIdx
|
{ idx = origIdx
|
||||||
, line = origLine
|
, line = origLine
|
||||||
, leftStrings = leftStrings
|
, leftStrings = leftStrings
|
||||||
@@ -1145,11 +1120,7 @@ struct
|
|||||||
, rightLines = rightLinesTl
|
, rightLines = rightLinesTl
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
|
||||||
| (_, _) =>
|
| (_, _) =>
|
||||||
let
|
|
||||||
val _ = println "1095"
|
|
||||||
in
|
|
||||||
{ idx = 0
|
{ idx = 0
|
||||||
, line = 0
|
, line = 0
|
||||||
, leftStrings = []
|
, leftStrings = []
|
||||||
@@ -1157,7 +1128,6 @@ struct
|
|||||||
, rightStrings = rightStrings
|
, rightStrings = rightStrings
|
||||||
, rightLines = rightLines
|
, rightLines = rightLines
|
||||||
}
|
}
|
||||||
end
|
|
||||||
|
|
||||||
fun moveRightAndDelete
|
fun moveRightAndDelete
|
||||||
( start
|
( start
|
||||||
@@ -1173,7 +1143,6 @@ struct
|
|||||||
(rightStringsHd :: rightStringsTl, rightLinesHd :: rightLinesTl) =>
|
(rightStringsHd :: rightStringsTl, rightLinesHd :: rightLinesTl) =>
|
||||||
let
|
let
|
||||||
val nextIdx = curIdx + String.size rightStringsHd
|
val nextIdx = curIdx + String.size rightStringsHd
|
||||||
val _ = println "1113"
|
|
||||||
in
|
in
|
||||||
if nextIdx < start then
|
if nextIdx < start then
|
||||||
(* Keep moving right.
|
(* Keep moving right.
|
||||||
@@ -1194,7 +1163,6 @@ struct
|
|||||||
(* We can join the heads while staying in limit, so do so. *)
|
(* We can join the heads while staying in limit, so do so. *)
|
||||||
let
|
let
|
||||||
val newLeftStringsHd = leftStringsHd ^ rightStringsHd
|
val newLeftStringsHd = leftStringsHd ^ rightStringsHd
|
||||||
val _ = println "1076"
|
|
||||||
val newLeftLinesHd: int vector =
|
val newLeftLinesHd: int vector =
|
||||||
Vector.tabulate
|
Vector.tabulate
|
||||||
( Vector.length leftLinesHd
|
( Vector.length leftLinesHd
|
||||||
@@ -1210,7 +1178,6 @@ struct
|
|||||||
)
|
)
|
||||||
val newLeftStrings = newLeftStringsHd :: leftStringsTl
|
val newLeftStrings = newLeftStringsHd :: leftStringsTl
|
||||||
val newLeftLines = newLeftLinesHd :: leftLinesTl
|
val newLeftLines = newLeftLinesHd :: leftLinesTl
|
||||||
val _ = println "1093"
|
|
||||||
in
|
in
|
||||||
moveRightAndDelete
|
moveRightAndDelete
|
||||||
( start
|
( start
|
||||||
@@ -1225,9 +1192,6 @@ struct
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
(* Can't join heads while staying in limit, so just cons. *)
|
(* Can't join heads while staying in limit, so just cons. *)
|
||||||
let
|
|
||||||
val _ = println "1108"
|
|
||||||
in
|
|
||||||
moveRightAndDelete
|
moveRightAndDelete
|
||||||
( start
|
( start
|
||||||
, finish
|
, finish
|
||||||
@@ -1238,12 +1202,8 @@ struct
|
|||||||
, rightStringsTl
|
, rightStringsTl
|
||||||
, rightLinesTl
|
, rightLinesTl
|
||||||
)
|
)
|
||||||
end
|
|
||||||
| (_, _) =>
|
| (_, _) =>
|
||||||
(* Can't join heads while staying in limit, so just cons. *)
|
(* Can't join heads while staying in limit, so just cons. *)
|
||||||
let
|
|
||||||
val _ = println "1121"
|
|
||||||
in
|
|
||||||
moveRightAndDelete
|
moveRightAndDelete
|
||||||
( start
|
( start
|
||||||
, finish
|
, finish
|
||||||
@@ -1253,15 +1213,12 @@ struct
|
|||||||
, rightLinesHd :: leftLines
|
, rightLinesHd :: leftLines
|
||||||
, rightStringsTl
|
, rightStringsTl
|
||||||
, rightLinesTl
|
, rightLinesTl
|
||||||
)
|
))
|
||||||
end)
|
|
||||||
else if nextIdx > start then
|
else if nextIdx > start then
|
||||||
if nextIdx < finish then
|
if nextIdx < finish then
|
||||||
(* Start deleting from the end of this string,
|
(* Start deleting from the end of this string,
|
||||||
* and then continue deleting rightwards. *)
|
* and then continue deleting rightwards. *)
|
||||||
let
|
let
|
||||||
val _ = println "1263"
|
|
||||||
val _ = println ("1263 idx = " ^ Int.toString curIdx)
|
|
||||||
val length = start - curIdx
|
val length = start - curIdx
|
||||||
val newString = String.substring (rightStringsHd, 0, length)
|
val newString = String.substring (rightStringsHd, 0, length)
|
||||||
|
|
||||||
@@ -1272,7 +1229,6 @@ struct
|
|||||||
Vector.fromList []
|
Vector.fromList []
|
||||||
else
|
else
|
||||||
let
|
let
|
||||||
val _ = println "1141"
|
|
||||||
val slice = VectorSlice.slice
|
val slice = VectorSlice.slice
|
||||||
(rightLinesHd, 0, SOME (lineDeleteEnd + 1))
|
(rightLinesHd, 0, SOME (lineDeleteEnd + 1))
|
||||||
in
|
in
|
||||||
@@ -1293,9 +1249,6 @@ struct
|
|||||||
(* Join new string with left head. *)
|
(* Join new string with left head. *)
|
||||||
let
|
let
|
||||||
val newLeftStringsHd = leftStringsHd ^ newString
|
val newLeftStringsHd = leftStringsHd ^ newString
|
||||||
val _ = println "1163"
|
|
||||||
val _ = println ("curIdx = " ^ Int.toString curIdx)
|
|
||||||
val _ = println ("nextIdx = " ^ Int.toString nextIdx)
|
|
||||||
val newLeftLinesHd =
|
val newLeftLinesHd =
|
||||||
Vector.tabulate
|
Vector.tabulate
|
||||||
( Vector.length leftLinesHd
|
( Vector.length leftLinesHd
|
||||||
@@ -1329,9 +1282,6 @@ struct
|
|||||||
else
|
else
|
||||||
(* Can't join new string with left head
|
(* Can't join new string with left head
|
||||||
* while staying in limit, so just cons. *)
|
* while staying in limit, so just cons. *)
|
||||||
let
|
|
||||||
val _ = println "1264"
|
|
||||||
in
|
|
||||||
deleteRightFromHere
|
deleteRightFromHere
|
||||||
( curIdx + String.size newString
|
( curIdx + String.size newString
|
||||||
, curLine + Vector.length newLines
|
, curLine + Vector.length newLines
|
||||||
@@ -1342,11 +1292,8 @@ struct
|
|||||||
, rightStringsTl
|
, rightStringsTl
|
||||||
, rightLinesTl
|
, rightLinesTl
|
||||||
)
|
)
|
||||||
end
|
|
||||||
| (_, _) =>
|
| (_, _) =>
|
||||||
let
|
|
||||||
val _ = println "1276"
|
|
||||||
in
|
|
||||||
deleteRightFromHere
|
deleteRightFromHere
|
||||||
( nextIdx
|
( nextIdx
|
||||||
, nextLine
|
, nextLine
|
||||||
@@ -1356,8 +1303,7 @@ struct
|
|||||||
, newLines :: leftLines
|
, newLines :: leftLines
|
||||||
, rightStringsTl
|
, rightStringsTl
|
||||||
, rightLinesTl
|
, rightLinesTl
|
||||||
)
|
))
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
else if nextIdx > finish then
|
else if nextIdx > finish then
|
||||||
(* Base case: delete from the middle part of this string. *)
|
(* Base case: delete from the middle part of this string. *)
|
||||||
@@ -1371,42 +1317,29 @@ struct
|
|||||||
Vector.fromList []
|
Vector.fromList []
|
||||||
else
|
else
|
||||||
let
|
let
|
||||||
val _ = println "1224"
|
|
||||||
val _ = println
|
|
||||||
("vlen = " ^ Int.toString (Vector.length rightLinesHd))
|
|
||||||
val _ = println
|
|
||||||
("sub1LineEnd = " ^ Int.toString sub1LineEnd)
|
|
||||||
val slice = VectorSlice.slice
|
val slice = VectorSlice.slice
|
||||||
(rightLinesHd, 0, SOME (sub1LineEnd + 1))
|
(rightLinesHd, 0, SOME (sub1LineEnd + 1))
|
||||||
in
|
in
|
||||||
VectorSlice.vector slice
|
VectorSlice.vector slice
|
||||||
end
|
end
|
||||||
|
|
||||||
val _ = println "1356"
|
|
||||||
val sub2Start = finish - curIdx
|
val sub2Start = finish - curIdx
|
||||||
val sub2 = String.substring
|
val sub2 = String.substring
|
||||||
( rightStringsHd
|
( rightStringsHd
|
||||||
, sub2Start
|
, sub2Start
|
||||||
, String.size rightStringsHd - sub2Start
|
, String.size rightStringsHd - sub2Start
|
||||||
)
|
)
|
||||||
val _ = println "1366"
|
|
||||||
val sub2LineStart = forwardBinSearch (sub2Start, rightLinesHd)
|
val sub2LineStart = forwardBinSearch (sub2Start, rightLinesHd)
|
||||||
val _ = println "1368"
|
|
||||||
val sub2Lines =
|
val sub2Lines =
|
||||||
if sub2LineStart < Vector.length rightLinesHd then
|
if sub2LineStart < Vector.length rightLinesHd then
|
||||||
let
|
|
||||||
val _ = println "1370"
|
|
||||||
in
|
|
||||||
Vector.tabulate
|
Vector.tabulate
|
||||||
( Vector.length rightLinesHd - sub2LineStart
|
( Vector.length rightLinesHd - sub2LineStart
|
||||||
, fn idx =>
|
, fn idx =>
|
||||||
Vector.sub (rightLinesHd, idx + sub2LineStart)
|
Vector.sub (rightLinesHd, idx + sub2LineStart)
|
||||||
- (String.size rightStringsHd - String.size sub2)
|
- (String.size rightStringsHd - String.size sub2)
|
||||||
)
|
)
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Vector.fromList []
|
Vector.fromList []
|
||||||
val _ = println "1326"
|
|
||||||
in
|
in
|
||||||
{ idx = curIdx + sub1Length
|
{ idx = curIdx + sub1Length
|
||||||
, line = curLine + Vector.length sub1Lines
|
, line = curLine + Vector.length sub1Lines
|
||||||
@@ -1428,14 +1361,11 @@ struct
|
|||||||
Vector.fromList []
|
Vector.fromList []
|
||||||
else
|
else
|
||||||
let
|
let
|
||||||
val _ = println "1390"
|
|
||||||
val _ = println ("midpoint = " ^ Int.toString midpoint)
|
|
||||||
val slice = VectorSlice.slice
|
val slice = VectorSlice.slice
|
||||||
(rightLinesHd, 0, SOME (midpoint + 1))
|
(rightLinesHd, 0, SOME (midpoint + 1))
|
||||||
in
|
in
|
||||||
VectorSlice.vector slice
|
VectorSlice.vector slice
|
||||||
end
|
end
|
||||||
val _ = println "1340"
|
|
||||||
in
|
in
|
||||||
{ idx = curIdx + strLength
|
{ idx = curIdx + strLength
|
||||||
, line = curLine + Vector.length newLeftLines
|
, line = curLine + Vector.length newLeftLines
|
||||||
@@ -1452,10 +1382,6 @@ struct
|
|||||||
* and it may extend beyond the current head.
|
* and it may extend beyond the current head.
|
||||||
* So pass the rightStringsTl and rightLinesTl to a function that
|
* So pass the rightStringsTl and rightLinesTl to a function that
|
||||||
* will delete rightwards if it needs to, or else terminates. *)
|
* will delete rightwards if it needs to, or else terminates. *)
|
||||||
let
|
|
||||||
val _ = println "1373"
|
|
||||||
val _ = println ("1444 = " ^ Int.toString (finish - start))
|
|
||||||
in
|
|
||||||
deleteRightFromHere
|
deleteRightFromHere
|
||||||
( nextIdx
|
( nextIdx
|
||||||
, curLine + Vector.length rightLinesHd
|
, curLine + Vector.length rightLinesHd
|
||||||
@@ -1467,11 +1393,7 @@ struct
|
|||||||
, rightLinesTl
|
, rightLinesTl
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
|
||||||
| (_, _) =>
|
| (_, _) =>
|
||||||
let
|
|
||||||
val _ = println "1386"
|
|
||||||
in
|
|
||||||
{ idx = curIdx
|
{ idx = curIdx
|
||||||
, line = curLine
|
, line = curLine
|
||||||
, leftStrings = leftStrings
|
, leftStrings = leftStrings
|
||||||
@@ -1479,7 +1401,6 @@ struct
|
|||||||
, rightStrings = rightStrings
|
, rightStrings = rightStrings
|
||||||
, rightLines = rightLines
|
, rightLines = rightLines
|
||||||
}
|
}
|
||||||
end
|
|
||||||
|
|
||||||
fun deleteLeftFromHere
|
fun deleteLeftFromHere
|
||||||
(start, curIdx, curLine, leftStrings, leftLines, rightStrings, rightLines) =
|
(start, curIdx, curLine, leftStrings, leftLines, rightStrings, rightLines) =
|
||||||
@@ -1488,13 +1409,9 @@ struct
|
|||||||
let
|
let
|
||||||
val prevIdx = curIdx - String.size leftStringsHd
|
val prevIdx = curIdx - String.size leftStringsHd
|
||||||
val prevLine = curLine - Vector.length leftLinesHd
|
val prevLine = curLine - Vector.length leftLinesHd
|
||||||
val _ = println "1513"
|
|
||||||
in
|
in
|
||||||
if start < prevIdx then
|
if start < prevIdx then
|
||||||
(* Continue deleting leftward. *)
|
(* Continue deleting leftward. *)
|
||||||
let
|
|
||||||
val _ = println "1449"
|
|
||||||
in
|
|
||||||
deleteLeftFromHere
|
deleteLeftFromHere
|
||||||
( start
|
( start
|
||||||
, prevIdx
|
, prevIdx
|
||||||
@@ -1504,7 +1421,6 @@ struct
|
|||||||
, rightStrings
|
, rightStrings
|
||||||
, rightLines
|
, rightLines
|
||||||
)
|
)
|
||||||
end
|
|
||||||
else if start > prevIdx then
|
else if start > prevIdx then
|
||||||
(* Base case: delete end part of this string and return. *)
|
(* Base case: delete end part of this string and return. *)
|
||||||
let
|
let
|
||||||
@@ -1515,9 +1431,6 @@ struct
|
|||||||
let
|
let
|
||||||
val midpoint = binSearch
|
val midpoint = binSearch
|
||||||
(String.size newStr - 1, leftLinesHd)
|
(String.size newStr - 1, leftLinesHd)
|
||||||
val _ = println "1461"
|
|
||||||
val _ = println
|
|
||||||
("vlen = " ^ (Int.toString (Vector.length leftLinesHd)))
|
|
||||||
val slice = VectorSlice.slice
|
val slice = VectorSlice.slice
|
||||||
(leftLinesHd, 0, SOME (midpoint + 1))
|
(leftLinesHd, 0, SOME (midpoint + 1))
|
||||||
in
|
in
|
||||||
@@ -1525,7 +1438,6 @@ struct
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
Vector.fromList []
|
Vector.fromList []
|
||||||
val _ = println "1433"
|
|
||||||
in
|
in
|
||||||
{ idx = prevIdx + String.size newStr
|
{ idx = prevIdx + String.size newStr
|
||||||
, line = prevLine + Vector.length newLines
|
, line = prevLine + Vector.length newLines
|
||||||
@@ -1538,9 +1450,6 @@ struct
|
|||||||
else
|
else
|
||||||
(* start = prevIdx
|
(* start = prevIdx
|
||||||
* Base case: Remove leftStrings/LinesHd without removing any further. *)
|
* Base case: Remove leftStrings/LinesHd without removing any further. *)
|
||||||
let
|
|
||||||
val _ = println "1446"
|
|
||||||
in
|
|
||||||
{ idx = prevIdx
|
{ idx = prevIdx
|
||||||
, line = prevLine
|
, line = prevLine
|
||||||
, leftStrings = leftStringsTl
|
, leftStrings = leftStringsTl
|
||||||
@@ -1549,11 +1458,7 @@ struct
|
|||||||
, rightLines = rightLines
|
, rightLines = rightLines
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
end
|
|
||||||
| (_, _) =>
|
| (_, _) =>
|
||||||
let
|
|
||||||
val _ = println "1456"
|
|
||||||
in
|
|
||||||
{ idx = curIdx
|
{ idx = curIdx
|
||||||
, line = curLine
|
, line = curLine
|
||||||
, leftStrings = leftStrings
|
, leftStrings = leftStrings
|
||||||
@@ -1561,7 +1466,6 @@ struct
|
|||||||
, rightStrings = rightStrings
|
, rightStrings = rightStrings
|
||||||
, rightLines = rightLines
|
, rightLines = rightLines
|
||||||
}
|
}
|
||||||
end
|
|
||||||
|
|
||||||
fun deleteFromLetAndRight
|
fun deleteFromLetAndRight
|
||||||
( start
|
( start
|
||||||
@@ -1591,7 +1495,6 @@ struct
|
|||||||
, rightStrings
|
, rightStrings
|
||||||
, rightLines
|
, rightLines
|
||||||
)
|
)
|
||||||
val _ = println "1600"
|
|
||||||
in
|
in
|
||||||
deleteLeftFromHere
|
deleteLeftFromHere
|
||||||
( start
|
( start
|
||||||
@@ -1617,7 +1520,6 @@ struct
|
|||||||
case (leftStrings, leftLines) of
|
case (leftStrings, leftLines) of
|
||||||
(leftStringsHd :: leftStringsTl, leftLinesHd :: leftLinesTl) =>
|
(leftStringsHd :: leftStringsTl, leftLinesHd :: leftLinesTl) =>
|
||||||
let
|
let
|
||||||
val _ = println "1625"
|
|
||||||
val prevIdx = curIdx - String.size leftStringsHd
|
val prevIdx = curIdx - String.size leftStringsHd
|
||||||
in
|
in
|
||||||
if prevIdx > finish then
|
if prevIdx > finish then
|
||||||
@@ -1641,7 +1543,6 @@ struct
|
|||||||
(* Can join while staying in limit, so do join. *)
|
(* Can join while staying in limit, so do join. *)
|
||||||
let
|
let
|
||||||
val newRightStringsHd = leftStringsHd ^ rightStringsHd
|
val newRightStringsHd = leftStringsHd ^ rightStringsHd
|
||||||
val _ = println "1572"
|
|
||||||
val newRightLinesHd =
|
val newRightLinesHd =
|
||||||
Vector.tabulate
|
Vector.tabulate
|
||||||
( Vector.length leftLinesHd
|
( Vector.length leftLinesHd
|
||||||
@@ -1657,9 +1558,6 @@ struct
|
|||||||
)
|
)
|
||||||
val newRightStrings = newRightStringsHd :: rightStringsTl
|
val newRightStrings = newRightStringsHd :: rightStringsTl
|
||||||
val newRightLines = newRightLinesHd :: rightLinesTl
|
val newRightLines = newRightLinesHd :: rightLinesTl
|
||||||
in
|
|
||||||
let
|
|
||||||
val _ = println "1595"
|
|
||||||
in
|
in
|
||||||
moveLeftAndDelete
|
moveLeftAndDelete
|
||||||
( start
|
( start
|
||||||
@@ -1672,12 +1570,8 @@ struct
|
|||||||
, newRightLines
|
, newRightLines
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
|
||||||
else
|
else
|
||||||
(* Cannot join while staying in limit, so don't. *)
|
(* Cannot join while staying in limit, so don't. *)
|
||||||
let
|
|
||||||
val _ = println "1609"
|
|
||||||
in
|
|
||||||
moveLeftAndDelete
|
moveLeftAndDelete
|
||||||
( start
|
( start
|
||||||
, finish
|
, finish
|
||||||
@@ -1688,13 +1582,9 @@ struct
|
|||||||
, leftStringsHd :: rightStrings
|
, leftStringsHd :: rightStrings
|
||||||
, leftLinesHd :: rightLines
|
, leftLinesHd :: rightLines
|
||||||
)
|
)
|
||||||
end
|
|
||||||
| (_, _) =>
|
| (_, _) =>
|
||||||
(* Base case: reached empty list while trying to move leftwards.
|
(* Base case: reached empty list while trying to move leftwards.
|
||||||
* Cannot do anything so just return. *)
|
* Cannot do anything so just return. *)
|
||||||
let
|
|
||||||
val _ = println "1594"
|
|
||||||
in
|
|
||||||
moveLeftAndDelete
|
moveLeftAndDelete
|
||||||
( start
|
( start
|
||||||
, finish
|
, finish
|
||||||
@@ -1704,8 +1594,7 @@ struct
|
|||||||
, leftLinesTl
|
, leftLinesTl
|
||||||
, [leftStringsHd]
|
, [leftStringsHd]
|
||||||
, [leftLinesHd]
|
, [leftLinesHd]
|
||||||
)
|
))
|
||||||
end)
|
|
||||||
else if prevIdx < finish then
|
else if prevIdx < finish then
|
||||||
if prevIdx > start then
|
if prevIdx > start then
|
||||||
(* Delete from start point of this string,
|
(* Delete from start point of this string,
|
||||||
@@ -1722,23 +1611,18 @@ struct
|
|||||||
val midpoint = forwardBinSearch (stringStart, leftLinesHd)
|
val midpoint = forwardBinSearch (stringStart, leftLinesHd)
|
||||||
in
|
in
|
||||||
if midpoint >= 0 then
|
if midpoint >= 0 then
|
||||||
let
|
|
||||||
val _ = println "1640"
|
|
||||||
in
|
|
||||||
Vector.tabulate
|
Vector.tabulate
|
||||||
( Vector.length leftLinesHd - midpoint
|
( Vector.length leftLinesHd - midpoint
|
||||||
, fn idx =>
|
, fn idx =>
|
||||||
Vector.sub (leftLinesHd, idx + midpoint)
|
Vector.sub (leftLinesHd, idx + midpoint)
|
||||||
- stringStart
|
- stringStart
|
||||||
)
|
)
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Vector.fromList []
|
Vector.fromList []
|
||||||
end
|
end
|
||||||
val newRightStrings = newString :: rightStrings
|
val newRightStrings = newString :: rightStrings
|
||||||
val newRightLines = newLines :: rightLines
|
val newRightLines = newLines :: rightLines
|
||||||
val prevLine = curLine - Vector.length leftLinesHd
|
val prevLine = curLine - Vector.length leftLinesHd
|
||||||
val _ = println "1632"
|
|
||||||
in
|
in
|
||||||
deleteLeftFromHere
|
deleteLeftFromHere
|
||||||
( start
|
( start
|
||||||
@@ -1772,12 +1656,6 @@ struct
|
|||||||
in
|
in
|
||||||
if midpoint >= 0 then
|
if midpoint >= 0 then
|
||||||
let
|
let
|
||||||
val _ = println "1684"
|
|
||||||
val _ = println
|
|
||||||
("midpoint: " ^ Int.toString midpoint)
|
|
||||||
val _ = println
|
|
||||||
("lenth: "
|
|
||||||
^ Int.toString (Vector.length leftLinesHd))
|
|
||||||
val slice = VectorSlice.slice
|
val slice = VectorSlice.slice
|
||||||
(leftLinesHd, 0, SOME (midpoint + 1))
|
(leftLinesHd, 0, SOME (midpoint + 1))
|
||||||
in
|
in
|
||||||
@@ -1788,16 +1666,10 @@ struct
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
leftLinesHd
|
leftLinesHd
|
||||||
val _ = println "1791; base case"
|
|
||||||
|
|
||||||
val sub2Lines =
|
val sub2Lines =
|
||||||
let
|
let
|
||||||
val midpoint = forwardBinSearch (sub2Start, leftLinesHd)
|
val midpoint = forwardBinSearch (sub2Start, leftLinesHd)
|
||||||
val _ = println "1697"
|
|
||||||
val _ = println
|
|
||||||
("leftLinesHd: "
|
|
||||||
^ Int.toString (Vector.length leftLinesHd))
|
|
||||||
val _ = println ("midpoint: " ^ Int.toString (midpoint))
|
|
||||||
in
|
in
|
||||||
if midpoint < Vector.length leftLinesHd then
|
if midpoint < Vector.length leftLinesHd then
|
||||||
Vector.tabulate
|
Vector.tabulate
|
||||||
@@ -1810,7 +1682,6 @@ struct
|
|||||||
Vector.fromList []
|
Vector.fromList []
|
||||||
end
|
end
|
||||||
|
|
||||||
val _ = println "1829; base case"
|
|
||||||
in
|
in
|
||||||
{ idx = prevIdx + sub1Length
|
{ idx = prevIdx + sub1Length
|
||||||
, line =
|
, line =
|
||||||
@@ -1835,7 +1706,6 @@ struct
|
|||||||
val lines =
|
val lines =
|
||||||
let
|
let
|
||||||
val lineStart = forwardBinSearch (strStart, leftLinesHd)
|
val lineStart = forwardBinSearch (strStart, leftLinesHd)
|
||||||
val _ = println "1733"
|
|
||||||
in
|
in
|
||||||
if lineStart < Vector.length leftLinesHd then
|
if lineStart < Vector.length leftLinesHd then
|
||||||
Vector.tabulate
|
Vector.tabulate
|
||||||
@@ -1847,7 +1717,6 @@ struct
|
|||||||
else
|
else
|
||||||
Vector.fromList []
|
Vector.fromList []
|
||||||
end
|
end
|
||||||
val _ = println "1741"
|
|
||||||
in
|
in
|
||||||
{ idx = prevIdx + String.size str
|
{ idx = prevIdx + String.size str
|
||||||
, line =
|
, line =
|
||||||
@@ -1891,7 +1760,6 @@ struct
|
|||||||
, idx - Vector.length leftLinesHd
|
, idx - Vector.length leftLinesHd
|
||||||
) + String.size leftStringsHd
|
) + String.size leftStringsHd
|
||||||
)
|
)
|
||||||
val _ = println "1776"
|
|
||||||
in
|
in
|
||||||
deleteLeftFromHere
|
deleteLeftFromHere
|
||||||
( start
|
( start
|
||||||
@@ -1905,9 +1773,6 @@ struct
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
(* Cannot join while staying in limit. *)
|
(* Cannot join while staying in limit. *)
|
||||||
let
|
|
||||||
val _ = print "1922"
|
|
||||||
in
|
|
||||||
deleteLeftFromHere
|
deleteLeftFromHere
|
||||||
( start
|
( start
|
||||||
, prevIdx
|
, prevIdx
|
||||||
@@ -1917,12 +1782,8 @@ struct
|
|||||||
, leftStringsHd :: rightStrings
|
, leftStringsHd :: rightStrings
|
||||||
, leftLinesHd :: rightLines
|
, leftLinesHd :: rightLines
|
||||||
)
|
)
|
||||||
end
|
|
||||||
| (_, _) =>
|
| (_, _) =>
|
||||||
(* Right strings and lines are empty, so can't join. *)
|
(* Right strings and lines are empty, so can't join. *)
|
||||||
let
|
|
||||||
val _ = println "1814"
|
|
||||||
in
|
|
||||||
deleteLeftFromHere
|
deleteLeftFromHere
|
||||||
( start
|
( start
|
||||||
, prevIdx
|
, prevIdx
|
||||||
@@ -1931,15 +1792,10 @@ struct
|
|||||||
, leftLinesTl
|
, leftLinesTl
|
||||||
, [leftStringsHd]
|
, [leftStringsHd]
|
||||||
, [leftLinesHd]
|
, [leftLinesHd]
|
||||||
)
|
))
|
||||||
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
| (_, _) =>
|
| (_, _) =>
|
||||||
(* Can't move further leftward so just return. *)
|
(* Can't move further leftward so just return. *)
|
||||||
let
|
|
||||||
val _ = println "1825"
|
|
||||||
in
|
|
||||||
{ idx = 0
|
{ idx = 0
|
||||||
, line = 0
|
, line = 0
|
||||||
, leftStrings = []
|
, leftStrings = []
|
||||||
@@ -1947,7 +1803,6 @@ struct
|
|||||||
, rightStrings = rightStrings
|
, rightStrings = rightStrings
|
||||||
, rightLines = rightLines
|
, rightLines = rightLines
|
||||||
}
|
}
|
||||||
end
|
|
||||||
|
|
||||||
fun del
|
fun del
|
||||||
( start
|
( start
|
||||||
@@ -1960,9 +1815,6 @@ struct
|
|||||||
, rightLines
|
, rightLines
|
||||||
) =
|
) =
|
||||||
if start > curIdx then
|
if start > curIdx then
|
||||||
let
|
|
||||||
val _ = println "1963"
|
|
||||||
in
|
|
||||||
moveRightAndDelete
|
moveRightAndDelete
|
||||||
( start
|
( start
|
||||||
, finish
|
, finish
|
||||||
@@ -1973,12 +1825,8 @@ struct
|
|||||||
, rightStrings
|
, rightStrings
|
||||||
, rightLines
|
, rightLines
|
||||||
)
|
)
|
||||||
end
|
|
||||||
else if start < curIdx then
|
else if start < curIdx then
|
||||||
if finish <= curIdx then
|
if finish <= curIdx then
|
||||||
let
|
|
||||||
val _ = println "1976"
|
|
||||||
in
|
|
||||||
moveLeftAndDelete
|
moveLeftAndDelete
|
||||||
( start
|
( start
|
||||||
, finish
|
, finish
|
||||||
@@ -1989,11 +1837,7 @@ struct
|
|||||||
, rightStrings
|
, rightStrings
|
||||||
, rightLines
|
, rightLines
|
||||||
)
|
)
|
||||||
end
|
|
||||||
else
|
else
|
||||||
let
|
|
||||||
val _ = println "1988"
|
|
||||||
in
|
|
||||||
deleteFromLetAndRight
|
deleteFromLetAndRight
|
||||||
( start
|
( start
|
||||||
, finish
|
, finish
|
||||||
@@ -2004,11 +1848,7 @@ struct
|
|||||||
, rightStrings
|
, rightStrings
|
||||||
, rightLines
|
, rightLines
|
||||||
)
|
)
|
||||||
end
|
|
||||||
else
|
else
|
||||||
let
|
|
||||||
val _ = println "2000"
|
|
||||||
in
|
|
||||||
deleteRightFromHere
|
deleteRightFromHere
|
||||||
( curIdx
|
( curIdx
|
||||||
, curLine
|
, curLine
|
||||||
@@ -2019,23 +1859,9 @@ struct
|
|||||||
, rightStrings
|
, rightStrings
|
||||||
, rightLines
|
, rightLines
|
||||||
)
|
)
|
||||||
end
|
|
||||||
in
|
in
|
||||||
fun delete (start, length, buffer: t) =
|
fun delete (start, length, buffer: t) =
|
||||||
if length > 0 then
|
if length > 0 then
|
||||||
let
|
|
||||||
val _ = println "deleting..."
|
|
||||||
val _ = println (String.concat
|
|
||||||
[ "length = "
|
|
||||||
, Int.toString length
|
|
||||||
, "| start = "
|
|
||||||
, Int.toString start
|
|
||||||
, "| start + length = "
|
|
||||||
, Int.toString (start + length)
|
|
||||||
, "| bufferIdx = "
|
|
||||||
, Int.toString (#idx buffer)
|
|
||||||
])
|
|
||||||
in
|
|
||||||
del
|
del
|
||||||
( start
|
( start
|
||||||
, start + length
|
, start + length
|
||||||
@@ -2046,9 +1872,7 @@ struct
|
|||||||
, #rightStrings buffer
|
, #rightStrings buffer
|
||||||
, #rightLines buffer
|
, #rightLines buffer
|
||||||
)
|
)
|
||||||
end
|
|
||||||
else
|
else
|
||||||
buffer
|
buffer
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user