BJ5X5O4ACBBJ56LRBBSTCW6IBQP4HAEOOOPNH3SKTA4F66YTOIDAC PWHZPJJM7UZW2VILT5TZBDZHIXXXBASVSBQB3A5EEMOFJTI6ADYAC 2INHXC3KRJVZTX2BQ63ZQLHIC5SWPUG4PQKCMLC7SQKN5R7LJZ6QC 62ST7SV3GF5CLNWDRGYGN5BOIUHSMSPH26VIWO3Q2A6P2U7B2TRQC R5QXEHUIZLELJGGCZAE7ATNS3CLRJ7JFRENMGH4XXH24C5WABZDQC QCQHLMSTHTRNIKC5CJU3CAYMMWPTGITALRJNLFMGQWN2ZYMDSAWAC OTIBCAUJ3KDQJLVDN3A536DLZGNRYMGJLORZVR3WLCGXGO6UGO6AC 5T2E3PDVSLMZSSIIQRNKIKQVV77XQTHP473OP7XBTTMSZHIQID5AC VVXVV2D2F5Y6D6N5VVPUPK3N6GMDTG2YCYPQDYTYEKVKBYHRRYEAC XX7G2FFJ4QCGQGD4REAW5QFHVYAKCFUPGZCK7L6DFGS5ISVBYBQQC 6PUNJS5BSLTYMYMN4JFD7YDEGVQLM5PGAT7PQIG5NIAKLTM5T4PQC GVOFXXITWK6UHAPI3VMGSDGV3RUHQSXZ3OVAM7ZPKYOGAX5FZQUAC IYW7X3WLOPYLSNO5IQNSULUNO4XFEM24DJ2VB5HPBUKWUYFPRCGQC 3CS5KKCIZQ6J4SBILINYZSOM6V3U2LE7YIXOZVKXXNBROF6Z6JWAC 3D5RFWHVIHCJGN7HLEP5ZMC6WNIG7GXISJRJXOA4K5MBJFJYPIIQC file load:cursor_line = 1first line is a drawing -> cursor_line = 2create drawing -> cursor bumps down below drawingbackspacecursor_pos == 0, previous line is a drawing -> delete drawing, cursor still visible at start of linecursor_pos == 0, previous line is text -> join lines, cursor still at same character
if cursor_line > 1 and lines[cursor_line].data == '' thentable.remove(lines, cursor_line)cursor_line = cursor_line-1if lines[cursor_line].mode == 'text' thencursor_pos = #lines[cursor_line].data+1
if cursor_pos > 1 thenlocal byte_start = utf8.offset(lines[cursor_line].data, cursor_pos-1)local byte_end = utf8.offset(lines[cursor_line].data, cursor_pos)if byte_start thenif byte_end thenlines[cursor_line].data = string.sub(lines[cursor_line].data, 1, byte_start-1)..string.sub(lines[cursor_line].data, byte_end)elselines[cursor_line].data = string.sub(lines[cursor_line].data, 1, byte_start-1)endcursor_pos = cursor_pos-1endelseif cursor_line > 1 thenif lines[cursor_line-1].mode == 'drawing' thentable.remove(lines, cursor_line-1)
if lines[cursor_line].mode == 'text' thencursor_pos = #lines[cursor_line].data+1elsecursor_pos = 1endelseif cursor_pos > 1 thenlocal byte_start = utf8.offset(lines[cursor_line].data, cursor_pos-1)local byte_end = utf8.offset(lines[cursor_line].data, cursor_pos)if byte_start thenif byte_end thenlines[cursor_line].data = string.sub(lines[cursor_line].data, 1, byte_start-1)..string.sub(lines[cursor_line].data, byte_end)elselines[cursor_line].data = string.sub(lines[cursor_line].data, 1, byte_start-1)endcursor_pos = cursor_pos-1endend
if cursor_line > 1 thenif lines[cursor_line].mode == 'text' and lines[cursor_line-1].mode == 'text' thenlocal old_x = cursor_x(lines[cursor_line].data, cursor_pos)cursor_line = cursor_line-1
assert(lines[cursor_line].mode == 'text')local new_cursor_line = cursor_linewhile new_cursor_line > 1 donew_cursor_line = new_cursor_line-1if lines[new_cursor_line].mode == 'text' thenlocal old_x = cursor_x(lines[new_cursor_line].data, cursor_pos)cursor_line = new_cursor_line
if cursor_line < #lines thenif lines[cursor_line].mode == 'text' and lines[cursor_line+1].mode == 'text' thenlocal old_x = cursor_x(lines[cursor_line].data, cursor_pos)cursor_line = cursor_line+1
assert(lines[cursor_line].mode == 'text')local new_cursor_line = cursor_linewhile new_cursor_line < #lines donew_cursor_line = new_cursor_line+1if lines[new_cursor_line].mode == 'text' thenlocal old_x = cursor_x(lines[new_cursor_line].data, cursor_pos)cursor_line = new_cursor_line