RHMFC6SUIEQTGGDKZYHZQMS4GPK7CQ3C2TVXY756FXJZFKRF6BJAC HZIFHN7TRXF36OU6MSKZAKIZMAF3JEVYNQRFUXXOOUPDKRH3Q2AQC VXUO4O6ZGCICSJ4IIVWXPW4OUXVQ2C3F54XW46PNEXCAKJX6QCTAC TZJGPNVSP2R47WQMCBNEQDG53VEBFXPYTZEXRUYCCGOBFTKBNF3QC EYLRBGW35EUSSIL55J4UC5ZVCGV3OOGS7ONQ6M5ZVL2NF7VXG5ZAC OJGPJGGY5IGUVKBOGXHL6EU6M2SU3OICDIX56RILLTDNNQTYB72AC MMXKJD5NYS2HV2BECTX24S7NKQYIKE7746BIFHXAVZHQLVXJZPLAC GSYJVRHE5GRHFK34YHDZMIKZR5QSXRT24RAG5PVGY3TXAXZUZIDAC R5QXEHUIZLELJGGCZAE7ATNS3CLRJ7JFRENMGH4XXH24C5WABZDQC KKMFQDR43ZWVCDRHQLWWX3FCWCFA3ZSXYOBRJNPHUQZR2XPKWULAC GZ5WULJVEZJJQPQPSQZE7CEPIYPJ2BJDYUJBMZRA5HLOO7TE3DOQC IX5YTLSVVGQSTXUNGYK526DJ4YWIXO2JRBCOFCANBJJO3ZM2S7ZAC OI4FPFINEROK6GNDEMOBTGSPYIULCLRGGT5W3H7VLM7VFH22GMWQC GFXWHTE6POBIOBUMRAWD5QS22JEO52EF4VTLMB4CDK4RLSCK7HCAC LDFXFRUOUESGMZ7Z6BCZUQFRFFRIAB67GSGN2BR2VLT2ONZPUV3QC OMLASW7KT5UWFXNGUFLLIKGDZ6OJETV5JAT53XKSNGMSML4WTOQQC SVSD5NO3MQFKEFX4Y34OT5OO7SF5PK3PODCYZ4DUOM4OH5UTWWCAC W6XUYQKPHYZLEMBPY5L2WCGXIDBKAHVAWAH5V7BKYQXZO33DTNIQC 6DJTII3FBUTG3SKYBHOPGQERQX6EMBZ6EUWW7IW65C4SCYB3Q63AC ZTK4QTZTZLI6E7MAJFKXH26MIICJSZWSM7SYSZP7U7C2IAZPGGFQC U2ERNHWYM73X2EJWQLDXZOR2PVOOBIJ2IMWZKAKXTC7BP4YW3YPAC DMRE7ZAC6FWH7NNZDYNUWOCU77LHN7MJRPSXL24JKG6HTRAS3J3AC JOPVPUSAMMU6RFVDQR4NJC4GNNUFB7GPKVH7OS5FKCYS5QZ53VLQC HESBC35LBCNFWDFRAO6Z4EJ67BCBHCRETCPEJCV2BDPHUJJFY3WQC QEXZHD2VPCM4TAPP7PR2K2PIR4BVES5IZWC3T6ZRNJWKWOXFILNQC 7P6XKA2DCFG5YJAVTCAZMQNNDJ6K6OO5AILBBCVYV37XKZNYKHPAC TJPL6S3YDULVVDS5AWVPQ6QJ3B4YFTNFIZTS3SOHNTMFIOMYVFTQC 4LRRUJONRE6BLHZ5M2OVX443PQFYMBNCMRWGLTP6AVP5MD5C23FQC JG3TP6C4MEPPTTC6PQDAU3YJC4L2OT3RKIJ2OZWI2ZEYF3WWVEJQC 2VEIMUQXG6S776NS77WTIFFIPSA27XDTWJZZ7FW3MTS2OHLHT56AC 7VGDIPLCFDG3PVE4JH3WDKZ4A7PG5UYW7TLFFFOWN2JEUZYYTFJQC 2L5MEZV344TOZLVY3432RHJFIRVXFD6O3GWLL5O4CV66BGAFTURQC L5XCYDKRZJ4WXDEI6IL2RW63B3VRE6NPP5DW4HVU3CHCMCZEFLIAC MD3W5IRAC6UQALQE4LJC52VQNDO3I3HXF3XE2XHDABXBYJBUVAXQC ERQKFTPVWZO4WJD2WRIV33JWTWZSF4HNTK2GD7QT5I5TIL3SOGKQC RNDKROV3B4W7AAJUB65JGHZZ66OX6KVBGHVWVZGIITBNZH2UE3CAC BLWAYPKV3MLDZ4ALXLUJ25AIR6PCIL4RFYNRYLB26GFVC2KQBYBAC NYQ7HD4D5L44UORK52TH7CAEXYN5CE4ZUVLCWMY6XXPYHXVBTGHAC R3XGABERHYD7X42VXYENLVRSNFUXO5JAO4HCX3N4CMHZCHWEIW6AC KYNGDE2CKNOKUC2XMAS5MEU6YT2C3IW5SIZLOJE64G3ERT7BSWFAC 3OTESDW65UJ2W5RIXA6FNKRSD7TBCZTCCCEAYOQMEVGYZ6RCU34QC 2CK5QI7WA7M4IVSACFGOJYAIDKRUTZVMMPSFWEJTUNMWTN7AX4NAC ECUKZUSFVKW6Z4GOE3G4CEZRIOJR5XF5OWZSDNEHOJVYHTG24DLAC function Text.draw(State, line_index, y, startpos, hide_cursor, show_line_numbers)if show_line_numbers thenApp.color(Line_number_color)love.graphics.print(line_index, State.left-Line_number_width*App.width('m')+10,y)endinitialize_color()local line = State.lines[line_index]local line_cache = State.line_cache[line_index]line_cache.starty = yline_cache.startpos = startpos
left = math.floor(left), -- left margin for text; line numbers go to the left of thisedit.put_cursor_on_next_text_line(State)function edit.put_cursor_on_next_text_line(State)while true doif State.cursor1.line >= #State.lines thenbreakif State.lines[State.cursor1.line].mode == 'text' thenbreakendState.cursor1.line = State.cursor1.line+1State.cursor1.pos = 1endfunction edit.draw(State, hide_cursor, show_line_numbers)local buttonx = State.left-Margin_left+4if show_line_numbers thenbuttonx = 4 -- HACK: position draw buttons at a fixed x on screenendbutton(State, 'draw', {x=buttonx, y=y+4, w=12,h=12, color={1,1,0},y, screen_bottom1.pos = Text.draw(State, line_index, y, startpos, hide_cursor, show_line_numbers)edit.put_cursor_on_next_text_line(State)edit.put_cursor_on_next_text_line(State)for i=1,math.floor(-dy) doText.down(State)endfor i=1,math.floor(dy) doText.up(State)end--? print('=> y', y)elseif line.mode == 'drawing' theny = y+Drawing_padding_topDrawing.draw(State, line_index, y)y = y + Drawing.pixels(line.h, State.width) + Drawing_padding_bottomelseprint(line.mode)assert(false)icon = icon.insert_drawing,onpress1 = function()Drawing.before = snapshot(State, line_index-1, line_index)table.insert(State.lines, line_index, {mode='drawing', y=y, h=256/2, points={}, shapes={}, pending={}})table.insert(State.line_cache, line_index, {})if State.cursor1.line >= line_index thenState.cursor1.line = State.cursor1.line+1endschedule_save(State)record_undo_event(State, {before=Drawing.before, after=snapshot(State, line_index-1, line_index+1)})end,})State.button_handlers = {}App.color(Text_color)endendendendfunction edit.invalid1(State, loc1)right = math.floor(right),
love.window.setTitle('lines.love - source - '..Editor_state.filename)edit.draw(Editor_state, --[[hide cursor?]] Show_file_navigator, --[[show line numbers]] true)if Show_log_browser_side then-- dividerApp.color(Divider_color)love.graphics.rectangle('fill', App.screen.width/2-1,Menu_status_bar_height, 3,App.screen.height)--
source.switch_to_file(s..'.lua')love.window.setTitle('lines.love - source - '..Editor_state.filename)reset_file_navigator()
function edit.put_cursor_on_first_text_line(State)for i,line in ipairs(State.lines) doif line.mode == 'text' thenState.cursor1 = {line=i, pos=1}breakend
function edit.put_cursor_on_next_text_line(State)while true doif State.cursor1.line >= #State.lines thenbreakendif State.lines[State.cursor1.line].mode == 'text' thenbreakendState.cursor1.line = State.cursor1.line+1State.cursor1.pos = 1
button(State, 'draw', {x=4, y=y+4, w=12,h=12, color={1,1,0},
local buttonx = State.left-Margin_left+4if show_line_numbers thenbuttonx = 4 -- HACK: position draw buttons at a fixed x on screenendbutton(State, 'draw', {x=buttonx, y=y+4, w=12,h=12, color={1,1,0},
function edit.put_cursor_on_next_text_line(State)while true doif State.cursor1.line >= #State.lines thenbreakif State.lines[State.cursor1.line].mode == 'text' thenbreakendState.cursor1.line = State.cursor1.line+1State.cursor1.pos = 1end