diff --git a/src/line_gap.sml b/src/line_gap.sml index 1a62c15..c40d605 100644 --- a/src/line_gap.sml +++ b/src/line_gap.sml @@ -1268,7 +1268,9 @@ struct val lineDeleteEnd = binSearch (String.size newString - 1, rightLinesHd) val newLines = - if lineDeleteEnd >= 0 then + if Vector.length rightLinesHd = 0 orelse lineDeleteEnd < 0 then + Vector.fromList [] + else let val _ = println "1141" val slice = VectorSlice.slice @@ -1276,8 +1278,7 @@ struct in VectorSlice.vector slice end - else - Vector.fromList [] + val nextLine = curLine + Vector.length newLines in (* Try joining new string with left head if possible. *) @@ -1332,8 +1333,8 @@ struct val _ = println "1264" in deleteRightFromHere - ( nextIdx - , nextLine + ( curIdx + String.size newString + , curLine + Vector.length newLines , nextIdx , finish , newString :: leftStrings @@ -1718,15 +1719,18 @@ struct ) val newLines = let - val midpoint = binSearch - (String.size newString - 1, leftLinesHd) + val midpoint = forwardBinSearch (stringStart, leftLinesHd) in if midpoint >= 0 then let val _ = println "1640" in - Vector.tabulate (midpoint, fn idx => - Vector.sub (leftLinesHd, idx + 1) - stringStart) + Vector.tabulate + ( Vector.length leftLinesHd - midpoint + , fn idx => + Vector.sub (leftLinesHd, idx + midpoint) + - stringStart + ) end else Vector.fromList [] diff --git a/tests/compare_to_rope.sml b/tests/compare_to_rope.sml index 56267f2..dbc035f 100644 --- a/tests/compare_to_rope.sml +++ b/tests/compare_to_rope.sml @@ -16,12 +16,16 @@ struct val gapBuffer = if delNum > 0 then LineGap.delete (pos, delNum, gapBuffer) else gapBuffer + + val _ = LineGap.verifyIndex gapBuffer + val _ = LineGap.verifyLines gapBuffer + val gapBuffer = if strSize > 0 then LineGap.insert (pos, insStr, gapBuffer) else gapBuffer - val _ = LineGap.verifyIndex gapBuffer - val _ = LineGap.verifyLines gapBuffer + val _ = LineGap.verifyIndex gapBuffer + val _ = LineGap.verifyLines gapBuffer val ropeString = TinyRope.toString rope val gapBufferString = LineGap.toString gapBuffer