243 lines
7.1 KiB
JavaScript
243 lines
7.1 KiB
JavaScript
'use strict';
|
|
|
|
pbc.assignD.get('List')['check_assign'] = function (py2block, node, targets, value) {
|
|
if (value._astname === "List")
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
pbc.assignD.get('List')['create_block'] = function (py2block, node, targets, value) {
|
|
return block("lists_create_with", node.lineno, {
|
|
'VAR': py2block.Name_str(targets[0])
|
|
},
|
|
py2block.convertElements("ADD", value.elts), {
|
|
"inline": elts.length < 4 ? "false" : "true",
|
|
}, {
|
|
"@items": value.elts.length
|
|
});
|
|
}
|
|
|
|
|
|
//mylist[0]在python_to_blockly.js中实现
|
|
//mylist[0:2]在python_to_blockly.js中实现
|
|
|
|
|
|
function listTrig(mode){
|
|
function converter(py2block, func, args, keywords, starargs, kwargs, node){
|
|
if (args.length !== 1) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var argblock = py2block.convert(args[0]);
|
|
return block("list_trig", func.lineno, {
|
|
'OP':mode
|
|
}, {
|
|
"data": argblock,
|
|
}, {
|
|
"inline": "true"
|
|
});
|
|
};
|
|
return converter;
|
|
}
|
|
|
|
pbc.globalFunctionD['sum'] = listTrig('SUM');
|
|
pbc.globalFunctionD['math_mean'] = listTrig('AVERAGE');
|
|
pbc.globalFunctionD['math_median'] = listTrig('MEDIAN');
|
|
pbc.globalFunctionD['math_modes'] = listTrig('MODE');
|
|
pbc.globalFunctionD['math_standard_deviation'] = listTrig('STD_DEV');
|
|
|
|
|
|
//mylist[0] = 0在python_to_blockly.js中实现
|
|
|
|
|
|
pbc.objectFunctionD.get('insert')['List'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
|
if (args.length !== 2) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var objblock = py2block.convert(func.value);
|
|
var atblock = py2block.convert(args[0]);
|
|
var valblock = py2block.convert(args[1]);
|
|
return [block("lists_insert_value", func.lineno, {}, {
|
|
"LIST": objblock,
|
|
"AT": atblock,
|
|
"VALUE": valblock,
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
};
|
|
|
|
function listAppendExtend(mode){
|
|
function converter(py2block, func, args, keywords, starargs, kwargs, node){
|
|
if (args.length !== 1) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var objblock = py2block.convert(func.value);
|
|
var argblock = py2block.convert(args[0]);
|
|
return [block("lists_append_extend", func.lineno, {
|
|
"OP":mode
|
|
}, {
|
|
"LIST": objblock,
|
|
"DATA": argblock
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
};
|
|
return converter;
|
|
}
|
|
pbc.objectFunctionD.get('append')['List'] = listAppendExtend('append');
|
|
pbc.objectFunctionD.get('extend')['List'] = listAppendExtend('extend');
|
|
|
|
|
|
//del mylist[0]在python_to_blockly.js中实现
|
|
|
|
pbc.objectFunctionD.get('remove')['List'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
|
if (args.length !== 1) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var objblock = py2block.convert(func.value);
|
|
var argblock = py2block.convert(args[0]);
|
|
return [block("lists_remove_at", func.lineno, {
|
|
"OP":"remove"
|
|
}, {
|
|
"LIST": objblock,
|
|
"DATA": argblock
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
};
|
|
|
|
|
|
//mylist.pop(0)在set.js中实现
|
|
//random.choice(mylist)在text.js中实现
|
|
|
|
function listFindCount(mode){
|
|
function converter(py2block, func, args, keywords, starargs, kwargs, node){
|
|
if (args.length !== 1) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var objblock = py2block.convert(func.value);
|
|
var argblock = py2block.convert(args[0]);
|
|
return block("lists_find", func.lineno, {
|
|
'OP':mode
|
|
}, {
|
|
"VAR": objblock,
|
|
"data": argblock
|
|
}, {
|
|
"inline": "true"
|
|
});
|
|
};
|
|
return converter;
|
|
}
|
|
pbc.objectFunctionD.get('index')['List'] = listFindCount('INDEX');
|
|
pbc.objectFunctionD.get('count')['List'] = listFindCount('COUNT');
|
|
|
|
|
|
pbc.globalFunctionD['lists_sort'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 3 && args[1]._astname === "Str"
|
|
&& args[2]._astname === "Name") {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var argblock = py2block.convert(args[0]);
|
|
var type = py2block.Str_value(args[1]);
|
|
var reverse = py2block.Name_str(args[2]);
|
|
if(reverse == "True"){
|
|
reverse = '-1';
|
|
}else if(reverse == "False"){
|
|
reverse = '1';
|
|
}else{
|
|
throw new Error("not implement");
|
|
}
|
|
return block("lists_sort", func.lineno, {
|
|
'TYPE': type,
|
|
'DIRECTION':reverse
|
|
}, {
|
|
'LIST': argblock
|
|
}, {
|
|
"inline": "true"
|
|
});
|
|
}
|
|
|
|
|
|
pbc.objectFunctionD.get('reverse')['List'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
|
if (args.length !== 0) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var objblock = py2block.convert(func.value);
|
|
return [block("lists_reverse", func.lineno, {}, {
|
|
"VAR": objblock,
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
};
|
|
|
|
|
|
pbc.objectFunctionD.get('clear')['List'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
|
if (args.length !== 0) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var objblock = py2block.convert(func.value);
|
|
return [block("lists_clear", func.lineno, {}, {
|
|
"VAR": objblock,
|
|
}, {
|
|
"inline": "true"
|
|
})];
|
|
};
|
|
|
|
pbc.globalFunctionD['list'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
|
if (args.length > 1) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
if (args.length ==0){
|
|
return block("lists_create_with_noreturn", node.lineno, {},{}
|
|
, {
|
|
"inline": "true",
|
|
}, {
|
|
"@items": 0
|
|
});
|
|
}
|
|
if (args.length ==1){
|
|
var numblock = py2block.convert(args[0]);
|
|
return block("list_tolist", func.lineno, {}, {
|
|
'VAR': numblock,
|
|
}, {
|
|
"inline": "false"
|
|
})
|
|
}
|
|
}
|
|
|
|
pbc.globalFunctionD['zip'] = function(py2block, func, args, keywords, starargs, kwargs, node){
|
|
|
|
var d = py2block.convertElements("ADD", args);
|
|
|
|
return block("lists_zip", node.lineno, {
|
|
}, d, {
|
|
"inline": "true",
|
|
}, {
|
|
"@items":args.length
|
|
});
|
|
}
|
|
|
|
pbc.moduleFunctionD.get('random')['sample'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 2) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var listname = py2block.convert(args[0]);
|
|
var varblock = py2block.convert(args[1]);
|
|
return block("lists_get_random_sublist", func.lineno, {}, {
|
|
'LIST':listname,
|
|
'VAR': varblock
|
|
}, {
|
|
"inline": "true"
|
|
});
|
|
}
|
|
|
|
pbc.objectFunctionD.get('tolist')['List'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
|
if (args.length !== 0) {
|
|
throw new Error("Incorrect number of arguments");
|
|
}
|
|
var objblock = py2block.convert(func.value);
|
|
return block("list_tolist2", func.lineno, {}, {
|
|
"VAR": objblock
|
|
}, {
|
|
"inline": "true"
|
|
});
|
|
} |