ccIDE/src/module_generator.js
damp11113 2047e23213 update 1.3.1.1
add Advanced Peripherals (unfinished 3/13)
2024-08-21 21:16:46 +07:00

110 lines
3.5 KiB
JavaScript

const { luaGenerator } = require('blockly/lua');
// Check if luaGenerator.forBlock is defined and initialize if necessary-
if (!luaGenerator.forBlock) {
luaGenerator.forBlock = {};
}
// Define your custom block handler
luaGenerator.forBlock['sys_sleep'] = function(block, generator) {
var sleepfor = generator.valueToCode(block, 'SLEEPSEC', generator.ORDER_OVERRIDES);
var code = `sleep(${sleepfor})\n`;
return code;
};
luaGenerator.forBlock['sys_utils_table_variable_pack'] = function(block, generator) {
var args = generator.valueToCode(block, 'RETURN_ARGS', generator.ORDER_NONE);
return [`table.pack(${args})`, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['sys_utils_get_value_from_table_with_index'] = function(block, generator) {
var table = generator.valueToCode(block, 'TABLE', generator.ORDER_NONE);
var index = generator.valueToCode(block, 'INDEX', generator.ORDER_NONE);
return [`${table}[${index}]`, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['sys_utils_get_type'] = function(block, generator) {
var input = generator.valueToCode(block, 'INPUT', generator.ORDER_NONE);
return [`type(${input})`, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['sys_table_unpack_to_args'] = function(block, generator) {
var table = generator.valueToCode(block, 'TABLE', generator.ORDER_NONE);
return [`table.unpack(${table})`, luaGenerator.ORDER_NONE];
};
luaGenerator.forBlock['sys_table_add_key_value'] = function(block, generator) {
var key = generator.valueToCode(block, 'KEY', generator.ORDER_NONE);
var value = generator.valueToCode(block, 'VALUE', generator.ORDER_NONE);
var shorted = block.getFieldValue('SHORT') == 'TRUE';
if (!shorted) {
return [`[${key}] = ${value}`, luaGenerator.ORDER_NONE];
} else {
return [`${key} = ${value}`, luaGenerator.ORDER_NONE];
}
};
luaGenerator.forBlock['sys_table_append_data'] = function(block, generator) {
var data = generator.valueToCode(block, 'DATA', generator.ORDER_NONE);
var table = generator.valueToCode(block, 'TABLE', generator.ORDER_NONE);
return `table.insert(${table}, ${data})\n`;
};
luaGenerator.forBlock['sys_table_append_data'] = function(block, generator) {
var data = generator.valueToCode(block, 'DATA', generator.ORDER_NONE);
var table = generator.valueToCode(block, 'TABLE', generator.ORDER_NONE);
return `table.insert(${table}, ${data})\n`;
};
// Define your custom block handler
luaGenerator.forBlock['ide_addcode'] = function(block, generator) {
var codefromuser = generator.valueToCode(block, 'CODE', generator.ORDER_ATOMIC);
// Remove all occurrences of the matched characters
const cleanedStr = codefromuser.replace(/[']/g, '');
return cleanedStr+"\n";
};
luaGenerator.forBlock['ide_start'] = function(block, generator) {
var docode = generator.statementToCode(block, 'DO');
var code =
`
function main()
${docode}
end
main()
`
return code;
};
luaGenerator.forBlock['sys_exit'] = function(block, generator) {
return `exit()\n`;
};
luaGenerator.forBlock['sys_write'] = function(block, generator) {
var text = generator.valueToCode(block, 'TEXT', generator.ORDER_NONE);
return `write(${text})\n`;
};
luaGenerator.forBlock['sys_print_error'] = function(block, generator) {
var error = generator.valueToCode(block, 'ERROR', generator.ORDER_NONE);
return `printError(${error})\n`;
};
luaGenerator.forBlock['sys_mc_std_color'] = function(block, generator) {
var color = block.getFieldValue('COLOR');
return [`"${color}"`, luaGenerator.ORDER_NONE];
};