2017-02-07 14:42:33 -08:00
// Do not edit this file; automatically generated by build.py.
'use strict' ;
Blockly . PHP = new Blockly . Generator ( "PHP" ) ; Blockly . PHP . addReservedWords ( "__halt_compiler,abstract,and,array,as,break,callable,case,catch,class,clone,const,continue,declare,default,die,do,echo,else,elseif,empty,enddeclare,endfor,endforeach,endif,endswitch,endwhile,eval,exit,extends,final,for,foreach,function,global,goto,if,implements,include,include_once,instanceof,insteadof,interface,isset,list,namespace,new,or,print,private,protected,public,require,require_once,return,static,switch,throw,trait,try,unset,use,var,while,xor,PHP_VERSION,PHP_MAJOR_VERSION,PHP_MINOR_VERSION,PHP_RELEASE_VERSION,PHP_VERSION_ID,PHP_EXTRA_VERSION,PHP_ZTS,PHP_DEBUG,PHP_MAXPATHLEN,PHP_OS,PHP_SAPI,PHP_EOL,PHP_INT_MAX,PHP_INT_SIZE,DEFAULT_INCLUDE_PATH,PEAR_INSTALL_DIR,PEAR_EXTENSION_DIR,PHP_EXTENSION_DIR,PHP_PREFIX,PHP_BINDIR,PHP_BINARY,PHP_MANDIR,PHP_LIBDIR,PHP_DATADIR,PHP_SYSCONFDIR,PHP_LOCALSTATEDIR,PHP_CONFIG_FILE_PATH,PHP_CONFIG_FILE_SCAN_DIR,PHP_SHLIB_SUFFIX,E_ERROR,E_WARNING,E_PARSE,E_NOTICE,E_CORE_ERROR,E_CORE_WARNING,E_COMPILE_ERROR,E_COMPILE_WARNING,E_USER_ERROR,E_USER_WARNING,E_USER_NOTICE,E_DEPRECATED,E_USER_DEPRECATED,E_ALL,E_STRICT,__COMPILER_HALT_OFFSET__,TRUE,FALSE,NULL,__CLASS__,__DIR__,__FILE__,__FUNCTION__,__LINE__,__METHOD__,__NAMESPACE__,__TRAIT__" ) ;
Blockly . PHP . ORDER _ATOMIC = 0 ; Blockly . PHP . ORDER _CLONE = 1 ; Blockly . PHP . ORDER _NEW = 1 ; Blockly . PHP . ORDER _MEMBER = 2.1 ; Blockly . PHP . ORDER _FUNCTION _CALL = 2.2 ; Blockly . PHP . ORDER _POWER = 3 ; Blockly . PHP . ORDER _INCREMENT = 4 ; Blockly . PHP . ORDER _DECREMENT = 4 ; Blockly . PHP . ORDER _BITWISE _NOT = 4 ; Blockly . PHP . ORDER _CAST = 4 ; Blockly . PHP . ORDER _SUPPRESS _ERROR = 4 ; Blockly . PHP . ORDER _INSTANCEOF = 5 ; Blockly . PHP . ORDER _LOGICAL _NOT = 6 ; Blockly . PHP . ORDER _UNARY _PLUS = 7.1 ; Blockly . PHP . ORDER _UNARY _NEGATION = 7.2 ; Blockly . PHP . ORDER _MULTIPLICATION = 8.1 ;
Blockly . PHP . ORDER _DIVISION = 8.2 ; Blockly . PHP . ORDER _MODULUS = 8.3 ; Blockly . PHP . ORDER _ADDITION = 9.1 ; Blockly . PHP . ORDER _SUBTRACTION = 9.2 ; Blockly . PHP . ORDER _STRING _CONCAT = 9.3 ; Blockly . PHP . ORDER _BITWISE _SHIFT = 10 ; Blockly . PHP . ORDER _RELATIONAL = 11 ; Blockly . PHP . ORDER _EQUALITY = 12 ; Blockly . PHP . ORDER _REFERENCE = 13 ; Blockly . PHP . ORDER _BITWISE _AND = 13 ; Blockly . PHP . ORDER _BITWISE _XOR = 14 ; Blockly . PHP . ORDER _BITWISE _OR = 15 ; Blockly . PHP . ORDER _LOGICAL _AND = 16 ; Blockly . PHP . ORDER _LOGICAL _OR = 17 ; Blockly . PHP . ORDER _IF _NULL = 18 ;
Blockly . PHP . ORDER _CONDITIONAL = 19 ; Blockly . PHP . ORDER _ASSIGNMENT = 20 ; Blockly . PHP . ORDER _LOGICAL _AND _WEAK = 21 ; Blockly . PHP . ORDER _LOGICAL _XOR = 22 ; Blockly . PHP . ORDER _LOGICAL _OR _WEAK = 23 ; Blockly . PHP . ORDER _COMMA = 24 ; Blockly . PHP . ORDER _NONE = 99 ;
Blockly . PHP . ORDER _OVERRIDES = [ [ Blockly . PHP . ORDER _MEMBER , Blockly . PHP . ORDER _FUNCTION _CALL ] , [ Blockly . PHP . ORDER _MEMBER , Blockly . PHP . ORDER _MEMBER ] , [ Blockly . PHP . ORDER _LOGICAL _NOT , Blockly . PHP . ORDER _LOGICAL _NOT ] , [ Blockly . PHP . ORDER _MULTIPLICATION , Blockly . PHP . ORDER _MULTIPLICATION ] , [ Blockly . PHP . ORDER _ADDITION , Blockly . PHP . ORDER _ADDITION ] , [ Blockly . PHP . ORDER _LOGICAL _AND , Blockly . PHP . ORDER _LOGICAL _AND ] , [ Blockly . PHP . ORDER _LOGICAL _OR , Blockly . PHP . ORDER _LOGICAL _OR ] ] ;
2018-01-12 12:03:28 -08:00
Blockly . PHP . init = function ( a ) { Blockly . PHP . definitions _ = Object . create ( null ) ; Blockly . PHP . functionNames _ = Object . create ( null ) ; Blockly . PHP . variableDB _ ? Blockly . PHP . variableDB _ . reset ( ) : Blockly . PHP . variableDB _ = new Blockly . Names ( Blockly . PHP . RESERVED _WORDS _ , "$" ) ; Blockly . PHP . variableDB _ . setVariableMap ( a . getVariableMap ( ) ) ; for ( var b = [ ] , c = a . getAllVariables ( ) , d = 0 , e ; e = c [ d ] ; d ++ ) b [ d ] = Blockly . PHP . variableDB _ . getName ( e . getId ( ) , Blockly . Variables . NAME _TYPE ) + ";" ; a = Blockly . Variables . allDeveloperVariables ( a ) ; for ( d = 0 ; d < a . length ; d ++ ) b . push ( Blockly . PHP . variableDB _ . getName ( a [ d ] ,
Blockly . Names . DEVELOPER _VARIABLE _TYPE ) + ";" ) ; Blockly . PHP . definitions _ . variables = b . join ( "\n" ) } ; Blockly . PHP . finish = function ( a ) { var b = [ ] , c ; for ( c in Blockly . PHP . definitions _ ) b . push ( Blockly . PHP . definitions _ [ c ] ) ; delete Blockly . PHP . definitions _ ; delete Blockly . PHP . functionNames _ ; Blockly . PHP . variableDB _ . reset ( ) ; return b . join ( "\n\n" ) + "\n\n\n" + a } ; Blockly . PHP . scrubNakedValue = function ( a ) { return a + ";\n" } ;
Blockly . PHP . quote _ = function ( a ) { a = a . replace ( /\\/g , "\\\\" ) . replace ( /\n/g , "\\\n" ) . replace ( /'/g , "\\'" ) ; return "'" + a + "'" } ;
Blockly . PHP . scrub _ = function ( a , b ) { var c = "" ; if ( ! a . outputConnection || ! a . outputConnection . targetConnection ) { var d = a . getCommentText ( ) ; ( d = Blockly . utils . wrap ( d , Blockly . PHP . COMMENT _WRAP - 3 ) ) && ( c += Blockly . PHP . 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 . PHP . allNestedComments ( d ) ) && ( c += Blockly . PHP . prefixLines ( d , "// " ) ) } e = a . nextConnection && a . nextConnection . targetBlock ( ) ; e = Blockly . PHP . blockToCode ( e ) ;
return c + b + e } ;
Blockly . PHP . getAdjusted = function ( a , b , c , d , e ) { c = c || 0 ; e = e || Blockly . PHP . ORDER _NONE ; a . workspace . options . oneBasedIndex && c -- ; var g = a . workspace . options . oneBasedIndex ? "1" : "0" ; a = 0 < c ? Blockly . PHP . valueToCode ( a , b , Blockly . PHP . ORDER _ADDITION ) || g : 0 > c ? Blockly . PHP . valueToCode ( a , b , Blockly . PHP . ORDER _SUBTRACTION ) || g : d ? Blockly . PHP . valueToCode ( a , b , Blockly . PHP . ORDER _UNARY _NEGATION ) || g : Blockly . PHP . valueToCode ( a , b , e ) || g ; if ( Blockly . isNumber ( a ) ) a = parseFloat ( a ) + c , d && ( a = - a ) ; else { if ( 0 < c ) { a = a + " + " + c ; var f = Blockly . PHP . ORDER _ADDITION } else 0 > c &&
( a = a + " - " + - c , f = Blockly . PHP . ORDER _SUBTRACTION ) ; d && ( a = c ? "-(" + a + ")" : "-" + a , f = Blockly . PHP . ORDER _UNARY _NEGATION ) ; f = Math . floor ( f ) ; e = Math . floor ( e ) ; f && e >= f && ( a = "(" + a + ")" ) } return a } ; Blockly . PHP . colour = { } ; Blockly . PHP . colour _picker = function ( a ) { return [ "'" + a . getFieldValue ( "COLOUR" ) + "'" , Blockly . PHP . ORDER _ATOMIC ] } ; Blockly . PHP . colour _random = function ( a ) { return [ Blockly . PHP . provideFunction _ ( "colour_random" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "() {" , " return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);" , "}" ] ) + "()" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . colour _rgb = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "RED" , Blockly . PHP . ORDER _COMMA ) || 0 , c = Blockly . PHP . valueToCode ( a , "GREEN" , Blockly . PHP . ORDER _COMMA ) || 0 ; a = Blockly . PHP . valueToCode ( a , "BLUE" , Blockly . PHP . ORDER _COMMA ) || 0 ; return [ Blockly . PHP . provideFunction _ ( "colour_rgb" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($r, $g, $b) {" , " $r = round(max(min($r, 100), 0) * 2.55);" , " $g = round(max(min($g, 100), 0) * 2.55);" , " $b = round(max(min($b, 100), 0) * 2.55);" , " $hex = '#';" , " $hex .= str_pad(dechex($r), 2, '0', STR_PAD_LEFT);" ,
" $hex .= str_pad(dechex($g), 2, '0', STR_PAD_LEFT);" , " $hex .= str_pad(dechex($b), 2, '0', STR_PAD_LEFT);" , " return $hex;" , "}" ] ) + "(" + b + ", " + c + ", " + a + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . colour _blend = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "COLOUR1" , Blockly . PHP . ORDER _COMMA ) || "'#000000'" , c = Blockly . PHP . valueToCode ( a , "COLOUR2" , Blockly . PHP . ORDER _COMMA ) || "'#000000'" ; a = Blockly . PHP . valueToCode ( a , "RATIO" , Blockly . PHP . ORDER _COMMA ) || . 5 ; return [ Blockly . PHP . provideFunction _ ( "colour_blend" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($c1, $c2, $ratio) {" , " $ratio = max(min($ratio, 1), 0);" , " $r1 = hexdec(substr($c1, 1, 2));" , " $g1 = hexdec(substr($c1, 3, 2));" , " $b1 = hexdec(substr($c1, 5, 2));" ,
" $r2 = hexdec(substr($c2, 1, 2));" , " $g2 = hexdec(substr($c2, 3, 2));" , " $b2 = hexdec(substr($c2, 5, 2));" , " $r = round($r1 * (1 - $ratio) + $r2 * $ratio);" , " $g = round($g1 * (1 - $ratio) + $g2 * $ratio);" , " $b = round($b1 * (1 - $ratio) + $b2 * $ratio);" , " $hex = '#';" , " $hex .= str_pad(dechex($r), 2, '0', STR_PAD_LEFT);" , " $hex .= str_pad(dechex($g), 2, '0', STR_PAD_LEFT);" , " $hex .= str_pad(dechex($b), 2, '0', STR_PAD_LEFT);" , " return $hex;" , "}" ] ) + "(" + b + ", " + c + ", " + a + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . lists = { } ; Blockly . PHP . lists _create _empty = function ( a ) { return [ "array()" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . lists _create _with = function ( a ) { for ( var b = Array ( a . itemCount _ ) , c = 0 ; c < a . itemCount _ ; c ++ ) b [ c ] = Blockly . PHP . valueToCode ( a , "ADD" + c , Blockly . PHP . ORDER _COMMA ) || "null" ; b = "array(" + b . join ( ", " ) + ")" ; return [ b , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . lists _repeat = function ( a ) { var b = Blockly . PHP . provideFunction _ ( "lists_repeat" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($value, $count) {" , " $array = array();" , " for ($index = 0; $index < $count; $index++) {" , " $array[] = $value;" , " }" , " return $array;" , "}" ] ) , c = Blockly . PHP . valueToCode ( a , "ITEM" , Blockly . PHP . ORDER _COMMA ) || "null" ; a = Blockly . PHP . valueToCode ( a , "NUM" , Blockly . PHP . ORDER _COMMA ) || "0" ; return [ b + "(" + c + ", " + a + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . lists _length = function ( a ) { var b = Blockly . PHP . provideFunction _ ( "length" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($value) {" , " if (is_string($value)) {" , " return strlen($value);" , " } else {" , " return count($value);" , " }" , "}" ] ) ; a = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _NONE ) || "''" ; return [ b + "(" + a + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . lists _isEmpty = function ( a ) { return [ "empty(" + ( Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _FUNCTION _CALL ) || "array()" ) + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . lists _indexOf = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "FIND" , Blockly . PHP . ORDER _NONE ) || "''" , c = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _MEMBER ) || "[]" ; if ( a . workspace . options . oneBasedIndex ) var d = " 0" , e = " + 1" ; else d = " -1" , e = "" ; return [ ( "FIRST" == a . getFieldValue ( "END" ) ? Blockly . PHP . provideFunction _ ( "indexOf" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($haystack, $needle) {" , " for ($index = 0; $index < count($haystack); $index++) {" , " if ($haystack[$index] == $needle) return $index" +
e + ";" , " }" , " return " + d + ";" , "}" ] ) : Blockly . PHP . provideFunction _ ( "lastIndexOf" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($haystack, $needle) {" , " $last = " + d + ";" , " for ($index = 0; $index < count($haystack); $index++) {" , " if ($haystack[$index] == $needle) $last = $index" + e + ";" , " }" , " return $last;" , "}" ] ) ) + "(" + c + ", " + b + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . lists _getIndex = function ( a ) { var b = a . getFieldValue ( "MODE" ) || "GET" ; switch ( a . getFieldValue ( "WHERE" ) || "FROM_START" ) { case "FIRST" : if ( "GET" == b ) { var c = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _MEMBER ) || "array()" ; return [ c + "[0]" , Blockly . PHP . ORDER _MEMBER ] } if ( "GET_REMOVE" == b ) return c = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _NONE ) || "array()" , [ "array_shift(" + c + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] ; if ( "REMOVE" == b ) return c = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _NONE ) ||
"array()" , "array_shift(" + c + ");\n" ; break ; case "LAST" : if ( "GET" == b ) return c = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _NONE ) || "array()" , [ "end(" + c + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] ; if ( "GET_REMOVE" == b ) return c = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _NONE ) || "array()" , [ "array_pop(" + c + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] ; if ( "REMOVE" == b ) return c = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _NONE ) || "array()" , "array_pop(" + c + ");\n" ; break ; case "FROM_START" : var d = Blockly . PHP . getAdjusted ( a ,
"AT" ) ; if ( "GET" == b ) return c = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _MEMBER ) || "array()" , [ c + "[" + d + "]" , Blockly . PHP . ORDER _MEMBER ] ; if ( "GET_REMOVE" == b ) return c = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _COMMA ) || "array()" , [ "array_splice(" + c + ", " + d + ", 1)[0]" , Blockly . PHP . ORDER _FUNCTION _CALL ] ; if ( "REMOVE" == b ) return c = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _COMMA ) || "array()" , "array_splice(" + c + ", " + d + ", 1);\n" ; break ; case "FROM_END" : if ( "GET" == b ) return c = Blockly . PHP . valueToCode ( a ,
"VALUE" , Blockly . PHP . ORDER _COMMA ) || "array()" , d = Blockly . PHP . getAdjusted ( a , "AT" , 1 , ! 0 ) , [ "array_slice(" + c + ", " + d + ", 1)[0]" , Blockly . PHP . ORDER _FUNCTION _CALL ] ; if ( "GET_REMOVE" == b || "REMOVE" == b ) { c = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _NONE ) || "array()" ; d = Blockly . PHP . getAdjusted ( a , "AT" , 1 , ! 1 , Blockly . PHP . ORDER _SUBTRACTION ) ; c = "array_splice(" + c + ", count(" + c + ") - " + d + ", 1)[0]" ; if ( "GET_REMOVE" == b ) return [ c , Blockly . PHP . ORDER _FUNCTION _CALL ] ; if ( "REMOVE" == b ) return c + ";\n" } break ; case "RANDOM" : c = Blockly . PHP . valueToCode ( a ,
"VALUE" , Blockly . PHP . ORDER _NONE ) || "array()" ; if ( "GET" == b ) return b = Blockly . PHP . provideFunction _ ( "lists_get_random_item" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($list) {" , " return $list[rand(0,count($list)-1)];" , "}" ] ) , [ b + "(" + c + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] ; if ( "GET_REMOVE" == b ) return b = Blockly . PHP . provideFunction _ ( "lists_get_remove_random_item" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "(&$list) {" , " $x = rand(0,count($list)-1);" , " unset($list[$x]);" , " return array_values($list);" ,
"}" ] ) , [ b + "(" + c + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] ; if ( "REMOVE" == b ) return b = Blockly . PHP . provideFunction _ ( "lists_remove_random_item" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "(&$list) {" , " unset($list[rand(0,count($list)-1)]);" , "}" ] ) , b + "(" + c + ");\n" } throw "Unhandled combination (lists_getIndex)." ; } ;
Blockly . PHP . lists _setIndex = function ( a ) { var b = a . getFieldValue ( "MODE" ) || "GET" , c = a . getFieldValue ( "WHERE" ) || "FROM_START" , d = Blockly . PHP . valueToCode ( a , "TO" , Blockly . PHP . ORDER _ASSIGNMENT ) || "null" ; switch ( c ) { case "FIRST" : if ( "SET" == b ) return c = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _MEMBER ) || "array()" , c + "[0] = " + d + ";\n" ; if ( "INSERT" == b ) return c = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _COMMA ) || "array()" , "array_unshift(" + c + ", " + d + ");\n" ; break ; case "LAST" : c = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _COMMA ) ||
"array()" ; if ( "SET" == b ) return b = Blockly . PHP . provideFunction _ ( "lists_set_last_item" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "(&$list, $value) {" , " $list[count($list) - 1] = $value;" , "}" ] ) , b + "(" + c + ", " + d + ");\n" ; if ( "INSERT" == b ) return "array_push(" + c + ", " + d + ");\n" ; break ; case "FROM_START" : var e = Blockly . PHP . getAdjusted ( a , "AT" ) ; if ( "SET" == b ) return c = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _MEMBER ) || "array()" , c + "[" + e + "] = " + d + ";\n" ; if ( "INSERT" == b ) return c = Blockly . PHP . valueToCode ( a , "LIST" ,
Blockly . PHP . ORDER _COMMA ) || "array()" , "array_splice(" + c + ", " + e + ", 0, " + d + ");\n" ; break ; case "FROM_END" : c = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _COMMA ) || "array()" ; e = Blockly . PHP . getAdjusted ( a , "AT" , 1 ) ; if ( "SET" == b ) return b = Blockly . PHP . provideFunction _ ( "lists_set_from_end" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "(&$list, $at, $value) {" , " $list[count($list) - $at] = $value;" , "}" ] ) , b + "(" + c + ", " + e + ", " + d + ");\n" ; if ( "INSERT" == b ) return b = Blockly . PHP . provideFunction _ ( "lists_insert_from_end" ,
[ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "(&$list, $at, $value) {" , " return array_splice($list, count($list) - $at, 0, $value);" , "}" ] ) , b + "(" + c + ", " + e + ", " + d + ");\n" ; break ; case "RANDOM" : c = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _REFERENCE ) || "array()" ; c . match ( /^\$\w+$/ ) ? a = "" : ( a = Blockly . PHP . variableDB _ . getDistinctName ( "tmp_list" , Blockly . Variables . NAME _TYPE ) , e = a + " = &" + c + ";\n" , c = a , a = e ) ; e = Blockly . PHP . variableDB _ . getDistinctName ( "tmp_x" , Blockly . Variables . NAME _TYPE ) ; a += e + " = rand(0, count(" +
c + ")-1);\n" ; if ( "SET" == b ) return a + ( c + "[" + e + "] = " + d + ";\n" ) ; if ( "INSERT" == b ) return a + ( "array_splice(" + c + ", " + e + ", 0, " + d + ");\n" ) } throw "Unhandled combination (lists_setIndex)." ; } ;
Blockly . PHP . lists _getSublist = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _COMMA ) || "array()" , c = a . getFieldValue ( "WHERE1" ) , d = a . getFieldValue ( "WHERE2" ) ; if ( "FIRST" != c || "LAST" != d ) if ( b . match ( /^\$\w+$/ ) || "FROM_END" != c && "FROM_START" == d ) { switch ( c ) { case "FROM_START" : var e = Blockly . PHP . getAdjusted ( a , "AT1" ) ; break ; case "FROM_END" : e = Blockly . PHP . getAdjusted ( a , "AT1" , 1 , ! 1 , Blockly . PHP . ORDER _SUBTRACTION ) ; e = "count(" + b + ") - " + e ; break ; case "FIRST" : e = "0" ; break ; default : throw "Unhandled option (lists_getSublist)." ;
} switch ( d ) { case "FROM_START" : a = Blockly . PHP . getAdjusted ( a , "AT2" , 0 , ! 1 , Blockly . PHP . ORDER _SUBTRACTION ) ; c = a + " - " ; c = Blockly . isNumber ( String ( e ) ) || String ( e ) . match ( /^\(.+\)$/ ) ? c + e : c + ( "(" + e + ")" ) ; c += " + 1" ; break ; case "FROM_END" : a = Blockly . PHP . getAdjusted ( a , "AT2" , 0 , ! 1 , Blockly . PHP . ORDER _SUBTRACTION ) ; c = "count(" + b + ") - " + a + " - " ; c = Blockly . isNumber ( String ( e ) ) || String ( e ) . match ( /^\(.+\)$/ ) ? c + e : c + ( "(" + e + ")" ) ; break ; case "LAST" : c = "count(" + b + ") - " ; c = Blockly . isNumber ( String ( e ) ) || String ( e ) . match ( /^\(.+\)$/ ) ? c + e : c + ( "(" +
e + ")" ) ; break ; default : throw "Unhandled option (lists_getSublist)." ; } b = "array_slice(" + b + ", " + e + ", " + c + ")" } else e = Blockly . PHP . getAdjusted ( a , "AT1" ) , a = Blockly . PHP . getAdjusted ( a , "AT2" ) , b = Blockly . PHP . provideFunction _ ( "lists_get_sublist" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($list, $where1, $at1, $where2, $at2) {" , " if ($where1 == 'FROM_END') {" , " $at1 = count($list) - 1 - $at1;" , " } else if ($where1 == 'FIRST') {" , " $at1 = 0;" , " } else if ($where1 != 'FROM_START'){" , " throw new Exception('Unhandled option (lists_get_sublist).');" ,
" }" , " $length = 0;" , " if ($where2 == 'FROM_START') {" , " $length = $at2 - $at1 + 1;" , " } else if ($where2 == 'FROM_END') {" , " $length = count($list) - $at1 - $at2;" , " } else if ($where2 == 'LAST') {" , " $length = count($list) - $at1;" , " } else {" , " throw new Exception('Unhandled option (lists_get_sublist).');" , " }" , " return array_slice($list, $at1, $length);" , "}" ] ) + "(" + b + ", '" + c + "', " + e + ", '" + d + "', " + a + ")" ; return [ b , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . lists _sort = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _COMMA ) || "array()" , c = "1" === a . getFieldValue ( "DIRECTION" ) ? 1 : - 1 ; a = a . getFieldValue ( "TYPE" ) ; return [ Blockly . PHP . provideFunction _ ( "lists_sort" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($list, $type, $direction) {" , " $sortCmpFuncs = array(" , ' "NUMERIC" => "strnatcasecmp",' , ' "TEXT" => "strcmp",' , ' "IGNORE_CASE" => "strcasecmp"' , " );" , " $sortCmp = $sortCmpFuncs[$type];" , " $list2 = $list;" , " usort($list2, $sortCmp);" ,
" if ($direction == -1) {" , " $list2 = array_reverse($list2);" , " }" , " return $list2;" , "}" ] ) + "(" + b + ', "' + a + '", ' + c + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . lists _split = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "INPUT" , Blockly . PHP . ORDER _COMMA ) , c = Blockly . PHP . valueToCode ( a , "DELIM" , Blockly . PHP . ORDER _COMMA ) || "''" ; a = a . getFieldValue ( "MODE" ) ; if ( "SPLIT" == a ) b || ( b = "''" ) , a = "explode" ; else if ( "JOIN" == a ) b || ( b = "array()" ) , a = "implode" ; else throw "Unknown mode: " + a ; return [ a + "(" + c + ", " + b + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . lists _reverse = function ( a ) { return [ "array_reverse(" + ( Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _COMMA ) || "[]" ) + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . logic = { } ; Blockly . PHP . controls _if = function ( a ) { var b = 0 , c = "" ; do { var d = Blockly . PHP . valueToCode ( a , "IF" + b , Blockly . PHP . ORDER _NONE ) || "false" ; var e = Blockly . PHP . statementToCode ( a , "DO" + b ) ; c += ( 0 < b ? " else " : "" ) + "if (" + d + ") {\n" + e + "}" ; ++ b } while ( a . getInput ( "IF" + b ) ) ; a . getInput ( "ELSE" ) && ( e = Blockly . PHP . statementToCode ( a , "ELSE" ) , c += " else {\n" + e + "}" ) ; return c + "\n" } ; Blockly . PHP . controls _ifelse = Blockly . PHP . controls _if ;
Blockly . PHP . logic _compare = function ( a ) { var b = { EQ : "==" , NEQ : "!=" , LT : "<" , LTE : "<=" , GT : ">" , GTE : ">=" } [ a . getFieldValue ( "OP" ) ] , c = "==" == b || "!=" == b ? Blockly . PHP . ORDER _EQUALITY : Blockly . PHP . ORDER _RELATIONAL , d = Blockly . PHP . valueToCode ( a , "A" , c ) || "0" ; a = Blockly . PHP . valueToCode ( a , "B" , c ) || "0" ; return [ d + " " + b + " " + a , c ] } ;
Blockly . PHP . logic _operation = function ( a ) { var b = "AND" == a . getFieldValue ( "OP" ) ? "&&" : "||" , c = "&&" == b ? Blockly . PHP . ORDER _LOGICAL _AND : Blockly . PHP . ORDER _LOGICAL _OR , d = Blockly . PHP . valueToCode ( a , "A" , c ) ; a = Blockly . PHP . valueToCode ( a , "B" , c ) ; if ( d || a ) { var e = "&&" == b ? "true" : "false" ; d || ( d = e ) ; a || ( a = e ) } else a = d = "false" ; return [ d + " " + b + " " + a , c ] } ; Blockly . PHP . logic _negate = function ( a ) { var b = Blockly . PHP . ORDER _LOGICAL _NOT ; return [ "!" + ( Blockly . PHP . valueToCode ( a , "BOOL" , b ) || "true" ) , b ] } ;
Blockly . PHP . logic _boolean = function ( a ) { return [ "TRUE" == a . getFieldValue ( "BOOL" ) ? "true" : "false" , Blockly . PHP . ORDER _ATOMIC ] } ; Blockly . PHP . logic _null = function ( a ) { return [ "null" , Blockly . PHP . ORDER _ATOMIC ] } ; Blockly . PHP . logic _ternary = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "IF" , Blockly . PHP . ORDER _CONDITIONAL ) || "false" , c = Blockly . PHP . valueToCode ( a , "THEN" , Blockly . PHP . ORDER _CONDITIONAL ) || "null" ; a = Blockly . PHP . valueToCode ( a , "ELSE" , Blockly . PHP . ORDER _CONDITIONAL ) || "null" ; return [ b + " ? " + c + " : " + a , Blockly . PHP . ORDER _CONDITIONAL ] } ; Blockly . PHP . loops = { } ;
Blockly . PHP . controls _repeat _ext = function ( a ) { var b = a . getField ( "TIMES" ) ? String ( Number ( a . getFieldValue ( "TIMES" ) ) ) : Blockly . PHP . valueToCode ( a , "TIMES" , Blockly . PHP . ORDER _ASSIGNMENT ) || "0" , c = Blockly . PHP . statementToCode ( a , "DO" ) ; c = Blockly . PHP . addLoopTrap ( c , a . id ) ; a = "" ; var d = Blockly . PHP . variableDB _ . getDistinctName ( "count" , Blockly . Variables . NAME _TYPE ) , e = b ; b . match ( /^\w+$/ ) || Blockly . isNumber ( b ) || ( e = Blockly . PHP . variableDB _ . getDistinctName ( "repeat_end" , Blockly . Variables . NAME _TYPE ) , a += e + " = " + b + ";\n" ) ; return a + ( "for (" +
d + " = 0; " + d + " < " + e + "; " + d + "++) {\n" + c + "}\n" ) } ; Blockly . PHP . controls _repeat = Blockly . PHP . controls _repeat _ext ; Blockly . PHP . controls _whileUntil = function ( a ) { var b = "UNTIL" == a . getFieldValue ( "MODE" ) , c = Blockly . PHP . valueToCode ( a , "BOOL" , b ? Blockly . PHP . ORDER _LOGICAL _NOT : Blockly . PHP . ORDER _NONE ) || "false" , d = Blockly . PHP . statementToCode ( a , "DO" ) ; d = Blockly . PHP . addLoopTrap ( d , a . id ) ; b && ( c = "!" + c ) ; return "while (" + c + ") {\n" + d + "}\n" } ;
Blockly . PHP . controls _for = function ( a ) { var b = Blockly . PHP . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . Variables . NAME _TYPE ) , c = Blockly . PHP . valueToCode ( a , "FROM" , Blockly . PHP . ORDER _ASSIGNMENT ) || "0" , d = Blockly . PHP . valueToCode ( a , "TO" , Blockly . PHP . ORDER _ASSIGNMENT ) || "0" , e = Blockly . PHP . valueToCode ( a , "BY" , Blockly . PHP . ORDER _ASSIGNMENT ) || "1" , g = Blockly . PHP . statementToCode ( a , "DO" ) ; g = Blockly . PHP . addLoopTrap ( g , a . id ) ; if ( Blockly . isNumber ( c ) && Blockly . isNumber ( d ) && Blockly . isNumber ( e ) ) { var f = parseFloat ( c ) <= parseFloat ( d ) ;
a = "for (" + b + " = " + c + "; " + b + ( f ? " <= " : " >= " ) + d + "; " + b ; b = Math . abs ( parseFloat ( e ) ) ; a = ( 1 == b ? a + ( f ? "++" : "--" ) : a + ( ( f ? " += " : " -= " ) + b ) ) + ( ") {\n" + g + "}\n" ) } else a = "" , f = c , c . match ( /^\w+$/ ) || Blockly . isNumber ( c ) || ( f = Blockly . PHP . variableDB _ . getDistinctName ( b + "_start" , Blockly . Variables . NAME _TYPE ) , a += f + " = " + c + ";\n" ) , c = d , d . match ( /^\w+$/ ) || Blockly . isNumber ( d ) || ( c = Blockly . PHP . variableDB _ . getDistinctName ( b + "_end" , Blockly . Variables . NAME _TYPE ) , a += c + " = " + d + ";\n" ) , d = Blockly . PHP . variableDB _ . getDistinctName ( b + "_inc" , Blockly . Variables . NAME _TYPE ) ,
a += d + " = " , a = Blockly . isNumber ( e ) ? a + ( Math . abs ( e ) + ";\n" ) : a + ( "abs(" + e + ");\n" ) , a = a + ( "if (" + f + " > " + c + ") {\n" ) + ( Blockly . PHP . INDENT + d + " = -" + d + ";\n" ) , a += "}\n" , a += "for (" + b + " = " + f + "; " + d + " >= 0 ? " + b + " <= " + c + " : " + b + " >= " + c + "; " + b + " += " + d + ") {\n" + g + "}\n" ; return a } ;
Blockly . PHP . controls _forEach = function ( a ) { var b = Blockly . PHP . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . Variables . NAME _TYPE ) , c = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _ASSIGNMENT ) || "[]" , d = Blockly . PHP . statementToCode ( a , "DO" ) ; d = Blockly . PHP . addLoopTrap ( d , a . id ) ; return "foreach (" + c + " as " + b + ") {\n" + d + "}\n" } ; Blockly . PHP . controls _flow _statements = function ( a ) { switch ( a . getFieldValue ( "FLOW" ) ) { case "BREAK" : return "break;\n" ; case "CONTINUE" : return "continue;\n" } throw "Unknown flow statement." ; } ; Blockly . PHP . math = { } ; Blockly . PHP . math _number = function ( a ) { a = parseFloat ( a . getFieldValue ( "NUM" ) ) ; Infinity == a ? a = "INF" : - Infinity == a && ( a = "-INF" ) ; return [ a , Blockly . PHP . ORDER _ATOMIC ] } ;
Blockly . PHP . math _arithmetic = function ( a ) { var b = { ADD : [ " + " , Blockly . PHP . ORDER _ADDITION ] , MINUS : [ " - " , Blockly . PHP . ORDER _SUBTRACTION ] , MULTIPLY : [ " * " , Blockly . PHP . ORDER _MULTIPLICATION ] , DIVIDE : [ " / " , Blockly . PHP . ORDER _DIVISION ] , POWER : [ " ** " , Blockly . PHP . ORDER _POWER ] } [ a . getFieldValue ( "OP" ) ] , c = b [ 0 ] ; b = b [ 1 ] ; var d = Blockly . PHP . valueToCode ( a , "A" , b ) || "0" ; a = Blockly . PHP . valueToCode ( a , "B" , b ) || "0" ; return [ d + c + a , b ] } ;
Blockly . PHP . math _single = function ( a ) { var b = a . getFieldValue ( "OP" ) ; if ( "NEG" == b ) return a = Blockly . PHP . valueToCode ( a , "NUM" , Blockly . PHP . ORDER _UNARY _NEGATION ) || "0" , "-" == a [ 0 ] && ( a = " " + a ) , [ "-" + a , Blockly . PHP . ORDER _UNARY _NEGATION ] ; a = "SIN" == b || "COS" == b || "TAN" == b ? Blockly . PHP . valueToCode ( a , "NUM" , Blockly . PHP . ORDER _DIVISION ) || "0" : Blockly . PHP . valueToCode ( a , "NUM" , Blockly . PHP . ORDER _NONE ) || "0" ; switch ( b ) { case "ABS" : var c = "abs(" + a + ")" ; break ; case "ROOT" : c = "sqrt(" + a + ")" ; break ; case "LN" : c = "log(" + a + ")" ; break ; case "EXP" : c = "exp(" +
a + ")" ; break ; case "POW10" : c = "pow(10," + a + ")" ; break ; case "ROUND" : c = "round(" + a + ")" ; break ; case "ROUNDUP" : c = "ceil(" + a + ")" ; break ; case "ROUNDDOWN" : c = "floor(" + a + ")" ; break ; case "SIN" : c = "sin(" + a + " / 180 * pi())" ; break ; case "COS" : c = "cos(" + a + " / 180 * pi())" ; break ; case "TAN" : c = "tan(" + a + " / 180 * pi())" } if ( c ) return [ c , Blockly . PHP . ORDER _FUNCTION _CALL ] ; switch ( b ) { case "LOG10" : c = "log(" + a + ") / log(10)" ; break ; case "ASIN" : c = "asin(" + a + ") / pi() * 180" ; break ; case "ACOS" : c = "acos(" + a + ") / pi() * 180" ; break ; case "ATAN" : c = "atan(" +
a + ") / pi() * 180" ; break ; default : throw "Unknown math operator: " + b ; } return [ c , Blockly . PHP . ORDER _DIVISION ] } ; Blockly . PHP . math _constant = function ( a ) { return { PI : [ "M_PI" , Blockly . PHP . ORDER _ATOMIC ] , E : [ "M_E" , Blockly . PHP . ORDER _ATOMIC ] , GOLDEN _RATIO : [ "(1 + sqrt(5)) / 2" , Blockly . PHP . ORDER _DIVISION ] , SQRT2 : [ "M_SQRT2" , Blockly . PHP . ORDER _ATOMIC ] , SQRT1 _2 : [ "M_SQRT1_2" , Blockly . PHP . ORDER _ATOMIC ] , INFINITY : [ "INF" , Blockly . PHP . ORDER _ATOMIC ] } [ a . getFieldValue ( "CONSTANT" ) ] } ;
Blockly . PHP . math _number _property = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "NUMBER_TO_CHECK" , Blockly . PHP . ORDER _MODULUS ) || "0" , c = a . getFieldValue ( "PROPERTY" ) ; if ( "PRIME" == c ) return [ Blockly . PHP . provideFunction _ ( "math_isPrime" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($n) {" , " // https://en.wikipedia.org/wiki/Primality_test#Naive_methods" , " if ($n == 2 || $n == 3) {" , " return true;" , " }" , " // False if n is NaN, negative, is 1, or not whole." , " // And false if n is divisible by 2 or 3." ,
" if (!is_numeric($n) || $n <= 1 || $n % 1 != 0 || $n % 2 == 0 || $n % 3 == 0) {" , " return false;" , " }" , " // Check all the numbers of form 6k +/- 1, up to sqrt(n)." , " for ($x = 6; $x <= sqrt($n) + 1; $x += 6) {" , " if ($n % ($x - 1) == 0 || $n % ($x + 1) == 0) {" , " return false;" , " }" , " }" , " return true;" , "}" ] ) + "(" + b + ")" , Blockly . JavaScript . ORDER _FUNCTION _CALL ] ; switch ( c ) { case "EVEN" : var d = b + " % 2 == 0" ; break ; case "ODD" : d = b + " % 2 == 1" ; break ; case "WHOLE" : d = "is_int(" + b + ")" ; break ; case "POSITIVE" : d =
b + " > 0" ; break ; case "NEGATIVE" : d = b + " < 0" ; break ; case "DIVISIBLE_BY" : a = Blockly . PHP . valueToCode ( a , "DIVISOR" , Blockly . PHP . ORDER _MODULUS ) || "0" , d = b + " % " + a + " == 0" } return [ d , Blockly . PHP . ORDER _EQUALITY ] } ; Blockly . PHP . math _change = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "DELTA" , Blockly . PHP . ORDER _ADDITION ) || "0" ; return Blockly . PHP . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . Variables . NAME _TYPE ) + " += " + b + ";\n" } ; Blockly . PHP . math _round = Blockly . PHP . math _single ; Blockly . PHP . math _trig = Blockly . PHP . math _single ;
Blockly . PHP . math _on _list = function ( a ) { var b = a . getFieldValue ( "OP" ) ; switch ( b ) { case "SUM" : a = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _FUNCTION _CALL ) || "array()" ; a = "array_sum(" + a + ")" ; break ; case "MIN" : a = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _FUNCTION _CALL ) || "array()" ; a = "min(" + a + ")" ; break ; case "MAX" : a = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _FUNCTION _CALL ) || "array()" ; a = "max(" + a + ")" ; break ; case "AVERAGE" : b = Blockly . PHP . provideFunction _ ( "math_mean" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ +
"($myList) {" , " return array_sum($myList) / count($myList);" , "}" ] ) ; a = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _NONE ) || "array()" ; a = b + "(" + a + ")" ; break ; case "MEDIAN" : b = Blockly . PHP . provideFunction _ ( "math_median" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($arr) {" , " sort($arr,SORT_NUMERIC);" , " return (count($arr) % 2) ? $arr[floor(count($arr)/2)] : " , " ($arr[floor(count($arr)/2)] + $arr[floor(count($arr)/2) - 1]) / 2;" , "}" ] ) ; a = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _NONE ) ||
"[]" ; a = b + "(" + a + ")" ; break ; case "MODE" : b = Blockly . PHP . provideFunction _ ( "math_modes" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($values) {" , " if (empty($values)) return array();" , " $counts = array_count_values($values);" , " arsort($counts); // Sort counts in descending order" , " $modes = array_keys($counts, current($counts), true);" , " return $modes;" , "}" ] ) ; a = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _NONE ) || "[]" ; a = b + "(" + a + ")" ; break ; case "STD_DEV" : b = Blockly . PHP . provideFunction _ ( "math_standard_deviation" ,
[ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($numbers) {" , " $n = count($numbers);" , " if (!$n) return null;" , " $mean = array_sum($numbers) / count($numbers);" , " foreach($numbers as $key => $num) $devs[$key] = pow($num - $mean, 2);" , " return sqrt(array_sum($devs) / (count($devs) - 1));" , "}" ] ) ; a = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _NONE ) || "[]" ; a = b + "(" + a + ")" ; break ; case "RANDOM" : b = Blockly . PHP . provideFunction _ ( "math_random_list" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ +
"($list) {" , " $x = rand(0, count($list)-1);" , " return $list[$x];" , "}" ] ) ; a = Blockly . PHP . valueToCode ( a , "LIST" , Blockly . PHP . ORDER _NONE ) || "[]" ; a = b + "(" + a + ")" ; break ; default : throw "Unknown operator: " + b ; } return [ a , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . math _modulo = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "DIVIDEND" , Blockly . PHP . ORDER _MODULUS ) || "0" ; a = Blockly . PHP . valueToCode ( a , "DIVISOR" , Blockly . PHP . ORDER _MODULUS ) || "0" ; return [ b + " % " + a , Blockly . PHP . ORDER _MODULUS ] } ;
Blockly . PHP . math _constrain = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _COMMA ) || "0" , c = Blockly . PHP . valueToCode ( a , "LOW" , Blockly . PHP . ORDER _COMMA ) || "0" ; a = Blockly . PHP . valueToCode ( a , "HIGH" , Blockly . PHP . ORDER _COMMA ) || "Infinity" ; return [ "min(max(" + b + ", " + c + "), " + a + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . math _random _int = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "FROM" , Blockly . PHP . ORDER _COMMA ) || "0" ; a = Blockly . PHP . valueToCode ( a , "TO" , Blockly . PHP . ORDER _COMMA ) || "0" ; return [ Blockly . PHP . provideFunction _ ( "math_random_int" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($a, $b) {" , " if ($a > $b) {" , " return rand($b, $a);" , " }" , " return rand($a, $b);" , "}" ] ) + "(" + b + ", " + a + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . math _random _float = function ( a ) { return [ "(float)rand()/(float)getrandmax()" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . procedures = { } ;
Blockly . PHP . procedures _defreturn = function ( a ) { for ( var b = [ ] , c , d = a . workspace . getAllVariables ( ) || [ ] , e = 0 ; c = d [ e ] ; e ++ ) c = c . name , - 1 == a . arguments _ . indexOf ( c ) && b . push ( Blockly . PHP . variableDB _ . getName ( c , Blockly . Variables . NAME _TYPE ) ) ; b = b . length ? Blockly . PHP . INDENT + "global " + b . join ( ", " ) + ";\n" : "" ; d = Blockly . PHP . variableDB _ . getName ( a . getFieldValue ( "NAME" ) , Blockly . Procedures . NAME _TYPE ) ; c = Blockly . PHP . statementToCode ( a , "STACK" ) ; Blockly . PHP . STATEMENT _PREFIX && ( e = a . id . replace ( /\$/g , "$$$$" ) , c = Blockly . PHP . prefixLines ( Blockly . PHP . STATEMENT _PREFIX . replace ( /%1/g , "'" +
e + "'" ) , Blockly . PHP . INDENT ) + c ) ; Blockly . PHP . INFINITE _LOOP _TRAP && ( c = Blockly . PHP . INFINITE _LOOP _TRAP . replace ( /%1/g , "'" + a . id + "'" ) + c ) ; var g = Blockly . PHP . valueToCode ( a , "RETURN" , Blockly . PHP . ORDER _NONE ) || "" ; g && ( g = Blockly . PHP . INDENT + "return " + g + ";\n" ) ; var f = [ ] ; for ( e = 0 ; e < a . arguments _ . length ; e ++ ) f [ e ] = Blockly . PHP . variableDB _ . getName ( a . arguments _ [ e ] , Blockly . Variables . NAME _TYPE ) ; b = "function " + d + "(" + f . join ( ", " ) + ") {\n" + b + c + g + "}" ; b = Blockly . PHP . scrub _ ( a , b ) ; Blockly . PHP . definitions _ [ "%" + d ] = b ; return null } ;
Blockly . PHP . procedures _defnoreturn = Blockly . PHP . procedures _defreturn ; Blockly . PHP . procedures _callreturn = function ( a ) { for ( var b = Blockly . PHP . variableDB _ . getName ( a . getFieldValue ( "NAME" ) , Blockly . Procedures . NAME _TYPE ) , c = [ ] , d = 0 ; d < a . arguments _ . length ; d ++ ) c [ d ] = Blockly . PHP . valueToCode ( a , "ARG" + d , Blockly . PHP . ORDER _COMMA ) || "null" ; return [ b + "(" + c . join ( ", " ) + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . procedures _callnoreturn = function ( a ) { for ( var b = Blockly . PHP . variableDB _ . getName ( a . getFieldValue ( "NAME" ) , Blockly . Procedures . NAME _TYPE ) , c = [ ] , d = 0 ; d < a . arguments _ . length ; d ++ ) c [ d ] = Blockly . PHP . valueToCode ( a , "ARG" + d , Blockly . PHP . ORDER _COMMA ) || "null" ; return b + "(" + c . join ( ", " ) + ");\n" } ;
Blockly . PHP . procedures _ifreturn = function ( a ) { var b = "if (" + ( Blockly . PHP . valueToCode ( a , "CONDITION" , Blockly . PHP . ORDER _NONE ) || "false" ) + ") {\n" ; a . hasReturnValue _ ? ( a = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _NONE ) || "null" , b += Blockly . PHP . INDENT + "return " + a + ";\n" ) : b += Blockly . PHP . INDENT + "return;\n" ; return b + "}\n" } ; Blockly . PHP . texts = { } ; Blockly . PHP . text = function ( a ) { return [ Blockly . PHP . quote _ ( a . getFieldValue ( "TEXT" ) ) , Blockly . PHP . ORDER _ATOMIC ] } ;
Blockly . PHP . text _join = function ( a ) { if ( 0 == a . itemCount _ ) return [ "''" , Blockly . PHP . ORDER _ATOMIC ] ; if ( 1 == a . itemCount _ ) return [ Blockly . PHP . valueToCode ( a , "ADD0" , Blockly . PHP . ORDER _NONE ) || "''" , Blockly . PHP . ORDER _FUNCTION _CALL ] ; if ( 2 == a . itemCount _ ) { var b = Blockly . PHP . valueToCode ( a , "ADD0" , Blockly . PHP . ORDER _NONE ) || "''" ; a = Blockly . PHP . valueToCode ( a , "ADD1" , Blockly . PHP . ORDER _NONE ) || "''" ; return [ b + " . " + a , Blockly . PHP . ORDER _ADDITION ] } b = Array ( a . itemCount _ ) ; for ( var c = 0 ; c < a . itemCount _ ; c ++ ) b [ c ] = Blockly . PHP . valueToCode ( a , "ADD" +
c , Blockly . PHP . ORDER _COMMA ) || "''" ; a = "implode('', array(" + b . join ( "," ) + "))" ; return [ a , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . text _append = function ( a ) { var b = Blockly . PHP . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . Variables . NAME _TYPE ) ; a = Blockly . PHP . valueToCode ( a , "TEXT" , Blockly . PHP . ORDER _ASSIGNMENT ) || "''" ; return b + " .= " + a + ";\n" } ;
Blockly . PHP . text _length = function ( a ) { var b = Blockly . PHP . provideFunction _ ( "length" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($value) {" , " if (is_string($value)) {" , " return strlen($value);" , " } else {" , " return count($value);" , " }" , "}" ] ) ; a = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _NONE ) || "''" ; return [ b + "(" + a + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . text _isEmpty = function ( a ) { return [ "empty(" + ( Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _NONE ) || "''" ) + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . text _indexOf = function ( a ) { var b = "FIRST" == a . getFieldValue ( "END" ) ? "strpos" : "strrpos" , c = Blockly . PHP . valueToCode ( a , "FIND" , Blockly . PHP . ORDER _NONE ) || "''" , d = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _NONE ) || "''" ; if ( a . workspace . options . oneBasedIndex ) var e = " 0" , g = " + 1" ; else e = " -1" , g = "" ; return [ Blockly . PHP . provideFunction _ ( "FIRST" == a . getFieldValue ( "END" ) ? "text_indexOf" : "text_lastIndexOf" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($text, $search) {" , " $pos = " + b + "($text, $search);" ,
" return $pos === false ? " + e + " : $pos" + g + ";" , "}" ] ) + "(" + d + ", " + c + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . text _charAt = function ( a ) { var b = a . getFieldValue ( "WHERE" ) || "FROM_START" , c = Blockly . PHP . valueToCode ( a , "VALUE" , "RANDOM" == b ? Blockly . PHP . ORDER _NONE : Blockly . PHP . ORDER _COMMA ) || "''" ; switch ( b ) { case "FIRST" : return [ "substr(" + c + ", 0, 1)" , Blockly . PHP . ORDER _FUNCTION _CALL ] ; case "LAST" : return [ "substr(" + c + ", -1)" , Blockly . PHP . ORDER _FUNCTION _CALL ] ; case "FROM_START" : return a = Blockly . PHP . getAdjusted ( a , "AT" ) , [ "substr(" + c + ", " + a + ", 1)" , Blockly . PHP . ORDER _FUNCTION _CALL ] ; case "FROM_END" : return a = Blockly . PHP . getAdjusted ( a ,
"AT" , 1 , ! 0 ) , [ "substr(" + c + ", " + a + ", 1)" , Blockly . PHP . ORDER _FUNCTION _CALL ] ; case "RANDOM" : return [ Blockly . PHP . provideFunction _ ( "text_random_letter" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($text) {" , " return $text[rand(0, strlen($text) - 1)];" , "}" ] ) + "(" + c + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } throw "Unhandled option (text_charAt)." ; } ;
Blockly . PHP . text _getSubstring = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "STRING" , Blockly . PHP . ORDER _FUNCTION _CALL ) || "''" , c = a . getFieldValue ( "WHERE1" ) , d = a . getFieldValue ( "WHERE2" ) ; if ( "FIRST" != c || "LAST" != d ) { var e = Blockly . PHP . getAdjusted ( a , "AT1" ) ; a = Blockly . PHP . getAdjusted ( a , "AT2" ) ; b = Blockly . PHP . provideFunction _ ( "text_get_substring" , [ "function " + Blockly . PHP . FUNCTION _NAME _PLACEHOLDER _ + "($text, $where1, $at1, $where2, $at2) {" , " if ($where1 == 'FROM_END') {" , " $at1 = strlen($text) - 1 - $at1;" , " } else if ($where1 == 'FIRST') {" ,
" $at1 = 0;" , " } else if ($where1 != 'FROM_START'){" , " throw new Exception('Unhandled option (text_get_substring).');" , " }" , " $length = 0;" , " if ($where2 == 'FROM_START') {" , " $length = $at2 - $at1 + 1;" , " } else if ($where2 == 'FROM_END') {" , " $length = strlen($text) - $at1 - $at2;" , " } else if ($where2 == 'LAST') {" , " $length = strlen($text) - $at1;" , " } else {" , " throw new Exception('Unhandled option (text_get_substring).');" , " }" , " return substr($text, $at1, $length);" ,
"}" ] ) + "(" + b + ", '" + c + "', " + e + ", '" + d + "', " + a + ")" } return [ b , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . text _changeCase = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "TEXT" , Blockly . PHP . ORDER _NONE ) || "''" ; if ( "UPPERCASE" == a . getFieldValue ( "CASE" ) ) var c = "strtoupper(" + b + ")" ; else "LOWERCASE" == a . getFieldValue ( "CASE" ) ? c = "strtolower(" + b + ")" : "TITLECASE" == a . getFieldValue ( "CASE" ) && ( c = "ucwords(strtolower(" + b + "))" ) ; return [ c , Blockly . PHP . ORDER _FUNCTION _CALL ] } ;
Blockly . PHP . text _trim = function ( a ) { var b = { LEFT : "ltrim" , RIGHT : "rtrim" , BOTH : "trim" } [ a . getFieldValue ( "MODE" ) ] ; a = Blockly . PHP . valueToCode ( a , "TEXT" , Blockly . PHP . ORDER _NONE ) || "''" ; return [ b + "(" + a + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . text _print = function ( a ) { return "print(" + ( Blockly . PHP . valueToCode ( a , "TEXT" , Blockly . PHP . ORDER _NONE ) || "''" ) + ");\n" } ;
Blockly . PHP . text _prompt _ext = function ( a ) { var b = "readline(" + ( a . getField ( "TEXT" ) ? Blockly . PHP . quote _ ( a . getFieldValue ( "TEXT" ) ) : Blockly . PHP . valueToCode ( a , "TEXT" , Blockly . PHP . ORDER _NONE ) || "''" ) + ")" ; "NUMBER" == a . getFieldValue ( "TYPE" ) && ( b = "floatval(" + b + ")" ) ; return [ b , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . text _prompt = Blockly . PHP . text _prompt _ext ;
Blockly . PHP . text _count = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "TEXT" , Blockly . PHP . ORDER _MEMBER ) || "''" ; a = Blockly . PHP . valueToCode ( a , "SUB" , Blockly . PHP . ORDER _NONE ) || "''" ; return [ "strlen(" + a + ") === 0 ? strlen(" + b + ") + 1 : substr_count(" + b + ", " + a + ")" , Blockly . PHP . ORDER _CONDITIONAL ] } ;
Blockly . PHP . text _replace = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "TEXT" , Blockly . PHP . ORDER _MEMBER ) || "''" , c = Blockly . PHP . valueToCode ( a , "FROM" , Blockly . PHP . ORDER _NONE ) || "''" ; a = Blockly . PHP . valueToCode ( a , "TO" , Blockly . PHP . ORDER _NONE ) || "''" ; return [ "str_replace(" + c + ", " + a + ", " + b + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . text _reverse = function ( a ) { return [ "strrev(" + ( Blockly . PHP . valueToCode ( a , "TEXT" , Blockly . PHP . ORDER _MEMBER ) || "''" ) + ")" , Blockly . PHP . ORDER _FUNCTION _CALL ] } ; Blockly . PHP . variables = { } ; Blockly . PHP . variables _get = function ( a ) { return [ Blockly . PHP . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . Variables . NAME _TYPE ) , Blockly . PHP . ORDER _ATOMIC ] } ; Blockly . PHP . variables _set = function ( a ) { var b = Blockly . PHP . valueToCode ( a , "VALUE" , Blockly . PHP . ORDER _ASSIGNMENT ) || "0" ; return Blockly . PHP . variableDB _ . getName ( a . getFieldValue ( "VAR" ) , Blockly . Variables . NAME _TYPE ) + " = " + b + ";\n" } ;