Files
mixly3/boards/default_src/python/generators/text.js

246 lines
9.8 KiB
JavaScript

import * as Blockly from 'blockly/core';
export const text = function (_, generator) {
// Text value.
//var code = 'String('+generator.quote_(this.getFieldValue('TEXT'))+')';
// var code = generator.quote_(this.getFieldValue('TEXT'));
var code = `"${this.getFieldValue('TEXT')}"`;
return [code, generator.ORDER_ATOMIC];
}
export const text_textarea = function (_, generator) {
// Text value.
//var code = 'String('+generator.quote_(this.getFieldValue('TEXT'))+')';
var code = '"""' + (this.getFieldValue('VALUE')) + '"""';
return [code, generator.ORDER_ATOMIC];
}
export const text_char = function (_, generator) {
var code = '\'' + this.getFieldValue('TEXT') + '\'';
return [code, generator.ORDER_ATOMIC];
}
export const text_join = function (_, generator) {
// Text value.
var a = generator.valueToCode(this, 'A', generator.ORDER_ATOMIC);
var b = generator.valueToCode(this, 'B', generator.ORDER_ATOMIC);
return [a + ' + ' + b, generator.ORDER_ADDITIVE];
}
export const ascii_to_char = function (_, generator) {
var asciivalue = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0'
return ['chr(' + asciivalue + ')', generator.ORDER_ATOMIC];
}
export const char_to_ascii = function (_, generator) {
var charvalue = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || 'a';
return ['ord(' + charvalue + ')', generator.ORDER_ATOMIC];
}
export const number_to_text = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '0';
return ['str(' + str + ')', generator.ORDER_ATOMIC];
}
export const text_length = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
return ['len(' + str + ')', generator.ORDER_ATOMIC];
}
export const text_char_at2 = function (a, generator) {
var c = a.getFieldValue("WHERE") || "FROM_START",
str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
switch (c) {
case "FROM_START":
a = generator.getAdjustedInt(a, "AT");
return [str + "[" + a + "]", generator.ORDER_ATOMIC];
case "FROM_END":
a = generator.getAdjustedInt(a, "AT", 1, !0);
return [str + "[" + a + "]", generator.ORDER_ATOMIC];
case "RANDOM":
generator.definitions_.import_random = "import random";
return ["random.choice(" + str + ")", generator.ORDER_FUNCTION_CALL];
}
throw "Unhandled combination (lists_getIndex).";
}
export const text_char_at = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var at = generator.valueToCode(this, 'AT', generator.ORDER_ATOMIC) || 0;
return [str + "[" + at + "]", generator.ORDER_ATOMIC];
}
export const text_random_char = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
generator.definitions_.import_random = "import random";
return ["random.choice(" + str + ")", generator.ORDER_FUNCTION_CALL];
}
export const text_equals_starts_ends = function (_, generator) {
var str1 = (generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC) || '""');
var str2 = (generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC) || '""');
var dowhat = this.getFieldValue('DOWHAT');
if (dowhat === '===')
return [str1 + ' == ' + str2, generator.ORDER_ATOMIC];
return [str1 + '.' + dowhat + '(' + str2 + ')', generator.ORDER_ATOMIC];
}
export const text_compare_to = function (_, generator) {
var str1 = (generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC) || '""');
var str2 = (generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC) || '""');
return ['cmp(' + str1 + ',' + str2 + ')', generator.ORDER_ATOMIC];
}
export const text_substring2 = function (block, generator) {
// Get sublist.
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var where1 = block.getFieldValue('WHERE1');
var where2 = block.getFieldValue('WHERE2');
switch (where1) {
case 'FROM_START':
var at1 = generator.getAdjustedInt(block, 'AT1');
if (at1 == '0') {
at1 = '';
}
break;
case 'FROM_END':
var at1 = generator.getAdjustedInt(block, 'AT1', 0, true);
break;
case 'FIRST':
var at1 = '0';
break;
default:
throw 'Unhandled option (lists_getSublist)';
}
switch (where2) {
case 'FROM_START':
var at2 = generator.getAdjustedInt(block, 'AT2');
break;
case 'FROM_END':
var at2 = generator.getAdjustedInt(block, 'AT2', 0, true);
// Ensure that if the result calculated is 0 that sub-sequence will
// include all elements as expected.
if (!Blockly.isNumber(String(at2))) {
generator.definitions_['import_sys'] = 'import sys';
at2 += ' or sys.maxsize';
} else if (at2 == '0') {
at2 = '';
}
break;
case 'LAST':
var at2 = '-1';
break;
default:
throw 'Unhandled option (lists_getSublist)';
}
var code = str + '[' + at1 + ' : ' + at2 + ']';
return [code, generator.ORDER_ATOMIC];
}
export const text_substring = function (_, generator) {
// Get sublist.
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var at1 = generator.valueToCode(this, 'AT1', generator.ORDER_ATOMIC);
var at2 = generator.valueToCode(this, 'AT2', generator.ORDER_ATOMIC);
var code = str + '[' + at1 + ' : ' + at2 + ']';
return [code, generator.ORDER_ATOMIC];
}
export const text_capital = function (_, generator) {
var capital = this.getFieldValue('CAPITAL');
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
return ['' + str + '.' + capital + '()', generator.ORDER_ATOMIC];
}
export const text_center = function (_, generator) {
var center = this.getFieldValue('CENTER');
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var width = generator.valueToCode(this, 'WID', generator.ORDER_ATOMIC);
var symbol = generator.valueToCode(this, 'Symbol', generator.ORDER_ATOMIC);
return ['' + str + '.' + center + '(' + width + ',' + symbol + ')', generator.ORDER_ATOMIC];
}
export const text_find = function (_, generator) {
var sentence = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var str = generator.valueToCode(this, 'STR', generator.ORDER_ATOMIC);
return ['' + sentence + '.find(' + str + ')', generator.ORDER_ATOMIC];
}
export const text_join_seq = function (_, generator) {
var sentence = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var varName = generator.valueToCode(this, 'LIST', generator.ORDER_ASSIGNMENT) || '0';
return [sentence + '.join(' + varName + ')', generator.ORDER_ATOMIC];
}
export const text_replace = function (_, generator) {
var sentence = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var str1 = generator.valueToCode(this, 'STR1', generator.ORDER_ATOMIC);
var str2 = generator.valueToCode(this, 'STR2', generator.ORDER_ATOMIC);
return ['' + sentence + '.replace(' + str1 + ',' + str2 + ')', generator.ORDER_ATOMIC];
}
export const text_split = function (_, generator) {
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
var argument = generator.valueToCode(this, 'VAL', generator.ORDER_ATOMIC) || '""';
var code = str + ".split(" + argument + ")";
return [code, generator.ORDER_ATOMIC];
}
export const text_strip = function (_, generator) {
var towhat = this.getFieldValue('TOWHAT');
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = str + "." + towhat + "()";
return [code, generator.ORDER_ATOMIC];
}
export const text_format = function (_, generator) {
// Create a list with any number of elements of any type.
var s = this.getFieldValue('VAR');
var code = new Array(this.itemCount_);
var default_value = '0';
for (var n = 0; n < this.itemCount_; n++) {
code[n] = generator.valueToCode(this, 'ADD' + n,
generator.ORDER_NONE) || default_value;
}
var code = s + '.format(' + code.join(', ') + ')';
return [code, generator.ORDER_ATOMIC];
}
export const text_format_noreturn = function (_, generator) {
// Create a list with any number of elements of any type.
var s = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = new Array(this.itemCount_);
var default_value = '0';
for (var n = 0; n < this.itemCount_; n++) {
code[n] = generator.valueToCode(this, 'ADD' + n,
generator.ORDER_NONE) || default_value;
}
var code = s + '.format(' + code.join(', ') + ')';
return [code, generator.ORDER_ATOMIC];
}
export const text_substring3 = text_substring
export const text_compareTo = text_compare_to
export const text_char_at3 = text_char_at
export const text_encode = function (_, generator) {
var code = this.getFieldValue('DIR');
var varName = this.getFieldValue('CODE')
var str = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC) || '""';
return [str + '.' + code + '("' + varName + '")', generator.ORDER_ATOMIC];
}
export const text_eval = function (_, generator) {
var codestr = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = "eval" + '(' + codestr + ')';
return [code, generator.ORDER_ATOMIC];
}
export const os_system = function (_, generator) {
generator.definitions_['import_os'] = 'import os';
var codestr = generator.valueToCode(this, 'VAR', generator.ORDER_ATOMIC);
var code = "os.system" + '(' + codestr + ')\n';
return code;
}