mirror of
https://github.com/google/blockly.git
synced 2026-01-11 02:47:09 +01:00
Update to latest version.
This commit is contained in:
@@ -52,12 +52,12 @@ Blockly.Python['controls_if'] = function(block) {
|
||||
Blockly.Python['logic_compare'] = function(block) {
|
||||
// Comparison operator.
|
||||
var OPERATORS = {
|
||||
EQ: '==',
|
||||
NEQ: '!=',
|
||||
LT: '<',
|
||||
LTE: '<=',
|
||||
GT: '>',
|
||||
GTE: '>='
|
||||
'EQ': '==',
|
||||
'NEQ': '!=',
|
||||
'LT': '<',
|
||||
'LTE': '<=',
|
||||
'GT': '>',
|
||||
'GTE': '>='
|
||||
};
|
||||
var operator = OPERATORS[block.getFieldValue('OP')];
|
||||
var order = Blockly.Python.ORDER_RELATIONAL;
|
||||
@@ -119,6 +119,6 @@ Blockly.Python['logic_ternary'] = function(block) {
|
||||
Blockly.Python.ORDER_CONDITIONAL) || 'None';
|
||||
var value_else = Blockly.Python.valueToCode(block, 'ELSE',
|
||||
Blockly.Python.ORDER_CONDITIONAL) || 'None';
|
||||
var code = value_then + ' if ' + value_if + ' else ' + value_else
|
||||
var code = value_then + ' if ' + value_if + ' else ' + value_else;
|
||||
return [code, Blockly.Python.ORDER_CONDITIONAL];
|
||||
};
|
||||
|
||||
@@ -28,15 +28,14 @@ goog.provide('Blockly.Python.loops');
|
||||
|
||||
goog.require('Blockly.Python');
|
||||
|
||||
Blockly.Python.LOOP_PASS = ' pass\n';
|
||||
|
||||
Blockly.Python['controls_repeat'] = function(block) {
|
||||
// Repeat n times (internal number).
|
||||
var repeats = parseInt(block.getFieldValue('TIMES'), 10);
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO') || ' pass\n';
|
||||
if (Blockly.Python.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.Python.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'\'' + block.id + '\'') + branch;
|
||||
}
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO');
|
||||
branch = Blockly.Python.addLoopTrap(branch, block.id) ||
|
||||
Blockly.Python.LOOP_PASS;
|
||||
var loopVar = Blockly.Python.variableDB_.getDistinctName(
|
||||
'count', Blockly.Variables.NAME_TYPE);
|
||||
var code = 'for ' + loopVar + ' in range(' + repeats + '):\n' + branch;
|
||||
@@ -52,11 +51,9 @@ Blockly.Python['controls_repeat_ext'] = function(block) {
|
||||
} else {
|
||||
repeats = 'int(' + repeats + ')';
|
||||
}
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO') || ' pass\n';
|
||||
if (Blockly.Python.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.Python.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'\'' + block.id + '\'') + branch;
|
||||
}
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO');
|
||||
branch = Blockly.Python.addLoopTrap(branch, block.id) ||
|
||||
Blockly.Python.LOOP_PASS;
|
||||
var loopVar = Blockly.Python.variableDB_.getDistinctName(
|
||||
'count', Blockly.Variables.NAME_TYPE);
|
||||
var code = 'for ' + loopVar + ' in range(' + repeats + '):\n' + branch;
|
||||
@@ -69,11 +66,9 @@ Blockly.Python['controls_whileUntil'] = function(block) {
|
||||
var argument0 = Blockly.Python.valueToCode(block, 'BOOL',
|
||||
until ? Blockly.Python.ORDER_LOGICAL_NOT :
|
||||
Blockly.Python.ORDER_NONE) || 'False';
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO') || ' pass\n';
|
||||
if (Blockly.Python.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.Python.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'"' + block.id + '"') + branch;
|
||||
}
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO');
|
||||
branch = Blockly.Python.addLoopTrap(branch, block.id) ||
|
||||
Blockly.Python.LOOP_PASS;
|
||||
if (until) {
|
||||
argument0 = 'not ' + argument0;
|
||||
}
|
||||
@@ -90,11 +85,9 @@ Blockly.Python['controls_for'] = function(block) {
|
||||
Blockly.Python.ORDER_NONE) || '0';
|
||||
var increment = Blockly.Python.valueToCode(block, 'BY',
|
||||
Blockly.Python.ORDER_NONE) || '1';
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO') || ' pass\n';
|
||||
if (Blockly.Python.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.Python.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'"' + block.id + '"') + branch;
|
||||
}
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO');
|
||||
branch = Blockly.Python.addLoopTrap(branch, block.id) ||
|
||||
Blockly.Python.LOOP_PASS;
|
||||
|
||||
var code = '';
|
||||
var range;
|
||||
@@ -159,7 +152,7 @@ Blockly.Python['controls_for'] = function(block) {
|
||||
} else {
|
||||
range = defineDownRange();
|
||||
}
|
||||
range += '(' + argument0 + ', ' + argument1 + ', ' + increment + ')';
|
||||
range += '(' + argument0 + ', ' + argument1 + ', ' + increment + ')';
|
||||
}
|
||||
} else {
|
||||
// Cache non-trivial values to variables to prevent repeated look-ups.
|
||||
@@ -204,11 +197,9 @@ Blockly.Python['controls_forEach'] = function(block) {
|
||||
block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
|
||||
var argument0 = Blockly.Python.valueToCode(block, 'LIST',
|
||||
Blockly.Python.ORDER_RELATIONAL) || '[]';
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO') || ' pass\n';
|
||||
if (Blockly.Python.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.Python.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'"' + block.id + '"') + branch;
|
||||
}
|
||||
var branch = Blockly.Python.statementToCode(block, 'DO');
|
||||
branch = Blockly.Python.addLoopTrap(branch, block.id) ||
|
||||
Blockly.Python.LOOP_PASS;
|
||||
var code = 'for ' + variable0 + ' in ' + argument0 + ':\n' + branch;
|
||||
return code;
|
||||
};
|
||||
|
||||
@@ -43,11 +43,11 @@ Blockly.Python['math_number'] = function(block) {
|
||||
Blockly.Python['math_arithmetic'] = function(block) {
|
||||
// Basic arithmetic operators, and power.
|
||||
var OPERATORS = {
|
||||
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]
|
||||
'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]
|
||||
};
|
||||
var tuple = OPERATORS[block.getFieldValue('OP')];
|
||||
var operator = tuple[0];
|
||||
@@ -147,12 +147,13 @@ Blockly.Python['math_single'] = function(block) {
|
||||
Blockly.Python['math_constant'] = function(block) {
|
||||
// Constants: PI, E, the Golden Ratio, sqrt(2), 1/sqrt(2), INFINITY.
|
||||
var CONSTANTS = {
|
||||
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]
|
||||
'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]
|
||||
};
|
||||
var constant = block.getFieldValue('CONSTANT');
|
||||
if (constant != 'INFINITY') {
|
||||
@@ -257,7 +258,7 @@ Blockly.Python['math_on_list'] = function(block) {
|
||||
case 'AVERAGE':
|
||||
var functionName = Blockly.Python.provideFunction_(
|
||||
'math_mean',
|
||||
// This operation excludes null and values that are not int or float:',
|
||||
// This operation excludes null and values that aren't int or float:',
|
||||
// math_mean([null, null, "aString", 1, 9]) == 5.0.',
|
||||
['def ' + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + '(myList):',
|
||||
' localList = [e for e in myList if type(e) in (int, float, long)]',
|
||||
|
||||
@@ -48,6 +48,11 @@ Blockly.Python['procedures_defreturn'] = function(block) {
|
||||
var funcName = Blockly.Python.variableDB_.getName(block.getFieldValue('NAME'),
|
||||
Blockly.Procedures.NAME_TYPE);
|
||||
var branch = Blockly.Python.statementToCode(block, 'STACK');
|
||||
if (Blockly.Python.STATEMENT_PREFIX) {
|
||||
branch = Blockly.Python.prefixLines(
|
||||
Blockly.Python.STATEMENT_PREFIX.replace(/%1/g,
|
||||
'\'' + block.id + '\''), Blockly.Python.INDENT) + branch;
|
||||
}
|
||||
if (Blockly.Python.INFINITE_LOOP_TRAP) {
|
||||
branch = Blockly.Python.INFINITE_LOOP_TRAP.replace(/%1/g,
|
||||
'"' + block.id + '"') + branch;
|
||||
|
||||
@@ -202,9 +202,9 @@ Blockly.Python['text_getSubstring'] = function(block) {
|
||||
Blockly.Python['text_changeCase'] = function(block) {
|
||||
// Change capitalization.
|
||||
var OPERATORS = {
|
||||
UPPERCASE: '.upper()',
|
||||
LOWERCASE: '.lower()',
|
||||
TITLECASE: '.title()'
|
||||
'UPPERCASE': '.upper()',
|
||||
'LOWERCASE': '.lower()',
|
||||
'TITLECASE': '.title()'
|
||||
};
|
||||
var operator = OPERATORS[block.getFieldValue('CASE')];
|
||||
var argument0 = Blockly.Python.valueToCode(block, 'TEXT',
|
||||
@@ -216,9 +216,9 @@ Blockly.Python['text_changeCase'] = function(block) {
|
||||
Blockly.Python['text_trim'] = function(block) {
|
||||
// Trim spaces.
|
||||
var OPERATORS = {
|
||||
LEFT: '.lstrip()',
|
||||
RIGHT: '.rstrip()',
|
||||
BOTH: '.strip()'
|
||||
'LEFT': '.lstrip()',
|
||||
'RIGHT': '.rstrip()',
|
||||
'BOTH': '.strip()'
|
||||
};
|
||||
var operator = OPERATORS[block.getFieldValue('MODE')];
|
||||
var argument0 = Blockly.Python.valueToCode(block, 'TEXT',
|
||||
@@ -235,7 +235,7 @@ Blockly.Python['text_print'] = function(block) {
|
||||
};
|
||||
|
||||
Blockly.Python['text_prompt'] = function(block) {
|
||||
// Prompt function.
|
||||
// Prompt function (internal message).
|
||||
var functionName = Blockly.Python.provideFunction_(
|
||||
'text_prompt',
|
||||
['def ' + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + '(msg):',
|
||||
@@ -251,3 +251,22 @@ Blockly.Python['text_prompt'] = function(block) {
|
||||
}
|
||||
return [code, Blockly.Python.ORDER_FUNCTION_CALL];
|
||||
};
|
||||
|
||||
Blockly.Python['text_prompt_ext'] = function(block) {
|
||||
// Prompt function (external message).
|
||||
var functionName = Blockly.Python.provideFunction_(
|
||||
'text_prompt',
|
||||
['def ' + Blockly.Python.FUNCTION_NAME_PLACEHOLDER_ + '(msg):',
|
||||
' try:',
|
||||
' return raw_input(msg)',
|
||||
' except NameError:',
|
||||
' return input(msg)']);
|
||||
var msg = Blockly.Python.valueToCode(block, 'TEXT',
|
||||
Blockly.Python.ORDER_NONE) || '\'\'';
|
||||
var code = functionName + '(' + msg + ')';
|
||||
var toNumber = block.getFieldValue('TYPE') == 'NUMBER';
|
||||
if (toNumber) {
|
||||
code = 'float(' + code + ')';
|
||||
}
|
||||
return [code, Blockly.Python.ORDER_FUNCTION_CALL];
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user