We're starting to have a few. Text editing is surprisingly more complex than drawing.
MGOQ5XAVFTWZPBG2O5ZTGSEKU6BRJKQZLDV6CM4737VD2FAEB5JQC M36DBSDECWQYCVIPWUYPZXSR547P76RBVYQ63B5KJGVTFWIXCSJQC BJ5X5O4ACBBJ56LRBBSTCW6IBQP4HAEOOOPNH3SKTA4F66YTOIDAC JCSLDGAH2F6AIY4Z6XM6K4LOMW7EFY3E4NF5YXLMHLTYTX3A4Z3QC VVXVV2D2F5Y6D6N5VVPUPK3N6GMDTG2YCYPQDYTYEKVKBYHRRYEAC OTIBCAUJ3KDQJLVDN3A536DLZGNRYMGJLORZVR3WLCGXGO6UGO6AC IYW7X3WLOPYLSNO5IQNSULUNO4XFEM24DJ2VB5HPBUKWUYFPRCGQC W4UVZETRKOSWDPLAM5LGAPCQEJWIVFCXUJDVZQASEIKALYEU34KAC QCQHLMSTHTRNIKC5CJU3CAYMMWPTGITALRJNLFMGQWN2ZYMDSAWAC Z4KNS42NJZTQKUQZ7B5NYU2U4VOCUQCBFT2D7423MAXKF7NQ5ZJAC 5T2E3PDVSLMZSSIIQRNKIKQVV77XQTHP473OP7XBTTMSZHIQID5AC XX7G2FFJ4QCGQGD4REAW5QFHVYAKCFUPGZCK7L6DFGS5ISVBYBQQC 4NDYV4WDJWOK6PGURVVPNYEZTX7GPJC2YJ2QTW7P3X3BJBTTJLEQC V5TP27FPD6GPATHPABRW2FKP7BIKY53KL47UVEU5DF4WXEZF7CKAC MNWHXPBL23TOI45LPF7ZECXSURCD2TRLM2EOFNBKFNHIWWKDQWCQC EFMLTMZG5TUEGLSYLVKOKDSTGVSVWSKOMS7CJWOUGK5LADSH4YTQC G77XIN7MLX465AXLXDUJDGEHXXCMR2Q7K25UAMKQERBJGNJPNW6AC TRCAEE2ASBJJCFFJYP2DGPLDOE4R2ACSY37PZSJSKOPQLATFO2EAC WDWXNW7VH57W6KXBNXFV6NPIO5RUS7Q6QNGGI4R6HWIRXLYI5NSAC ZUOL7X6VIPRCMEZURYGNHTDEIP3ZCHZW4PKVKBNXVZL5V4VOE5ZQC 2INHXC3KRJVZTX2BQ63ZQLHIC5SWPUG4PQKCMLC7SQKN5R7LJZ6QC SNDZOK6QJUASKYLYBHIATA7WXPCPZTEYEWA63I4H7HH3JT3B4U6AC YKRF5V3ZZQIQ3UGAFYTQT5PUQVHCP2VHFDX77EY2C3X543HUDYKQC GCUARQ2GJT3Y5K6LOOA6S7SOBMSXU7VV7LT355TOMFFPBQ3ZVYKAC HWPK4SMPGZMXWXKCVX667676ZWN5Q2XZSTMVAADG7JNRF6XE45RQC IFGAJAF7UWM236QV4NWP2C67TJPQGXNBC2RTZCOWPJUJYYC2MMXAC NL5J7Z5H577GPKGNS5TDRVWC55VLA2UCZE34F5WR4AJ5N265UECAC FMQ74DP324YKGBSTNMHBJMT6FYP5NI26MM43VUPGKODI5DVDCUXQC ZOOY3ME4BUD6RLWCKZFA62JNN4BMPOXH24HGTFWPWEKDECOXMFUAC OFA3PRBSGC7OXHUJGUSEZI73XMVC2HJIO6LG6XYE73DDAJT6KFPAC TNTYISW64QGR37TE2EERMQXZTFNYXC3KWNRJX3BZUIEJADE2TNSQC H7OEU6WPOKOSKV5RNAM5W62V5SYOY7VEA5VOK6JD5UEBUBIMOKUQC 6LJZN727CRPYR34LV75CQF55YZI3E7MGESYZSFSYAE73SNEZE3FAC 3CS5KKCIZQ6J4SBILINYZSOM6V3U2LE7YIXOZVKXXNBROF6Z6JWAC RJGZD4INLQ3IAWLCBYBZQDMP4ICSMZWJX2TRYODDYVUNMGPL6GYAC UTF73CBLAPLW2J6BUF4Q7N2TETQ2IKSUZ4267UG357V4SFXDFUTAC 3D5RFWHVIHCJGN7HLEP5ZMC6WNIG7GXISJRJXOA4K5MBJFJYPIIQC FBDRL6LHPTBPMU3R356OLY4XE4ELQQEDXMCZGCBT2RFHLR7VQXQAC JS6JSYOTXVZRN4XN7TYDY4GCNCFQBSERBPXEJ2TR5A2ITA6JJT2QC 3XD6M3CFKZJR365MHXUWJ4HGSDTPYO6WYZ4RGW7ECBBITKVQX24QC elseif lines.current thenif lines.current.pending thenif lines.current.pending.mode == 'freehand' then
elseif Lines.current thenif Lines.current.pending thenif Lines.current.pending.mode == 'freehand' then
table.insert(lines.current.shapes, lines.current.pending)elseif lines.current.pending.mode == 'line' thenlocal mx,my = coord(x-16), coord(y-lines.current.y)if mx >= 0 and mx < 256 and my >= 0 and my < lines.current.h thenlocal j = insert_point(lines.current.points, mx,my)lines.current.pending.p2 = jtable.insert(lines.current.shapes, lines.current.pending)
table.insert(Lines.current.shapes, Lines.current.pending)elseif Lines.current.pending.mode == 'line' thenlocal mx,my = coord(x-16), coord(y-Lines.current.y)if mx >= 0 and mx < 256 and my >= 0 and my < Lines.current.h thenlocal j = insert_point(Lines.current.points, mx,my)Lines.current.pending.p2 = jtable.insert(Lines.current.shapes, Lines.current.pending)
elseif lines.current.pending.mode == 'manhattan' thenlocal p1 = lines.current.points[lines.current.pending.p1]local mx,my = coord(x-16), coord(y-lines.current.y)if mx >= 0 and mx < 256 and my >= 0 and my < lines.current.h then
elseif Lines.current.pending.mode == 'manhattan' thenlocal p1 = Lines.current.points[Lines.current.pending.p1]local mx,my = coord(x-16), coord(y-Lines.current.y)if mx >= 0 and mx < 256 and my >= 0 and my < Lines.current.h then
local p2 = lines.current.points[lines.current.pending.p2]love.mouse.setPosition(16+pixels(p2.x), lines.current.y+pixels(p2.y))table.insert(lines.current.shapes, lines.current.pending)
local p2 = Lines.current.points[Lines.current.pending.p2]love.mouse.setPosition(16+pixels(p2.x), Lines.current.y+pixels(p2.y))table.insert(Lines.current.shapes, Lines.current.pending)
elseif lines.current.pending.mode == 'polygon' thenlocal mx,my = coord(x-16), coord(y-lines.current.y)if mx >= 0 and mx < 256 and my >= 0 and my < lines.current.h thenlocal j = insert_point(lines.current.points, mx,my)table.insert(lines.current.shapes, lines.current.pending)
elseif Lines.current.pending.mode == 'polygon' thenlocal mx,my = coord(x-16), coord(y-Lines.current.y)if mx >= 0 and mx < 256 and my >= 0 and my < Lines.current.h thenlocal j = insert_point(Lines.current.points, mx,my)table.insert(Lines.current.shapes, Lines.current.pending)
table.insert(lines.current.shapes, lines.current.pending)elseif lines.current.pending.mode == 'circle' thenlocal mx,my = coord(x-16), coord(y-lines.current.y)if mx >= 0 and mx < 256 and my >= 0 and my < lines.current.h thenlocal center = lines.current.points[lines.current.pending.center]lines.current.pending.radius = math.dist(center.x,center.y, mx,my)table.insert(lines.current.shapes, lines.current.pending)
table.insert(Lines.current.shapes, Lines.current.pending)elseif Lines.current.pending.mode == 'circle' thenlocal mx,my = coord(x-16), coord(y-Lines.current.y)if mx >= 0 and mx < 256 and my >= 0 and my < Lines.current.h thenlocal center = Lines.current.points[Lines.current.pending.center]Lines.current.pending.radius = math.dist(center.x,center.y, mx,my)table.insert(Lines.current.shapes, Lines.current.pending)
elseif lines.current.pending.mode == 'arc' thenlocal mx,my = coord(x-16), coord(y-lines.current.y)if mx >= 0 and mx < 256 and my >= 0 and my < lines.current.h thenlocal center = lines.current.points[lines.current.pending.center]lines.current.pending.end_angle = angle_with_hint(center.x,center.y, mx,my, lines.current.pending.end_angle)table.insert(lines.current.shapes, lines.current.pending)
elseif Lines.current.pending.mode == 'arc' thenlocal mx,my = coord(x-16), coord(y-Lines.current.y)if mx >= 0 and mx < 256 and my >= 0 and my < Lines.current.h thenlocal center = Lines.current.points[Lines.current.pending.center]Lines.current.pending.end_angle = angle_with_hint(center.x,center.y, mx,my, Lines.current.pending.end_angle)table.insert(Lines.current.shapes, Lines.current.pending)
lines[cursor_line].data = string.sub(lines[cursor_line].data, 1, byteoffset)..t..string.sub(lines[cursor_line].data, byteoffset+1)
Lines[cursor_line].data = string.sub(Lines[cursor_line].data, 1, byteoffset)..t..string.sub(Lines[cursor_line].data, byteoffset+1)
local byte_start = utf8.offset(lines[cursor_line].data, cursor_pos-1)local byte_end = utf8.offset(lines[cursor_line].data, cursor_pos)
local byte_start = utf8.offset(Lines[cursor_line].data, cursor_pos-1)local byte_end = utf8.offset(Lines[cursor_line].data, cursor_pos)
-- join linescursor_pos = utf8.len(lines[cursor_line-1].data)+1lines[cursor_line-1].data = lines[cursor_line-1].data..lines[cursor_line].datatable.remove(lines, cursor_line)
-- join Linescursor_pos = utf8.len(Lines[cursor_line-1].data)+1Lines[cursor_line-1].data = Lines[cursor_line-1].data..Lines[cursor_line].datatable.remove(Lines, cursor_line)
if cursor_pos <= #lines[cursor_line].data thenlocal byte_start = utf8.offset(lines[cursor_line].data, cursor_pos)local byte_end = utf8.offset(lines[cursor_line].data, cursor_pos+1)
if cursor_pos <= #Lines[cursor_line].data thenlocal byte_start = utf8.offset(Lines[cursor_line].data, cursor_pos)local byte_end = utf8.offset(Lines[cursor_line].data, cursor_pos+1)