{"version":3,"sources":["generators/lua.js","generators/lua/colour.js","generators/lua/lists.js","generators/lua/logic.js","generators/lua/loops.js","generators/lua/math.js","generators/lua/procedures.js","generators/lua/text.js","generators/lua/variables.js","generators/lua/variables_dynamic.js","generators/lua/all.js"],"names":["stringUtils","CodeGenerator","inputTypes","Names","Lua","addReservedWords","ORDER_ATOMIC","ORDER_HIGH","ORDER_EXPONENTIATION","ORDER_UNARY","ORDER_MULTIPLICATIVE","ORDER_ADDITIVE","ORDER_CONCATENATION","ORDER_RELATIONAL","ORDER_AND","ORDER_OR","ORDER_NONE","isInitialized","init","Lua.init","workspace","Object","getPrototypeOf","call","nameDB_","reset","RESERVED_WORDS_","setVariableMap","getVariableMap","populateVariables","populateProcedures","finish","Lua.finish","code","definitions","values","definitions_","join","scrubNakedValue","Lua.scrubNakedValue","line","quote_","Lua.quote_","string","replace","multiline_quote_","Lua.multiline_quote_","split","map","lines","scrub_","Lua.scrub_","block","opt_thisOnly","commentCode","outputConnection","targetConnection","comment","getCommentText","wrap","COMMENT_WRAP","prefixLines","i","inputList","length","type","VALUE","childBlock","connection","targetBlock","allNestedComments","nextBlock","nextConnection","nextCode","blockToCode","getFieldValue","functionName","provideFunction_","FUNCTION_NAME_PLACEHOLDER_","r","valueToCode","g","b","colour1","colour2","ratio","NameType","elements","Array","itemCount_","element","repeatCount","item","list","getListIndex","listName","where","opt_at","mode","match","at","atOrder","listVar","getDistinctName","VARIABLE","toLowerCase","value","where1","where2","at1","at2","at1Param","at2Param","direction","input","delimiter","Error","n","STATEMENT_PREFIX","injectId","conditionCode","branchCode","statementToCode","STATEMENT_SUFFIX","INDENT","getInput","operator","OPERATORS","argument0","argument1","order","defaultArgument","value_if","value_then","value_else","CONTINUE_STATEMENT","addContinueLabel","branch","indexOf","repeats","getField","String","Number","isNumber","parseInt","addLoopTrap","loopVar","until","variable0","getName","startVar","endVar","increment","incValue","Math","abs","step","xfix","loop","getSurroundLoop","suppressPrefixSuffix","tuple","arg","CONSTANTS","PROPERTIES","dropdownProperty","suffix","inputOrder","outputOrder","numberToCheck","divisor","varName","provideSum","func","argument2","funcName","PROCEDURE","xfix1","loopTrap","INFINITE_LOOP_TRAP","returnValue","xfix2","args","variables","getVars","hasReturnValue_","element0","element1","substring","text","start","at1Order","at2Order","end","LEFT","RIGHT","BOTH","msg","sub","from","to","exports","moduleExports"],"mappings":"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","file":"lua_compressed.js","sourcesContent":["/**\n * @license\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Helper functions for generating Lua for blocks.\n * Based on Ellen Spertus's blocky-lua project.\n * @suppress {checkTypes|globalThis}\n */\n'use strict';\n\ngoog.module('Blockly.Lua');\n\nconst stringUtils = goog.require('Blockly.utils.string');\nconst {Block} = goog.requireType('Blockly.Block');\nconst {CodeGenerator} = goog.require('Blockly.CodeGenerator');\nconst {inputTypes} = goog.require('Blockly.inputTypes');\nconst {Names} = goog.require('Blockly.Names');\nconst {Workspace} = goog.requireType('Blockly.Workspace');\n\n\n/**\n * Lua code generator.\n * @type {!CodeGenerator}\n */\nconst Lua = new CodeGenerator('Lua');\n\n/**\n * List of illegal variable names.\n * This is not intended to be a security feature. Blockly is 100% client-side,\n * so bypassing this list is trivial. This is intended to prevent users from\n * accidentally clobbering a built-in object or function.\n */\nLua.addReservedWords(\n // Special character\n '_,' +\n // From theoriginalbit's script:\n // https://github.com/espertus/blockly-lua/issues/6\n '__inext,assert,bit,colors,colours,coroutine,disk,dofile,error,fs,' +\n 'fetfenv,getmetatable,gps,help,io,ipairs,keys,loadfile,loadstring,math,' +\n 'native,next,os,paintutils,pairs,parallel,pcall,peripheral,print,' +\n 'printError,rawequal,rawget,rawset,read,rednet,redstone,rs,select,' +\n 'setfenv,setmetatable,sleep,string,table,term,textutils,tonumber,' +\n 'tostring,turtle,type,unpack,vector,write,xpcall,_VERSION,__indext,' +\n // Not included in the script, probably because it wasn't enabled:\n 'HTTP,' +\n // Keywords (http://www.lua.org/pil/1.3.html).\n 'and,break,do,else,elseif,end,false,for,function,if,in,local,nil,not,or,' +\n 'repeat,return,then,true,until,while,' +\n // Metamethods (http://www.lua.org/manual/5.2/manual.html).\n 'add,sub,mul,div,mod,pow,unm,concat,len,eq,lt,le,index,newindex,call,' +\n // Basic functions (http://www.lua.org/manual/5.2/manual.html, section 6.1).\n 'assert,collectgarbage,dofile,error,_G,getmetatable,inpairs,load,' +\n 'loadfile,next,pairs,pcall,print,rawequal,rawget,rawlen,rawset,select,' +\n 'setmetatable,tonumber,tostring,type,_VERSION,xpcall,' +\n // Modules (http://www.lua.org/manual/5.2/manual.html, section 6.3).\n 'require,package,string,table,math,bit32,io,file,os,debug');\n\n/**\n * Order of operation ENUMs.\n * http://www.lua.org/manual/5.3/manual.html#3.4.8\n */\nLua.ORDER_ATOMIC = 0; // literals\n// The next level was not explicit in documentation and inferred by Ellen.\nLua.ORDER_HIGH = 1; // Function calls, tables[]\nLua.ORDER_EXPONENTIATION = 2; // ^\nLua.ORDER_UNARY = 3; // not # - ~\nLua.ORDER_MULTIPLICATIVE = 4; // * / %\nLua.ORDER_ADDITIVE = 5; // + -\nLua.ORDER_CONCATENATION = 6; // ..\nLua.ORDER_RELATIONAL = 7; // < > <= >= ~= ==\nLua.ORDER_AND = 8; // and\nLua.ORDER_OR = 9; // or\nLua.ORDER_NONE = 99;\n\n/**\n * Note: Lua is not supporting zero-indexing since the language itself is\n * one-indexed, so the generator does not repoct the oneBasedIndex configuration\n * option used for lists and text.\n */\n\n/**\n * Whether the init method has been called.\n * @type {?boolean}\n */\nLua.isInitialized = false;\n\n/**\n * Initialise the database of variable names.\n * @param {!Workspace} workspace Workspace to generate code from.\n */\nLua.init = function(workspace) {\n // Call Blockly.CodeGenerator's init.\n Object.getPrototypeOf(this).init.call(this);\n\n if (!this.nameDB_) {\n this.nameDB_ = new Names(this.RESERVED_WORDS_);\n } else {\n this.nameDB_.reset();\n }\n this.nameDB_.setVariableMap(workspace.getVariableMap());\n this.nameDB_.populateVariables(workspace);\n this.nameDB_.populateProcedures(workspace);\n\n this.isInitialized = true;\n};\n\n/**\n * Prepend the generated code with the variable definitions.\n * @param {string} code Generated code.\n * @return {string} Completed code.\n */\nLua.finish = function(code) {\n // Convert the definitions dictionary into a list.\n const definitions = Object.values(this.definitions_);\n // Call Blockly.CodeGenerator's finish.\n code = Object.getPrototypeOf(this).finish.call(this, code);\n this.isInitialized = false;\n\n this.nameDB_.reset();\n return definitions.join('\\n\\n') + '\\n\\n\\n' + code;\n};\n\n/**\n * Naked values are top-level blocks with outputs that aren't plugged into\n * anything. In Lua, an expression is not a legal statement, so we must assign\n * the value to the (conventionally ignored) _.\n * http://lua-users.org/wiki/ExpressionsAsStatements\n * @param {string} line Line of generated code.\n * @return {string} Legal line of code.\n */\nLua.scrubNakedValue = function(line) {\n return 'local _ = ' + line + '\\n';\n};\n\n/**\n * Encode a string as a properly escaped Lua string, complete with\n * quotes.\n * @param {string} string Text to encode.\n * @return {string} Lua string.\n * @protected\n */\nLua.quote_ = function(string) {\n string = string.replace(/\\\\/g, '\\\\\\\\')\n .replace(/\\n/g, '\\\\\\n')\n .replace(/'/g, '\\\\\\'');\n return '\\'' + string + '\\'';\n};\n\n/**\n * Encode a string as a properly escaped multiline Lua string, complete with\n * quotes.\n * @param {string} string Text to encode.\n * @return {string} Lua string.\n * @protected\n */\nLua.multiline_quote_ = function(string) {\n const lines = string.split(/\\n/g).map(this.quote_);\n // Join with the following, plus a newline:\n // .. '\\n' ..\n return lines.join(' .. \\'\\\\n\\' ..\\n');\n};\n\n/**\n * Common tasks for generating Lua from blocks.\n * Handles comments for the specified block and any connected value blocks.\n * Calls any statements following this block.\n * @param {!Block} block The current block.\n * @param {string} code The Lua code created for this block.\n * @param {boolean=} opt_thisOnly True to generate code for only this statement.\n * @return {string} Lua code with comments and subsequent blocks added.\n * @protected\n */\nLua.scrub_ = function(block, code, opt_thisOnly) {\n let commentCode = '';\n // Only collect comments for blocks that aren't inline.\n if (!block.outputConnection || !block.outputConnection.targetConnection) {\n // Collect comment for this block.\n let comment = block.getCommentText();\n if (comment) {\n comment = stringUtils.wrap(comment, this.COMMENT_WRAP - 3);\n commentCode += this.prefixLines(comment, '-- ') + '\\n';\n }\n // Collect comments for all value arguments.\n // Don't collect comments for nested statements.\n for (let i = 0; i < block.inputList.length; i++) {\n if (block.inputList[i].type === inputTypes.VALUE) {\n const childBlock = block.inputList[i].connection.targetBlock();\n if (childBlock) {\n comment = this.allNestedComments(childBlock);\n if (comment) {\n commentCode += this.prefixLines(comment, '-- ');\n }\n }\n }\n }\n }\n const nextBlock = block.nextConnection && block.nextConnection.targetBlock();\n const nextCode = opt_thisOnly ? '' : this.blockToCode(nextBlock);\n return commentCode + code + nextCode;\n};\n\nexports.luaGenerator = Lua;\n","/**\n * @license\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating Lua for colour blocks.\n */\n'use strict';\n\ngoog.module('Blockly.Lua.colour');\n\nconst {luaGenerator: Lua} = goog.require('Blockly.Lua');\n\n\nLua['colour_picker'] = function(block) {\n // Colour picker.\n const code = Lua.quote_(block.getFieldValue('COLOUR'));\n return [code, Lua.ORDER_ATOMIC];\n};\n\nLua['colour_random'] = function(block) {\n // Generate a random colour.\n const code = 'string.format(\"#%06x\", math.random(0, 2^24 - 1))';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['colour_rgb'] = function(block) {\n // Compose a colour from RGB components expressed as percentages.\n const functionName = Lua.provideFunction_('colour_rgb', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(r, g, b)\n r = math.floor(math.min(100, math.max(0, r)) * 2.55 + .5)\n g = math.floor(math.min(100, math.max(0, g)) * 2.55 + .5)\n b = math.floor(math.min(100, math.max(0, b)) * 2.55 + .5)\n return string.format(\"#%02x%02x%02x\", r, g, b)\nend\n`);\n const r = Lua.valueToCode(block, 'RED', Lua.ORDER_NONE) || 0;\n const g = Lua.valueToCode(block, 'GREEN', Lua.ORDER_NONE) || 0;\n const b = Lua.valueToCode(block, 'BLUE', Lua.ORDER_NONE) || 0;\n const code = functionName + '(' + r + ', ' + g + ', ' + b + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['colour_blend'] = function(block) {\n // Blend two colours together.\n const functionName = Lua.provideFunction_('colour_blend', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(colour1, colour2, ratio)\n local r1 = tonumber(string.sub(colour1, 2, 3), 16)\n local r2 = tonumber(string.sub(colour2, 2, 3), 16)\n local g1 = tonumber(string.sub(colour1, 4, 5), 16)\n local g2 = tonumber(string.sub(colour2, 4, 5), 16)\n local b1 = tonumber(string.sub(colour1, 6, 7), 16)\n local b2 = tonumber(string.sub(colour2, 6, 7), 16)\n local ratio = math.min(1, math.max(0, ratio))\n local r = math.floor(r1 * (1 - ratio) + r2 * ratio + .5)\n local g = math.floor(g1 * (1 - ratio) + g2 * ratio + .5)\n local b = math.floor(b1 * (1 - ratio) + b2 * ratio + .5)\n return string.format(\"#%02x%02x%02x\", r, g, b)\nend\n`);\n const colour1 =\n Lua.valueToCode(block, 'COLOUR1', Lua.ORDER_NONE) || \"'#000000'\";\n const colour2 =\n Lua.valueToCode(block, 'COLOUR2', Lua.ORDER_NONE) || \"'#000000'\";\n const ratio = Lua.valueToCode(block, 'RATIO', Lua.ORDER_NONE) || 0;\n const code =\n functionName + '(' + colour1 + ', ' + colour2 + ', ' + ratio + ')';\n return [code, Lua.ORDER_HIGH];\n};\n","/**\n * @license\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating Lua for list blocks.\n */\n'use strict';\n\ngoog.module('Blockly.Lua.lists');\n\nconst {NameType} = goog.require('Blockly.Names');\nconst {luaGenerator: Lua} = goog.require('Blockly.Lua');\n\n\nLua['lists_create_empty'] = function(block) {\n // Create an empty list.\n return ['{}', Lua.ORDER_HIGH];\n};\n\nLua['lists_create_with'] = function(block) {\n // Create a list with any number of elements of any type.\n const elements = new Array(block.itemCount_);\n for (let i = 0; i < block.itemCount_; i++) {\n elements[i] = Lua.valueToCode(block, 'ADD' + i, Lua.ORDER_NONE) || 'None';\n }\n const code = '{' + elements.join(', ') + '}';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['lists_repeat'] = function(block) {\n // Create a list with one element repeated.\n const functionName = Lua.provideFunction_('create_list_repeated', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(item, count)\n local t = {}\n for i = 1, count do\n table.insert(t, item)\n end\n return t\nend\n `);\n const element = Lua.valueToCode(block, 'ITEM', Lua.ORDER_NONE) || 'None';\n const repeatCount = Lua.valueToCode(block, 'NUM', Lua.ORDER_NONE) || '0';\n const code = functionName + '(' + element + ', ' + repeatCount + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['lists_length'] = function(block) {\n // String or array length.\n const list = Lua.valueToCode(block, 'VALUE', Lua.ORDER_UNARY) || '{}';\n return ['#' + list, Lua.ORDER_UNARY];\n};\n\nLua['lists_isEmpty'] = function(block) {\n // Is the string null or array empty?\n const list = Lua.valueToCode(block, 'VALUE', Lua.ORDER_UNARY) || '{}';\n const code = '#' + list + ' == 0';\n return [code, Lua.ORDER_RELATIONAL];\n};\n\nLua['lists_indexOf'] = function(block) {\n // Find an item in the list.\n const item = Lua.valueToCode(block, 'FIND', Lua.ORDER_NONE) || \"''\";\n const list = Lua.valueToCode(block, 'VALUE', Lua.ORDER_NONE) || '{}';\n let functionName;\n if (block.getFieldValue('END') === 'FIRST') {\n functionName = Lua.provideFunction_('first_index', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(t, elem)\n for k, v in ipairs(t) do\n if v == elem then\n return k\n end\n end\n return 0\nend\n`);\n } else {\n functionName = Lua.provideFunction_('last_index', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(t, elem)\n for i = #t, 1, -1 do\n if t[i] == elem then\n return i\n end\n end\n return 0\nend\n`);\n }\n const code = functionName + '(' + list + ', ' + item + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\n/**\n * Returns an expression calculating the index into a list.\n * @param {string} listName Name of the list, used to calculate length.\n * @param {string} where The method of indexing, selected by dropdown in Blockly\n * @param {string=} opt_at The optional offset when indexing from start/end.\n * @return {string|undefined} Index expression.\n */\nconst getListIndex = function(listName, where, opt_at) {\n if (where === 'FIRST') {\n return '1';\n } else if (where === 'FROM_END') {\n return '#' + listName + ' + 1 - ' + opt_at;\n } else if (where === 'LAST') {\n return '#' + listName;\n } else if (where === 'RANDOM') {\n return 'math.random(#' + listName + ')';\n } else {\n return opt_at;\n }\n};\n\nLua['lists_getIndex'] = function(block) {\n // Get element at index.\n // Note: Until January 2013 this block did not have MODE or WHERE inputs.\n const mode = block.getFieldValue('MODE') || 'GET';\n const where = block.getFieldValue('WHERE') || 'FROM_START';\n const list = Lua.valueToCode(block, 'VALUE', Lua.ORDER_HIGH) || '({})';\n\n // If `list` would be evaluated more than once (which is the case for LAST,\n // FROM_END, and RANDOM) and is non-trivial, make sure to access it only once.\n if ((where === 'LAST' || where === 'FROM_END' || where === 'RANDOM') &&\n !list.match(/^\\w+$/)) {\n // `list` is an expression, so we may not evaluate it more than once.\n if (mode === 'REMOVE') {\n // We can use multiple statements.\n const atOrder =\n (where === 'FROM_END') ? Lua.ORDER_ADDITIVE : Lua.ORDER_NONE;\n let at = Lua.valueToCode(block, 'AT', atOrder) || '1';\n const listVar =\n Lua.nameDB_.getDistinctName('tmp_list', NameType.VARIABLE);\n at = getListIndex(listVar, where, at);\n const code = listVar + ' = ' + list + '\\n' +\n 'table.remove(' + listVar + ', ' + at + ')\\n';\n return code;\n } else {\n // We need to create a procedure to avoid reevaluating values.\n const at = Lua.valueToCode(block, 'AT', Lua.ORDER_NONE) || '1';\n let functionName;\n if (mode === 'GET') {\n functionName = Lua.provideFunction_('list_get_' + where.toLowerCase(), [\n 'function ' + Lua.FUNCTION_NAME_PLACEHOLDER_ + '(t' +\n // The value for 'FROM_END' and'FROM_START' depends on `at` so\n // we add it as a parameter.\n ((where === 'FROM_END' || where === 'FROM_START') ? ', at)' :\n ')'),\n ' return t[' + getListIndex('t', where, 'at') + ']', 'end'\n ]);\n } else { // `mode` === 'GET_REMOVE'\n functionName =\n Lua.provideFunction_('list_remove_' + where.toLowerCase(), [\n 'function ' + Lua.FUNCTION_NAME_PLACEHOLDER_ + '(t' +\n // The value for 'FROM_END' and'FROM_START' depends on `at` so\n // we add it as a parameter.\n ((where === 'FROM_END' || where === 'FROM_START') ? ', at)' :\n ')'),\n ' return table.remove(t, ' + getListIndex('t', where, 'at') +\n ')',\n 'end'\n ]);\n }\n const code = functionName + '(' + list +\n // The value for 'FROM_END' and 'FROM_START' depends on `at` so we\n // pass it.\n ((where === 'FROM_END' || where === 'FROM_START') ? ', ' + at : '') +\n ')';\n return [code, Lua.ORDER_HIGH];\n }\n } else {\n // Either `list` is a simple variable, or we only need to refer to `list`\n // once.\n const atOrder = (mode === 'GET' && where === 'FROM_END') ?\n Lua.ORDER_ADDITIVE :\n Lua.ORDER_NONE;\n let at = Lua.valueToCode(block, 'AT', atOrder) || '1';\n at = getListIndex(list, where, at);\n if (mode === 'GET') {\n const code = list + '[' + at + ']';\n return [code, Lua.ORDER_HIGH];\n } else {\n const code = 'table.remove(' + list + ', ' + at + ')';\n if (mode === 'GET_REMOVE') {\n return [code, Lua.ORDER_HIGH];\n } else { // `mode` === 'REMOVE'\n return code + '\\n';\n }\n }\n }\n};\n\nLua['lists_setIndex'] = function(block) {\n // Set element at index.\n // Note: Until February 2013 this block did not have MODE or WHERE inputs.\n let list = Lua.valueToCode(block, 'LIST', Lua.ORDER_HIGH) || '{}';\n const mode = block.getFieldValue('MODE') || 'SET';\n const where = block.getFieldValue('WHERE') || 'FROM_START';\n const at = Lua.valueToCode(block, 'AT', Lua.ORDER_ADDITIVE) || '1';\n const value = Lua.valueToCode(block, 'TO', Lua.ORDER_NONE) || 'None';\n\n let code = '';\n // If `list` would be evaluated more than once (which is the case for LAST,\n // FROM_END, and RANDOM) and is non-trivial, make sure to access it only once.\n if ((where === 'LAST' || where === 'FROM_END' || where === 'RANDOM') &&\n !list.match(/^\\w+$/)) {\n // `list` is an expression, so we may not evaluate it more than once.\n // We can use multiple statements.\n const listVar = Lua.nameDB_.getDistinctName('tmp_list', NameType.VARIABLE);\n code = listVar + ' = ' + list + '\\n';\n list = listVar;\n }\n if (mode === 'SET') {\n code += list + '[' + getListIndex(list, where, at) + '] = ' + value;\n } else { // `mode` === 'INSERT'\n // LAST is a special case, because we want to insert\n // *after* not *before*, the existing last element.\n code += 'table.insert(' + list + ', ' +\n (getListIndex(list, where, at) + (where === 'LAST' ? ' + 1' : '')) +\n ', ' + value + ')';\n }\n return code + '\\n';\n};\n\nLua['lists_getSublist'] = function(block) {\n // Get sublist.\n const list = Lua.valueToCode(block, 'LIST', Lua.ORDER_NONE) || '{}';\n const where1 = block.getFieldValue('WHERE1');\n const where2 = block.getFieldValue('WHERE2');\n const at1 = Lua.valueToCode(block, 'AT1', Lua.ORDER_NONE) || '1';\n const at2 = Lua.valueToCode(block, 'AT2', Lua.ORDER_NONE) || '1';\n\n // The value for 'FROM_END' and'FROM_START' depends on `at` so\n // we add it as a parameter.\n const at1Param =\n (where1 === 'FROM_END' || where1 === 'FROM_START') ? ', at1' : '';\n const at2Param =\n (where2 === 'FROM_END' || where2 === 'FROM_START') ? ', at2' : '';\n const functionName = Lua.provideFunction_(\n 'list_sublist_' + where1.toLowerCase() + '_' + where2.toLowerCase(), `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(source${at1Param}${at2Param})\n local t = {}\n local start = ${getListIndex('source', where1, 'at1')}\n local finish = ${getListIndex('source', where2, 'at2')}\n for i = start, finish do\n table.insert(t, source[i])\n end\n return t\nend\n`);\n const code = functionName + '(' + list +\n // The value for 'FROM_END' and 'FROM_START' depends on `at` so we\n // pass it.\n ((where1 === 'FROM_END' || where1 === 'FROM_START') ? ', ' + at1 : '') +\n ((where2 === 'FROM_END' || where2 === 'FROM_START') ? ', ' + at2 : '') +\n ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['lists_sort'] = function(block) {\n // Block for sorting a list.\n const list = Lua.valueToCode(block, 'LIST', Lua.ORDER_NONE) || '{}';\n const direction = block.getFieldValue('DIRECTION') === '1' ? 1 : -1;\n const type = block.getFieldValue('TYPE');\n\n const functionName = Lua.provideFunction_('list_sort', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(list, typev, direction)\n local t = {}\n for n,v in pairs(list) do table.insert(t, v) end\n local compareFuncs = {\n NUMERIC = function(a, b)\n return (tonumber(tostring(a)) or 0)\n < (tonumber(tostring(b)) or 0) end,\n TEXT = function(a, b)\n return tostring(a) < tostring(b) end,\n IGNORE_CASE = function(a, b)\n return string.lower(tostring(a)) < string.lower(tostring(b)) end\n }\n local compareTemp = compareFuncs[typev]\n local compare = compareTemp\n if direction == -1\n then compare = function(a, b) return compareTemp(b, a) end\n end\n table.sort(t, compare)\n return t\nend\n`);\n\n const code =\n functionName + '(' + list + ',\"' + type + '\", ' + direction + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['lists_split'] = function(block) {\n // Block for splitting text into a list, or joining a list into text.\n let input = Lua.valueToCode(block, 'INPUT', Lua.ORDER_NONE);\n const delimiter = Lua.valueToCode(block, 'DELIM', Lua.ORDER_NONE) || \"''\";\n const mode = block.getFieldValue('MODE');\n let functionName;\n if (mode === 'SPLIT') {\n if (!input) {\n input = \"''\";\n }\n functionName = Lua.provideFunction_('list_string_split', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(input, delim)\n local t = {}\n local pos = 1\n while true do\n next_delim = string.find(input, delim, pos)\n if next_delim == nil then\n table.insert(t, string.sub(input, pos))\n break\n else\n table.insert(t, string.sub(input, pos, next_delim-1))\n pos = next_delim + #delim\n end\n end\n return t\nend\n`);\n } else if (mode === 'JOIN') {\n if (!input) {\n input = '{}';\n }\n functionName = 'table.concat';\n } else {\n throw Error('Unknown mode: ' + mode);\n }\n const code = functionName + '(' + input + ', ' + delimiter + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['lists_reverse'] = function(block) {\n // Block for reversing a list.\n const list = Lua.valueToCode(block, 'LIST', Lua.ORDER_NONE) || '{}';\n const functionName = Lua.provideFunction_('list_reverse', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(input)\n local reversed = {}\n for i = #input, 1, -1 do\n table.insert(reversed, input[i])\n end\n return reversed\nend\n`);\n const code = functionName + '(' + list + ')';\n return [code, Lua.ORDER_HIGH];\n};\n","/**\n * @license\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating Lua for logic blocks.\n */\n'use strict';\n\ngoog.module('Blockly.Lua.logic');\n\nconst {luaGenerator: Lua} = goog.require('Blockly.Lua');\n\n\nLua['controls_if'] = function(block) {\n // If/elseif/else condition.\n let n = 0;\n let code = '';\n if (Lua.STATEMENT_PREFIX) {\n // Automatic prefix insertion is switched off for this block. Add manually.\n code += Lua.injectId(Lua.STATEMENT_PREFIX, block);\n }\n do {\n const conditionCode =\n Lua.valueToCode(block, 'IF' + n, Lua.ORDER_NONE) || 'false';\n let branchCode = Lua.statementToCode(block, 'DO' + n);\n if (Lua.STATEMENT_SUFFIX) {\n branchCode = Lua.prefixLines(\n Lua.injectId(Lua.STATEMENT_SUFFIX, block), Lua.INDENT) + branchCode;\n }\n code +=\n (n > 0 ? 'else' : '') + 'if ' + conditionCode + ' then\\n' + branchCode;\n n++;\n } while (block.getInput('IF' + n));\n\n if (block.getInput('ELSE') || Lua.STATEMENT_SUFFIX) {\n let branchCode = Lua.statementToCode(block, 'ELSE');\n if (Lua.STATEMENT_SUFFIX) {\n branchCode = Lua.prefixLines(\n Lua.injectId(Lua.STATEMENT_SUFFIX, block), Lua.INDENT) +\n branchCode;\n }\n code += 'else\\n' + branchCode;\n }\n return code + 'end\\n';\n};\n\nLua['controls_ifelse'] = Lua['controls_if'];\n\nLua['logic_compare'] = function(block) {\n // Comparison operator.\n const OPERATORS =\n {'EQ': '==', 'NEQ': '~=', 'LT': '<', 'LTE': '<=', 'GT': '>', 'GTE': '>='};\n const operator = OPERATORS[block.getFieldValue('OP')];\n const argument0 = Lua.valueToCode(block, 'A', Lua.ORDER_RELATIONAL) || '0';\n const argument1 = Lua.valueToCode(block, 'B', Lua.ORDER_RELATIONAL) || '0';\n const code = argument0 + ' ' + operator + ' ' + argument1;\n return [code, Lua.ORDER_RELATIONAL];\n};\n\nLua['logic_operation'] = function(block) {\n // Operations 'and', 'or'.\n const operator = (block.getFieldValue('OP') === 'AND') ? 'and' : 'or';\n const order = (operator === 'and') ? Lua.ORDER_AND : Lua.ORDER_OR;\n let argument0 = Lua.valueToCode(block, 'A', order);\n let argument1 = Lua.valueToCode(block, 'B', order);\n if (!argument0 && !argument1) {\n // If there are no arguments, then the return value is false.\n argument0 = 'false';\n argument1 = 'false';\n } else {\n // Single missing arguments have no effect on the return value.\n const defaultArgument = (operator === 'and') ? 'true' : 'false';\n if (!argument0) {\n argument0 = defaultArgument;\n }\n if (!argument1) {\n argument1 = defaultArgument;\n }\n }\n const code = argument0 + ' ' + operator + ' ' + argument1;\n return [code, order];\n};\n\nLua['logic_negate'] = function(block) {\n // Negation.\n const argument0 = Lua.valueToCode(block, 'BOOL', Lua.ORDER_UNARY) || 'true';\n const code = 'not ' + argument0;\n return [code, Lua.ORDER_UNARY];\n};\n\nLua['logic_boolean'] = function(block) {\n // Boolean values true and false.\n const code = (block.getFieldValue('BOOL') === 'TRUE') ? 'true' : 'false';\n return [code, Lua.ORDER_ATOMIC];\n};\n\nLua['logic_null'] = function(block) {\n // Null data type.\n return ['nil', Lua.ORDER_ATOMIC];\n};\n\nLua['logic_ternary'] = function(block) {\n // Ternary operator.\n const value_if = Lua.valueToCode(block, 'IF', Lua.ORDER_AND) || 'false';\n const value_then = Lua.valueToCode(block, 'THEN', Lua.ORDER_AND) || 'nil';\n const value_else = Lua.valueToCode(block, 'ELSE', Lua.ORDER_OR) || 'nil';\n const code = value_if + ' and ' + value_then + ' or ' + value_else;\n return [code, Lua.ORDER_OR];\n};\n","/**\n * @license\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating Lua for loop blocks.\n */\n'use strict';\n\ngoog.module('Blockly.Lua.loops');\n\nconst stringUtils = goog.require('Blockly.utils.string');\nconst {NameType} = goog.require('Blockly.Names');\nconst {luaGenerator: Lua} = goog.require('Blockly.Lua');\n\n\n/**\n * This is the text used to implement a
continue.\n * It is also used to recognise
continues in generated code so that\n * the appropriate label can be put at the end of the loop body.\n * @const {string}\n */\nconst CONTINUE_STATEMENT = 'goto continue\\n';\n\n/**\n * If the loop body contains a \"goto continue\" statement, add a continue label\n * to the loop body. Slightly inefficient, as continue labels will be generated\n * in all outer loops, but this is safer than duplicating the logic of\n * blockToCode.\n *\n * @param {string} branch Generated code of the loop body\n * @return {string} Generated label or '' if unnecessary\n */\nconst addContinueLabel = function(branch) {\n if (branch.indexOf(CONTINUE_STATEMENT) !== -1) {\n // False positives are possible (e.g. a string literal), but are harmless.\n return branch + Lua.INDENT + '::continue::\\n';\n } else {\n return branch;\n }\n};\n\nLua['controls_repeat_ext'] = function(block) {\n // Repeat n times.\n let repeats;\n if (block.getField('TIMES')) {\n // Internal number.\n repeats = String(Number(block.getFieldValue('TIMES')));\n } else {\n // External number.\n repeats = Lua.valueToCode(block, 'TIMES', Lua.ORDER_NONE) || '0';\n }\n if (stringUtils.isNumber(repeats)) {\n repeats = parseInt(repeats, 10);\n } else {\n repeats = 'math.floor(' + repeats + ')';\n }\n let branch = Lua.statementToCode(block, 'DO');\n branch = Lua.addLoopTrap(branch, block);\n branch = addContinueLabel(branch);\n const loopVar = Lua.nameDB_.getDistinctName('count', NameType.VARIABLE);\n const code =\n 'for ' + loopVar + ' = 1, ' + repeats + ' do\\n' + branch + 'end\\n';\n return code;\n};\n\nLua['controls_repeat'] = Lua['controls_repeat_ext'];\n\nLua['controls_whileUntil'] = function(block) {\n // Do while/until loop.\n const until = block.getFieldValue('MODE') === 'UNTIL';\n let argument0 =\n Lua.valueToCode(\n block, 'BOOL', until ? Lua.ORDER_UNARY : Lua.ORDER_NONE) ||\n 'false';\n let branch = Lua.statementToCode(block, 'DO');\n branch = Lua.addLoopTrap(branch, block);\n branch = addContinueLabel(branch);\n if (until) {\n argument0 = 'not ' + argument0;\n }\n return 'while ' + argument0 + ' do\\n' + branch + 'end\\n';\n};\n\nLua['controls_for'] = function(block) {\n // For loop.\n const variable0 =\n Lua.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n const startVar = Lua.valueToCode(block, 'FROM', Lua.ORDER_NONE) || '0';\n const endVar = Lua.valueToCode(block, 'TO', Lua.ORDER_NONE) || '0';\n const increment = Lua.valueToCode(block, 'BY', Lua.ORDER_NONE) || '1';\n let branch = Lua.statementToCode(block, 'DO');\n branch = Lua.addLoopTrap(branch, block);\n branch = addContinueLabel(branch);\n let code = '';\n let incValue;\n if (stringUtils.isNumber(startVar) && stringUtils.isNumber(endVar) &&\n stringUtils.isNumber(increment)) {\n // All arguments are simple numbers.\n const up = Number(startVar) <= Number(endVar);\n const step = Math.abs(Number(increment));\n incValue = (up ? '' : '-') + step;\n } else {\n code = '';\n // Determine loop direction at start, in case one of the bounds\n // changes during loop execution.\n incValue =\n Lua.nameDB_.getDistinctName(variable0 + '_inc', NameType.VARIABLE);\n code += incValue + ' = ';\n if (stringUtils.isNumber(increment)) {\n code += Math.abs(increment) + '\\n';\n } else {\n code += 'math.abs(' + increment + ')\\n';\n }\n code += 'if (' + startVar + ') > (' + endVar + ') then\\n';\n code += Lua.INDENT + incValue + ' = -' + incValue + '\\n';\n code += 'end\\n';\n }\n code +=\n 'for ' + variable0 + ' = ' + startVar + ', ' + endVar + ', ' + incValue;\n code += ' do\\n' + branch + 'end\\n';\n return code;\n};\n\nLua['controls_forEach'] = function(block) {\n // For each loop.\n const variable0 =\n Lua.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n const argument0 = Lua.valueToCode(block, 'LIST', Lua.ORDER_NONE) || '{}';\n let branch = Lua.statementToCode(block, 'DO');\n branch = Lua.addLoopTrap(branch, block);\n branch = addContinueLabel(branch);\n const code = 'for _, ' + variable0 + ' in ipairs(' + argument0 + ') do \\n' +\n branch + 'end\\n';\n return code;\n};\n\nLua['controls_flow_statements'] = function(block) {\n // Flow statements: continue, break.\n let xfix = '';\n if (Lua.STATEMENT_PREFIX) {\n // Automatic prefix insertion is switched off for this block. Add manually.\n xfix += Lua.injectId(Lua.STATEMENT_PREFIX, block);\n }\n if (Lua.STATEMENT_SUFFIX) {\n // Inject any statement suffix here since the regular one at the end\n // will not get executed if the break/continue is triggered.\n xfix += Lua.injectId(Lua.STATEMENT_SUFFIX, block);\n }\n if (Lua.STATEMENT_PREFIX) {\n const loop = block.getSurroundLoop();\n if (loop && !loop.suppressPrefixSuffix) {\n // Inject loop's statement prefix here since the regular one at the end\n // of the loop will not get executed if 'continue' is triggered.\n // In the case of 'break', a prefix is needed due to the loop's suffix.\n xfix += Lua.injectId(Lua.STATEMENT_PREFIX, loop);\n }\n }\n switch (block.getFieldValue('FLOW')) {\n case 'BREAK':\n return xfix + 'break\\n';\n case 'CONTINUE':\n return xfix + CONTINUE_STATEMENT;\n }\n throw Error('Unknown flow statement.');\n};\n","/**\n * @license\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating Lua for math blocks.\n */\n'use strict';\n\ngoog.module('Blockly.Lua.math');\n\nconst {NameType} = goog.require('Blockly.Names');\nconst {luaGenerator: Lua} = goog.require('Blockly.Lua');\n\n\nLua['math_number'] = function(block) {\n // Numeric value.\n const code = Number(block.getFieldValue('NUM'));\n const order = code < 0 ? Lua.ORDER_UNARY : Lua.ORDER_ATOMIC;\n return [code, order];\n};\n\nLua['math_arithmetic'] = function(block) {\n // Basic arithmetic operators, and power.\n const OPERATORS = {\n 'ADD': [' + ', Lua.ORDER_ADDITIVE],\n 'MINUS': [' - ', Lua.ORDER_ADDITIVE],\n 'MULTIPLY': [' * ', Lua.ORDER_MULTIPLICATIVE],\n 'DIVIDE': [' / ', Lua.ORDER_MULTIPLICATIVE],\n 'POWER': [' ^ ', Lua.ORDER_EXPONENTIATION],\n };\n const tuple = OPERATORS[block.getFieldValue('OP')];\n const operator = tuple[0];\n const order = tuple[1];\n const argument0 = Lua.valueToCode(block, 'A', order) || '0';\n const argument1 = Lua.valueToCode(block, 'B', order) || '0';\n const code = argument0 + operator + argument1;\n return [code, order];\n};\n\nLua['math_single'] = function(block) {\n // Math operators with single operand.\n const operator = block.getFieldValue('OP');\n let arg;\n if (operator === 'NEG') {\n // Negation is a special case given its different operator precedence.\n arg = Lua.valueToCode(block, 'NUM', Lua.ORDER_UNARY) || '0';\n return ['-' + arg, Lua.ORDER_UNARY];\n }\n if (operator === 'POW10') {\n arg = Lua.valueToCode(block, 'NUM', Lua.ORDER_EXPONENTIATION) || '0';\n return ['10 ^ ' + arg, Lua.ORDER_EXPONENTIATION];\n }\n if (operator === 'ROUND') {\n arg = Lua.valueToCode(block, 'NUM', Lua.ORDER_ADDITIVE) || '0';\n } else {\n arg = Lua.valueToCode(block, 'NUM', Lua.ORDER_NONE) || '0';\n }\n\n let code;\n switch (operator) {\n case 'ABS':\n code = 'math.abs(' + arg + ')';\n break;\n case 'ROOT':\n code = 'math.sqrt(' + arg + ')';\n break;\n case 'LN':\n code = 'math.log(' + arg + ')';\n break;\n case 'LOG10':\n code = 'math.log(' + arg + ', 10)';\n break;\n case 'EXP':\n code = 'math.exp(' + arg + ')';\n break;\n case 'ROUND':\n // This rounds up. Blockly does not specify rounding direction.\n code = 'math.floor(' + arg + ' + .5)';\n break;\n case 'ROUNDUP':\n code = 'math.ceil(' + arg + ')';\n break;\n case 'ROUNDDOWN':\n code = 'math.floor(' + arg + ')';\n break;\n case 'SIN':\n code = 'math.sin(math.rad(' + arg + '))';\n break;\n case 'COS':\n code = 'math.cos(math.rad(' + arg + '))';\n break;\n case 'TAN':\n code = 'math.tan(math.rad(' + arg + '))';\n break;\n case 'ASIN':\n code = 'math.deg(math.asin(' + arg + '))';\n break;\n case 'ACOS':\n code = 'math.deg(math.acos(' + arg + '))';\n break;\n case 'ATAN':\n code = 'math.deg(math.atan(' + arg + '))';\n break;\n default:\n throw Error('Unknown math operator: ' + operator);\n }\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['math_constant'] = function(block) {\n // Constants: PI, E, the Golden Ratio, sqrt(2), 1/sqrt(2), INFINITY.\n const CONSTANTS = {\n 'PI': ['math.pi', Lua.ORDER_HIGH],\n 'E': ['math.exp(1)', Lua.ORDER_HIGH],\n 'GOLDEN_RATIO': ['(1 + math.sqrt(5)) / 2', Lua.ORDER_MULTIPLICATIVE],\n 'SQRT2': ['math.sqrt(2)', Lua.ORDER_HIGH],\n 'SQRT1_2': ['math.sqrt(1 / 2)', Lua.ORDER_HIGH],\n 'INFINITY': ['math.huge', Lua.ORDER_HIGH],\n };\n return CONSTANTS[block.getFieldValue('CONSTANT')];\n};\n\nLua['math_number_property'] = function(block) {\n // Check if a number is even, odd, prime, whole, positive, or negative\n // or if it is divisible by certain number. Returns true or false.\n const PROPERTIES = {\n 'EVEN': [' % 2 == 0', Lua.ORDER_MULTIPLICATIVE, Lua.ORDER_RELATIONAL],\n 'ODD': [' % 2 == 1', Lua.ORDER_MULTIPLICATIVE, Lua.ORDER_RELATIONAL],\n 'WHOLE': [' % 1 == 0', Lua.ORDER_MULTIPLICATIVE, Lua.ORDER_RELATIONAL],\n 'POSITIVE': [' > 0', Lua.ORDER_RELATIONAL, Lua.ORDER_RELATIONAL],\n 'NEGATIVE': [' < 0', Lua.ORDER_RELATIONAL, Lua.ORDER_RELATIONAL],\n 'DIVISIBLE_BY': [null, Lua.ORDER_MULTIPLICATIVE, Lua.ORDER_RELATIONAL],\n 'PRIME': [null, Lua.ORDER_NONE, Lua.ORDER_HIGH],\n };\n const dropdownProperty = block.getFieldValue('PROPERTY');\n const [suffix, inputOrder, outputOrder] = PROPERTIES[dropdownProperty];\n const numberToCheck = Lua.valueToCode(block, 'NUMBER_TO_CHECK',\n inputOrder) || '0';\n let code;\n if (dropdownProperty === 'PRIME') {\n // Prime is a special case as it is not a one-liner test.\n const functionName = Lua.provideFunction_('math_isPrime', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(n)\n -- https://en.wikipedia.org/wiki/Primality_test#Naive_methods\n if n == 2 or n == 3 then\n return true\n end\n -- False if n is NaN, negative, is 1, or not whole.\n -- And false if n is divisible by 2 or 3.\n if not(n > 1) or n % 1 ~= 0 or n % 2 == 0 or n % 3 == 0 then\n return false\n end\n -- Check all the numbers of form 6k +/- 1, up to sqrt(n).\n for x = 6, math.sqrt(n) + 1.5, 6 do\n if n % (x - 1) == 0 or n % (x + 1) == 0 then\n return false\n end\n end\n return true\nend\n`);\n code = functionName + '(' + numberToCheck + ')';\n } else if (dropdownProperty === 'DIVISIBLE_BY') {\n const divisor = Lua.valueToCode(block, 'DIVISOR',\n Lua.ORDER_MULTIPLICATIVE) || '0';\n // If 'divisor' is some code that evals to 0, Lua will produce a nan.\n // Let's produce nil if we can determine this at compile-time.\n if (divisor === '0') {\n return ['nil', Lua.ORDER_ATOMIC];\n }\n // The normal trick to implement ?: with and/or doesn't work here:\n // divisor == 0 and nil or number_to_check % divisor == 0\n // because nil is false, so allow a runtime failure. :-(\n code = numberToCheck + ' % ' + divisor + ' == 0';\n } else {\n code = numberToCheck + suffix;\n }\n return [code, outputOrder];\n};\n\nLua['math_change'] = function(block) {\n // Add to a variable in place.\n const argument0 = Lua.valueToCode(block, 'DELTA', Lua.ORDER_ADDITIVE) || '0';\n const varName =\n Lua.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n return varName + ' = ' + varName + ' + ' + argument0 + '\\n';\n};\n\n// Rounding functions have a single operand.\nLua['math_round'] = Lua['math_single'];\n// Trigonometry functions have a single operand.\nLua['math_trig'] = Lua['math_single'];\n\nLua['math_on_list'] = function(block) {\n // Math functions for lists.\n const func = block.getFieldValue('OP');\n const list = Lua.valueToCode(block, 'LIST', Lua.ORDER_NONE) || '{}';\n let functionName;\n\n // Functions needed in more than one case.\n function provideSum() {\n return Lua.provideFunction_('math_sum', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(t)\n local result = 0\n for _, v in ipairs(t) do\n result = result + v\n end\n return result\nend\n`);\n }\n\n switch (func) {\n case 'SUM':\n functionName = provideSum();\n break;\n\n case 'MIN':\n // Returns 0 for the empty list.\n functionName = Lua.provideFunction_('math_min', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(t)\n if #t == 0 then\n return 0\n end\n local result = math.huge\n for _, v in ipairs(t) do\n if v < result then\n result = v\n end\n end\n return result\nend\n`);\n break;\n\n case 'AVERAGE':\n // Returns 0 for the empty list.\n functionName = Lua.provideFunction_('math_average', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(t)\n if #t == 0 then\n return 0\n end\n return ${provideSum()}(t) / #t\nend\n`);\n break;\n\n case 'MAX':\n // Returns 0 for the empty list.\n functionName = Lua.provideFunction_('math_max', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(t)\n if #t == 0 then\n return 0\n end\n local result = -math.huge\n for _, v in ipairs(t) do\n if v > result then\n result = v\n end\n end\n return result\nend\n`);\n break;\n\n case 'MEDIAN':\n // This operation excludes non-numbers.\n functionName = Lua.provideFunction_('math_median', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(t)\n -- Source: http://lua-users.org/wiki/SimpleStats\n if #t == 0 then\n return 0\n end\n local temp = {}\n for _, v in ipairs(t) do\n if type(v) == 'number' then\n table.insert(temp, v)\n end\n end\n table.sort(temp)\n if #temp % 2 == 0 then\n return (temp[#temp / 2] + temp[(#temp / 2) + 1]) / 2\n else\n return temp[math.ceil(#temp / 2)]\n end\nend\n`);\n break;\n\n case 'MODE':\n // As a list of numbers can contain more than one mode,\n // the returned result is provided as an array.\n // The Lua version includes non-numbers.\n functionName = Lua.provideFunction_('math_modes', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(t)\n -- Source: http://lua-users.org/wiki/SimpleStats\n local counts = {}\n for _, v in ipairs(t) do\n if counts[v] == nil then\n counts[v] = 1\n else\n counts[v] = counts[v] + 1\n end\n end\n local biggestCount = 0\n for _, v in pairs(counts) do\n if v > biggestCount then\n biggestCount = v\n end\n end\n local temp = {}\n for k, v in pairs(counts) do\n if v == biggestCount then\n table.insert(temp, k)\n end\n end\n return temp\nend\n`);\n break;\n\n case 'STD_DEV':\n functionName = Lua.provideFunction_('math_standard_deviation', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(t)\n local m\n local vm\n local total = 0\n local count = 0\n local result\n m = #t == 0 and 0 or ${provideSum()}(t) / #t\n for _, v in ipairs(t) do\n if type(v) == 'number' then\n vm = v - m\n total = total + (vm * vm)\n count = count + 1\n end\n end\n result = math.sqrt(total / (count-1))\n return result\nend\n`);\n break;\n\n case 'RANDOM':\n functionName = Lua.provideFunction_('math_random_list', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(t)\n if #t == 0 then\n return nil\n end\n return t[math.random(#t)]\nend\n`);\n break;\n\n default:\n throw Error('Unknown operator: ' + func);\n }\n return [functionName + '(' + list + ')', Lua.ORDER_HIGH];\n};\n\nLua['math_modulo'] = function(block) {\n // Remainder computation.\n const argument0 =\n Lua.valueToCode(block, 'DIVIDEND', Lua.ORDER_MULTIPLICATIVE) || '0';\n const argument1 =\n Lua.valueToCode(block, 'DIVISOR', Lua.ORDER_MULTIPLICATIVE) || '0';\n const code = argument0 + ' % ' + argument1;\n return [code, Lua.ORDER_MULTIPLICATIVE];\n};\n\nLua['math_constrain'] = function(block) {\n // Constrain a number between two limits.\n const argument0 = Lua.valueToCode(block, 'VALUE', Lua.ORDER_NONE) || '0';\n const argument1 =\n Lua.valueToCode(block, 'LOW', Lua.ORDER_NONE) || '-math.huge';\n const argument2 =\n Lua.valueToCode(block, 'HIGH', Lua.ORDER_NONE) || 'math.huge';\n const code = 'math.min(math.max(' + argument0 + ', ' + argument1 + '), ' +\n argument2 + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['math_random_int'] = function(block) {\n // Random integer between [X] and [Y].\n const argument0 = Lua.valueToCode(block, 'FROM', Lua.ORDER_NONE) || '0';\n const argument1 = Lua.valueToCode(block, 'TO', Lua.ORDER_NONE) || '0';\n const code = 'math.random(' + argument0 + ', ' + argument1 + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['math_random_float'] = function(block) {\n // Random fraction between 0 and 1.\n return ['math.random()', Lua.ORDER_HIGH];\n};\n\nLua['math_atan2'] = function(block) {\n // Arctangent of point (X, Y) in degrees from -180 to 180.\n const argument0 = Lua.valueToCode(block, 'X', Lua.ORDER_NONE) || '0';\n const argument1 = Lua.valueToCode(block, 'Y', Lua.ORDER_NONE) || '0';\n return [\n 'math.deg(math.atan2(' + argument1 + ', ' + argument0 + '))', Lua.ORDER_HIGH\n ];\n};\n","/**\n * @license\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating Lua for procedure blocks.\n */\n'use strict';\n\ngoog.module('Blockly.Lua.procedures');\n\nconst {NameType} = goog.require('Blockly.Names');\nconst {luaGenerator: Lua} = goog.require('Blockly.Lua');\n\n\nLua['procedures_defreturn'] = function(block) {\n // Define a procedure with a return value.\n const funcName =\n Lua.nameDB_.getName(block.getFieldValue('NAME'), NameType.PROCEDURE);\n let xfix1 = '';\n if (Lua.STATEMENT_PREFIX) {\n xfix1 += Lua.injectId(Lua.STATEMENT_PREFIX, block);\n }\n if (Lua.STATEMENT_SUFFIX) {\n xfix1 += Lua.injectId(Lua.STATEMENT_SUFFIX, block);\n }\n if (xfix1) {\n xfix1 = Lua.prefixLines(xfix1, Lua.INDENT);\n }\n let loopTrap = '';\n if (Lua.INFINITE_LOOP_TRAP) {\n loopTrap = Lua.prefixLines(\n Lua.injectId(Lua.INFINITE_LOOP_TRAP, block), Lua.INDENT);\n }\n let branch = Lua.statementToCode(block, 'STACK');\n let returnValue = Lua.valueToCode(block, 'RETURN', Lua.ORDER_NONE) || '';\n let xfix2 = '';\n if (branch && returnValue) {\n // After executing the function body, revisit this block for the return.\n xfix2 = xfix1;\n }\n if (returnValue) {\n returnValue = Lua.INDENT + 'return ' + returnValue + '\\n';\n } else if (!branch) {\n branch = '';\n }\n const args = [];\n const variables = block.getVars();\n for (let i = 0; i < variables.length; i++) {\n args[i] = Lua.nameDB_.getName(variables[i], NameType.VARIABLE);\n }\n let code = 'function ' + funcName + '(' + args.join(', ') + ')\\n' + xfix1 +\n loopTrap + branch + xfix2 + returnValue + 'end\\n';\n code = Lua.scrub_(block, code);\n // Add % so as not to collide with helper functions in definitions list.\n Lua.definitions_['%' + funcName] = code;\n return null;\n};\n\n// Defining a procedure without a return value uses the same generator as\n// a procedure with a return value.\nLua['procedures_defnoreturn'] = Lua['procedures_defreturn'];\n\nLua['procedures_callreturn'] = function(block) {\n // Call a procedure with a return value.\n const funcName =\n Lua.nameDB_.getName(block.getFieldValue('NAME'), NameType.PROCEDURE);\n const args = [];\n const variables = block.getVars();\n for (let i = 0; i < variables.length; i++) {\n args[i] = Lua.valueToCode(block, 'ARG' + i, Lua.ORDER_NONE) || 'nil';\n }\n const code = funcName + '(' + args.join(', ') + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['procedures_callnoreturn'] = function(block) {\n // Call a procedure with no return value.\n // Generated code is for a function call as a statement is the same as a\n // function call as a value, with the addition of line ending.\n const tuple = Lua['procedures_callreturn'](block);\n return tuple[0] + '\\n';\n};\n\nLua['procedures_ifreturn'] = function(block) {\n // Conditionally return value from a procedure.\n const condition =\n Lua.valueToCode(block, 'CONDITION', Lua.ORDER_NONE) || 'false';\n let code = 'if ' + condition + ' then\\n';\n if (Lua.STATEMENT_SUFFIX) {\n // Inject any statement suffix here since the regular one at the end\n // will not get executed if the return is triggered.\n code +=\n Lua.prefixLines(Lua.injectId(Lua.STATEMENT_SUFFIX, block), Lua.INDENT);\n }\n if (block.hasReturnValue_) {\n const value = Lua.valueToCode(block, 'VALUE', Lua.ORDER_NONE) || 'nil';\n code += Lua.INDENT + 'return ' + value + '\\n';\n } else {\n code += Lua.INDENT + 'return\\n';\n }\n code += 'end\\n';\n return code;\n};\n","/**\n * @license\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating Lua for text blocks.\n */\n'use strict';\n\ngoog.module('Blockly.Lua.texts');\n\nconst {NameType} = goog.require('Blockly.Names');\nconst {luaGenerator: Lua} = goog.require('Blockly.Lua');\n\n\nLua['text'] = function(block) {\n // Text value.\n const code = Lua.quote_(block.getFieldValue('TEXT'));\n return [code, Lua.ORDER_ATOMIC];\n};\n\nLua['text_multiline'] = function(block) {\n // Text value.\n const code = Lua.multiline_quote_(block.getFieldValue('TEXT'));\n const order =\n code.indexOf('..') !== -1 ? Lua.ORDER_CONCATENATION : Lua.ORDER_ATOMIC;\n return [code, order];\n};\n\nLua['text_join'] = function(block) {\n // Create a string made up of any number of elements of any type.\n if (block.itemCount_ === 0) {\n return [\"''\", Lua.ORDER_ATOMIC];\n } else if (block.itemCount_ === 1) {\n const element = Lua.valueToCode(block, 'ADD0', Lua.ORDER_NONE) || \"''\";\n const code = 'tostring(' + element + ')';\n return [code, Lua.ORDER_HIGH];\n } else if (block.itemCount_ === 2) {\n const element0 =\n Lua.valueToCode(block, 'ADD0', Lua.ORDER_CONCATENATION) || \"''\";\n const element1 =\n Lua.valueToCode(block, 'ADD1', Lua.ORDER_CONCATENATION) || \"''\";\n const code = element0 + ' .. ' + element1;\n return [code, Lua.ORDER_CONCATENATION];\n } else {\n const elements = [];\n for (let i = 0; i < block.itemCount_; i++) {\n elements[i] = Lua.valueToCode(block, 'ADD' + i, Lua.ORDER_NONE) || \"''\";\n }\n const code = 'table.concat({' + elements.join(', ') + '})';\n return [code, Lua.ORDER_HIGH];\n }\n};\n\nLua['text_append'] = function(block) {\n // Append to a variable in place.\n const varName =\n Lua.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n const value =\n Lua.valueToCode(block, 'TEXT', Lua.ORDER_CONCATENATION) || \"''\";\n return varName + ' = ' + varName + ' .. ' + value + '\\n';\n};\n\nLua['text_length'] = function(block) {\n // String or array length.\n const text = Lua.valueToCode(block, 'VALUE', Lua.ORDER_UNARY) || \"''\";\n return ['#' + text, Lua.ORDER_UNARY];\n};\n\nLua['text_isEmpty'] = function(block) {\n // Is the string null or array empty?\n const text = Lua.valueToCode(block, 'VALUE', Lua.ORDER_UNARY) || \"''\";\n return ['#' + text + ' == 0', Lua.ORDER_RELATIONAL];\n};\n\nLua['text_indexOf'] = function(block) {\n // Search the text for a substring.\n const substring = Lua.valueToCode(block, 'FIND', Lua.ORDER_NONE) || \"''\";\n const text = Lua.valueToCode(block, 'VALUE', Lua.ORDER_NONE) || \"''\";\n let functionName;\n if (block.getFieldValue('END') === 'FIRST') {\n functionName = Lua.provideFunction_('firstIndexOf', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(str, substr)\n local i = string.find(str, substr, 1, true)\n if i == nil then\n return 0\n end\n return i\nend\n`);\n } else {\n functionName = Lua.provideFunction_('lastIndexOf', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(str, substr)\n local i = string.find(string.reverse(str), string.reverse(substr), 1, true)\n if i then\n return #str + 2 - i - #substr\n end\n return 0\nend\n`);\n }\n const code = functionName + '(' + text + ', ' + substring + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['text_charAt'] = function(block) {\n // Get letter at index.\n // Note: Until January 2013 this block did not have the WHERE input.\n const where = block.getFieldValue('WHERE') || 'FROM_START';\n const atOrder = (where === 'FROM_END') ? Lua.ORDER_UNARY : Lua.ORDER_NONE;\n const at = Lua.valueToCode(block, 'AT', atOrder) || '1';\n const text = Lua.valueToCode(block, 'VALUE', Lua.ORDER_NONE) || \"''\";\n let code;\n if (where === 'RANDOM') {\n const functionName = Lua.provideFunction_('text_random_letter', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(str)\n local index = math.random(string.len(str))\n return string.sub(str, index, index)\nend\n`);\n code = functionName + '(' + text + ')';\n } else {\n let start;\n if (where === 'FIRST') {\n start = '1';\n } else if (where === 'LAST') {\n start = '-1';\n } else {\n if (where === 'FROM_START') {\n start = at;\n } else if (where === 'FROM_END') {\n start = '-' + at;\n } else {\n throw Error('Unhandled option (text_charAt).');\n }\n }\n if (start.match(/^-?\\w*$/)) {\n code = 'string.sub(' + text + ', ' + start + ', ' + start + ')';\n } else {\n // use function to avoid reevaluation\n const functionName = Lua.provideFunction_('text_char_at', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(str, index)\n return string.sub(str, index, index)\nend\n`);\n code = functionName + '(' + text + ', ' + start + ')';\n }\n }\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['text_getSubstring'] = function(block) {\n // Get substring.\n const text = Lua.valueToCode(block, 'STRING', Lua.ORDER_NONE) || \"''\";\n\n // Get start index.\n const where1 = block.getFieldValue('WHERE1');\n const at1Order = (where1 === 'FROM_END') ? Lua.ORDER_UNARY : Lua.ORDER_NONE;\n const at1 = Lua.valueToCode(block, 'AT1', at1Order) || '1';\n let start;\n if (where1 === 'FIRST') {\n start = 1;\n } else if (where1 === 'FROM_START') {\n start = at1;\n } else if (where1 === 'FROM_END') {\n start = '-' + at1;\n } else {\n throw Error('Unhandled option (text_getSubstring)');\n }\n\n // Get end index.\n const where2 = block.getFieldValue('WHERE2');\n const at2Order = (where2 === 'FROM_END') ? Lua.ORDER_UNARY : Lua.ORDER_NONE;\n const at2 = Lua.valueToCode(block, 'AT2', at2Order) || '1';\n let end;\n if (where2 === 'LAST') {\n end = -1;\n } else if (where2 === 'FROM_START') {\n end = at2;\n } else if (where2 === 'FROM_END') {\n end = '-' + at2;\n } else {\n throw Error('Unhandled option (text_getSubstring)');\n }\n const code = 'string.sub(' + text + ', ' + start + ', ' + end + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['text_changeCase'] = function(block) {\n // Change capitalization.\n const operator = block.getFieldValue('CASE');\n const text = Lua.valueToCode(block, 'TEXT', Lua.ORDER_NONE) || \"''\";\n let functionName;\n if (operator === 'UPPERCASE') {\n functionName = 'string.upper';\n } else if (operator === 'LOWERCASE') {\n functionName = 'string.lower';\n } else if (operator === 'TITLECASE') {\n // There are shorter versions at\n // http://lua-users.org/wiki/SciteTitleCase\n // that do not preserve whitespace.\n functionName = Lua.provideFunction_('text_titlecase', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(str)\n local buf = {}\n local inWord = false\n for i = 1, #str do\n local c = string.sub(str, i, i)\n if inWord then\n table.insert(buf, string.lower(c))\n if string.find(c, \"%s\") then\n inWord = false\n end\n else\n table.insert(buf, string.upper(c))\n inWord = true\n end\n end\n return table.concat(buf)\nend\n`);\n }\n const code = functionName + '(' + text + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['text_trim'] = function(block) {\n // Trim spaces.\n const OPERATORS = {LEFT: '^%s*(,-)', RIGHT: '(.-)%s*$', BOTH: '^%s*(.-)%s*$'};\n const operator = OPERATORS[block.getFieldValue('MODE')];\n const text = Lua.valueToCode(block, 'TEXT', Lua.ORDER_NONE) || \"''\";\n const code = 'string.gsub(' + text + ', \"' + operator + '\", \"%1\")';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['text_print'] = function(block) {\n // Print statement.\n const msg = Lua.valueToCode(block, 'TEXT', Lua.ORDER_NONE) || \"''\";\n return 'print(' + msg + ')\\n';\n};\n\nLua['text_prompt_ext'] = function(block) {\n // Prompt function.\n let msg;\n if (block.getField('TEXT')) {\n // Internal message.\n msg = Lua.quote_(block.getFieldValue('TEXT'));\n } else {\n // External message.\n msg = Lua.valueToCode(block, 'TEXT', Lua.ORDER_NONE) || \"''\";\n }\n\n const functionName = Lua.provideFunction_('text_prompt', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(msg)\n io.write(msg)\n io.flush()\n return io.read()\nend\n`);\n let code = functionName + '(' + msg + ')';\n\n const toNumber = block.getFieldValue('TYPE') === 'NUMBER';\n if (toNumber) {\n code = 'tonumber(' + code + ', 10)';\n }\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['text_prompt'] = Lua['text_prompt_ext'];\n\nLua['text_count'] = function(block) {\n const text = Lua.valueToCode(block, 'TEXT', Lua.ORDER_NONE) || \"''\";\n const sub = Lua.valueToCode(block, 'SUB', Lua.ORDER_NONE) || \"''\";\n const functionName = Lua.provideFunction_('text_count', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(haystack, needle)\n if #needle == 0 then\n return #haystack + 1\n end\n local i = 1\n local count = 0\n while true do\n i = string.find(haystack, needle, i, true)\n if i == nil then\n break\n end\n count = count + 1\n i = i + #needle\n end\n return count\nend\n`);\n const code = functionName + '(' + text + ', ' + sub + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['text_replace'] = function(block) {\n const text = Lua.valueToCode(block, 'TEXT', Lua.ORDER_NONE) || \"''\";\n const from = Lua.valueToCode(block, 'FROM', Lua.ORDER_NONE) || \"''\";\n const to = Lua.valueToCode(block, 'TO', Lua.ORDER_NONE) || \"''\";\n const functionName = Lua.provideFunction_('text_replace', `\nfunction ${Lua.FUNCTION_NAME_PLACEHOLDER_}(haystack, needle, replacement)\n local buf = {}\n local i = 1\n while i <= #haystack do\n if string.sub(haystack, i, i + #needle - 1) == needle then\n for j = 1, #replacement do\n table.insert(buf, string.sub(replacement, j, j))\n end\n i = i + #needle\n else\n table.insert(buf, string.sub(haystack, i, i))\n i = i + 1\n end\n end\n return table.concat(buf)\nend\n`);\n const code = functionName + '(' + text + ', ' + from + ', ' + to + ')';\n return [code, Lua.ORDER_HIGH];\n};\n\nLua['text_reverse'] = function(block) {\n const text = Lua.valueToCode(block, 'TEXT', Lua.ORDER_NONE) || \"''\";\n const code = 'string.reverse(' + text + ')';\n return [code, Lua.ORDER_HIGH];\n};\n","/**\n * @license\n * Copyright 2016 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating Lua for variable blocks.\n */\n'use strict';\n\ngoog.module('Blockly.Lua.variables');\n\nconst {NameType} = goog.require('Blockly.Names');\nconst {luaGenerator: Lua} = goog.require('Blockly.Lua');\n\n\nLua['variables_get'] = function(block) {\n // Variable getter.\n const code =\n Lua.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n return [code, Lua.ORDER_ATOMIC];\n};\n\nLua['variables_set'] = function(block) {\n // Variable setter.\n const argument0 = Lua.valueToCode(block, 'VALUE', Lua.ORDER_NONE) || '0';\n const varName =\n Lua.nameDB_.getName(block.getFieldValue('VAR'), NameType.VARIABLE);\n return varName + ' = ' + argument0 + '\\n';\n};\n","/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Generating Lua for dynamic variable blocks.\n */\n'use strict';\n\ngoog.module('Blockly.Lua.variablesDynamic');\n\nconst {luaGenerator: Lua} = goog.require('Blockly.Lua');\n/** @suppress {extraRequire} */\ngoog.require('Blockly.Lua.variables');\n\n\n// Lua is dynamically typed.\nLua['variables_get_dynamic'] = Lua['variables_get'];\nLua['variables_set_dynamic'] = Lua['variables_set'];\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\n/**\n * @fileoverview Complete helper functions for generating Lua for\n * blocks. This is the entrypoint for lua_compressed.js.\n * @suppress {extraRequire}\n */\n'use strict';\n\ngoog.module('Blockly.Lua.all');\n\nconst moduleExports = goog.require('Blockly.Lua');\ngoog.require('Blockly.Lua.colour');\ngoog.require('Blockly.Lua.lists');\ngoog.require('Blockly.Lua.logic');\ngoog.require('Blockly.Lua.loops');\ngoog.require('Blockly.Lua.math');\ngoog.require('Blockly.Lua.procedures');\ngoog.require('Blockly.Lua.texts');\ngoog.require('Blockly.Lua.variables');\ngoog.require('Blockly.Lua.variablesDynamic');\n\nexports = moduleExports;\n"]}