resolve conflicts
Dependencies
- [2]
TACI4LU6Merge lines.love - [3]
MX7YD2WCresolve conflicts - [4]
7JEYXICUresolve conflicts - [5]
QMRQL2FOresolve conflicts - [6]
4HAEKSJVdon't save settings on error in source editor - [7]
AQMZJXURuse editor state font for width calculations - [8]
P4376EXKadd state arg to few functions - [9]
QYIFOHW3first test! - [10]
BOFNXP5Gclicking now moves the cursor even on long, wrapped lines - [11]
V5MJRFOZbugfix: down arrow doesn't scroll up unnecessarily - [12]
4YDBYBA4clean up memory leak experiments - [13]
4SR3Z4Y3document the version of LÖVE I've been using - [14]
KV7GGVERcouple of accidental globals - [15]
ASP5RVZAMerge lines.love - [16]
5L7K4GBDclicking to the right of a wrapped line - [17]
VP5KC4XZMerge lines.love - [18]
FS2ITYYHrecord a known issue - [19]
I64IPGJXavoid saving fragments in lines - [20]
B4FAIVRAMerge lines.love - [21]
ZLJYLPOTMerge lines.love - [22]
OTIBCAUJlove2d scaffold - [23]
AJB4LFRBtry to maintain a reasonable line width - [24]
2L4DL7PGgo through App in a couple more places - [25]
OI4FPFINsupport drawings in the source editor - [26]
RU4HIK43Merge lines.love - [27]
SWZAQHGRbugfix: up arrow when line above is a drawing - [28]
2LEXWUW3get rid of some ridiculous code - [29]
6LJZN727handle chords - [30]
UHB4GARJleft/right margin -> left/right coordinates - [31]
KWIVKQQ7Merge lines.love - [32]
K2X6G75Zstart writing some tests for drawings - [33]
P3K7UH5CMerge lines.love - [34]
KYNGDE2Cconsistent names in a few more places - [35]
F3NPUCCMupdate stale information - [36]
N2NUGNN4include a brief reference enabling many useful apps - [37]
AH744RFRshow when we're naming a point - [38]
OGUV4HSAremove some memory leaks from rendered fragments - [39]
ED4Z6ORCcleaner API for file-system access - [40]
2CTN2IEFMerge lines.love - [41]
BULPIBEGbeginnings of a module for the text editor - [42]
MXA3RZYKdeduce left/right from state where possible - [43]
7YGYHOEOMerge lines.love - [44]
KKQKPGCIresolve conflicts - [45]
3QNOKBFMbeginnings of a test harness - [46]
UBA2ZUCPremove a duplicate print to screen - [47]
RSZD5A7Gforgot to add json.lua - [48]
TBTRYEBPMerge lines.love - [49]
FNJF2FMQbugfix: online help - [50]
A23MMLJHmigrate old settings, attempt #3 - [51]
VHQCNMARseveral more modules - [52]
JOPVPUSAediting source code from within the app - [53]
C2M4RUU5reorganize some comments - [54]
66X36NZNa little more prose describing manual_tests - [55]
AIHGJ4BTbugfix: infinite loop inside a very narrow window - [56]
SDEY7LFJrename a variable - [57]
R5QXEHUIsomebody stop me - [58]
VPRGENLAhide some details within the 'warning' state - [59]
MUJTM6REbring back a level of wrapping - [60]
4VKEE43Zbugfix - [61]
ISOFHXB2App.width can no longer take a Text - [62]
SDO4DHNUsource: load cursor position from settings - [63]
G54H3YG2get rid of all bifold text - [64]
KWHC65JIMerge lines.love - [65]
J3I6DVMBdrop an unused arg - [66]
TVCPXAAUrename - [67]
LF7BWEG4group all editor globals - [68]
4MT5UHHKfix still more issues with the previous scenario - [69]
23KRQC4YMerge lines.love - [70]
6VJTQKW7start supporting LÖVE v12 - [71]
5XA7TKWYpull font into editor - [72]
SVJZZDC3snapshot - no, that's all wrong - [73]
CWQIPU7Ualways show line numbers in source editor - [74]
ZMBPXIZ4bugfix - [75]
LDFXFRUObring a few things in sync between run and source - [76]
6Z6WH62Wresolve conflicts - [77]
5FW7YOFThighlight selection while dragging - [78]
CPZGQT72go through and fix similar issues - [79]
2344TV56Merge lines.love - [80]
YF2ATH2QMerge lines.love - [81]
TFUNIT6Mresolve conflicts - [82]
TLOAPLBJadd a license - [83]
XX7G2FFJintermingle freehand line drawings with text - [84]
3PSFWAILMerge lines.love - [85]
ZJOSQFN6bugfix: path munging on Windows - [86]
MGJZHZC4Merge lines.love - [87]
UQI34GQFmake button backgrounds optional - [88]
AVTNUQYRbasic test-enabled framework - [89]
2Y7YH7UPinfrastructure for caching LÖVE text objects - [90]
MD3W5IRAnew fork: rip out drawing support - [91]
MP2TBKU6bugfix: crash in Text.up() after return - [92]
D2GCFTTTclean up repl functionality - [93]
R3KXFRZNget rid of to_text - [94]
PFT5Y2ZYmove - [95]
34BZ5ZKNMerge lines.love - [96]
G3DLS5OUaudit all asserts - [97]
UCW27FJKbugfix: utf-8 - [98]
AIBA4RWQhide cursor in log browser window - [99]
BLWAYPKVextract a module - [100]
GJLOKCYKbugfix: clicking past end of screen line - [101]
Z5HLXU4Padd state arg to a few functions - [102]
W5WCQNMPbugfix: Windows pushing title bar off screen - [103]
FYRGHNLCresolve conflicts - [104]
GAPPXISYmoar bugfix X-( - [105]
KKMFQDR4editing source code from within the app - [106]
AOZX2G5Fsource: no commandline args - [107]
T4FRZSYLdelete an ancient, unused file - [108]
LWPFEZBIMerge lines.love - [109]
H22OAXWEcouple of TODOs - [110]
44BTGR7UMerge lines.love - [111]
CE4LZV4Tdrop last couple of manual tests - [112]
ILOA5BYFseparate data structure for each line's cache data - [113]
SGMA5JLEsave the list of tests in repo - [114]
LK4ZW4BBbugfix - [115]
VHUNJHXBMerge lines.love - [116]
GZ5WULJVswitch source side to new screen-line-based render - [117]
2L5MEZV3experiment: new edit namespace - [118]
BJ5X5O4Alet's prevent the text cursor from ever getting on a drawing - [119]
ORKN6EOBMerge lines.love - [120]
VOU73AK6Merge lines.love - [121]
VXORMHMEdelete experimental REPL - [122]
T57DTBX6add args to some functions - [123]
OB5XOXVCdeemphasize the source editor - [124]
KMSL74GAsupport selections in the source editor - [125]
H4R5BHVYno more Text allocations - [126]
S3PNFXTBhandle missing cursors in settings - [127]
VNVRFP2Vbugfix: rendering hyperlinks in wrapping lines - [128]
ZPUQSPQPextract a few methods - [129]
LXTTOB33extract a couple of files - [130]
GUOQRUL7Merge lines.love - [131]
GX236KZGRevert "deemphasize the source editor" - [132]
IM7UEBMKbugfix: highlight search patterns on the right line - [133]
2TQUKHBCMerge lines.love - [134]
JYZKEDDGMerge lines.love - [135]
TWXPV2AChoist and duplicate a conditional - [136]
PXSQR2ADhide line numbers from log browser - [137]
7JH2ZT3Fadd state arg to Drawing.draw - [138]
B6DS4GZCMerge lines.love - [139]
HIKLULFQextract a function - [140]
54HEXCWVclearer API for drawing a button - [141]
ATQO62TFMerge lines.love - [142]
73OCE2MCafter much struggle, a brute-force undo - [143]
JZR3QMTNMerge lines.love - [144]
TGHAJBESuse line cache for drawings as well
Change contents
- file deletion: source_text.lua source_text.lua
love.graphics.print(line_index, State.left-Line_number_width*State.font:getWidth('m')+10,y)local lo, hi = Text.clip_wikiword_with_screen_line(State.font, line, line_cache, i, s, e)Text.draw_cursor(State, State.left+Text.x(State.font, screen_line, State.cursor1.pos-pos+1), y)Text.draw_cursor(State, State.left+Text.x(State.font, screen_line, State.cursor1.pos-pos+1), y)x = x+State.font:getWidth(frag)local frag_width = State.font:getWidth(frag)local bpos = Text.nearest_pos_less_than(State.font, frag, State.width - x)frag_width = State.font:getWidth(frag)function Text.clip_wikiword_with_screen_line(font, line, line_cache, i, s, e)return font:getWidth(line.data:sub(soff, loff-1)), font:getWidth(line.data:sub(soff, hoff))State.cursor1.pos = screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, State.cursor_x, State.left) - 1State.cursor1.pos = new_screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, State.cursor_x, State.left) - 1pos = Text.nearest_cursor_pos(State.font, State.lines[new_cursor_line].data, State.cursor_x, State.left),State.cursor1.pos = new_screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, State.cursor_x, State.left) - 1--? print('return', mx, Text.nearest_cursor_pos(State.font, s, mx, State.left), '=>', screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, mx, State.left) - 1)return screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, mx, State.left) - 1return State.font:getWidth(screen_line)function Text.nearest_cursor_pos(font, line, x, left)local max_x = left+Text.x(font, line, len+1)local currxmin = left+Text.x(font, line, curr)local currxmax = left+Text.x(font, line, curr+1)function Text.nearest_pos_less_than(font, line, x)local max_x = Text.x_after(font, line, len)local currxmin = Text.x_after(font, line, curr+1)local currxmax = Text.x_after(font, line, curr+2)function Text.x_after(font, s, pos)return font:getWidth(s_before)function Text.x(font, s, pos)return font:getWidth(s_before)endfunction Text.to2(State, loc1)local offset = Text.offset(s, pos)local s_before = s:sub(1, offset-1)endlocal len = utf8.len(s)local offset = Text.offset(s, math.min(pos+1, len+1))--? print('', x, left, right, curr, currxmin, currxmax)if currxmin <= x and x < currxmax thenreturn currendif left >= right-1 thenreturn leftendif currxmin > x thenright = currelseleft = currendendif x > max_x thenreturn len+1endlocal left, right = 0, len+1while true dolocal curr = math.floor((left+right)/2)--? print('', '-- nearest_pos_less_than', line, x)local len = utf8.len(line)--? print('nearest', x, leftpos, rightpos, curr, currxmin, currxmax)if currxmin <= x and x < currxmax thenif x-currxmin < currxmax-x thenreturn currelsereturn curr+1endendif leftpos >= rightpos-1 thenreturn rightposendif currxmin > x thenrightpos = currelseleftpos = currendendif x > max_x thenreturn len+1endlocal leftpos, rightpos = 1, len+1--? print('-- nearest', x)while true do--? print('nearest', x, '^'..line..'$', leftpos, rightpos)if leftpos == rightpos thenreturn leftposendlocal curr = math.floor((leftpos+rightpos)/2)if x < left thenreturn 1endlocal len = utf8.len(line)endendy = nextyend--? print('cursor pos is now', State.cursor1.line, State.cursor1.pos)if scroll_down then--? print('scroll up preserving cursor')Text.snap_cursor_to_bottom_of_screen(State)--? print('screen top after:', State.screen_top1.line, State.screen_top1.pos)}--? print(State.cursor1.pos)breakend--? print('cursor pos is now '..tostring(State.cursor1.pos))endif Text.lt1(State.cursor1, State.screen_top1) thenbreakendendlocal spos = line_cache.screen_line_starting_pos[i]local soff = Text.offset(line.data, spos)if e < soff thenreturnendlocal eoffif i < #line_cache.screen_line_starting_pos thenlocal epos = line_cache.screen_line_starting_pos[i+1]eoff = Text.offset(line.data, epos)if s > eoff thenreturnend--? print('screen line:', pos)if x == 0 and bpos == 0 thenassert(false, ("Infinite loop while line-wrapping. Editor is %dpx wide; window is %dpx wide"):format(State.width, App.screen.width))end--? print('-- frag:', frag, pos, x, frag_width, State.width)while x + frag_width > State.width do--? print('frag:', frag, pos, x, frag_width, State.width)if x < 0.8 * State.width then-- long word; chop it at some letter-- We're not going to reimplement TeX here.endendendelseif pos + frag_len == State.cursor1.pos then-- Show cursor at end of line.-- This place also catches end of wrapping screen lines. That doesn't seem worth distinguishing.-- It seems useful to see a cursor whether your eye is on the left or right margin.if lo thenend - file deletion: source_edit.lua source_edit.lua
filename = 'run.lua',next_save = nil,-- undohistory = {},next_history = 1,-- searchsearch_term = nil, - file deletion: source.lua source.lua
Editor_state = edit.initialize_state(Margin_top, Margin_left + Line_number_width*font:getWidth('m'), right, font, settings.font_height, math.floor(settings.font_height*1.3))Editor_state = edit.initialize_state(Margin_top, Margin_left + Line_number_width*font:getWidth('m'), App.screen.width-Margin_right, font, font_height, math.floor(font_height*1.3))Editor_state.filename = 'run.lua'Editor_state.filename = settings.filename - file deletion: log_browser.lua log_browser.lua
love.graphics.line(xleft+50+State.font:getWidth(line.section_name)+2,sectiony, xright,sectiony)love.graphics.line(xleft+50+State.font:getWidth(line.section_name)+2,sectiony, xright,sectiony)love.graphics.print(line.section_stack[i].name, x+State.font_height+5, App.screen.height-State.font:getWidth(line.section_stack[i].name)-5, --[[vertically]] math.pi/2)love.graphics.print(line.section_stack[i].name, x, App.screen.height-State.font:getWidth(line.section_stack[i].name)-5, --[[vertically]] math.pi/2)endendreturn log_browser.right_margin(State, line)endfunction should_show(line)-- Show a line if every single section it's in is expanded.for i=1,#line.section_stack dolocal section = line.section_stack[i]if not section.expanded thenreturn falseendendreturn trueendfunction log_browser.left_margin(State, line)return State.left + #line.section_stack*Section_border_padding_horizontalendfunction log_browser.right_margin(State, line)return State.right - #line.section_stack*Section_border_padding_horizontalendfunction log_browser.update(State, dt)endfunction log_browser.quit(State)endendendreturn log_browser.left_margin(State, line)endfunction render_stack_right_margin(State, line_index, line, y)App.color(Section_border_color)for i=1,#line.section_stack dolocal x = State.right - (i-1)*Section_border_padding_horizontallove.graphics.line(x,y, x,y+log_browser.height(State, line_index))if y < 30 thenlove.graphics.print(line.section_stack[i].name, x, y+5, --[[vertically]] math.pi/2)endif y > App.screen.height-log_browser.height(State, line_index) thenendelseif type(line.data) == 'string' thenlocal old_left, old_right = State.left,State.rightState.left,State.right = xleft,xrightelse assert(line.section_end, "log line has a section name, but it's neither the start nor end of a section") - resurrect zombie in text.lua at line 97
local frag_width = State.font:getWidth(frag) - resolve order conflict in text.lua at line 97
- edit in text.lua at line 404
State.cursor1.pos = screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, State.cursor_x, State.left) - 1 - resolve order conflict in text.lua at line 404
- replacement in text.lua at line 406
State.cursor1.pos = screen_line_starting_pos + Text.nearest_cursor_pos(s, State.cursor_x, State.left) - 1State.cursor1.pos = screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, State.cursor_x, State.left) - 1 - resurrect zombie in text.lua at line 412[8.127]→[8.4197:4427](∅→∅),[8.2441]→[8.4197:4427](∅→∅),[8.127]→[8.4197:4427](∅→∅),[8.2441]→[8.4197:4427](∅→∅)
local new_screen_line_starting_byte_offset = Text.offset(State.lines[State.cursor1.line].data, new_screen_line_starting_pos)local s = string.sub(State.lines[State.cursor1.line].data, new_screen_line_starting_byte_offset) - edit in text.lua at line 414
- resurrect zombie in text.lua at line 414
State.cursor1.pos = new_screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, State.cursor_x, State.left) - 1 - resolve order conflict in text.lua at line 414
- replacement in text.lua at line 435
State.cursor1.pos = Text.nearest_cursor_pos(State.lines[State.cursor1.line].data, State.cursor_x, State.left)State.cursor1.pos = Text.nearest_cursor_pos(State.font, State.lines[State.cursor1.line].data, State.cursor_x, State.left) - edit in text.lua at line 437
pos = Text.nearest_cursor_pos(State.font, State.lines[new_cursor_line].data, State.cursor_x, State.left), - resolve order conflict in text.lua at line 437
- resurrect zombie in text.lua at line 452
local new_screen_line_starting_byte_offset = Text.offset(State.lines[State.cursor1.line].data, new_screen_line_starting_pos)local s = string.sub(State.lines[State.cursor1.line].data, new_screen_line_starting_byte_offset) - resurrect zombie in text.lua at line 454
State.cursor1.pos = new_screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, State.cursor_x, State.left) - 1 - resolve order conflict in text.lua at line 454
- resurrect zombie in text.lua at line 667
local s = string.sub(line.data, screen_line_starting_byte_offset) - resurrect zombie in text.lua at line 668
--? print('return', mx, Text.nearest_cursor_pos(State.font, s, mx, State.left), '=>', screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, mx, State.left) - 1)return screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, mx, State.left) - 1 - resolve order conflict in text.lua at line 668
- replacement in source_text.lua at line 17
love.graphics.print(line_index, State.left-Line_number_width*App.width('m')+10,y)love.graphics.print(line_index, State.left-Line_number_width*State.font:getWidth('m')+10,y) - replacement in source_text.lua at line 35
local lo, hi = Text.clip_wikiword_with_screen_line(line, line_cache, i, s, e)local lo, hi = Text.clip_wikiword_with_screen_line(State.font, line, line_cache, i, s, e) - replacement in source_text.lua at line 65
Text.draw_cursor(State, State.left+Text.x(screen_line, State.cursor1.pos-pos+1), y)Text.draw_cursor(State, State.left+Text.x(State.font, screen_line, State.cursor1.pos-pos+1), y) - replacement in source_text.lua at line 70
Text.draw_cursor(State, State.left+Text.x(screen_line, State.cursor1.pos-pos+1), y)Text.draw_cursor(State, State.left+Text.x(State.font, screen_line, State.cursor1.pos-pos+1), y) - replacement in source_text.lua at line 79
x = x+App.width(frag)x = x+State.font:getWidth(frag) - replacement in source_text.lua at line 123
local frag_width = App.width(frag)local frag_width = State.font:getWidth(frag) - replacement in source_text.lua at line 130
local bpos = Text.nearest_pos_less_than(frag, State.width - x)local bpos = Text.nearest_pos_less_than(State.font, frag, State.width - x) - replacement in source_text.lua at line 140
frag_width = App.width(frag)frag_width = State.font:getWidth(frag) - replacement in source_text.lua at line 175
function Text.clip_wikiword_with_screen_line(line, line_cache, i, s, e)function Text.clip_wikiword_with_screen_line(font, line, line_cache, i, s, e) - replacement in source_text.lua at line 197
return App.width(line.data:sub(soff, loff-1)), App.width(line.data:sub(soff, hoff))return font:getWidth(line.data:sub(soff, loff-1)), font:getWidth(line.data:sub(soff, hoff)) - replacement in source_text.lua at line 484
State.cursor1.pos = screen_line_starting_pos + Text.nearest_cursor_pos(s, State.cursor_x, State.left) - 1State.cursor1.pos = screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, State.cursor_x, State.left) - 1 - replacement in source_text.lua at line 494
State.cursor1.pos = new_screen_line_starting_pos + Text.nearest_cursor_pos(s, State.cursor_x, State.left) - 1State.cursor1.pos = new_screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, State.cursor_x, State.left) - 1 - replacement in source_text.lua at line 519
pos = Text.nearest_cursor_pos(State.lines[new_cursor_line].data, State.cursor_x, State.left),pos = Text.nearest_cursor_pos(State.font, State.lines[new_cursor_line].data, State.cursor_x, State.left), - replacement in source_text.lua at line 541
State.cursor1.pos = new_screen_line_starting_pos + Text.nearest_cursor_pos(s, State.cursor_x, State.left) - 1State.cursor1.pos = new_screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, State.cursor_x, State.left) - 1 - replacement in source_text.lua at line 804
--? print('return', mx, Text.nearest_cursor_pos(s, mx, State.left), '=>', screen_line_starting_pos + Text.nearest_cursor_pos(s, mx, State.left) - 1)return screen_line_starting_pos + Text.nearest_cursor_pos(s, mx, State.left) - 1--? print('return', mx, Text.nearest_cursor_pos(State.font, s, mx, State.left), '=>', screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, mx, State.left) - 1)return screen_line_starting_pos + Text.nearest_cursor_pos(State.font, s, mx, State.left) - 1 - replacement in source_text.lua at line 825
return App.width(screen_line)return State.font:getWidth(screen_line) - replacement in source_text.lua at line 839
function Text.nearest_cursor_pos(line, x, left)function Text.nearest_cursor_pos(font, line, x, left) - replacement in source_text.lua at line 844
local max_x = left+Text.x(line, len+1)local max_x = left+Text.x(font, line, len+1) - replacement in source_text.lua at line 856
local currxmin = left+Text.x(line, curr)local currxmax = left+Text.x(line, curr+1)local currxmin = left+Text.x(font, line, curr)local currxmax = left+Text.x(font, line, curr+1) - replacement in source_text.lua at line 881
function Text.nearest_pos_less_than(line, x)function Text.nearest_pos_less_than(font, line, x) - replacement in source_text.lua at line 884
local max_x = Text.x_after(line, len)local max_x = Text.x_after(font, line, len) - replacement in source_text.lua at line 891
local currxmin = Text.x_after(line, curr+1)local currxmax = Text.x_after(line, curr+2)local currxmin = Text.x_after(font, line, curr+1)local currxmax = Text.x_after(font, line, curr+2) - replacement in source_text.lua at line 909
function Text.x_after(s, pos)function Text.x_after(font, s, pos) - replacement in source_text.lua at line 914
return App.width(s_before)return font:getWidth(s_before) - replacement in source_text.lua at line 917
function Text.x(s, pos)function Text.x(font, s, pos) - replacement in source_text.lua at line 920
return App.width(s_before)return font:getWidth(s_before) - replacement in source_edit.lua at line 97
filename = love.filesystem.getSourceBaseDirectory()..'/lines.txt', -- '/' should work even on Windowsfilename = 'run.lua', - replacement in source.lua at line 129
Editor_state = edit.initialize_state(Margin_top, Margin_left + Line_number_width*App.width('m'), right, font, settings.font_height, math.floor(settings.font_height*1.3))Editor_state = edit.initialize_state(Margin_top, Margin_left + Line_number_width*font:getWidth('m'), right, font, settings.font_height, math.floor(settings.font_height*1.3)) - replacement in source.lua at line 157
Editor_state = edit.initialize_state(Margin_top, Margin_left + Line_number_width*App.width('m'), App.screen.width-Margin_right, font, font_height, math.floor(font_height*1.3))Editor_state = edit.initialize_state(Margin_top, Margin_left + Line_number_width*font:getWidth('m'), App.screen.width-Margin_right, font, font_height, math.floor(font_height*1.3)) - edit in select.lua at line 60[8.6273]→[8.1536:1536](∅→∅),[8.6273]→[8.1536:1536](∅→∅),[8.1536]→[8.785:817](∅→∅),[8.514]→[8.785:817](∅→∅),[8.514]→[8.785:817](∅→∅)
lo_px = App.width(before) - resurrect zombie in select.lua at line 60
lo_px = State.font:getWidth(before) - resolve order conflict in select.lua at line 60
- edit in main.lua at line 328[8.190711]→[8.995:995](∅→∅),[8.191282]→[6.20:67](∅→∅),[8.191282]→[6.20:67](∅→∅),[8.191282]→[6.20:67](∅→∅)
if Disable_all_quit_handlers then return end - resolve order conflict in main.lua at line 328
- edit in main.lua at line 332
if Disable_all_quit_handlers then return end - replacement in log_browser.lua at line 97
love.graphics.line(xleft+50+App.width(line.section_name)+2,sectiony, xright,sectiony)love.graphics.line(xleft+50+State.font:getWidth(line.section_name)+2,sectiony, xright,sectiony) - replacement in log_browser.lua at line 104
love.graphics.line(xleft+50+App.width(line.section_name)+2,sectiony, xright,sectiony)love.graphics.line(xleft+50+State.font:getWidth(line.section_name)+2,sectiony, xright,sectiony) - replacement in log_browser.lua at line 140
love.graphics.print(line.section_stack[i].name, x+State.font_height+5, App.screen.height-App.width(line.section_stack[i].name)-5, --[[vertically]] math.pi/2)love.graphics.print(line.section_stack[i].name, x+State.font_height+5, App.screen.height-State.font:getWidth(line.section_stack[i].name)-5, --[[vertically]] math.pi/2) - replacement in log_browser.lua at line 155
love.graphics.print(line.section_stack[i].name, x, App.screen.height-App.width(line.section_stack[i].name)-5, --[[vertically]] math.pi/2)love.graphics.print(line.section_stack[i].name, x, App.screen.height-State.font:getWidth(line.section_stack[i].name)-5, --[[vertically]] math.pi/2) - resurrect zombie in help.lua at line 1
function draw_help_without_mouse_pressed(State, drawing_index)local drawing = State.lines[drawing_index]local line_cache = State.line_cache[drawing_index]App.color(Help_color)local y = line_cache.starty+10love.graphics.print("Things you can do:", State.left+30,y)y = y + State.line_heightlove.graphics.print("* Press the mouse button to start drawing a "..current_shape(State), State.left+30,y)y = y + State.line_heightlove.graphics.print("* Hover on a point and press 'ctrl+u' to pick it up and start moving it,", State.left+30,y)y = y + State.line_height - replacement in help.lua at line 12
love.graphics.print("then press the mouse button to drop it", State.left+30+bullet_indent(),y)love.graphics.print("then press the mouse button to drop it", State.left+30+State.font:getWidth('* '),y) - edit in help.lua at line 147[8.9454]→[8.9454:9484](∅→∅),[8.9454]→[8.9454:9484](∅→∅),[8.460]→[7.5225:5332](∅→∅),[8.460]→[7.5225:5332](∅→∅),[8.9484]→[8.832:857](∅→∅),[8.11371]→[8.832:857](∅→∅),[8.11371]→[8.832:857](∅→∅)
endfunction bullet_indent()love.graphics.print("then press the mouse button to drop it", State.left+30+State.font:getWidth('* '),y)return App.width('* ') - resurrect zombie in help.lua at line 147
end - resolve order conflict in help.lua at line 147
- replacement in drawing.lua at line 64
name_width = App.width('m')name_width = State.font:getWidth('m') - replacement in drawing.lua at line 66
name_width = App.width(p.name)name_width = State.font:getWidth(p.name) - edit in drawing.lua at line 744[8.42200]→[8.9582:9582](∅→∅),[8.404]→[7.5338:5388](∅→∅),[8.404]→[7.5338:5388](∅→∅),[8.503]→[7.5389:5442](∅→∅),[8.503]→[7.5389:5442](∅→∅)
name_width = State.font:getWidth('m')name_width = State.font:getWidth(p.name) - resolve order conflict in drawing.lua at line 744[8.42200]