| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- /* eslint-disable no-unused-expressions */
- import { pythonGenerator } from "blockly/python";
- const Blockly = {
- Python: pythonGenerator || { Msg: Object.create(null) }
- };
- Blockly.Python.lists_create_with = function (a) {
- for (var b = Array(a.itemCount_), c = 0; c < a.itemCount_; c++)
- b[c] = Blockly.Python.valueToCode(a, "ADD" + c, Blockly.Python.ORDER_NONE) || "None";
- return ["[" + b.join(", ") + "]", Blockly.Python.ORDER_ATOMIC]
- };
- Blockly.Python.text_list = function (a) {
- return ["[" + Blockly.Python.quote_empty(a.getFieldValue("TEXT")) + "]", Blockly.Python.ORDER_ATOMIC]
- };
- Blockly.Python.lists_create_with_object = function (a) {
- for (var b = Array(a.itemCount_), c = 0; c < a.itemCount_; c++)
- b[c] = Blockly.Python.valueToCode(a, "ADD" + c, Blockly.Python.ORDER_NONE) || "None";
- return ["[" + b.join(", ") + "]", Blockly.Python.ORDER_ATOMIC]
- };
- Blockly.Python.CocoRobo_return_list = function (a) {
- var b = Blockly.Python.valueToCode(a, "list_name", Blockly.Python.ORDER_ATOMIC);
- a = Blockly.Python.valueToCode(a, "list_items", Blockly.Python.ORDER_ATOMIC);
- return b + " \x3d " + a + "\n"
- };
- Blockly.Python.lists_append = function (a) {
- var b = Blockly.Python.valueToCode(a, "list_name", Blockly.Python.ORDER_ATOMIC);
- a = Blockly.Python.valueToCode(a, "last_item", Blockly.Python.ORDER_ATOMIC);
- return b + ".append(" + a + ")\n"
- };
- Blockly.Python.lists_extend = function (a) {
- var b = Blockly.Python.valueToCode(a, "list_name", Blockly.Python.ORDER_ATOMIC);
- a = Blockly.Python.valueToCode(a, "extend_list", Blockly.Python.ORDER_ATOMIC);
- return b + ".extend(" + a + ")\n"
- };
- Blockly.Python.lists_clear = function (a) {
- return Blockly.Python.valueToCode(a, "list_name", Blockly.Python.ORDER_ATOMIC) + ".clear()\n"
- };
- Blockly.Python.list_order_item = function (a) {
- var b = Blockly.Python.valueToCode(a, "list_name", Blockly.Python.ORDER_ATOMIC),
- c = a.getFieldValue("list_order");
- a = Blockly.Python.valueToCode(a, "list_order_item", Blockly.Python.ORDER_ATOMIC);
- return [b + c + a + "]", Blockly.Python.ORDER_ATOMIC]
- };
- Blockly.Python.lists_clear = function (a) {
- return Blockly.Python.valueToCode(a, "list_name", Blockly.Python.ORDER_ATOMIC) + ".clear()\n"
- };
- Blockly.Python.parts_of_list = function (a) {
- var b = Blockly.Python.valueToCode(a, "list_name", Blockly.Python.ORDER_ATOMIC),
- c = a.getFieldValue("list_start_order"),
- d = a.getFieldValue("list_end_order"),
- e = Blockly.Python.valueToCode(a, "start_item", Blockly.Python.ORDER_ATOMIC);
- a = Blockly.Python.valueToCode(a, "end_item", Blockly.Python.ORDER_ATOMIC);
- switch (d) {
- case ":":
- var f = parseInt(a) + 1;
- break;
- case ":-":
- f = a - 1
- }
- return [b + c + e + d + f + "]", Blockly.Python.ORDER_ATOMIC]
- };
- Blockly.Python.list_to_tuple = function (a) {
- return ["tuple(" + Blockly.Python.valueToCode(a, "list_name", Blockly.Python.ORDER_ATOMIC) + ")", Blockly.Python.ORDER_ATOMIC]
- };
- Blockly.Python.list_order_item = function (a) {
- var b = Blockly.Python.valueToCode(a, "list_name", Blockly.Python.ORDER_ATOMIC),
- c = a.getFieldValue("list_order");
- a = Blockly.Python.valueToCode(a, "list_order_item", Blockly.Python.ORDER_ATOMIC);
- return [b + c + a + "]", Blockly.Python.ORDER_ATOMIC]
- };
- Blockly.Python.set_list_order_item = function (a) {
- var b = Blockly.Python.valueToCode(a, "list_name", Blockly.Python.ORDER_ATOMIC),
- c = a.getFieldValue("list_order"),
- d = Blockly.Python.valueToCode(a, "list_order_item", Blockly.Python.ORDER_ATOMIC);
- a = Blockly.Python.valueToCode(a, "set_value", Blockly.Python.ORDER_ATOMIC);
- return b + c + d + "] \x3d " + a + "\n"
- };
- Blockly.Python.insert_list_order_item = function (a) {
- var b = Blockly.Python.valueToCode(a, "list_name", Blockly.Python.ORDER_ATOMIC),
- c = a.getFieldValue("list_order"),
- d = Blockly.Python.valueToCode(a, "list_order_item", Blockly.Python.ORDER_ATOMIC);
- a = Blockly.Python.valueToCode(a, "set_value", Blockly.Python.ORDER_ATOMIC);
- return b + ".insert" + c + d + ", " + a + ")\n"
- };
- Blockly.Python.list_item_exist = function (a) {
- var b = Blockly.Python.valueToCode(a, "list_name", Blockly.Python.ORDER_ATOMIC);
- return [Blockly.Python.valueToCode(a, "list_item", Blockly.Python.ORDER_ATOMIC) + " in " + b, Blockly.Python.ORDER_ATOMIC]
- };
- Blockly.Python.lists_repeat = function (a) {
- var b = Blockly.Python.valueToCode(a, "ITEM", Blockly.Python.ORDER_NONE) || "None";
- a = Blockly.Python.valueToCode(a, "NUM", Blockly.Python.ORDER_MULTIPLICATIVE) || "0";
- return ["[" + b + "] * " + a, Blockly.Python.ORDER_MULTIPLICATIVE]
- };
- Blockly.Python.lists_length = function (a) {
- return ["len(" + (Blockly.Python.valueToCode(a, "VALUE", Blockly.Python.ORDER_NONE) || "[]") + ")", Blockly.Python.ORDER_FUNCTION_CALL]
- };
- Blockly.Python.lists_isEmpty = function (a) {
- return ["not len(" + (Blockly.Python.valueToCode(a, "VALUE", Blockly.Python.ORDER_NONE) || "[]") + ")", Blockly.Python.ORDER_LOGICAL_NOT]
- };
- Blockly.Python.lists_indexOf = function (a) {
- var b = Blockly.Python.valueToCode(a, "FIND", Blockly.Python.ORDER_NONE) || "[]"
- , c = Blockly.Python.valueToCode(a, "VALUE", Blockly.Python.ORDER_NONE) || "''";
- if (a.workspace.options.oneBasedIndex)
- var d = " 0"
- , e = " + 1"
- , f = "";
- else
- d = " -1",
- e = "",
- f = " - 1";
- if ("FIRST" == a.getFieldValue("END"))
- return a = Blockly.Python.provideFunction_("first_index", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(my_list, elem):", " try: index = my_list.index(elem)" + e, " except: index =" + d, " return index"]),
- [a + "(" + c + ", " + b + ")", Blockly.Python.ORDER_FUNCTION_CALL];
- a = Blockly.Python.provideFunction_("last_index", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(my_list, elem):", " try: index = len(my_list) - my_list[::-1].index(elem)" + f, " except: index =" + d, " return index"]);
- return [a + "(" + c + ", " + b + ")", Blockly.Python.ORDER_FUNCTION_CALL]
- };
- Blockly.Python.lists_getIndex = function (a) {
- var b = a.getFieldValue("MODE") || "GET"
- , c = a.getFieldValue("WHERE") || "FROM_START"
- , d = Blockly.Python.valueToCode(a, "VALUE", "RANDOM" == c ? Blockly.Python.ORDER_NONE : Blockly.Python.ORDER_MEMBER) || "[]";
- switch (c) {
- case "FIRST":
- if ("GET" == b)
- return [d + "[0]", Blockly.Python.ORDER_MEMBER];
- if ("GET_REMOVE" == b)
- return [d + ".pop(0)", Blockly.Python.ORDER_FUNCTION_CALL];
- if ("REMOVE" == b)
- return d + ".pop(0)\n";
- break;
- case "LAST":
- if ("GET" == b)
- return [d + "[-1]", Blockly.Python.ORDER_MEMBER];
- if ("GET_REMOVE" == b)
- return [d + ".pop()", Blockly.Python.ORDER_FUNCTION_CALL];
- if ("REMOVE" == b)
- return d + ".pop()\n";
- break;
- case "FROM_START":
- a = Blockly.Python.valueToCode(a, "AT", Blockly.Python.ORDER_ATOMIC);
- if ("GET" == b)
- return [d + "[" + a + "]", Blockly.Python.ORDER_MEMBER];
- if ("GET_REMOVE" == b)
- return [d + ".pop(" + a + ")", Blockly.Python.ORDER_FUNCTION_CALL];
- if ("REMOVE" == b)
- return d + ".pop(" + a + ")\n";
- break;
- case "FROM_END":
- a = Blockly.Python.getAdjustedInt(a, "AT", 1, !0);
- if ("GET" == b)
- return [d + "[" + a + "]", Blockly.Python.ORDER_MEMBER];
- if ("GET_REMOVE" == b)
- return [d + ".pop(" + a + ")", Blockly.Python.ORDER_FUNCTION_CALL];
- if ("REMOVE" == b)
- return d + ".pop(" + a + ")\n";
- break;
- case "RANDOM":
- Blockly.Python.definitions_.import_random = "import random";
- if ("GET" == b)
- return ["random.choice(" + d + ")", Blockly.Python.ORDER_FUNCTION_CALL];
- d = Blockly.Python.provideFunction_("lists_remove_random_item", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(myList):", " x = int(random.random() * len(myList))", " return myList.pop(x)"]) + "(" + d + ")";
- if ("GET_REMOVE" == b)
- return [d, Blockly.Python.ORDER_FUNCTION_CALL];
- if ("REMOVE" == b)
- return d + "\n"
- }
- throw "Unhandled combination (lists_getIndex).";
- };
- Blockly.Python.lists_setIndex = function (a) {
- var b = Blockly.Python.valueToCode(a, "LIST", Blockly.Python.ORDER_MEMBER) || "[]"
- , c = a.getFieldValue("MODE") || "GET"
- , d = a.getFieldValue("WHERE") || "FROM_START"
- , e = Blockly.Python.valueToCode(a, "TO", Blockly.Python.ORDER_NONE) || "None";
- switch (d) {
- case "FIRST":
- if ("SET" == c)
- return b + "[0] = " + e + "\n";
- if ("INSERT" == c)
- return b + ".insert(0, " + e + ")\n";
- break;
- case "LAST":
- if ("SET" == c)
- return b + "[-1] = " + e + "\n";
- if ("INSERT" == c)
- return b + ".append(" + e + ")\n";
- break;
- case "FROM_START":
- a = Blockly.Python.getAdjustedInt(a, "AT");
- if ("SET" == c)
- return b + "[" + a + "] = " + e + "\n";
- if ("INSERT" == c)
- return b + ".insert(" + a + ", " + e + ")\n";
- break;
- case "FROM_END":
- a = Blockly.Python.getAdjustedInt(a, "AT", 1, !0);
- if ("SET" == c)
- return b + "[" + a + "] = " + e + "\n";
- if ("INSERT" == c)
- return b + ".insert(" + a + ", " + e + ")\n";
- break;
- case "RANDOM":
- Blockly.Python.definitions_.import_random = "import random";
- b.match(/^\w+$/) ? a = "" : (a = Blockly.Python.variableDB_.getDistinctName("tmp_list", Blockly.Variables.NAME_TYPE),
- d = a + " = " + b + "\n",
- b = a,
- a = d);
- d = Blockly.Python.variableDB_.getDistinctName("tmp_x", Blockly.Variables.NAME_TYPE);
- a += d + " = int(random.random() * len(" + b + "))\n";
- if ("SET" == c)
- return a + (b + "[" + d + "] = " + e + "\n");
- if ("INSERT" == c)
- return a + (b + ".insert(" + d + ", " + e + ")\n")
- }
- throw "Unhandled combination (lists_setIndex).";
- };
- Blockly.Python.lists_getSublist = function (a) {
- var b = Blockly.Python.valueToCode(a, "LIST", Blockly.Python.ORDER_MEMBER) || "[]"
- , c = a.getFieldValue("WHERE1")
- , d = a.getFieldValue("WHERE2");
- switch (c) {
- case "FROM_START":
- c = Blockly.Python.getAdjustedInt(a, "AT1");
- "0" == c && (c = "");
- break;
- case "FROM_END":
- c = Blockly.Python.getAdjustedInt(a, "AT1", 1, !0);
- break;
- case "FIRST":
- c = "";
- break;
- default:
- throw "Unhandled option (lists_getSublist)";
- }
- switch (d) {
- case "FROM_START":
- a = Blockly.Python.getAdjustedInt(a, "AT2", 1);
- break;
- case "FROM_END":
- a = Blockly.Python.getAdjustedInt(a, "AT2", 0, !0);
- Blockly.isNumber(String(a)) ? "0" == a && (a = "") : (Blockly.Python.definitions_.import_sys = "import sys",
- a += " or sys.maxsize");
- break;
- case "LAST":
- a = "";
- break;
- default:
- throw "Unhandled option (lists_getSublist)";
- }
- return [b + "[" + c + " : " + a + "]", Blockly.Python.ORDER_MEMBER]
- };
- Blockly.Python.lists_sort = function (a) {
- var b = Blockly.Python.valueToCode(a, "LIST", Blockly.Python.ORDER_NONE) || "[]"
- , c = a.getFieldValue("TYPE");
- a = "1" === a.getFieldValue("DIRECTION") ? "False" : "True";
- return [Blockly.Python.provideFunction_("lists_sort", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(my_list, type, reverse):", " def try_float(s):", " try:", " return float(s)", " except:", " return 0", " key_funcs = {", ' "NUMERIC": try_float,', ' "TEXT": str,', ' "IGNORE_CASE": lambda s: str(s).lower()', " }", " key_func = key_funcs[type]", " list_cpy = list(my_list)", " return sorted(list_cpy, key=key_func, reverse=reverse)"]) + "(" + b + ', "' + c + '", ' + a + ")", Blockly.Python.ORDER_FUNCTION_CALL]
- };
- Blockly.Python.lists_split = function (a) {
- var b = a.getFieldValue("MODE");
- if ("SPLIT" == b)
- b = Blockly.Python.valueToCode(a, "INPUT", Blockly.Python.ORDER_MEMBER) || "''",
- a = Blockly.Python.valueToCode(a, "DELIM", Blockly.Python.ORDER_NONE),
- a = b + ".split(" + a + ")";
- else if ("JOIN" == b)
- b = Blockly.Python.valueToCode(a, "INPUT", Blockly.Python.ORDER_NONE) || "[]",
- a = Blockly.Python.valueToCode(a, "DELIM", Blockly.Python.ORDER_MEMBER) || "''",
- a = a + ".join(" + b + ")";
- else
- throw "Unknown mode: " + b;
- return [a, Blockly.Python.ORDER_FUNCTION_CALL]
- };
- Blockly.Python.list_first_index = function(a) {
- var b = Blockly.Python.valueToCode(a, "elem", Blockly.Python.ORDER_ATOMIC),
- c = Blockly.Python.valueToCode(a, "my_list", Blockly.Python.ORDER_ATOMIC);
- a = a.getFieldValue("last_or_first");
- Blockly.Python.codeFunctions_.list_first_index = "def first_index(my_list, elem):\n try: index \x3d my_list.index(elem)\n except: index \x3d 0\n return index";
- Blockly.Python.codeFunctions_.list_last_index = "def last_index(my_list, elem):\n try: index \x3d len(my_list) - my_list[::-1].index(elem) - 1\n except: index \x3d 0\n return index";
- return [a + "_index(" + c + ", " + b + ")", Blockly.Python.ORDER_ATOMIC]
- };
- export default Blockly;
|