1853 Commits

Author SHA1 Message Date
161caee62a create DFA for Vi's 'l' motion 2025-09-17 02:31:38 +01:00
c94aa72015 create 'MakeIfCharFolderNext' functor, which mirrors the 'MakeIfCharFolderPrev' functor that we already have 2025-09-17 02:20:36 +01:00
97936b83a0 in TextBuilder functions, when we encounter a newline, we want any cursor here to be drawn after a linebreak (after the posX and posY values go to the next line) and not before 2025-09-16 22:29:19 +01:00
1adb74df2c pull in new brolib-sml changes (which just changes one particular function's name to be clearer), and modify code to use the correct name 2025-09-16 22:20:55 +01:00
c4fedc6434 fix 'Cursor.getLineStartIdx' function, which should look at the left nodes if there is no relevant line in this node 2025-09-16 22:09:15 +01:00
749a0d0e5f better naming for a function in line_gap.sml, making it clear that it takes an index and returns the line number that this index is at. 2025-09-16 21:48:05 +01:00
96521f358f when looping through a DFA in a functor, make sure we return the absolute index to the calling function and not a modified version of the absolute index which has already been clipped 2025-09-16 21:35:48 +01:00
12478f8ac2 remove references to 'Cursor.clipIdx' and delete that function once it is no longer used 2025-09-16 16:08:01 +01:00
578d3af5ec remove changes to temp.txt which were only for testing 2025-09-16 15:55:16 +01:00
19d2235686 refactor 'MakeNormalDelete.removeLineBreaks' function to remove function call to 'Cursor.clipIdx', instead relying on textLength field in buffer 2025-09-16 15:53:41 +01:00
2c5449dc0a rewrite 'MakeMove' functor in fcore/move.sml to use textLength field instead of Cursor.clipIdx function 2025-09-16 07:59:26 +01:00
148b108062 when using 'G' command to move to end fo file, use the 'textLength' field to calculate the new bufferIdx, which is more sensible than using the LineGap's idx for the same purpose 2025-09-16 07:52:47 +01:00
3d9bf962e7 handle additional deleteLine edge case 2025-09-16 07:40:58 +01:00
70ffea21b3 fix the last MakeNormalDelete.deleteLine bug: if we delete such that the startIdx (prior to deletion) becomes longer than the text in the buffer, we move the cursor to the start of the last line 2025-09-16 07:01:55 +01:00
6507b9d49c adjust MakeNormalDelete.deleteLine implementation slightly, because the previous implementation did not delete the last character when we are at the end of the file 2025-09-16 06:29:35 +01:00
bef4620cdb amend LineGap.append function: previously, we were calculating the updated textLength and lineLength, but we were not using them, instead passing the old parameters instead. Now we use them as well. 2025-09-16 05:36:26 +01:00
169f96f459 fix exception when the buffer is empty 2025-09-16 04:35:49 +01:00
0793744e24 minor bug fix: when we start looping backwards in a DFA and the rightStrings is empty, start iterating from leftStrings if possible 2025-09-16 03:05:33 +01:00
820a6c2462 copy new file order from shf.mlb to shf-tests.mlb, and remove split-string tests because we have tried to refactor string-search logic to be separate from the data structure 2025-09-16 01:25:27 +01:00
873fa1b1ac pull in update to brolib-sml, which gives us a LineGap that has textLength and lineLength fields 2025-09-14 15:54:59 +01:00
09fe611efb fix tracking of textLength and lineLength fields, which were previously buggy in only one delete branch; the current commit fixes that branch and verifies the tests pass 2025-09-14 15:48:26 +01:00
a95e90214d improve test reporting information a bit 2025-09-14 15:30:47 +01:00
1c59dbf943 implemented textLength and lineLength tracking in line_gap.sml: need to check if they are valid next 2025-09-14 15:23:53 +01:00
76dd6b2b2a begin tracking and adjusting textLength/lineLength for delete functions 2025-09-14 13:12:49 +01:00
eebf793fbf refactor test code to check if textLength and lineLength are also correct 2025-09-14 12:54:23 +01:00
92a98bfb56 update all functions in line_gap.sml to track textLength and lineLength, except for test code and delete functions 2025-09-14 12:41:50 +01:00
52f0da2751 refactor LineGap.append function to track textLength and lineLength 2025-09-14 12:27:11 +01:00
9927e6bf1c begin adding textLength and lineLength values in line_gap.sml (they are currently kept up to date only in the insert functions) 2025-09-14 12:22:15 +01:00
ae1772605b in TextBuilderWithHighlight.build, check when we encounter a \n if we would be past the last line, and return the acc if so, or else continue looping 2025-09-14 10:39:51 +01:00
9b34014af1 a few bug fixes to NORMAL_SEARCH_MODE: the main one is that we were passing the general searchString to the resize function before, and we were drawing the wrong string because of that; another bug fix is that, on resizing, we have to update the mode to contain the recalculated searchScrollColumn 2025-09-14 10:28:42 +01:00
0632f7a969 add horizontal scrolling functionality to SearchBar 2025-09-14 10:07:43 +01:00
f1a06f946d add searchScrollColumn to NORMAL_SEARCH_MODE variant, and update and recalculate it where needed 2025-09-14 09:50:07 +01:00
b556fc7d63 extract a reusable function to calculate the scroll column in different contexts (can be used for a plain string or a LineGap.t; doesn't matter) 2025-09-14 09:22:37 +01:00
428208f9bf when text is wide enough to be centered, also centre the search bar 2025-09-14 09:14:22 +01:00
4bc6c54951 in TextBuilder.build functions, when we encounter a space, check if we are before the scroll column's start, and set the x position to startX if so. This is done in preparation for the character which is actually at the scroll column's start, which will be added at the wrong offset unless we do this. 2025-09-14 08:42:46 +01:00
120568a18d modify 'TextBuilder.initEnv' function to take 'startX' and 'startY' parameters, instead of hardcoding the startX/Y inside the function, and change width/height calculations to take these parameters into account 2025-09-14 08:24:37 +01:00
2ab48626cd remove 'skipToFirstVisibleColumn' function in TextBuilder, as control flow is simpler if we have fewer mutually recursive functions and we can implement its functionality in the 'build' function instead. Also change the 'z' values for cursor and highlight; the cursor should appear above the highlight and now it does, but it previously didn't 2025-09-13 23:22:40 +01:00
7a388f2983 add TextScroll function for centering line to cursor, and use it in 'NormalFinish.centreToCursor' function 2025-09-13 18:23:55 +01:00
18d2579605 remove todo-exception from 'G' (NormalMove.goToEnd) command. The todo was a reminder to implement a way to get the scroll line when moving to the end. We have that implemented now. 2025-09-13 18:15:30 +01:00
bfb653e059 pull in new changes to brolib-sml, which fixes the LineGap.goToLine function to properly go to the start of the line 2025-09-13 18:04:23 +01:00
26862436d0 fix LineGap.goToLine bug: we weren't properly searching to check if the start of the searchLine was accessible in the node we stopped at 2025-09-13 17:58:42 +01:00
bbe39f90d4 move cursor to low/cursorIdx in helper function 2025-09-13 08:48:00 +01:00
9208c47622 fix exception caused by resizing in normal mode: we were passing 'buffer' to the TextScroll function previously, but we were meant to be passing 'newBuffer'. We are passing 'newBuffer' in this new commit as we are meant to. 2025-09-13 05:31:11 +01:00
2a332f543a minor adjustment to vertical TextScroll: we shouldn't need to move the cursor to the very line in the visible area, or the ver first line in the visible area, to scroll. We scroll if the cursorLine is some distance close to either edge instead. 2025-09-13 05:24:51 +01:00
668dd07699 pull in new version of brolib-sml so that we can get bug fixes for LineGap.getLineNumberOfIdx, delete the TextWindow structure (which was previously used to get the start line to draw from), and replace previous usages of TextWindow with TextScroll.getStartLine. This enables us to scroll in a way tailored to the reimplemented TextBuilder (which do not wrap lines or characters) 2025-09-13 05:12:17 +01:00
737e8695e7 fix bugs in helper functions for 'LineGap.getLineNumberOfIdx'. Main bug was that we were passing 'curLine' to 'getLineNumberRight' twice, instead of first passing 'curIdx' and then 'curLine' afterwards. 2025-09-13 04:55:27 +01:00
5c7ec252c2 don't index into line vector when getting line number from index; instead, just get how many previous-lines there are in the vector (if any) and add it to the line number of the current node. We do this because we are trying to get the line number of a particular index; accessing the line vector's contents (which are string indices) is not necessary nor helpful for that, but getting the relative line number is helpful for that 2025-09-13 03:51:33 +01:00
db6fd56aca perform bounds checking when we try to index into a vector, in LineGap's 'getLineNumberOfIdx' helper functions 2025-09-13 03:32:35 +01:00
a3b00e09d8 port over bug fixes from mutually recursive functions from test-builder-with-cursor.sml to text-builder-with-highlight.sml 2025-09-13 03:02:13 +01:00
916e94eaaa fix bug: when we want to skip to next line in TextBuilderWithCursor, we were using binary search on the search list. The search list contained the indices of matched searches, but what we wanted to use binary search on are the lines, as the lines can help us find the next linebreak if any. So, we perform binary search on the lines vector this time to fix the bug. 2025-09-13 02:48:07 +01:00