separate data structure for each line's cache data
[?]
Jul 18, 2022, 4:05 AM
ILOA5BYFTQKBSHLFMMZUVPQ2JXBFJD62ERQFBTDK2WSRXUN525VQCDependencies
- [2]
WLWNS6FBa bug I've never run into - [3]
CNCYMM6Amake test initializations a little more obvious - [4]
LSYLEVBDdrop some redundant args when clearing the cache - [5]
FKNXK2OAswitch to line index in a function - [6]
EM276IH3make a function oblivious to line data structure - [7]
HGC5RGJPswitch to line index in a function - [8]
WZFMGVDTswitch to line index in a function - [9]
BW2IUB3Kkeep all text cache writes inside text.lua - [10]
R53OF3ONone bug I've repeatedly run into while testing with Moby Dick - [11]
2H67P75Xswitch arg for a function - [12]
OGUV4HSAremove some memory leaks from rendered fragments - [13]
LERERVPHkeep one screen line of overlap on pagedown - [14]
HPVT467Winitialize contains test state - [15]
2L5MEZV3experiment: new edit namespace - [16]
LXTTOB33extract a couple of files - [17]
EMRPLZPWdrop an arg from a function - [18]
K4OBZSHEadd args to some functions - [19]
UHB4GARJleft/right margin -> left/right coordinates - [20]
65XHTZEKregression: couldn't do many drawing operations because line.y was reset - [21]
U52E2XZNfix a crash - [22]
DLQMM265scroll past first page - [23]
H22OAXWEcouple of TODOs - [24]
ODLKHO7Bswitch to line index in a function - [25]
XNFTJHC4split keyboard handling between Text and Drawing - [26]
CTJ3IZGSadd args to some functions - [27]
CCYSVZA2bugfix: BSOD in #4. - [28]
2TQR4PSYadd args to some functions - [29]
M6TH7VSZrip out notion of Line_width - [30]
R5OKMVVCfix a regression in line wrapping - [31]
GCEF4N3Vstop repeatedly checking for line wrapping - [32]
HYEAFRZ2split mouse_pressed events between Text and Drawing - [33]
P66MRF3Ubugfix: don't append metadata when it already exists - [34]
CPZGQT72go through and fix similar issues - [35]
537TQ2QNsome more logging - [36]
WOXIYUTLbugfix: manage screen_top and cursor when resizing - [37]
WLJCIXYMadd state arg to a few functions - [38]
SPSW74Y5add state arg to Text.keychord_pressed - [39]
H2DPLWMVsnapshot: wrapping long lines at word boundaries - [40]
C45WCXJ2keep drawings within the line width slider as well - [41]
3ZSUBI57drop some redundant args from Text.draw - [42]
PESSMQBJno, make sure to compute line width after screen dimensions - [43]
Z5HLXU4Padd state arg to a few functions - [44]
4RUI5X52a few tests for pageup, and a bugfix - [45]
HOSPP2ANcrisp font rendering - [46]
QCPXQ2E3add state arg to a few functions - [47]
QYIFOHW3first test! - [48]
MXA3RZYKdeduce left/right from state where possible - [49]
IMEJA43Lsnapshot - [50]
YTSPVDZHfirst successful pagedown test, first bug found by test - [51]
BULPIBEGbeginnings of a module for the text editor - [52]
242L3OQXbugfix: ensure Cursor_line is always on a text line - [53]
J6WEC2D6. - [54]
PFT5Y2ZYmove - [55]
ZPUQSPQPextract a few methods - [56]
5L7K4GBDclicking to the right of a wrapped line - [57]
PR4KIAZDfirst stab at equally hacky cursor down support - [58]
52ZZ5TIEswitch to line index in a function - [59]
OYXDYPGSget rid of debug variables - [60]
KZ5GAYRPthis fixes the immediate regression - [61]
CBPV5SSIstop handling nil screen_line_starting_pos everywhere - [62]
LF7BWEG4group all editor globals - [63]
CVGE3SIGI feel confident now that page-down is working. - [64]
IWYLK45Kclicking to the right of a line within line width - [65]
PLKNHYZ4extract a function - [66]
4VKEE43Zbugfix - [67]
DGK5BPVIbugfix: UTF-8 in compute_fragments - [68]
GK47BBCYstart passing left/right margins everywhere - [69]
UV4EWOLYadd args to some functions - [70]
MYC7XR5Qbugfix: lines that aren't drawn from the start - [71]
3OKKTUT4up and down arrow now moving by screen line where possible - [72]
WY3JD6W6bugfix - [73]
A2NV3WVOscrolling with up arrow - [74]
5DOTWNVMright margin - [75]
GJLOKCYKbugfix: clicking past end of screen line - [76]
SVJZZDC3snapshot - no, that's all wrong - [77]
NDHQN23Gdone passing left/right margins everywhere - [78]
YLKLDF4R. - [79]
DHI6IJCNselecting text and deleting selections - [80]
JY4VK7L2rename - [81]
BOFNXP5Gclicking now moves the cursor even on long, wrapped lines - [82]
5FW7YOFThighlight selection while dragging - [83]
2RXZ3PGObeginning of a new approach to scroll+wrap - [84]
73OCE2MCafter much struggle, a brute-force undo - [85]
LAW2O3NWextract variable Margin_left - [86]
4KC7I3E2make colors easier to edit - [*]
VJ77YABHmore efficient undo/redo - [*]
LNUHQOGHstart passing in Editor_state explicitly - [*]
DSLD74DKlots more tests - [*]
S2MISTTMadd state arg to a few functions - [*]
OTIBCAUJlove2d scaffold - [*]
WJBZZQE4fold together two largely similar cases - [*]
K2X6G75Zstart writing some tests for drawings
Change contents
- edit in undo.lua at line 98
function patch_placeholders(line_cache, from, to)assert(from.start_line == to.start_line)for i=from.end_line,from.start_line,-1 dotable.remove(line_cache, i)endassert(#to.lines == to.end_line-to.start_line+1)for i=1,#to.lines dotable.insert(line_cache, to.start_line+i-1, {})endend - edit in text_tests.lua at line 8
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 22
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 36
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 50
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 63
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 75
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 87
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 99
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 112
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 125
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 137
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 149
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 161
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 173
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 185
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 198
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 210
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 222
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 234
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 246
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 260
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 278
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 294
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 312
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 330
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 349
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 368
Text.redraw_all(Editor_state) - replacement in text_tests.lua at line 386[10.41]→[10.153:190](∅→∅),[3.1317]→[10.153:190](∅→∅),[10.3364]→[10.153:190](∅→∅),[10.153]→[10.153:190](∅→∅)
-- 12345678901234-- 12345678901234 - edit in text_tests.lua at line 388
Text.redraw_all(Editor_state) - replacement in text_tests.lua at line 410[10.81]→[10.259:296](∅→∅),[3.1364]→[10.259:296](∅→∅),[10.3499]→[10.259:296](∅→∅),[10.259]→[10.259:296](∅→∅)
-- 12345678901234-- 12345678901234 - edit in text_tests.lua at line 412
Text.redraw_all(Editor_state) - replacement in text_tests.lua at line 432[10.121]→[10.1053:1090](∅→∅),[3.1411]→[10.1053:1090](∅→∅),[10.3634]→[10.1053:1090](∅→∅),[10.1053]→[10.1053:1090](∅→∅)
-- 12345678901234-- 12345678901234 - edit in text_tests.lua at line 434
Text.redraw_all(Editor_state) - replacement in text_tests.lua at line 457[10.161]→[10.216:253](∅→∅),[3.1458]→[10.216:253](∅→∅),[10.3769]→[10.216:253](∅→∅),[10.216]→[10.216:253](∅→∅)
-- 12345678901234-- 12345678901234 - edit in text_tests.lua at line 459
Text.redraw_all(Editor_state) - replacement in text_tests.lua at line 482[10.202]→[10.248:335](∅→∅),[3.1505]→[10.248:335](∅→∅),[10.3904]→[10.248:335](∅→∅),[10.248]→[10.248:335](∅→∅)
-- 0 1 2-- 123456789012345678901-- 0 1 2-- 123456789012345678901 - edit in text_tests.lua at line 485
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 505
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 528
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 547
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 565
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 588
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 607
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 626
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 647
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 672
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 695
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 725
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 743
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 773
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 791
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 812
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 837
Text.redraw_all(Editor_state)Text.redraw_all(Editor_state) - edit in text_tests.lua at line 869
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 886
Text.redraw_all(Editor_state) - replacement in text_tests.lua at line 913
'```lines', '```', -- height 25'def', -- height 15'ghi'} -- height 15'```lines', '```', -- height 25'def', -- height 15'ghi'} -- height 15Text.redraw_all(Editor_state) - edit in text_tests.lua at line 942
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 973
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1001
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1032
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1061
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1091
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1120
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1155
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1185
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1214
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1243
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1274
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1302
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1328
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1358
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1386
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1416
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1440
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1460
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1492
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1522
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1553
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1583
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1614
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1649
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1679
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1709
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1726
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1746
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1764
Editor_state = edit.initialize_test_state() - edit in text_tests.lua at line 1765
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1784
Editor_state = edit.initialize_test_state() - edit in text_tests.lua at line 1785
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1804
Editor_state = edit.initialize_test_state() - edit in text_tests.lua at line 1805
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1824
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1860
Text.redraw_all(Editor_state) - edit in text_tests.lua at line 1899
Text.redraw_all(Editor_state) - replacement in text.lua at line 15
line.starty = yline.startpos = startposlocal line_cache = State.text_line_cache[line_index]line_cache.starty = yline_cache.startpos = startpos - replacement in text.lua at line 22
if line.fragments == nil thenif line_cache.fragments == nil then - replacement in text.lua at line 27[10.19]→[10.1901:1941](∅→∅),[10.39]→[10.1901:1941](∅→∅),[10.64]→[10.1901:1941](∅→∅),[10.75]→[10.1901:1941](∅→∅),[10.1901]→[10.1901:1941](∅→∅)
for _, f in ipairs(line.fragments) dofor _, f in ipairs(line_cache.fragments) do - replacement in text.lua at line 99[10.46]→[10.51:73](∅→∅),[10.141]→[10.51:73](∅→∅),[7.186]→[10.51:73](∅→∅),[10.1209]→[10.51:73](∅→∅),[10.3803]→[10.51:73](∅→∅),[10.6702]→[10.51:73](∅→∅),[10.51]→[10.51:73](∅→∅)
line.fragments = {}local line_cache = State.text_line_cache[line_index]line_cache.fragments = {} - replacement in text.lua at line 125
table.insert(line.fragments, {data=frag1, text=frag1_text})table.insert(line_cache.fragments, {data=frag1, text=frag1_text}) - replacement in text.lua at line 135
table.insert(line.fragments, {data=frag, text=frag_text})table.insert(line_cache.fragments, {data=frag, text=frag_text}) - edit in text.lua at line 210
table.remove(State.text_line_cache, State.cursor1.line-1) - edit in text.lua at line 216
table.remove(State.text_line_cache, State.cursor1.line) - replacement in text.lua at line 254[10.3907]→[10.3907:4029](∅→∅),[10.3469]→[10.3743:3754](∅→∅),[10.4029]→[10.3743:3754](∅→∅),[10.61894]→[10.3743:3754](∅→∅),[10.3743]→[10.3743:3754](∅→∅)
if State.lines[State.cursor1.line+1].mode == 'drawing' thentable.remove(State.lines, State.cursor1.line+1)elseif State.lines[State.cursor1.line+1].mode == 'text' then - edit in text.lua at line 257
table.remove(State.lines, State.cursor1.line+1) - edit in text.lua at line 258
table.remove(State.lines, State.cursor1.line+1)table.remove(State.text_line_cache, State.cursor1.line+1) - edit in text.lua at line 352
table.insert(State.text_line_cache, State.cursor1.line+1, {}) - edit in text.lua at line 355
Text.clear_screen_line_cache(State, State.cursor1.line+1) - replacement in text.lua at line 424
local screen_line_starting_pos = State.lines[State.cursor1.line].screen_line_starting_poslocal screen_line_starting_pos = State.text_line_cache[State.cursor1.line].screen_line_starting_pos - replacement in text.lua at line 446
new_screen_line_starting_pos = State.lines[State.cursor1.line].screen_line_starting_pos[screen_line_index-1]new_screen_line_starting_pos = State.text_line_cache[State.cursor1.line].screen_line_starting_pos[screen_line_index-1] - replacement in text.lua at line 489
new_screen_line_starting_pos = State.lines[State.cursor1.line].screen_line_starting_pos[screen_line_index+1]new_screen_line_starting_pos = State.text_line_cache[State.cursor1.line].screen_line_starting_pos[screen_line_index+1] - replacement in text.lua at line 626
for i=#State.lines[State.cursor1.line].screen_line_starting_pos,1,-1 dolocal spos = State.lines[State.cursor1.line].screen_line_starting_pos[i]for i=#State.text_line_cache[State.cursor1.line].screen_line_starting_pos,1,-1 dolocal spos = State.text_line_cache[State.cursor1.line].screen_line_starting_pos[i] - replacement in text.lua at line 637
local screen_lines = State.lines[State.cursor1.line].screen_line_starting_poslocal screen_lines = State.text_line_cache[State.cursor1.line].screen_line_starting_pos - edit in text.lua at line 656
table.insert(State.text_line_cache, {}) - replacement in text.lua at line 703[10.36]→[10.1014:1085](∅→∅),[10.48]→[10.1014:1085](∅→∅),[10.88]→[10.1014:1085](∅→∅),[10.2924]→[10.1014:1085](∅→∅),[10.3927]→[10.1014:1085](∅→∅),[10.47]→[10.1014:1085](∅→∅)
if line.starty == nil then return false end -- outside current pagelocal line_cache = State.text_line_cache[line_index]if line_cache.starty == nil then return false end -- outside current page - replacement in text.lua at line 706
if y < line.starty then return false endif y < line_cache.starty then return false end - replacement in text.lua at line 708
return y < line.starty + State.line_height*(#line.screen_line_starting_pos - Text.screen_line_index(line.screen_line_starting_pos, line.startpos) + 1)return y < line_cache.starty + State.line_height*(#line_cache.screen_line_starting_pos - Text.screen_line_index(line_cache.screen_line_starting_pos, line_cache.startpos) + 1) - replacement in text.lua at line 714[10.59]→[10.3:35](∅→∅),[5.98]→[10.3:35](∅→∅),[10.1358]→[10.3:35](∅→∅),[10.1810]→[10.3:35](∅→∅),[10.3091]→[10.3:35](∅→∅),[10.4120]→[10.3:35](∅→∅),[10.4536]→[10.3:35](∅→∅),[10.628]→[10.3:35](∅→∅)
if line.fragments == nil thenlocal line_cache = State.text_line_cache[line_index]if line_cache.fragments == nil then - replacement in text.lua at line 718
assert(my >= line.starty)assert(my >= line_cache.starty) - replacement in text.lua at line 720[10.904]→[10.1282:1306](∅→∅),[10.1306]→[6.157:260](∅→∅),[6.260]→[10.1384:1554](∅→∅),[10.1384]→[10.1384:1554](∅→∅)
local y = line.startylocal start_screen_line_index = Text.screen_line_index(line.screen_line_starting_pos, line.startpos)for screen_line_index = start_screen_line_index,#line.screen_line_starting_pos dolocal screen_line_starting_pos = line.screen_line_starting_pos[screen_line_index]local y = line_cache.startylocal start_screen_line_index = Text.screen_line_index(line_cache.screen_line_starting_pos, line_cache.startpos)for screen_line_index = start_screen_line_index,#line_cache.screen_line_starting_pos dolocal screen_line_starting_pos = line_cache.screen_line_starting_pos[screen_line_index] - replacement in text.lua at line 731
if screen_line_index < #line.screen_line_starting_pos and mx > Text.screen_line_width(State, line_index, screen_line_index) thenif screen_line_index < #line_cache.screen_line_starting_pos and mx > Text.screen_line_width(State, line_index, screen_line_index) then - replacement in text.lua at line 733
return line.screen_line_starting_pos[screen_line_index+1]-1return line_cache.screen_line_starting_pos[screen_line_index+1]-1 - replacement in text.lua at line 746
local start_pos = line.screen_line_starting_pos[i]local line_cache = State.text_line_cache[line_index]local start_pos = line_cache.screen_line_starting_pos[i] - replacement in text.lua at line 750
if i < #line.screen_line_starting_pos thenlocal past_end_pos = line.screen_line_starting_pos[i+1]if i < #line_cache.screen_line_starting_pos thenlocal past_end_pos = line_cache.screen_line_starting_pos[i+1] - replacement in text.lua at line 854
for i=#State.lines[pos1.line].screen_line_starting_pos,1,-1 dolocal spos = State.lines[pos1.line].screen_line_starting_pos[i]for i=#State.text_line_cache[pos1.line].screen_line_starting_pos,1,-1 dolocal spos = State.text_line_cache[pos1.line].screen_line_starting_pos[i] - replacement in text.lua at line 869
result.pos = State.lines[pos2.line].screen_line_starting_pos[pos2.screen_line] + pos2.screen_pos - 1result.pos = State.text_line_cache[pos2.line].screen_line_starting_pos[pos2.screen_line] + pos2.screen_pos - 1 - replacement in text.lua at line 918
return {line=pos2.line-1, screen_line=#State.lines[pos2.line-1].screen_line_starting_pos, screen_pos=1}return {line=pos2.line-1, screen_line=#State.text_line_cache[pos2.line-1].screen_line_starting_pos, screen_pos=1} - replacement in text.lua at line 924[10.604]→[10.70:110](∅→∅),[10.712]→[10.70:110](∅→∅),[10.796]→[10.70:110](∅→∅),[10.2283]→[10.70:110](∅→∅)
if line.screen_line_starting_pos thenlocal line_cache = State.text_line_cache[line_index]if line_cache.screen_line_starting_pos then - replacement in text.lua at line 929
if line.fragments == nil thenif line_cache.fragments == nil then - replacement in text.lua at line 932
line.screen_line_starting_pos = {1}line_cache.screen_line_starting_pos = {1} - replacement in text.lua at line 935
for _, f in ipairs(line.fragments) dofor _, f in ipairs(line_cache.fragments) do - replacement in text.lua at line 941[10.858]→[10.194:249](∅→∅),[10.865]→[10.194:249](∅→∅),[10.2589]→[10.194:249](∅→∅),[10.194]→[10.194:249](∅→∅)
table.insert(line.screen_line_starting_pos, pos)table.insert(line_cache.screen_line_starting_pos, pos) - replacement in text.lua at line 955[10.652]→[10.221:314](∅→∅),[10.926]→[10.221:314](∅→∅),[10.3783]→[10.221:314](∅→∅),[10.221]→[10.221:314](∅→∅)
for i=2,#line.screen_line_starting_pos dolocal pos = line.screen_line_starting_pos[i]local line_cache = State.text_line_cache[State.screen_top1.line]for i=2,#line_cache.screen_line_starting_pos dolocal pos = line_cache.screen_line_starting_pos[i] - replacement in text.lua at line 963
local prev = line.screen_line_starting_pos[i-1]local prev = line_cache.screen_line_starting_pos[i-1] - replacement in text.lua at line 1000[10.732]→[4.303:351](∅→∅),[4.351]→[10.1828:1874](∅→∅),[10.5951]→[10.1828:1874](∅→∅),[10.78621]→[10.1828:1874](∅→∅),[10.4058]→[10.1828:1874](∅→∅),[10.1874]→[4.352:404](∅→∅)
for line_index,line in ipairs(State.lines) doline.starty = nilline.startpos = nilText.clear_screen_line_cache(State, line_index)State.text_line_cache = {}for i=1,#State.lines doState.text_line_cache[i] = {} - replacement in text.lua at line 1007
State.lines[line_index].fragments = nilState.lines[line_index].screen_line_starting_pos = nilState.text_line_cache[line_index].fragments = nilState.text_line_cache[line_index].screen_line_starting_pos = nil - edit in select.lua at line 152
table.remove(State.text_line_cache, i) - edit in main.lua at line 42
Text.redraw_all(Editor_state) - edit in main.lua at line 53
Text.redraw_all(Editor_state) - edit in edit.lua at line 41[10.94636]→[10.94636:94715](∅→∅),[10.94715]→[10.119:300](∅→∅),[10.300]→[10.94715:94918](∅→∅),[10.94715]→[10.94715:94918](∅→∅)
-- some cached data that's blown away and recomputed when data changes:-- startpos, the index of data the line starts rendering from (if currently on screen), can only be >1 for topmost line on screen-- starty, the y coord in pixels-- fragments: snippets of rendered love.graphics.Text, guaranteed to not wrap-- screen_line_starting_pos: optional array of grapheme indices if it wraps over more than one screen line - replacement in edit.lua at line 57
lines = {{mode='text', data=''}},lines = {{mode='text', data=''}}, -- array of lines - replacement in edit.lua at line 61
---- Therefore, any potential location for the cursor can be described in two ways:-- rendering wrapped text lines needs some additional short-lived data per line:-- startpos, the index of data the line starts rendering from, can only be >1 for topmost line on screen-- starty, the y coord in pixels the line starts rendering from-- fragments: snippets of rendered love.graphics.Text, guaranteed to not straddle screen lines-- screen_line_starting_pos: optional array of grapheme indices if it wraps over more than one screen linetext_line_cache = {},-- Given wrapping, any potential location for the text cursor can be described in two ways: - edit in edit.lua at line 124
assert(#State.lines == #State.text_line_cache) - edit in edit.lua at line 147
table.insert(State.text_line_cache, line_index, {}) - edit in edit.lua at line 350
patch_placeholders(State.text_line_cache, event.after, event.before) - edit in drawing_tests.lua at line 11
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 32
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 59
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 78
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 107
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 137
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 160
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 177
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 206
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 238
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 277
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 322
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 359
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 404
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 437
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 449
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 469
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 496
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 509
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 536
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 557
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 567
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 592
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 624
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 653
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 691
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 703
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 742
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 755
Text.redraw_all(Editor_state) - edit in drawing_tests.lua at line 783
Text.redraw_all(Editor_state)