加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
python_compressed.js 44.64 KB
一键复制 编辑 原始数据 按行查看 历史
Albert钟 提交于 2021-09-16 04:20 . update
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702
// Do not edit this file; automatically generated by gulp.
'use strict';
Blockly.Python = new Blockly.Generator("Python");
Blockly.Python.addReservedWords("False,None,True,and,as,assert,break,class,continue,def,del,elif,else,except,exec,finally,for,from,global,if,import,in,is,lambda,nonlocal,not,or,pass,print,raise,return,try,while,with,yield,NotImplemented,Ellipsis,__debug__,quit,exit,copyright,license,credits,ArithmeticError,AssertionError,AttributeError,BaseException,BlockingIOError,BrokenPipeError,BufferError,BytesWarning,ChildProcessError,ConnectionAbortedError,ConnectionError,ConnectionRefusedError,ConnectionResetError,DeprecationWarning,EOFError,Ellipsis,EnvironmentError,Exception,FileExistsError,FileNotFoundError,FloatingPointError,FutureWarning,GeneratorExit,IOError,ImportError,ImportWarning,IndentationError,IndexError,InterruptedError,IsADirectoryError,KeyError,KeyboardInterrupt,LookupError,MemoryError,ModuleNotFoundError,NameError,NotADirectoryError,NotImplemented,NotImplementedError,OSError,OverflowError,PendingDeprecationWarning,PermissionError,ProcessLookupError,RecursionError,ReferenceError,ResourceWarning,RuntimeError,RuntimeWarning,StandardError,StopAsyncIteration,StopIteration,SyntaxError,SyntaxWarning,SystemError,SystemExit,TabError,TimeoutError,TypeError,UnboundLocalError,UnicodeDecodeError,UnicodeEncodeError,UnicodeError,UnicodeTranslateError,UnicodeWarning,UserWarning,ValueError,Warning,ZeroDivisionError,_,__build_class__,__debug__,__doc__,__import__,__loader__,__name__,__package__,__spec__,abs,all,any,apply,ascii,basestring,bin,bool,buffer,bytearray,bytes,callable,chr,classmethod,cmp,coerce,compile,complex,copyright,credits,delattr,dict,dir,divmod,enumerate,eval,exec,execfile,exit,file,filter,float,format,frozenset,getattr,globals,hasattr,hash,help,hex,id,input,int,intern,isinstance,issubclass,iter,len,license,list,locals,long,map,max,memoryview,min,next,object,oct,open,ord,pow,print,property,quit,range,raw_input,reduce,reload,repr,reversed,round,set,setattr,slice,sorted,staticmethod,str,sum,super,tuple,type,unichr,unicode,vars,xrange,zip");
Blockly.Python.ORDER_ATOMIC = 0;
Blockly.Python.ORDER_COLLECTION = 1;
Blockly.Python.ORDER_STRING_CONVERSION = 1;
Blockly.Python.ORDER_MEMBER = 2.1;
Blockly.Python.ORDER_FUNCTION_CALL = 2.2;
Blockly.Python.ORDER_EXPONENTIATION = 3;
Blockly.Python.ORDER_UNARY_SIGN = 4;
Blockly.Python.ORDER_BITWISE_NOT = 4;
Blockly.Python.ORDER_MULTIPLICATIVE = 5;
Blockly.Python.ORDER_ADDITIVE = 6;
Blockly.Python.ORDER_BITWISE_SHIFT = 7;
Blockly.Python.ORDER_BITWISE_AND = 8;
Blockly.Python.ORDER_BITWISE_XOR = 9;
Blockly.Python.ORDER_BITWISE_OR = 10;
Blockly.Python.ORDER_RELATIONAL = 11;
Blockly.Python.ORDER_LOGICAL_NOT = 12;
Blockly.Python.ORDER_LOGICAL_AND = 13;
Blockly.Python.ORDER_LOGICAL_OR = 14;
Blockly.Python.ORDER_CONDITIONAL = 15;
Blockly.Python.ORDER_LAMBDA = 16;
Blockly.Python.ORDER_NONE = 99;
Blockly.Python.ORDER_OVERRIDES = [
[Blockly.Python.ORDER_FUNCTION_CALL, Blockly.Python.ORDER_MEMBER],
[Blockly.Python.ORDER_FUNCTION_CALL, Blockly.Python.ORDER_FUNCTION_CALL],
[Blockly.Python.ORDER_MEMBER, Blockly.Python.ORDER_MEMBER],
[Blockly.Python.ORDER_MEMBER, Blockly.Python.ORDER_FUNCTION_CALL],
[Blockly.Python.ORDER_LOGICAL_NOT, Blockly.Python.ORDER_LOGICAL_NOT],
[Blockly.Python.ORDER_LOGICAL_AND, Blockly.Python.ORDER_LOGICAL_AND],
[Blockly.Python.ORDER_LOGICAL_OR, Blockly.Python.ORDER_LOGICAL_OR]
];
Blockly.Python.init = function(a) {
Blockly.Python.PASS = this.INDENT + "pass\n";
Blockly.Python.definitions_ = Object.create(null);
Blockly.Python.functionNames_ = Object.create(null);
Blockly.Python.variableDB_ ? Blockly.Python.variableDB_.reset() : Blockly.Python.variableDB_ = new Blockly.Names(Blockly.Python.RESERVED_WORDS_);
Blockly.Python.variableDB_.setVariableMap(a.getVariableMap());
for (var b = [], c = Blockly.Variables.allDeveloperVariables(a), d = 0; d < c.length; d++) b.push(Blockly.Python.variableDB_.getName(c[d], Blockly.Names.DEVELOPER_VARIABLE_TYPE) +
" = None");
a = Blockly.Variables.allUsedVarModels(a);
for (d = 0; d < a.length; d++) b.push(Blockly.Python.variableDB_.getName(a[d].getId(), Blockly.VARIABLE_CATEGORY_NAME) + " = None");
Blockly.Python.definitions_.variables = b.join("\n")
};
Blockly.Python.finish = function(a) {
var b = [],
c = [],
d;
for (d in Blockly.Python.definitions_) {
var e = Blockly.Python.definitions_[d];
e.match(/^(from\s+\S+\s+)?import\s+\S+/) ? b.push(e) : c.push(e)
}
delete Blockly.Python.definitions_;
delete Blockly.Python.functionNames_;
Blockly.Python.variableDB_.reset();
return (b.join("\n") + "\n\n" + c.join("\n\n")).replace(/\n\n+/g, "\n\n").replace(/\n*$/, "\n\n\n") + a
};
Blockly.Python.scrubNakedValue = function(a) { return a + "\n" };
Blockly.Python.quote_ = function(a) { a = a.replace(/\\/g, "\\\\").replace(/\n/g, "\\\n"); var b = "'"; - 1 !== a.indexOf("'") && (-1 === a.indexOf('"') ? b = '"' : a = a.replace(/'/g, "\\'")); return b + a + b };
Blockly.Python.multiline_quote_ = function(a) { a = a.replace(/'''/g, "\\'\\'\\'"); return "'''" + a + "'''" };
Blockly.Python.scrub_ = function(a, b, c) {
var d = "";
if (!a.outputConnection || !a.outputConnection.targetConnection) {
var e = a.getCommentText();
e && (e = Blockly.utils.string.wrap(e, Blockly.Python.COMMENT_WRAP - 3), d += Blockly.Python.prefixLines(e + "\n", "# "));
for (var f = 0; f < a.inputList.length; f++) a.inputList[f].type == Blockly.INPUT_VALUE && (e = a.inputList[f].connection.targetBlock()) && (e = Blockly.Python.allNestedComments(e)) && (d += Blockly.Python.prefixLines(e, "# "))
}
a = a.nextConnection && a.nextConnection.targetBlock();
c =
c ? "" : Blockly.Python.blockToCode(a);
return d + b + c
};
Blockly.Python.getAdjustedInt = function(a, b, c, d) {
c = c || 0;
a.workspace.options.oneBasedIndex && c--;
var e = a.workspace.options.oneBasedIndex ? "1" : "0";
a = Blockly.Python.valueToCode(a, b, c ? Blockly.Python.ORDER_ADDITIVE : Blockly.Python.ORDER_NONE) || e;
Blockly.isNumber(a) ? (a = parseInt(a, 10) + c, d && (a = -a)) : (a = 0 < c ? "int(" + a + " + " + c + ")" : 0 > c ? "int(" + a + " - " + -c + ")" : "int(" + a + ")", d && (a = "-" + a));
return a
};
Blockly.Python.colour = {};
Blockly.Python.colour_picker = function(a) { return [Blockly.Python.quote_(a.getFieldValue("COLOUR")), Blockly.Python.ORDER_ATOMIC] };
Blockly.Python.colour_random = function(a) { Blockly.Python.definitions_.import_random = "import random"; return ["'#%06x' % random.randint(0, 2**24 - 1)", Blockly.Python.ORDER_FUNCTION_CALL] };
Blockly.Python.colour_rgb = function(a) {
var b = Blockly.Python.provideFunction_("colour_rgb", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(r, g, b):", " r = round(min(100, max(0, r)) * 2.55)", " g = round(min(100, max(0, g)) * 2.55)", " b = round(min(100, max(0, b)) * 2.55)", " return '#%02x%02x%02x' % (r, g, b)"]),
c = Blockly.Python.valueToCode(a, "RED", Blockly.Python.ORDER_NONE) || 0,
d = Blockly.Python.valueToCode(a, "GREEN", Blockly.Python.ORDER_NONE) || 0;
a = Blockly.Python.valueToCode(a, "BLUE", Blockly.Python.ORDER_NONE) ||
0;
return [b + "(" + c + ", " + d + ", " + a + ")", Blockly.Python.ORDER_FUNCTION_CALL]
};
Blockly.Python.colour_blend = function(a) {
var b = Blockly.Python.provideFunction_("colour_blend", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(colour1, colour2, ratio):", " r1, r2 = int(colour1[1:3], 16), int(colour2[1:3], 16)", " g1, g2 = int(colour1[3:5], 16), int(colour2[3:5], 16)", " b1, b2 = int(colour1[5:7], 16), int(colour2[5:7], 16)", " ratio = min(1, max(0, ratio))", " r = round(r1 * (1 - ratio) + r2 * ratio)", " g = round(g1 * (1 - ratio) + g2 * ratio)", " b = round(b1 * (1 - ratio) + b2 * ratio)",
" return '#%02x%02x%02x' % (r, g, b)"
]),
c = Blockly.Python.valueToCode(a, "COLOUR1", Blockly.Python.ORDER_NONE) || "'#000000'",
d = Blockly.Python.valueToCode(a, "COLOUR2", Blockly.Python.ORDER_NONE) || "'#000000'";
a = Blockly.Python.valueToCode(a, "RATIO", Blockly.Python.ORDER_NONE) || 0;
return [b + "(" + c + ", " + d + ", " + a + ")", Blockly.Python.ORDER_FUNCTION_CALL]
};
Blockly.Python.lists = {};
Blockly.Python.lists_create_empty = function(a) { return ["[]", Blockly.Python.ORDER_ATOMIC] };
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.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.getAdjustedInt(a, "AT");
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, true);
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 Error("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, true);
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.VARIABLE_CATEGORY_NAME), d = a + " = " + b + "\n", b = a, a = d);
d = Blockly.Python.variableDB_.getDistinctName("tmp_x",
Blockly.VARIABLE_CATEGORY_NAME);
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 Error("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, true);
break;
case "FIRST":
c = "";
break;
default:
throw Error("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, true);
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 Error("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 Error("Unknown mode: " + b);
return [a, Blockly.Python.ORDER_FUNCTION_CALL]
};
Blockly.Python.lists_reverse = function(a) { return ["list(reversed(" + (Blockly.Python.valueToCode(a, "LIST", Blockly.Python.ORDER_NONE) || "[]") + "))", Blockly.Python.ORDER_FUNCTION_CALL] };
Blockly.Python.logic = {};
Blockly.Python.controls_if = function(a) {
var b = 0,
c = "";
Blockly.Python.STATEMENT_PREFIX && (c += Blockly.Python.injectId(Blockly.Python.STATEMENT_PREFIX, a));
do {
var d = Blockly.Python.valueToCode(a, "IF" + b, Blockly.Python.ORDER_NONE) || "False";
var e = Blockly.Python.statementToCode(a, "DO" + b) || Blockly.Python.PASS;
Blockly.Python.STATEMENT_SUFFIX && (e = Blockly.Python.prefixLines(Blockly.Python.injectId(Blockly.Python.STATEMENT_SUFFIX, a), Blockly.Python.INDENT) + e);
c += (0 == b ? "if " : "elif ") + d + ":\n" + e;
++b
} while (a.getInput("IF" +
b));
if (a.getInput("ELSE") || Blockly.Python.STATEMENT_SUFFIX) e = Blockly.Python.statementToCode(a, "ELSE") || Blockly.Python.PASS, Blockly.Python.STATEMENT_SUFFIX && (e = Blockly.Python.prefixLines(Blockly.Python.injectId(Blockly.Python.STATEMENT_SUFFIX, a), Blockly.Python.INDENT) + e), c += "else:\n" + e;
return c
};
Blockly.Python.controls_ifelse = Blockly.Python.controls_if;
Blockly.Python.logic_compare = function(a) {
var b = { EQ: "==", NEQ: "!=", LT: "<", LTE: "<=", GT: ">", GTE: ">=" }[a.getFieldValue("OP")],
c = Blockly.Python.ORDER_RELATIONAL,
d = Blockly.Python.valueToCode(a, "A", c) || "0";
a = Blockly.Python.valueToCode(a, "B", c) || "0";
return [d + " " + b + " " + a, c]
};
Blockly.Python.logic_operation = function(a) {
var b = "AND" == a.getFieldValue("OP") ? "and" : "or",
c = "and" == b ? Blockly.Python.ORDER_LOGICAL_AND : Blockly.Python.ORDER_LOGICAL_OR,
d = Blockly.Python.valueToCode(a, "A", c);
a = Blockly.Python.valueToCode(a, "B", c);
if (d || a) {
var e = "and" == b ? "True" : "False";
d || (d = e);
a || (a = e)
} else a = d = "False";
return [d + " " + b + " " + a, c]
};
Blockly.Python.logic_negate = function(a) { return ["not " + (Blockly.Python.valueToCode(a, "BOOL", Blockly.Python.ORDER_LOGICAL_NOT) || "True"), Blockly.Python.ORDER_LOGICAL_NOT] };
Blockly.Python.logic_boolean = function(a) { return ["TRUE" == a.getFieldValue("BOOL") ? "True" : "False", Blockly.Python.ORDER_ATOMIC] };
Blockly.Python.logic_null = function(a) { return ["None", Blockly.Python.ORDER_ATOMIC] };
Blockly.Python.logic_ternary = function(a) {
var b = Blockly.Python.valueToCode(a, "IF", Blockly.Python.ORDER_CONDITIONAL) || "False",
c = Blockly.Python.valueToCode(a, "THEN", Blockly.Python.ORDER_CONDITIONAL) || "None";
a = Blockly.Python.valueToCode(a, "ELSE", Blockly.Python.ORDER_CONDITIONAL) || "None";
return [c + " if " + b + " else " + a, Blockly.Python.ORDER_CONDITIONAL]
};
Blockly.Python.loops = {};
Blockly.Python.controls_repeat_ext = function(a) {
var b = a.getField("TIMES") ? String(parseInt(a.getFieldValue("TIMES"), 10)) : Blockly.Python.valueToCode(a, "TIMES", Blockly.Python.ORDER_NONE) || "0";
b = Blockly.isNumber(b) ? parseInt(b, 10) : "int(" + b + ")";
var c = Blockly.Python.statementToCode(a, "DO");
c = Blockly.Python.addLoopTrap(c, a) || Blockly.Python.PASS;
return "for " + Blockly.Python.variableDB_.getDistinctName("count", Blockly.VARIABLE_CATEGORY_NAME) + " in range(" + b + "):\n" + c
};
Blockly.Python.controls_repeat = Blockly.Python.controls_repeat_ext;
Blockly.Python.controls_whileUntil = function(a) {
var b = "UNTIL" == a.getFieldValue("MODE"),
c = Blockly.Python.valueToCode(a, "BOOL", b ? Blockly.Python.ORDER_LOGICAL_NOT : Blockly.Python.ORDER_NONE) || "False",
d = Blockly.Python.statementToCode(a, "DO");
d = Blockly.Python.addLoopTrap(d, a) || Blockly.Python.PASS;
b && (c = "not " + c);
return "while " + c + ":\n" + d
};
Blockly.Python.controls_for = function(a) {
var b = Blockly.Python.variableDB_.getName(a.getFieldValue("VAR"), Blockly.VARIABLE_CATEGORY_NAME),
c = Blockly.Python.valueToCode(a, "FROM", Blockly.Python.ORDER_NONE) || "0",
d = Blockly.Python.valueToCode(a, "TO", Blockly.Python.ORDER_NONE) || "0",
e = Blockly.Python.valueToCode(a, "BY", Blockly.Python.ORDER_NONE) || "1",
f = Blockly.Python.statementToCode(a, "DO");
f = Blockly.Python.addLoopTrap(f, a) || Blockly.Python.PASS;
var h = "",
g = function() {
return Blockly.Python.provideFunction_("upRange", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(start, stop, step):", " while start <= stop:", " yield start", " start += abs(step)"])
},
k = function() { return Blockly.Python.provideFunction_("downRange", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(start, stop, step):", " while start >= stop:", " yield start", " start -= abs(step)"]) };
a = function(a, b, c) { return "(" + a + " <= " + b + ") and " + g() + "(" + a + ", " + b + ", " + c + ") or " + k() + "(" + a + ", " + b + ", " + c + ")" };
if (Blockly.isNumber(c) && Blockly.isNumber(d) &&
Blockly.isNumber(e)) c = Number(c), d = Number(d), e = Math.abs(Number(e)), 0 === c % 1 && 0 === d % 1 && 0 === e % 1 ? (c <= d ? (d++, a = 0 == c && 1 == e ? d : c + ", " + d, 1 != e && (a += ", " + e)) : (d--, a = c + ", " + d + ", -" + e), a = "range(" + a + ")") : (a = c < d ? g() : k(), a += "(" + c + ", " + d + ", " + e + ")");
else {
var l = function(a, c) { Blockly.isNumber(a) ? a = Number(a) : a.match(/^\w+$/) ? a = "float(" + a + ")" : (c = Blockly.Python.variableDB_.getDistinctName(b + c, Blockly.VARIABLE_CATEGORY_NAME), h += c + " = float(" + a + ")\n", a = c); return a };
c = l(c, "_start");
d = l(d, "_end");
l(e, "_inc");
a = "number" == typeof c &&
"number" == typeof d ? c < d ? g(c, d, e) : k(c, d, e) : a(c, d, e)
}
return h += "for " + b + " in " + a + ":\n" + f
};
Blockly.Python.controls_forEach = function(a) {
var b = Blockly.Python.variableDB_.getName(a.getFieldValue("VAR"), Blockly.VARIABLE_CATEGORY_NAME),
c = Blockly.Python.valueToCode(a, "LIST", Blockly.Python.ORDER_RELATIONAL) || "[]",
d = Blockly.Python.statementToCode(a, "DO");
d = Blockly.Python.addLoopTrap(d, a) || Blockly.Python.PASS;
return "for " + b + " in " + c + ":\n" + d
};
Blockly.Python.controls_flow_statements = function(a) {
var b = "";
Blockly.Python.STATEMENT_PREFIX && (b += Blockly.Python.injectId(Blockly.Python.STATEMENT_PREFIX, a));
Blockly.Python.STATEMENT_SUFFIX && (b += Blockly.Python.injectId(Blockly.Python.STATEMENT_SUFFIX, a));
if (Blockly.Python.STATEMENT_PREFIX) {
var c = Blockly.Constants.Loops.CONTROL_FLOW_IN_LOOP_CHECK_MIXIN.getSurroundLoop(a);
c && !c.suppressPrefixSuffix && (b += Blockly.Python.injectId(Blockly.Python.STATEMENT_PREFIX, c))
}
switch (a.getFieldValue("FLOW")) {
case "BREAK":
return b +
"break\n";
case "CONTINUE":
return b + "continue\n"
}
throw Error("Unknown flow statement.");
};
Blockly.Python.math = {};
Blockly.Python.addReservedWords("math,random,Number");
Blockly.Python.math_number = function(a) { a = Number(a.getFieldValue("NUM")); if (Infinity == a) { a = 'float("inf")'; var b = Blockly.Python.ORDER_FUNCTION_CALL } else -Infinity == a ? (a = '-float("inf")', b = Blockly.Python.ORDER_UNARY_SIGN) : b = 0 > a ? Blockly.Python.ORDER_UNARY_SIGN : Blockly.Python.ORDER_ATOMIC; return [a, b] };
Blockly.Python.math_arithmetic = function(a) {
var b = { ADD: [" + ", Blockly.Python.ORDER_ADDITIVE], MINUS: [" - ", Blockly.Python.ORDER_ADDITIVE], MULTIPLY: [" * ", Blockly.Python.ORDER_MULTIPLICATIVE], DIVIDE: [" / ", Blockly.Python.ORDER_MULTIPLICATIVE], POWER: [" ** ", Blockly.Python.ORDER_EXPONENTIATION] }[a.getFieldValue("OP")],
c = b[0];
b = b[1];
var d = Blockly.Python.valueToCode(a, "A", b) || "0";
a = Blockly.Python.valueToCode(a, "B", b) || "0";
return [d + c + a, b]
};
Blockly.Python.math_single = function(a) {
var b = a.getFieldValue("OP");
if ("NEG" == b) { var c = Blockly.Python.valueToCode(a, "NUM", Blockly.Python.ORDER_UNARY_SIGN) || "0"; return ["-" + c, Blockly.Python.ORDER_UNARY_SIGN] }
Blockly.Python.definitions_.import_math = "import math";
a = "SIN" == b || "COS" == b || "TAN" == b ? Blockly.Python.valueToCode(a, "NUM", Blockly.Python.ORDER_MULTIPLICATIVE) || "0" : Blockly.Python.valueToCode(a, "NUM", Blockly.Python.ORDER_NONE) || "0";
switch (b) {
case "ABS":
c = "math.fabs(" + a + ")";
break;
case "ROOT":
c = "math.sqrt(" +
a + ")";
break;
case "LN":
c = "math.log(" + a + ")";
break;
case "LOG10":
c = "math.log10(" + a + ")";
break;
case "EXP":
c = "math.exp(" + a + ")";
break;
case "POW10":
c = "math.pow(10," + a + ")";
break;
case "ROUND":
c = "round(" + a + ")";
break;
case "ROUNDUP":
c = "math.ceil(" + a + ")";
break;
case "ROUNDDOWN":
c = "math.floor(" + a + ")";
break;
case "SIN":
c = "math.sin(" + a + " / 180.0 * math.pi)";
break;
case "COS":
c = "math.cos(" + a + " / 180.0 * math.pi)";
break;
case "TAN":
c = "math.tan(" + a + " / 180.0 * math.pi)"
}
if (c) return [c, Blockly.Python.ORDER_FUNCTION_CALL];
switch (b) {
case "ASIN":
c =
"math.asin(" + a + ") / math.pi * 180";
break;
case "ACOS":
c = "math.acos(" + a + ") / math.pi * 180";
break;
case "ATAN":
c = "math.atan(" + a + ") / math.pi * 180";
break;
default:
throw Error("Unknown math operator: " + b);
}
return [c, Blockly.Python.ORDER_MULTIPLICATIVE]
};
Blockly.Python.math_constant = function(a) {
var b = { PI: ["math.pi", Blockly.Python.ORDER_MEMBER], E: ["math.e", Blockly.Python.ORDER_MEMBER], GOLDEN_RATIO: ["(1 + math.sqrt(5)) / 2", Blockly.Python.ORDER_MULTIPLICATIVE], SQRT2: ["math.sqrt(2)", Blockly.Python.ORDER_MEMBER], SQRT1_2: ["math.sqrt(1.0 / 2)", Blockly.Python.ORDER_MEMBER], INFINITY: ["float('inf')", Blockly.Python.ORDER_ATOMIC] };
a = a.getFieldValue("CONSTANT");
"INFINITY" != a && (Blockly.Python.definitions_.import_math = "import math");
return b[a]
};
Blockly.Python.math_number_property = function(a) {
var b = Blockly.Python.valueToCode(a, "NUMBER_TO_CHECK", Blockly.Python.ORDER_MULTIPLICATIVE) || "0",
c = a.getFieldValue("PROPERTY");
if ("PRIME" == c) return Blockly.Python.definitions_.import_math = "import math", Blockly.Python.definitions_.from_numbers_import_Number = "from numbers import Number", [Blockly.Python.provideFunction_("math_isPrime", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(n):", " # https://en.wikipedia.org/wiki/Primality_test#Naive_methods",
" # If n is not a number but a string, try parsing it.", " if not isinstance(n, Number):", " try:", " n = float(n)", " except:", " return False", " if n == 2 or n == 3:", " return True", " # False if n is negative, is 1, or not whole, or if n is divisible by 2 or 3.", " if n <= 1 or n % 1 != 0 or n % 2 == 0 or n % 3 == 0:", " return False", " # Check all the numbers of form 6k +/- 1, up to sqrt(n).", " for x in range(6, int(math.sqrt(n)) + 2, 6):", " if n % (x - 1) == 0 or n % (x + 1) == 0:",
" return False", " return True"
]) + "(" + b + ")", Blockly.Python.ORDER_FUNCTION_CALL];
switch (c) {
case "EVEN":
var d = b + " % 2 == 0";
break;
case "ODD":
d = b + " % 2 == 1";
break;
case "WHOLE":
d = b + " % 1 == 0";
break;
case "POSITIVE":
d = b + " > 0";
break;
case "NEGATIVE":
d = b + " < 0";
break;
case "DIVISIBLE_BY":
a = Blockly.Python.valueToCode(a, "DIVISOR", Blockly.Python.ORDER_MULTIPLICATIVE);
if (!a || "0" == a) return ["False", Blockly.Python.ORDER_ATOMIC];
d = b + " % " + a + " == 0"
}
return [d, Blockly.Python.ORDER_RELATIONAL]
};
Blockly.Python.math_change = function(a) {
Blockly.Python.definitions_.from_numbers_import_Number = "from numbers import Number";
var b = Blockly.Python.valueToCode(a, "DELTA", Blockly.Python.ORDER_ADDITIVE) || "0";
a = Blockly.Python.variableDB_.getName(a.getFieldValue("VAR"), Blockly.VARIABLE_CATEGORY_NAME);
return a + " = (" + a + " if isinstance(" + a + ", Number) else 0) + " + b + "\n"
};
Blockly.Python.math_round = Blockly.Python.math_single;
Blockly.Python.math_trig = Blockly.Python.math_single;
Blockly.Python.math_on_list = function(a) {
var b = a.getFieldValue("OP");
a = Blockly.Python.valueToCode(a, "LIST", Blockly.Python.ORDER_NONE) || "[]";
switch (b) {
case "SUM":
b = "sum(" + a + ")";
break;
case "MIN":
b = "min(" + a + ")";
break;
case "MAX":
b = "max(" + a + ")";
break;
case "AVERAGE":
Blockly.Python.definitions_.from_numbers_import_Number = "from numbers import Number";
b = Blockly.Python.provideFunction_("math_mean", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(myList):", " localList = [e for e in myList if isinstance(e, Number)]",
" if not localList: return", " return float(sum(localList)) / len(localList)"
]);
b = b + "(" + a + ")";
break;
case "MEDIAN":
Blockly.Python.definitions_.from_numbers_import_Number = "from numbers import Number";
b = Blockly.Python.provideFunction_("math_median", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(myList):", " localList = sorted([e for e in myList if isinstance(e, Number)])", " if not localList: return", " if len(localList) % 2 == 0:", " return (localList[len(localList) // 2 - 1] + localList[len(localList) // 2]) / 2.0",
" else:", " return localList[(len(localList) - 1) // 2]"
]);
b = b + "(" + a + ")";
break;
case "MODE":
b = Blockly.Python.provideFunction_("math_modes", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(some_list):", " modes = []", " # Using a lists of [item, count] to keep count rather than dict", ' # to avoid "unhashable" errors when the counted item is itself a list or dict.', " counts = []", " maxCount = 1", " for item in some_list:", " found = False", " for count in counts:", " if count[0] == item:",
" count[1] += 1", " maxCount = max(maxCount, count[1])", " found = True", " if not found:", " counts.append([item, 1])", " for counted_item, item_count in counts:", " if item_count == maxCount:", " modes.append(counted_item)", " return modes"
]);
b = b + "(" + a + ")";
break;
case "STD_DEV":
Blockly.Python.definitions_.import_math = "import math";
b = Blockly.Python.provideFunction_("math_standard_deviation", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(numbers):", " n = len(numbers)",
" if n == 0: return", " mean = float(sum(numbers)) / n", " variance = sum((x - mean) ** 2 for x in numbers) / n", " return math.sqrt(variance)"
]);
b = b + "(" + a + ")";
break;
case "RANDOM":
Blockly.Python.definitions_.import_random = "import random";
b = "random.choice(" + a + ")";
break;
default:
throw Error("Unknown operator: " + b);
}
return [b, Blockly.Python.ORDER_FUNCTION_CALL]
};
Blockly.Python.math_modulo = function(a) {
var b = Blockly.Python.valueToCode(a, "DIVIDEND", Blockly.Python.ORDER_MULTIPLICATIVE) || "0";
a = Blockly.Python.valueToCode(a, "DIVISOR", Blockly.Python.ORDER_MULTIPLICATIVE) || "0";
return [b + " % " + a, Blockly.Python.ORDER_MULTIPLICATIVE]
};
Blockly.Python.math_constrain = function(a) {
var b = Blockly.Python.valueToCode(a, "VALUE", Blockly.Python.ORDER_NONE) || "0",
c = Blockly.Python.valueToCode(a, "LOW", Blockly.Python.ORDER_NONE) || "0";
a = Blockly.Python.valueToCode(a, "HIGH", Blockly.Python.ORDER_NONE) || "float('inf')";
return ["min(max(" + b + ", " + c + "), " + a + ")", Blockly.Python.ORDER_FUNCTION_CALL]
};
Blockly.Python.math_random_int = function(a) {
Blockly.Python.definitions_.import_random = "import random";
var b = Blockly.Python.valueToCode(a, "FROM", Blockly.Python.ORDER_NONE) || "0";
a = Blockly.Python.valueToCode(a, "TO", Blockly.Python.ORDER_NONE) || "0";
return ["random.randint(" + b + ", " + a + ")", Blockly.Python.ORDER_FUNCTION_CALL]
};
Blockly.Python.math_random_float = function(a) { Blockly.Python.definitions_.import_random = "import random"; return ["random.random()", Blockly.Python.ORDER_FUNCTION_CALL] };
Blockly.Python.math_atan2 = function(a) { Blockly.Python.definitions_.import_math = "import math"; var b = Blockly.Python.valueToCode(a, "X", Blockly.Python.ORDER_NONE) || "0"; return ["math.atan2(" + (Blockly.Python.valueToCode(a, "Y", Blockly.Python.ORDER_NONE) || "0") + ", " + b + ") / math.pi * 180", Blockly.Python.ORDER_MULTIPLICATIVE] };
Blockly.Python.procedures = {};
Blockly.Python.procedures_defreturn = function(a) {
for (var b = [], c, d = a.workspace, e = Blockly.Variables.allUsedVarModels(d) || [], f = 0; c = e[f]; f++) c = c.name, -1 == a.arguments_.indexOf(c) && b.push(Blockly.Python.variableDB_.getName(c, Blockly.VARIABLE_CATEGORY_NAME));
d = Blockly.Variables.allDeveloperVariables(d);
for (f = 0; f < d.length; f++) b.push(Blockly.Python.variableDB_.getName(d[f], Blockly.Names.DEVELOPER_VARIABLE_TYPE));
b = b.length ? Blockly.Python.INDENT + "global " + b.join(", ") + "\n" : "";
d = Blockly.Python.variableDB_.getName(a.getFieldValue("NAME"),
Blockly.PROCEDURE_CATEGORY_NAME);
e = "";
Blockly.Python.STATEMENT_PREFIX && (e += Blockly.Python.injectId(Blockly.Python.STATEMENT_PREFIX, a));
Blockly.Python.STATEMENT_SUFFIX && (e += Blockly.Python.injectId(Blockly.Python.STATEMENT_SUFFIX, a));
e && (e = Blockly.Python.prefixLines(e, Blockly.Python.INDENT));
c = "";
Blockly.Python.INFINITE_LOOP_TRAP && (c = Blockly.Python.prefixLines(Blockly.Python.injectId(Blockly.Python.INFINITE_LOOP_TRAP, a), Blockly.Python.INDENT));
var h = Blockly.Python.statementToCode(a, "STACK"),
g = Blockly.Python.valueToCode(a,
"RETURN", Blockly.Python.ORDER_NONE) || "",
k = "";
h && g && (k = e);
g ? g = Blockly.Python.INDENT + "return " + g + "\n" : h || (h = Blockly.Python.PASS);
var l = [];
for (f = 0; f < a.arguments_.length; f++) l[f] = Blockly.Python.variableDB_.getName(a.arguments_[f], Blockly.VARIABLE_CATEGORY_NAME);
b = "def " + d + "(" + l.join(", ") + "):\n" + b + e + c + h + k + g;
b = Blockly.Python.scrub_(a, b);
Blockly.Python.definitions_["%" + d] = b;
return null
};
Blockly.Python.procedures_defnoreturn = Blockly.Python.procedures_defreturn;
Blockly.Python.procedures_callreturn = function(a) { for (var b = Blockly.Python.variableDB_.getName(a.getFieldValue("NAME"), Blockly.PROCEDURE_CATEGORY_NAME), c = [], d = 0; d < a.arguments_.length; d++) c[d] = Blockly.Python.valueToCode(a, "ARG" + d, Blockly.Python.ORDER_NONE) || "None"; return [b + "(" + c.join(", ") + ")", Blockly.Python.ORDER_FUNCTION_CALL] };
Blockly.Python.procedures_callnoreturn = function(a) { return Blockly.Python.procedures_callreturn(a)[0] + "\n" };
Blockly.Python.procedures_ifreturn = function(a) {
var b = "if " + (Blockly.Python.valueToCode(a, "CONDITION", Blockly.Python.ORDER_NONE) || "False") + ":\n";
Blockly.Python.STATEMENT_SUFFIX && (b += Blockly.Python.prefixLines(Blockly.Python.injectId(Blockly.Python.STATEMENT_SUFFIX, a), Blockly.Python.INDENT));
a.hasReturnValue_ ? (a = Blockly.Python.valueToCode(a, "VALUE", Blockly.Python.ORDER_NONE) || "None", b += Blockly.Python.INDENT + "return " + a + "\n") : b += Blockly.Python.INDENT + "return\n";
return b
};
Blockly.Python.texts = {};
Blockly.Python.text = function(a) { return [Blockly.Python.quote_(a.getFieldValue("TEXT")), Blockly.Python.ORDER_ATOMIC] };
Blockly.Python.text_multiline = function(a) { return [Blockly.Python.multiline_quote_(a.getFieldValue("TEXT")), Blockly.Python.ORDER_ATOMIC] };
Blockly.Python.text.forceString_ = function(a) { return Blockly.Python.text.forceString_.strRegExp.test(a) ? a : "str(" + a + ")" };
Blockly.Python.text.forceString_.strRegExp = /^\s*'([^']|\\')*'\s*$/;
Blockly.Python.text_join = function(a) {
switch (a.itemCount_) {
case 0:
return ["''", Blockly.Python.ORDER_ATOMIC];
case 1:
return a = Blockly.Python.valueToCode(a, "ADD0", Blockly.Python.ORDER_NONE) || "''", a = Blockly.Python.text.forceString_(a), [a, Blockly.Python.ORDER_FUNCTION_CALL];
case 2:
var b = Blockly.Python.valueToCode(a, "ADD0", Blockly.Python.ORDER_NONE) || "''";
a = Blockly.Python.valueToCode(a, "ADD1", Blockly.Python.ORDER_NONE) || "''";
a = Blockly.Python.text.forceString_(b) + " + " + Blockly.Python.text.forceString_(a);
return [a, Blockly.Python.ORDER_ADDITIVE];
default:
b = [];
for (var c = 0; c < a.itemCount_; c++) b[c] = Blockly.Python.valueToCode(a, "ADD" + c, Blockly.Python.ORDER_NONE) || "''";
a = Blockly.Python.variableDB_.getDistinctName("x", Blockly.VARIABLE_CATEGORY_NAME);
a = "''.join([str(" + a + ") for " + a + " in [" + b.join(", ") + "]])";
return [a, Blockly.Python.ORDER_FUNCTION_CALL]
}
};
Blockly.Python.text_append = function(a) {
var b = Blockly.Python.variableDB_.getName(a.getFieldValue("VAR"), Blockly.VARIABLE_CATEGORY_NAME);
a = Blockly.Python.valueToCode(a, "TEXT", Blockly.Python.ORDER_NONE) || "''";
return b + " = str(" + b + ") + " + Blockly.Python.text.forceString_(a) + "\n"
};
Blockly.Python.text_length = function(a) { return ["len(" + (Blockly.Python.valueToCode(a, "VALUE", Blockly.Python.ORDER_NONE) || "''") + ")", Blockly.Python.ORDER_FUNCTION_CALL] };
Blockly.Python.text_isEmpty = function(a) { return ["not len(" + (Blockly.Python.valueToCode(a, "VALUE", Blockly.Python.ORDER_NONE) || "''") + ")", Blockly.Python.ORDER_LOGICAL_NOT] };
Blockly.Python.text_indexOf = function(a) {
var b = "FIRST" == a.getFieldValue("END") ? "find" : "rfind",
c = Blockly.Python.valueToCode(a, "FIND", Blockly.Python.ORDER_NONE) || "''";
b = (Blockly.Python.valueToCode(a, "VALUE", Blockly.Python.ORDER_MEMBER) || "''") + "." + b + "(" + c + ")";
return a.workspace.options.oneBasedIndex ? [b + " + 1", Blockly.Python.ORDER_ADDITIVE] : [b, Blockly.Python.ORDER_FUNCTION_CALL]
};
Blockly.Python.text_charAt = function(a) {
var b = a.getFieldValue("WHERE") || "FROM_START",
c = Blockly.Python.valueToCode(a, "VALUE", Blockly.Python.ORDER_MEMBER) || "''";
switch (b) {
case "FIRST":
return [c + "[0]", Blockly.Python.ORDER_MEMBER];
case "LAST":
return [c + "[-1]", Blockly.Python.ORDER_MEMBER];
case "FROM_START":
return a = Blockly.Python.getAdjustedInt(a, "AT"), [c + "[" + a + "]", Blockly.Python.ORDER_MEMBER];
case "FROM_END":
return a = Blockly.Python.getAdjustedInt(a, "AT", 1, true), [c + "[" + a + "]", Blockly.Python.ORDER_MEMBER];
case "RANDOM":
return Blockly.Python.definitions_.import_random =
"import random", [Blockly.Python.provideFunction_("text_random_letter", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(text):", " x = int(random.random() * len(text))", " return text[x];"]) + "(" + c + ")", Blockly.Python.ORDER_FUNCTION_CALL]
}
throw Error("Unhandled option (text_charAt).");
};
Blockly.Python.text_getSubstring = function(a) {
var b = a.getFieldValue("WHERE1"),
c = a.getFieldValue("WHERE2"),
d = Blockly.Python.valueToCode(a, "STRING", Blockly.Python.ORDER_MEMBER) || "''";
switch (b) {
case "FROM_START":
b = Blockly.Python.getAdjustedInt(a, "AT1");
"0" == b && (b = "");
break;
case "FROM_END":
b = Blockly.Python.getAdjustedInt(a, "AT1", 1, true);
break;
case "FIRST":
b = "";
break;
default:
throw Error("Unhandled option (text_getSubstring)");
}
switch (c) {
case "FROM_START":
a = Blockly.Python.getAdjustedInt(a, "AT2", 1);
break;
case "FROM_END":
a =
Blockly.Python.getAdjustedInt(a, "AT2", 0, true);
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 Error("Unhandled option (text_getSubstring)");
}
return [d + "[" + b + " : " + a + "]", Blockly.Python.ORDER_MEMBER]
};
Blockly.Python.text_changeCase = function(a) { var b = { UPPERCASE: ".upper()", LOWERCASE: ".lower()", TITLECASE: ".title()" }[a.getFieldValue("CASE")]; return [(Blockly.Python.valueToCode(a, "TEXT", Blockly.Python.ORDER_MEMBER) || "''") + b, Blockly.Python.ORDER_FUNCTION_CALL] };
Blockly.Python.text_trim = function(a) { var b = { LEFT: ".lstrip()", RIGHT: ".rstrip()", BOTH: ".strip()" }[a.getFieldValue("MODE")]; return [(Blockly.Python.valueToCode(a, "TEXT", Blockly.Python.ORDER_MEMBER) || "''") + b, Blockly.Python.ORDER_FUNCTION_CALL] };
Blockly.Python.text_print = function(a) { return "print(" + (Blockly.Python.valueToCode(a, "TEXT", Blockly.Python.ORDER_NONE) || "''") + ")\n" };
Blockly.Python.text_prompt_ext = function(a) {
var b = Blockly.Python.provideFunction_("text_prompt", ["def " + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + "(msg):", " try:", " return raw_input(msg)", " except NameError:", " return input(msg)"]),
c = a.getField("TEXT") ? Blockly.Python.quote_(a.getFieldValue("TEXT")) : Blockly.Python.valueToCode(a, "TEXT", Blockly.Python.ORDER_NONE) || "''";
b = b + "(" + c + ")";
"NUMBER" == a.getFieldValue("TYPE") && (b = "float(" + b + ")");
return [b, Blockly.Python.ORDER_FUNCTION_CALL]
};
Blockly.Python.text_prompt = Blockly.Python.text_prompt_ext;
Blockly.Python.text_count = function(a) {
var b = Blockly.Python.valueToCode(a, "TEXT", Blockly.Python.ORDER_MEMBER) || "''";
a = Blockly.Python.valueToCode(a, "SUB", Blockly.Python.ORDER_NONE) || "''";
return [b + ".count(" + a + ")", Blockly.Python.ORDER_MEMBER]
};
Blockly.Python.text_replace = function(a) {
var b = Blockly.Python.valueToCode(a, "TEXT", Blockly.Python.ORDER_MEMBER) || "''",
c = Blockly.Python.valueToCode(a, "FROM", Blockly.Python.ORDER_NONE) || "''";
a = Blockly.Python.valueToCode(a, "TO", Blockly.Python.ORDER_NONE) || "''";
return [b + ".replace(" + c + ", " + a + ")", Blockly.Python.ORDER_MEMBER]
};
Blockly.Python.text_reverse = function(a) { return [(Blockly.Python.valueToCode(a, "TEXT", Blockly.Python.ORDER_MEMBER) || "''") + "[::-1]", Blockly.Python.ORDER_MEMBER] };
Blockly.Python.variables = {};
Blockly.Python.variables_get = function(a) { return [Blockly.Python.variableDB_.getName(a.getFieldValue("VAR"), Blockly.VARIABLE_CATEGORY_NAME), Blockly.Python.ORDER_ATOMIC] };
Blockly.Python.variables_set = function(a) { var b = Blockly.Python.valueToCode(a, "VALUE", Blockly.Python.ORDER_NONE) || "0"; return Blockly.Python.variableDB_.getName(a.getFieldValue("VAR"), Blockly.VARIABLE_CATEGORY_NAME) + " = " + b + "\n" };
Blockly.Python.variablesDynamic = {};
Blockly.Python.variables_get_dynamic = Blockly.Python.variables_get;
Blockly.Python.variables_set_dynamic = Blockly.Python.variables_set;
Blockly.Python.imports = [];
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化