From da21512440d0fea412ad43c3d0d340bba586a700 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Tue, 30 May 2023 00:00:43 -0700 Subject: [PATCH] bugfix: drawings in source editor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Broken since 2022-09 X-( Scenario: * switch to source editor * draw a line * wait 3 seconds Before this commit the app would crash and then fail to restart until you deleted the created .lua file from save dir. This is not the first time I've confused Lua's files and LÖVE's droppedFile objects. Just never rely on multiple args in file:write(). --- file.lua | 15 ++++++++++----- source_file.lua | 15 ++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/file.lua b/file.lua index 2140bb1..62b075e 100644 --- a/file.lua +++ b/file.lua @@ -92,21 +92,26 @@ function store_drawing(outfile, drawing) outfile:write('```lines\n') for _,shape in ipairs(drawing.shapes) do if shape.mode == 'freehand' then - outfile:write(json.encode(shape), '\n') + outfile:write(json.encode(shape)) + outfile:write('\n') elseif shape.mode == 'line' or shape.mode == 'manhattan' then local line = json.encode({mode=shape.mode, p1=drawing.points[shape.p1], p2=drawing.points[shape.p2]}) - outfile:write(line, '\n') + outfile:write(line) + outfile:write('\n') elseif shape.mode == 'polygon' or shape.mode == 'rectangle' or shape.mode == 'square' then local obj = {mode=shape.mode, vertices={}} for _,p in ipairs(shape.vertices) do table.insert(obj.vertices, drawing.points[p]) end local line = json.encode(obj) - outfile:write(line, '\n') + outfile:write(line) + outfile:write('\n') elseif shape.mode == 'circle' then - outfile:write(json.encode({mode=shape.mode, center=drawing.points[shape.center], radius=shape.radius}), '\n') + outfile:write(json.encode({mode=shape.mode, center=drawing.points[shape.center], radius=shape.radius})) + outfile:write('\n') elseif shape.mode == 'arc' then - outfile:write(json.encode({mode=shape.mode, center=drawing.points[shape.center], radius=shape.radius, start_angle=shape.start_angle, end_angle=shape.end_angle}), '\n') + outfile:write(json.encode({mode=shape.mode, center=drawing.points[shape.center], radius=shape.radius, start_angle=shape.start_angle, end_angle=shape.end_angle})) + outfile:write('\n') elseif shape.mode == 'deleted' then -- ignore else diff --git a/source_file.lua b/source_file.lua index 3adab1f..3eaf6c3 100644 --- a/source_file.lua +++ b/source_file.lua @@ -93,21 +93,26 @@ function store_drawing(outfile, drawing) outfile:write('```lines\n') for _,shape in ipairs(drawing.shapes) do if shape.mode == 'freehand' then - outfile:write(json.encode(shape), '\n') + outfile:write(json.encode(shape)) + outfile:write('\n') elseif shape.mode == 'line' or shape.mode == 'manhattan' then local line = json.encode({mode=shape.mode, p1=drawing.points[shape.p1], p2=drawing.points[shape.p2]}) - outfile:write(line, '\n') + outfile:write(line) + outfile:write('\n') elseif shape.mode == 'polygon' or shape.mode == 'rectangle' or shape.mode == 'square' then local obj = {mode=shape.mode, vertices={}} for _,p in ipairs(shape.vertices) do table.insert(obj.vertices, drawing.points[p]) end local line = json.encode(obj) - outfile:write(line, '\n') + outfile:write(line) + outfile:write('\n') elseif shape.mode == 'circle' then - outfile:write(json.encode({mode=shape.mode, center=drawing.points[shape.center], radius=shape.radius}), '\n') + outfile:write(json.encode({mode=shape.mode, center=drawing.points[shape.center], radius=shape.radius})) + outfile:write('\n') elseif shape.mode == 'arc' then - outfile:write(json.encode({mode=shape.mode, center=drawing.points[shape.center], radius=shape.radius, start_angle=shape.start_angle, end_angle=shape.end_angle}), '\n') + outfile:write(json.encode({mode=shape.mode, center=drawing.points[shape.center], radius=shape.radius, start_angle=shape.start_angle, end_angle=shape.end_angle})) + outfile:write('\n') elseif shape.mode == 'deleted' then -- ignore else