amend problem with TextWindow.getStartLineBefore, where we were not following rule mentioned in previous commits to not count (graphical-chr -> \n) as line break

This commit is contained in:
2024-11-06 12:46:53 +00:00
parent 50d10c1a89
commit 6b9cf8dbc2
3 changed files with 24 additions and 23 deletions

View File

@@ -262,34 +262,34 @@ struct
let let
(* delete char at cursor and then decrement cursorIdx by 1 (* delete char at cursor and then decrement cursorIdx by 1
* if cursorIdx is not 0 *) * if cursorIdx is not 0 *)
val newBuffer = LineGap.delete (cursorIdx, 1, buffer) val buffer = LineGap.delete (cursorIdx, 1, buffer)
val cursorIdx = val cursorIdx =
if Cursor.isPrevChrStartOfLine (newBuffer, cursorIdx) if Cursor.isPrevChrStartOfLine (buffer, cursorIdx)
orelse cursorIdx = 0 then orelse cursorIdx = 0 then
cursorIdx cursorIdx
else cursorIdx - 1 else cursorIdx - 1
val newBuffer = LineGap.goToLine (startLine, newBuffer) val buffer = LineGap.goToLine (startLine, buffer)
val newApp = AppWith.bufferAndCursorIdx val newApp = AppWith.bufferAndCursorIdx
(app, newBuffer, cursorIdx, NORMAL_MODE "", startLine) (app, buffer, cursorIdx, NORMAL_MODE "", startLine)
val drawMsg = val drawMsg =
TextBuilder.build TextBuilder.build
(startLine, cursorIdx, newBuffer, windowWidth, windowHeight) (startLine, cursorIdx, buffer, windowWidth, windowHeight)
in in
(newApp, drawMsg) (newApp, drawMsg)
end end
else else
let let
val newBuffer = LineGap.delete (cursorIdx, 1, buffer) val buffer = LineGap.delete (cursorIdx, 1, buffer)
val newBuffer = LineGap.goToLine (startLine, newBuffer) val buffer = LineGap.goToLine (startLine, buffer)
val newApp = AppWith.bufferAndCursorIdx val newApp = AppWith.bufferAndCursorIdx
(app, newBuffer, cursorIdx, NORMAL_MODE "", startLine) (app, buffer, cursorIdx, NORMAL_MODE "", startLine)
val drawMsg = val drawMsg =
TextBuilder.build TextBuilder.build
(startLine, cursorIdx, newBuffer, windowWidth, windowHeight) (startLine, cursorIdx, buffer, windowWidth, windowHeight)
in in
(newApp, drawMsg) (newApp, drawMsg)
end end

View File

@@ -19,24 +19,25 @@ struct
(String.size hd - 1, hd, lineNum, absIdx, cursorIdx, tl) (String.size hd - 1, hd, lineNum, absIdx, cursorIdx, tl)
| [] => | [] =>
0 0
else
if absIdx <= cursorIdx then
lineNum
else else
let let
val chr = String.sub (shd, sIdx) val chr = String.sub (shd, sIdx)
in in
if chr = #"\n" then if chr = #"\n" then
if absIdx <> cursorIdx then if isPrevChrLn (shd, sIdx, stl) then
(* \n -> \n *)
getStartLineBefore getStartLineBefore
(sIdx - 1, shd, lineNum - 1, absIdx - 1, cursorIdx, stl) (sIdx - 1, shd, lineNum - 1, absIdx - 1, cursorIdx, stl)
else else
(* we have found cursor, and it is at \n *) (* graphical-chr -> \n *)
lineNum - 1
else
if absIdx <> cursorIdx then
getStartLineBefore getStartLineBefore
(sIdx - 1, shd, lineNum, absIdx - 1, cursorIdx, stl) (sIdx - 1, shd, lineNum, absIdx - 1, cursorIdx, stl)
else else
(* we have found cursor; return line *) getStartLineBefore
lineNum - 1 (sIdx - 1, shd, lineNum, absIdx - 1, cursorIdx, stl)
end end
fun getStartLineAfter fun getStartLineAfter

BIN
shf

Binary file not shown.