初始化提交
This commit is contained in:
377
boards/default_src/python/converters/text.js
Normal file
377
boards/default_src/python/converters/text.js
Normal file
@@ -0,0 +1,377 @@
|
||||
'use strict';
|
||||
|
||||
//01."text" 在 python_to_blockly.js实现
|
||||
|
||||
//02.str('Hello') + str('Mixly') 在 python_to_blockly.js实现
|
||||
|
||||
//03.int(str('123'))这种形式的,在math.js实现
|
||||
function numConvert(mode) {
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if ((mode != 'b' && args.length != 1) || (mode == 'b' && args.length != 2)) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var paramblock = py2block.convert(args[0]);
|
||||
if (args[0]._astname == "Call" && args[0].func._astname == "Name" && py2block.Name_str(args[0].func) == "str") {
|
||||
paramblock = py2block.convert(args[0].args[0]);
|
||||
}else if(args[0]._astname == "Call" && args[0].func._astname == "Name" && py2block.Name_str(args[0].func) == "input"){
|
||||
if(pbc.board == pbc.MIXPY) {
|
||||
paramblock = py2block.convert(args[0].args[0]);
|
||||
return block("inout_type_input", func.lineno, {
|
||||
"DIR": "float"
|
||||
}, {
|
||||
'VAR': paramblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}else if(args[0]._astname == "Call" && args[0].func._astname == "Attribute" && args[0].func.attr.v == "input"){
|
||||
if(pbc.board == pbc.MIXPY) {
|
||||
paramblock = py2block.convert(args[0].args[0]);
|
||||
return block("inout_type_input", func.lineno, {
|
||||
"DIR": "float"
|
||||
}, {
|
||||
'VAR': paramblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
return block("text_to_number", func.lineno, {
|
||||
'TOWHAT': mode
|
||||
}, {
|
||||
'VAR': paramblock,
|
||||
}, {
|
||||
"inline": "false"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.globalFunctionD['float'] = numConvert('float');
|
||||
pbc.globalFunctionD['bytes'] = numConvert('b');
|
||||
|
||||
|
||||
pbc.globalFunctionD['chr'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var numblock = py2block.convert(args[0]);
|
||||
return block("ascii_to_char", func.lineno, {}, {
|
||||
'VAR': numblock,
|
||||
}, {
|
||||
"inline": "false"
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
pbc.globalFunctionD['ord'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var numblock = py2block.convert(args[0]);
|
||||
return block("char_to_ascii", func.lineno, {}, {
|
||||
'VAR': numblock,
|
||||
}, {
|
||||
"inline": "false"
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
pbc.globalFunctionD['str'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var numblock = py2block.convert(args[0]);
|
||||
return block("number_to_text", func.lineno, {}, {
|
||||
'VAR': numblock,
|
||||
}, {
|
||||
"inline": "false"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.globalFunctionD['len'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length != 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var numblock = py2block.convert(args[0]);
|
||||
return block("text_length", func.lineno, {}, {
|
||||
'VAR': numblock,
|
||||
}, {
|
||||
"inline": "false"
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 'mixly'[0]这种形式的,在python_to_blockly.js中实现
|
||||
|
||||
|
||||
pbc.moduleFunctionD.get('random')['choice'] = function (py2block, func, args, keywords, starargs, kwargs, node){
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var argblock = py2block.convert(args[0]);
|
||||
var argAstname = args[0]._astname;
|
||||
if(args[0]._astname == "Call" && args[0].func._astname == "Name" && py2block.Name_str(args[0].func) == "str"){
|
||||
argblock = py2block.convert(args[0].args[0]);
|
||||
argAstname = "Str";
|
||||
}
|
||||
if(argAstname == "Str"){
|
||||
return block('text_random_char', func.lineno, {}, {
|
||||
'VAR':argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}else{
|
||||
return block('lists_get_random_item', func.lineno, {}, {
|
||||
'LIST':argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//str('123') == str('234')这种形式的,在python_to_blockly.js中实现
|
||||
|
||||
function startEndWithStr(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);
|
||||
if(func.value._astname == "Call" && func.value.func._astname == "Name" && py2block.Name_str(func.value.func) == "str"){
|
||||
objblock = py2block.convert(func.value.args[0]);
|
||||
}
|
||||
var argblock = py2block.convert(args[0]);
|
||||
if(args[0]._astname == "Call" && args[0].func._astname == "Name" && py2block.Name_str(args[0].func) == "str"){
|
||||
argblock = py2block.convert(args[0].args[0]);
|
||||
}
|
||||
return block('text_equals_starts_ends', func.lineno, {
|
||||
'DOWHAT':mode
|
||||
}, {
|
||||
'STR1':objblock,
|
||||
'STR2':argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('startswith')['Str'] = startEndWithStr('startswith');
|
||||
pbc.objectFunctionD.get('endswith')['Str'] = startEndWithStr('endswith');
|
||||
|
||||
|
||||
// 'mixly'[0:8]这种形式的,在python_to_blockly.js中实现
|
||||
function strTitle(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 0) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var textblock = py2block.convert(func.value);
|
||||
return block("text_capital", func.lineno, {
|
||||
'CAPITAL': mode,
|
||||
}, {
|
||||
"VAR": textblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('upper')['Str'] = strTitle('upper');
|
||||
pbc.objectFunctionD.get('title')['Str'] = strTitle('title');
|
||||
pbc.objectFunctionD.get('lower')['Str'] = strTitle('lower');
|
||||
pbc.objectFunctionD.get('swapcase')['Str'] = strTitle('swapcase');
|
||||
pbc.objectFunctionD.get('capitalize')['Str'] = strTitle('capitalize');
|
||||
|
||||
function strencode(mode){
|
||||
function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var textblock = py2block.convert(func.value);
|
||||
return block("text_to_number", func.lineno, {
|
||||
'TOWHAT': mode,
|
||||
}, {
|
||||
"VAR": textblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
pbc.objectFunctionD.get('encode')['Str'] = strencode('b');
|
||||
|
||||
|
||||
function textStrip(mode){
|
||||
function converter(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("text_strip", func.lineno, {
|
||||
'TOWHAT': mode,
|
||||
}, {
|
||||
"VAR": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('strip')['Str'] = textStrip('strip');
|
||||
pbc.objectFunctionD.get('lstrip')['Str'] = textStrip('lstrip');
|
||||
pbc.objectFunctionD.get('rstrip')['Str'] = textStrip('rstrip');
|
||||
|
||||
|
||||
|
||||
function textAlign(mode){
|
||||
function converter(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 argblock1 = py2block.convert(args[0]);
|
||||
var argblock2 = py2block.convert(args[1]);
|
||||
return block("text_center", func.lineno, {
|
||||
'CENTER': mode,
|
||||
}, {
|
||||
"VAR": objblock,
|
||||
"WID": argblock1,
|
||||
"Symbol": argblock2
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('ljust')['Str'] = textAlign('ljust');
|
||||
pbc.objectFunctionD.get('center')['Str'] = textAlign('center');
|
||||
pbc.objectFunctionD.get('rjust')['Str'] = textAlign('rjust');
|
||||
|
||||
|
||||
pbc.objectFunctionD.get('split')['Str'] = 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("text_split", func.lineno, {
|
||||
}, {
|
||||
"VAR": objblock,
|
||||
"VAL": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('replace')['Str'] = function converter(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 argblock1 = py2block.convert(args[0]);
|
||||
var argblock2 = py2block.convert(args[1]);
|
||||
return block("text_replace", func.lineno, {
|
||||
}, {
|
||||
"VAR": objblock,
|
||||
"STR1": argblock1,
|
||||
"STR2": argblock2
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('find')['Str'] = 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("text_find", func.lineno, {
|
||||
}, {
|
||||
"VAR": objblock,
|
||||
"STR": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('join')['Str'] = 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("text_join_seq", func.lineno, {
|
||||
}, {
|
||||
"VAR": objblock,
|
||||
"LIST": argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('format')['Str'] = function converter(py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
var objblock = py2block.convert(func.value);
|
||||
var d = py2block.convertElements("ADD", args);
|
||||
d['VAR'] = objblock;
|
||||
return block("text_format_noreturn", node.lineno, {
|
||||
}, d, {
|
||||
"inline": "true",
|
||||
}, {
|
||||
"@items":args.length
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
function strEncodeDecode(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);
|
||||
|
||||
return block("text_encode", func.lineno, {
|
||||
'DIR': mode,
|
||||
'CODE':args[0].s.v
|
||||
}, {
|
||||
"VAR": objblock,
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
|
||||
pbc.objectFunctionD.get('encode')['Str'] = strEncodeDecode('encode');
|
||||
pbc.objectFunctionD.get('decode')['Str'] = strEncodeDecode('decode');
|
||||
|
||||
pbc.globalFunctionD['eval'] = function (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("text_eval", func.lineno, {}, {
|
||||
"VAR":argblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
});
|
||||
}
|
||||
|
||||
pbc.moduleFunctionD.get('os')['system'] = function (py2block, func, args, keywords, starargs, kwargs, node) {
|
||||
if (args.length !== 1) {
|
||||
throw new Error("Incorrect number of arguments");
|
||||
}
|
||||
var varblock = py2block.convert(args[0]);
|
||||
return [block("os_system", func.lineno, {}, {
|
||||
'VAR': varblock
|
||||
}, {
|
||||
"inline": "true"
|
||||
})];
|
||||
}
|
||||
Reference in New Issue
Block a user