2018-01-16 21:13:23 +00:00
// Do not edit this file; automatically generated by build.py.
'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 ] ] ;
2018-08-17 13:32:56 +00:00
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 . Variables . NAME _TYPE ) + " = None" ) ; Blockly . Python . definitions _ . variables = b . join ( "\n" ) } ;
2018-01-16 21:13:23 +00:00
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" ) . replace ( /%/g , "\\%" ) ; var b = "'" ; - 1 !== a . indexOf ( "'" ) && ( - 1 === a . indexOf ( '"' ) ? b = '"' : a = a . replace ( /'/g , "\\'" ) ) ; return b + a + b } ;
Blockly . Python . scrub _ = function ( a , b ) { var c = "" ; if ( ! a . outputConnection || ! a . outputConnection . targetConnection ) { var d = a . getCommentText ( ) ; ( d = Blockly . utils . wrap ( d , Blockly . Python . COMMENT _WRAP - 3 ) ) && ( c = a . getProcedureDef ? c + ( '"""' + d + '\n"""\n' ) : c + Blockly . Python . prefixLines ( d + "\n" , "# " ) ) ; for ( var e = 0 ; e < a . inputList . length ; e ++ ) a . inputList [ e ] . type == Blockly . INPUT _VALUE && ( d = a . inputList [ e ] . connection . targetBlock ( ) ) && ( d = Blockly . Python . allNestedComments ( d ) ) && ( c += Blockly . Python . prefixLines ( d , "# " ) ) } e = a . nextConnection && a . nextConnection . targetBlock ( ) ;
e = Blockly . Python . blockToCode ( e ) ; return c + b + e } ; 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 [ "'" + 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 , ! 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 . 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 = "" ; 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 ; c += ( 0 == b ? "if " : "elif " ) + d + ":\n" + e ; ++ b } while ( a . getInput ( "IF" + b ) ) ; a . getInput ( "ELSE" ) && ( e = Blockly . Python . statementToCode ( a , "ELSE" ) || Blockly . Python . PASS , 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 . id ) || Blockly . Python . PASS ; return "for " + Blockly . Python . variableDB _ . getDistinctName ( "count" , Blockly . Variables . NAME _TYPE ) + " 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 . id ) || 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 . Variables . NAME _TYPE ) , 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 . id ) || Blockly . Python . PASS ; var g = "" , h = 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 " + h ( ) + "(" + a + ", " + b + ", " + c + ") or " + k ( ) + "(" + a + ", " + b + ", " + c + ")" } ; if ( Blockly . isNumber ( c ) && Blockly . isNumber ( d ) &&
Blockly . isNumber ( e ) ) c = parseFloat ( c ) , d = parseFloat ( d ) , e = Math . abs ( parseFloat ( 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 ? h ( ) : k ( ) , a += "(" + c + ", " + d + ", " + e + ")" ) ; else { var l = function ( a , c ) { if ( Blockly . isNumber ( a ) ) a = parseFloat ( a ) ; else if ( a . match ( /^\w+$/ ) ) a = "float(" + a + ")" ; else { var d = Blockly . Python . variableDB _ . getDistinctName ( b + c , Blockly . Variables . NAME _TYPE ) ; g += d + " = float(" + a + ")\n" ; a = d } return a } ; c = l ( c , "_start" ) ; d = l ( d , "_end" ) ;
l ( e , "_inc" ) ; a = "number" == typeof c && "number" == typeof d ? c < d ? h ( c , d , e ) : k ( c , d , e ) : a ( c , d , e ) } return g += "for " + b + " in " + a + ":\n" + f } ; Blockly . Python . controls _forEach = function ( a ) { var b = Blockly . Python . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . Variables . NAME _TYPE ) , c = Blockly . Python . valueToCode ( a , "LIST" , Blockly . Python . ORDER _RELATIONAL ) || "[]" , d = Blockly . Python . statementToCode ( a , "DO" ) ; d = Blockly . Python . addLoopTrap ( d , a . id ) || Blockly . Python . PASS ; return "for " + b + " in " + c + ":\n" + d } ;
Blockly . Python . controls _flow _statements = function ( a ) { switch ( a . getFieldValue ( "FLOW" ) ) { case "BREAK" : return "break\n" ; case "CONTINUE" : return "continue\n" } throw "Unknown flow statement." ; } ; Blockly . Python . math = { } ; Blockly . Python . addReservedWords ( "math,random,Number" ) ; Blockly . Python . math _number = function ( a ) { a = parseFloat ( 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 "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 . Variables . NAME _TYPE ) ; 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 "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 . procedures = { } ;
2018-08-17 13:32:56 +00:00
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 . Variables . NAME _TYPE ) ) ; 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 . Procedures . NAME _TYPE ) ;
e = Blockly . Python . statementToCode ( a , "STACK" ) ; Blockly . Python . STATEMENT _PREFIX && ( f = a . id . replace ( /\$/g , "$$$$" ) , e = Blockly . Python . prefixLines ( Blockly . Python . STATEMENT _PREFIX . replace ( /%1/g , "'" + f + "'" ) , Blockly . Python . INDENT ) + e ) ; Blockly . Python . INFINITE _LOOP _TRAP && ( e = Blockly . Python . INFINITE _LOOP _TRAP . replace ( /%1/g , '"' + a . id + '"' ) + e ) ; ( c = Blockly . Python . valueToCode ( a , "RETURN" , Blockly . Python . ORDER _NONE ) || "" ) ? c = Blockly . Python . INDENT + "return " + c + "\n" : e || ( e = Blockly . Python . PASS ) ; var g = [ ] ; for ( f = 0 ; f < a . arguments _ . length ; f ++ ) g [ f ] =
Blockly . Python . variableDB _ . getName ( a . arguments _ [ f ] , Blockly . Variables . NAME _TYPE ) ; b = "def " + d + "(" + g . join ( ", " ) + "):\n" + b + e + c ; 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 . Procedures . NAME _TYPE ) , 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 ] } ;
2018-01-16 21:13:23 +00:00
Blockly . Python . procedures _callnoreturn = function ( a ) { for ( var b = Blockly . Python . variableDB _ . getName ( a . getFieldValue ( "NAME" ) , Blockly . Procedures . NAME _TYPE ) , 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 ( ", " ) + ")\n" } ;
Blockly . Python . procedures _ifreturn = function ( a ) { var b = "if " + ( Blockly . Python . valueToCode ( a , "CONDITION" , Blockly . Python . ORDER _NONE ) || "False" ) + ":\n" ; 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 _join = function ( a ) { switch ( a . itemCount _ ) { case 0 : return [ "''" , Blockly . Python . ORDER _ATOMIC ] ; case 1 : return [ "str(" + ( Blockly . Python . valueToCode ( a , "ADD0" , Blockly . Python . ORDER _NONE ) || "''" ) + ")" , 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 ) || "''" ; return [ "str(" + b + ") + str(" + 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 . Variables . NAME _TYPE ) ; 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 . Variables . NAME _TYPE ) ; a = Blockly . Python . valueToCode ( a , "TEXT" , Blockly . Python . ORDER _NONE ) || "''" ; return b + " = str(" + b + ") + str(" + 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 , ! 0 ) , [ 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 "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 , ! 0 ) ; break ; case "FIRST" : b = "" ; break ; default : throw "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 , ! 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 (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 ] } ;
2018-08-17 13:32:56 +00:00
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 . Variables . NAME _TYPE ) , 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 . Variables . NAME _TYPE ) + " = " + b + "\n" } ;
Blockly . Python . variablesDynamic = { } ; Blockly . Python . variables _get _dynamic = Blockly . Python . variables _get ; Blockly . Python . variables _set _dynamic = Blockly . Python . variables _set ;