resolve conflicts
Dependencies
- [2]
FBBHEUQNresolve conflicts - [3]
OXIU3SJ2bugfix #3, attempt #2 in search UI - [4]
KKMFQDR4editing source code from within the app - [5]
5ZA3BRNYadd state arg to a few functions - [6]
T4FRZSYLdelete an ancient, unused file - [7]
4FTOQOPZbugfix #2 in search UI - [8]
2L5MEZV3experiment: new edit namespace - [9]
4YDBYBA4clean up memory leak experiments - [10]
YXQOITYSMerge lines.love - [11]
CRBLAWBOresolve conflicts - [12]
CE4LZV4Tdrop last couple of manual tests - [13]
VXORMHMEdelete experimental REPL - [14]
NVSC4N4Kchange a helper slightly - [15]
RXMHAZ6Vresolve conflicts - [16]
T6A5SZGBbugfix: restart search on backspace - [17]
6PRGXS6Xbugfix #3 in search UI - [18]
BULPIBEGbeginnings of a module for the text editor - [19]
73OCE2MCafter much struggle, a brute-force undo - [20]
OI4FPFINsupport drawings in the source editor - [21]
MBAJPTDJresolve conflicts - [22]
TVCPXAAUrename - [23]
R2ASHK5Cfix a bad merge - [24]
TLOAPLBJadd a license - [25]
LF7BWEG4group all editor globals - [26]
LNUHQOGHstart passing in Editor_state explicitly - [27]
RAXUQQ6ZMerge lines.love - [28]
KMSL74GAsupport selections in the source editor - [29]
KKQKPGCIresolve conflicts - [30]
IENTL2ITindent - [31]
QZUFJMD5resolve conflicts - [32]
SYWQBIO5resolve conflicts - [33]
OGUV4HSAremove some memory leaks from rendered fragments - [34]
I4S4EFYXMerge lines.love - [35]
FS2ITYYHrecord a known issue - [36]
GVJEOWYQresolve conflicts - [37]
TOXPJJYYresolve conflicts - [38]
AVTNUQYRbasic test-enabled framework - [39]
2TQUKHBCMerge lines.love - [40]
6LJZN727handle chords - [41]
2CTN2IEFMerge lines.love - [42]
7YGYHOEOMerge lines.love - [43]
JOPVPUSAediting source code from within the app - [44]
7VGDIPLCmore robust state validation - [45]
R5QXEHUIsomebody stop me - [46]
K2X6G75Zstart writing some tests for drawings - [47]
IX5YTLSVstate validation in source editor as well - [48]
LWPFEZBIMerge lines.love - [49]
3XNFQDDNMerge lines.love - [50]
34BZ5ZKNMerge lines.love - [51]
VP5KC4XZMerge lines.love - [52]
2H76FV5Sbugfix: searching files containing unicode - [53]
ISOFHXB2App.width can no longer take a Text - [54]
RSZD5A7Gforgot to add json.lua - [55]
SGMA5JLEsave the list of tests in repo - [56]
6VJTQKW7start supporting LÖVE v12 - [57]
3PSFWAILMerge lines.love - [58]
TBTRYEBPMerge lines.love - [59]
QMRQL2FOresolve conflicts - [60]
VHQCNMARseveral more modules - [61]
D2GCFTTTclean up repl functionality - [62]
4J3Y3DJWpijul bug: redo upstream change - [63]
66X36NZNa little more prose describing manual_tests - [64]
BJ5X5O4Alet's prevent the text cursor from ever getting on a drawing - [65]
LXTTOB33extract a couple of files - [66]
N2NUGNN4include a brief reference enabling many useful apps - [67]
QXXISTGEresolve conflicts - [68]
G54H3YG2get rid of all bifold text - [69]
ZLJYLPOTMerge lines.love - [70]
TFUNIT6Mresolve conflicts - [71]
O7YTBRQYbugfix: restart search on backspace - [72]
TYLURRX3resolve conflicts - [73]
XX7G2FFJintermingle freehand line drawings with text - [74]
BLWAYPKVextract a module - [75]
U3MJNFUYMerge lines.love - [76]
4SR3Z4Y3document the version of LÖVE I've been using - [77]
ED4Z6ORCcleaner API for file-system access - [78]
WKXJNESIresolve conflicts - [79]
CQVWNL4Mresolve conflicts - [80]
ORRSP7FVdeduce test names on failures - [81]
3QNOKBFMbeginnings of a test harness - [82]
A4BSGS2CMerge lines.love - [83]
OTIBCAUJlove2d scaffold - [84]
VHUNJHXBMerge lines.love - [85]
ORKN6EOBMerge lines.love
Change contents
- file deletion: source_text_tests.lua source_text_tests.lua
endfunction test_search_downwards_from_end_of_line()App.screen.init{width=120, height=60}Editor_state = edit.initialize_test_state()Editor_state.lines = load_array{'abc', 'def', 'ghi'}Text.redraw_all(Editor_state)Editor_state.cursor1 = {line=1, pos=4}Editor_state.screen_top1 = {line=1, pos=1}edit.draw(Editor_state)-- search for empty stringedit.run_after_keychord(Editor_state, 'C-f', 'f')edit.run_after_keychord(Editor_state, 'down', 'down')-- no crashendEditor_state.screen_top1 = {line=1, pos=1}edit.draw(Editor_state)-- search for empty stringedit.run_after_keychord(Editor_state, 'C-f', 'f')edit.run_after_keychord(Editor_state, 'down', 'down')-- no crashendfunction test_search_downwards_from_final_pos_of_line()App.screen.init{width=120, height=60}Editor_state = edit.initialize_test_state()Editor_state.lines = load_array{'abc', 'def', 'ghi'}Text.redraw_all(Editor_state)Editor_state.cursor1 = {line=1, pos=3} - file deletion: source_edit.lua source_edit.lua
local line = State.cursor1.linewhile line < #State.lines doline = line+1if State.lines[line].mode == 'text' thenState.cursor1.line = lineState.cursor1.pos = 1endendfunction edit.put_cursor_on_next_text_line_wrapping_around_if_necessary(State)local line = State.cursor1.linelocal max = #State.linesfor _ = 1, max-1 doline = (line+1) % maxif State.lines[line].mode == 'text' thenState.cursor1.line = lineState.cursor1.pos = 1endendfunction edit.put_cursor_on_next_text_loc_wrapping_around_if_necessary(State)local cursor_line = State.lines[State.cursor1.line].dataif State.cursor1.pos <= utf8.len(cursor_line) thenState.cursor1.pos = State.cursor1.pos + 1elseedit.put_cursor_on_next_text_line_wrapping_around_if_necessary(State)State.cursor = deepcopy(State.search_backup.cursor)State.screen_top = deepcopy(State.search_backup.screen_top)Text.search_next(State)if #State.search_term > 0 thenedit.put_cursor_on_next_text_loc_wrapping_around_if_necessary(State)Text.search_next(State)endText.search_previous(State)endreturnelseif chord == 'C-f' thenState.search_term = ''State.search_backup = {elseif chord == 'up' thenelseif chord == 'down' thenendbreakendbreakend - edit in source_text_tests.lua at line 2075
endfunction test_search_downwards_from_end_of_line()App.screen.init{width=120, height=60}Editor_state = edit.initialize_test_state()Editor_state.lines = load_array{'abc', 'def', 'ghi'}Text.redraw_all(Editor_state)Editor_state.cursor1 = {line=1, pos=4}Editor_state.screen_top1 = {line=1, pos=1}edit.draw(Editor_state)-- search for empty stringedit.run_after_keychord(Editor_state, 'C-f', 'f')edit.run_after_keychord(Editor_state, 'down', 'down')-- no crashendfunction test_search_downwards_from_final_pos_of_line()App.screen.init{width=120, height=60}Editor_state = edit.initialize_test_state()Editor_state.lines = load_array{'abc', 'def', 'ghi'}Text.redraw_all(Editor_state)Editor_state.cursor1 = {line=1, pos=3}Editor_state.screen_top1 = {line=1, pos=1}edit.draw(Editor_state)-- search for empty stringedit.run_after_keychord(Editor_state, 'C-f', 'f')edit.run_after_keychord(Editor_state, 'down', 'down')-- no crash - replacement in source_edit.lua at line 145
while true doif State.cursor1.line >= #State.lines thenlocal line = State.cursor1.linewhile line < #State.lines doline = line+1if State.lines[line].mode == 'text' thenState.cursor1.line = lineState.cursor1.pos = 1 - replacement in source_edit.lua at line 153
if State.lines[State.cursor1.line].mode == 'text' thenendendfunction edit.put_cursor_on_next_text_line_wrapping_around_if_necessary(State)local line = State.cursor1.linelocal max = #State.linesfor _ = 1, max-1 doline = (line+1) % maxif State.lines[line].mode == 'text' thenState.cursor1.line = lineState.cursor1.pos = 1 - replacement in source_edit.lua at line 166
State.cursor1.line = State.cursor1.line+1State.cursor1.pos = 1endendfunction edit.put_cursor_on_next_text_loc_wrapping_around_if_necessary(State)local cursor_line = State.lines[State.cursor1.line].dataif State.cursor1.pos <= utf8.len(cursor_line) thenState.cursor1.pos = State.cursor1.pos + 1elseedit.put_cursor_on_next_text_line_wrapping_around_if_necessary(State) - replacement in source_edit.lua at line 431
elseif chord == 'down' thenState.cursor1.pos = State.cursor1.pos+1State.cursor = deepcopy(State.search_backup.cursor)State.screen_top = deepcopy(State.search_backup.screen_top) - edit in source_edit.lua at line 434
elseif chord == 'down' thenif #State.search_term > 0 thenedit.put_cursor_on_next_text_loc_wrapping_around_if_necessary(State)Text.search_next(State)end - edit in edit.lua at line 98
endfunction edit.put_cursor_on_next_text_line_wrapping_around_if_necessary(State)local line = State.cursor1.linelocal max = #State.linesfor _ = 1, max-1 doline = (line+1) % maxif State.lines[line].mode == 'text' thenState.cursor1.line = lineState.cursor1.pos = 1breakendendendfunction edit.put_cursor_on_next_loc_wrapping_around_if_necessary(State)local cursor_line = State.lines[State.cursor1.line].dataif State.cursor1.pos <= utf8.len(cursor_line) thenState.cursor1.pos = State.cursor1.pos + 1elseedit.put_cursor_on_next_text_line_wrapping_around_if_necessary(State)end - replacement in edit.lua at line 308
State.cursor1.pos = State.cursor1.pos+1Text.search_next(State)if #State.search_term > 0 thenedit.put_cursor_on_next_loc_wrapping_around_if_necessary(State)Text.search_next(State)end - edit in edit.lua at line 469[4.12430]→[2.429:429](∅→∅),[4.394]→[4.2561:2889](∅→∅),[4.394]→[4.2561:2889](∅→∅),[4.394]→[4.2561:2889](∅→∅),[4.315]→[4.2256:2560](∅→∅),[4.315]→[4.2256:2560](∅→∅),[4.441]→[4.2067:2255](∅→∅),[4.441]→[4.2067:2255](∅→∅),[4.441]→[4.2067:2255](∅→∅),[4.11621]→[3.35:191](∅→∅),[4.11621]→[3.35:191](∅→∅),[4.11710]→[4.198:232](∅→∅),[4.11710]→[4.198:232](∅→∅)
endendfunction edit.put_cursor_on_next_text_loc_wrapping_around_if_necessary(State)local cursor_line = State.lines[State.cursor1.line].dataif State.cursor1.pos <= utf8.len(cursor_line) thenState.cursor1.pos = State.cursor1.pos + 1elseedit.put_cursor_on_next_text_line_wrapping_around_if_necessary(State)endendfunction edit.put_cursor_on_next_text_line_wrapping_around_if_necessary(State)local line = State.cursor1.linelocal max = #State.linesfor _ = 1, max-1 doline = (line+1) % maxif State.lines[line].mode == 'text' thenState.cursor1.line = lineState.cursor1.pos = 1local line = State.cursor1.linewhile line < #State.lines doline = line+1if State.lines[line].mode == 'text' thenState.cursor1.line = lineState.cursor1.pos = 1if #State.search_term > 0 thenedit.put_cursor_on_next_text_loc_wrapping_around_if_necessary(State)Text.search_next(State)endText.search_previous(State) - resolve order conflict in edit.lua at line 469[4.12430]