resolve conflicts
Dependencies
- [2]
FBBHEUQNresolve conflicts - [3]
OXIU3SJ2bugfix #3, attempt #2 in search UI - [4]
3QNOKBFMbeginnings of a test harness - [5]
OGUV4HSAremove some memory leaks from rendered fragments - [6]
CRBLAWBOresolve conflicts - [7]
I4S4EFYXMerge lines.love - [8]
O7YTBRQYbugfix: restart search on backspace - [9]
T4FRZSYLdelete an ancient, unused file - [10]
66X36NZNa little more prose describing manual_tests - [11]
K2X6G75Zstart writing some tests for drawings - [12]
4SR3Z4Y3document the version of LÖVE I've been using - [13]
BLWAYPKVextract a module - [14]
VHUNJHXBMerge lines.love - [15]
KKQKPGCIresolve conflicts - [16]
6PRGXS6Xbugfix #3 in search UI - [17]
SGMA5JLEsave the list of tests in repo - [18]
ZLJYLPOTMerge lines.love - [19]
5ZA3BRNYadd state arg to a few functions - [20]
2TQUKHBCMerge lines.love - [21]
7VGDIPLCmore robust state validation - [22]
TVCPXAAUrename - [23]
73OCE2MCafter much struggle, a brute-force undo - [24]
2H76FV5Sbugfix: searching files containing unicode - [25]
KMSL74GAsupport selections in the source editor - [26]
BJ5X5O4Alet's prevent the text cursor from ever getting on a drawing - [27]
7YGYHOEOMerge lines.love - [28]
AVTNUQYRbasic test-enabled framework - [29]
3PSFWAILMerge lines.love - [30]
4FTOQOPZbugfix #2 in search UI - [31]
D2GCFTTTclean up repl functionality - [32]
4YDBYBA4clean up memory leak experiments - [33]
LWPFEZBIMerge lines.love - [34]
QMRQL2FOresolve conflicts - [35]
LNUHQOGHstart passing in Editor_state explicitly - [36]
IENTL2ITindent - [37]
N2NUGNN4include a brief reference enabling many useful apps - [38]
YXQOITYSMerge lines.love - [39]
OI4FPFINsupport drawings in the source editor - [40]
CQVWNL4Mresolve conflicts - [41]
4J3Y3DJWpijul bug: redo upstream change - [42]
JOPVPUSAediting source code from within the app - [43]
GVJEOWYQresolve conflicts - [44]
QZUFJMD5resolve conflicts - [45]
XX7G2FFJintermingle freehand line drawings with text - [46]
A4BSGS2CMerge lines.love - [47]
IX5YTLSVstate validation in source editor as well - [48]
ISOFHXB2App.width can no longer take a Text - [49]
ED4Z6ORCcleaner API for file-system access - [50]
OTIBCAUJlove2d scaffold - [51]
2L5MEZV3experiment: new edit namespace - [52]
TFUNIT6Mresolve conflicts - [53]
ORRSP7FVdeduce test names on failures - [54]
6LJZN727handle chords - [55]
2CTN2IEFMerge lines.love - [56]
SYWQBIO5resolve conflicts - [57]
LF7BWEG4group all editor globals - [58]
VP5KC4XZMerge lines.love - [59]
KKMFQDR4editing source code from within the app - [60]
RXMHAZ6Vresolve conflicts - [61]
VXORMHMEdelete experimental REPL - [62]
CE4LZV4Tdrop last couple of manual tests - [63]
RAXUQQ6ZMerge lines.love - [64]
NVSC4N4Kchange a helper slightly - [65]
RSZD5A7Gforgot to add json.lua - [66]
TLOAPLBJadd a license - [67]
6VJTQKW7start supporting LÖVE v12 - [68]
R5QXEHUIsomebody stop me - [69]
3XNFQDDNMerge lines.love - [70]
VHQCNMARseveral more modules - [71]
ORKN6EOBMerge lines.love - [72]
TBTRYEBPMerge lines.love - [73]
MBAJPTDJresolve conflicts - [74]
TYLURRX3resolve conflicts - [75]
34BZ5ZKNMerge lines.love - [76]
WKXJNESIresolve conflicts - [77]
TOXPJJYYresolve conflicts - [78]
LXTTOB33extract a couple of files - [79]
G54H3YG2get rid of all bifold text - [80]
R2ASHK5Cfix a bad merge - [81]
QXXISTGEresolve conflicts - [82]
FS2ITYYHrecord a known issue - [83]
U3MJNFUYMerge lines.love - [84]
T6A5SZGBbugfix: restart search on backspace - [85]
BULPIBEGbeginnings of a module for the text editor
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]