From 42762ce06290650fe5bec9b516c5dda9e2fd97fb Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sat, 3 Sep 2022 13:54:38 -0700 Subject: editing source code from within the app integrated from pong.love: https://merveilles.town/@akkartik/108933336531898243 --- source_file.lua | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 source_file.lua (limited to 'source_file.lua') diff --git a/source_file.lua b/source_file.lua new file mode 100644 index 0000000..978e949 --- /dev/null +++ b/source_file.lua @@ -0,0 +1,89 @@ +-- primitives for saving to file and loading from file + +Fold = '\x1e' -- ASCII RS (record separator) + +function file_exists(filename) + local infile = App.open_for_reading(filename) + if infile then + infile:close() + return true + else + return false + end +end + +function load_from_disk(State) + local infile = App.open_for_reading(State.filename) + State.lines = load_from_file(infile) + if infile then infile:close() end +end + +function load_from_file(infile) + local result = {} + if infile then + local infile_next_line = infile:lines() -- works with both Lua files and LÖVE Files (https://www.love2d.org/wiki/File) + while true do + local line = infile_next_line() + if line == nil then break end + local line_info = {} + if line:find(Fold) then + _, _, line_info.data, line_info.dataB = line:find('([^'..Fold..']*)'..Fold..'([^'..Fold..']*)') + else + line_info.data = line + end + table.insert(result, line_info) + end + end + if #result == 0 then + table.insert(result, {data=''}) + end + return result +end + +function save_to_disk(State) + local outfile = App.open_for_writing(State.filename) + if outfile == nil then + error('failed to write to "'..State.filename..'"') + end + for _,line in ipairs(State.lines) do + outfile:write(line.data) + if line.dataB and #line.dataB > 0 then + outfile:write(Fold) + outfile:write(line.dataB) + end + outfile:write('\n') + end + outfile:close() +end + +function file_exists(filename) + local infile = App.open_for_reading(filename) + if infile then + infile:close() + return true + else + return false + end +end + +-- for tests +function load_array(a) + local result = {} + local next_line = ipairs(a) + local i,line,drawing = 0, '' + while true do + i,line = next_line(a, i) + if i == nil then break end + local line_info = {} + if line:find(Fold) then + _, _, line_info.data, line_info.dataB = line:find('([^'..Fold..']*)'..Fold..'([^'..Fold..']*)') + else + line_info.data = line + end + table.insert(result, line_info) + end + if #result == 0 then + table.insert(result, {data=''}) + end + return result +end -- cgit 1.4.1-2-gfad0