global.lua_arguments = []; global.lua_reserved = ds_map_create(); var reserved = ["and", "break", "do", "else", "elseif", "end", "false", "for", "function", "if", "in", "local", "nil", "not", "or", "repeat", "return", "then", "true", "until", "while"]; for( var i = 0, n = array_length(reserved); i < n; i++ ) global.lua_reserved[? reserved[i]] = 1; global.CODE_BREAK_TOKEN = [" ", "(", ")", "[", "]", "{", "}", ",", ";", "+", "-", "*", "/", "^", "=", "--"]; function lua_token_splice(str) { var st = []; var ss = str; var sp, cc, del; do { sp = 999999; del = ""; for( var i = 0, n = array_length(global.CODE_BREAK_TOKEN); i < n; i++ ) { var _del = global.CODE_BREAK_TOKEN[i]; var _pos = string_pos(_del, ss); if(_pos != 0 && _pos < sp || (_pos == sp && string_length(del) < string_length(_del))) { sp = _pos; del = _del; } } if(del == "") { //no delim left array_push(st, ss); break; } var _ss = string_copy(ss, 1, sp - 1); array_push(st, _ss); array_push(st, del); var dl = string_length(del); ss = string_copy(ss, sp + dl, string_length(ss) - sp - dl + 1); } until(sp == 0); return st; } function draw_code_lua(_x, _y, str) { var tx = _x; var ty = _y; var isStr = true; var strSpl = string_splice(str, "\""); var amo = array_length(strSpl); var comment = false; var word; for( var i = 0; i < amo; i++ ) { var _w = strSpl[i]; _w = string_replace_all(_w, "\n", ""); isStr = !isStr; if(isStr) { word = "\"" + string(_w); if(i < amo - 1) word += "\""; draw_set_color(COLORS.lua_highlight_string); draw_text_add(tx, ty, word); tx += string_width(word); continue; } var words = lua_token_splice(_w); for( var j = 0; j < array_length(words); j++ ) { word = words[j]; var wordNoS = string_trim(word); if(wordNoS == "//") comment = true; draw_set_color(COLORS._main_text); if(comment) draw_set_color(COLORS.lua_highlight_comment); else if(word == "(" || word == ")" || word == "[" || word == "]" || word == "{" || word == "}") draw_set_color(COLORS.lua_highlight_bracklet); else if(ds_map_exists(global.lua_reserved, word)) draw_set_color(COLORS.lua_highlight_keyword); else if(wordNoS == string_decimal(wordNoS)) draw_set_color(COLORS.lua_highlight_number); else if(j < array_length(words) - 1) { if(words[j + 1] == "(") draw_set_color(COLORS.lua_highlight_function); } draw_text_add(tx, ty, word); tx += string_width(word); } } }