fix infinite loop in src/line_gap.sml (still have other errors I need to address though)
This commit is contained in:
162
src/line_gap.sml
162
src/line_gap.sml
@@ -170,7 +170,7 @@ struct
|
|||||||
val curVal = Vector.sub (lines, idx)
|
val curVal = Vector.sub (lines, idx)
|
||||||
in
|
in
|
||||||
if curVal > findNum then idx
|
if curVal > findNum then idx
|
||||||
else forwardLinearSearch (findNum, idx, lines)
|
else forwardLinearSearch (findNum, idx + 1, lines)
|
||||||
end
|
end
|
||||||
|
|
||||||
fun helpBinSearch (findNum, lines, low, high) =
|
fun helpBinSearch (findNum, lines, low, high) =
|
||||||
@@ -983,6 +983,7 @@ 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
|
||||||
@@ -1018,6 +1019,7 @@ 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"
|
||||||
in
|
in
|
||||||
if nextIdx < finish then
|
if nextIdx < finish then
|
||||||
(* Keep moving right. *)
|
(* Keep moving right. *)
|
||||||
@@ -1110,6 +1112,7 @@ 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.
|
||||||
@@ -1510,6 +1513,7 @@ 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. *)
|
||||||
@@ -1597,6 +1601,7 @@ struct
|
|||||||
, rightStrings
|
, rightStrings
|
||||||
, rightLines
|
, rightLines
|
||||||
)
|
)
|
||||||
|
val _ = println "1600"
|
||||||
in
|
in
|
||||||
deleteLeftFromHere
|
deleteLeftFromHere
|
||||||
( start
|
( start
|
||||||
@@ -1622,6 +1627,7 @@ 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
|
||||||
@@ -1782,19 +1788,7 @@ struct
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
leftLinesHd
|
leftLinesHd
|
||||||
|
val _ = println "1791; base case"
|
||||||
val realsub1lines = countLineBreaks sub1
|
|
||||||
val _ =
|
|
||||||
if realsub1lines = sub1Lines then
|
|
||||||
()
|
|
||||||
else
|
|
||||||
let
|
|
||||||
val _ = println "realsub1lines error"
|
|
||||||
val _ = checkLineBreaks (sub1Lines, realsub1lines)
|
|
||||||
val _ = println "after realsub1lines error"
|
|
||||||
in
|
|
||||||
()
|
|
||||||
end
|
|
||||||
|
|
||||||
val sub2Lines =
|
val sub2Lines =
|
||||||
let
|
let
|
||||||
@@ -1809,18 +1803,14 @@ struct
|
|||||||
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)
|
||||||
- sub2Start
|
- sub2Start
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
Vector.fromList []
|
Vector.fromList []
|
||||||
end
|
end
|
||||||
|
|
||||||
val realsub2lines = countLineBreaks sub2
|
val _ = println "1829; base case"
|
||||||
val _ =
|
|
||||||
if realsub2lines = sub2Lines then ()
|
|
||||||
else println "realsub2lines error"
|
|
||||||
|
|
||||||
in
|
in
|
||||||
{ idx = prevIdx + String.size sub1
|
{ idx = prevIdx + String.size sub1
|
||||||
, line =
|
, line =
|
||||||
@@ -1914,15 +1904,19 @@ struct
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
(* Cannot join while staying in limit. *)
|
(* Cannot join while staying in limit. *)
|
||||||
deleteLeftFromHere
|
let
|
||||||
( start
|
val _ = print "1922"
|
||||||
, prevIdx
|
in
|
||||||
, curLine - Vector.length leftLinesHd
|
deleteLeftFromHere
|
||||||
, leftStringsTl
|
( start
|
||||||
, leftLinesTl
|
, prevIdx
|
||||||
, leftStringsHd :: rightStrings
|
, curLine - Vector.length leftLinesHd
|
||||||
, leftLinesHd :: rightLines
|
, leftStringsTl
|
||||||
)
|
, leftLinesTl
|
||||||
|
, leftStringsHd :: rightStrings
|
||||||
|
, leftLinesHd :: rightLines
|
||||||
|
)
|
||||||
|
end
|
||||||
| (_, _) =>
|
| (_, _) =>
|
||||||
(* Left strings and lines are empty, so just return. *)
|
(* Left strings and lines are empty, so just return. *)
|
||||||
{ idx = 0
|
{ idx = 0
|
||||||
@@ -1954,63 +1948,83 @@ struct
|
|||||||
, rightLines
|
, rightLines
|
||||||
) =
|
) =
|
||||||
if start > curIdx then
|
if start > curIdx then
|
||||||
moveRightAndDelete
|
let
|
||||||
( start
|
val _ = println "1963"
|
||||||
, finish
|
in
|
||||||
, curIdx
|
moveRightAndDelete
|
||||||
, curLine
|
( start
|
||||||
, leftStrings
|
, finish
|
||||||
, leftLines
|
, curIdx
|
||||||
, rightStrings
|
, curLine
|
||||||
, rightLines
|
, leftStrings
|
||||||
)
|
, leftLines
|
||||||
|
, rightStrings
|
||||||
|
, rightLines
|
||||||
|
)
|
||||||
|
end
|
||||||
else if start < curIdx then
|
else if start < curIdx then
|
||||||
if finish <= curIdx then
|
if finish <= curIdx then
|
||||||
moveLeftAndDelete
|
let
|
||||||
( start
|
val _ = println "1976"
|
||||||
, finish
|
in
|
||||||
, curIdx
|
moveLeftAndDelete
|
||||||
, curLine
|
( start
|
||||||
, leftStrings
|
, finish
|
||||||
, leftLines
|
, curIdx
|
||||||
, rightStrings
|
, curLine
|
||||||
, rightLines
|
, leftStrings
|
||||||
)
|
, leftLines
|
||||||
|
, rightStrings
|
||||||
|
, rightLines
|
||||||
|
)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
deleteFromLetAndRight
|
let
|
||||||
( start
|
val _ = println "1988"
|
||||||
, finish
|
in
|
||||||
, curIdx
|
deleteFromLetAndRight
|
||||||
|
( start
|
||||||
|
, finish
|
||||||
|
, curIdx
|
||||||
|
, curLine
|
||||||
|
, leftStrings
|
||||||
|
, leftLines
|
||||||
|
, rightStrings
|
||||||
|
, rightLines
|
||||||
|
)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
let
|
||||||
|
val _ = println "2000"
|
||||||
|
in
|
||||||
|
deleteRightFromHere
|
||||||
|
( curIdx
|
||||||
, curLine
|
, curLine
|
||||||
|
, curIdx
|
||||||
|
, finish
|
||||||
, leftStrings
|
, leftStrings
|
||||||
, leftLines
|
, leftLines
|
||||||
, rightStrings
|
, rightStrings
|
||||||
, rightLines
|
, rightLines
|
||||||
)
|
)
|
||||||
else
|
end
|
||||||
deleteRightFromHere
|
|
||||||
( curIdx
|
|
||||||
, curLine
|
|
||||||
, curIdx
|
|
||||||
, finish
|
|
||||||
, leftStrings
|
|
||||||
, leftLines
|
|
||||||
, rightStrings
|
|
||||||
, rightLines
|
|
||||||
)
|
|
||||||
in
|
in
|
||||||
fun delete (start, length, buffer: t) =
|
fun delete (start, length, buffer: t) =
|
||||||
if length > 0 then
|
if length > 0 then
|
||||||
del
|
let
|
||||||
( start
|
val _ = println "deleting..."
|
||||||
, start + length
|
in
|
||||||
, #idx buffer
|
del
|
||||||
, #line buffer
|
( start
|
||||||
, #leftStrings buffer
|
, start + length
|
||||||
, #leftLines buffer
|
, #idx buffer
|
||||||
, #rightStrings buffer
|
, #line buffer
|
||||||
, #rightLines buffer
|
, #leftStrings buffer
|
||||||
)
|
, #leftLines buffer
|
||||||
|
, #rightStrings buffer
|
||||||
|
, #rightLines buffer
|
||||||
|
)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
buffer
|
buffer
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user