123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- /**
- * @license Licensed under the Apache License, Version 2.0 (the "License"):
- * http://www.apache.org/licenses/LICENSE-2.0
- */
- /**
- * @fileoverview Generating Arduino code for list blocks.
- *
- * TODO: A lot of this can be converted to arrays code by creating functions to
- * replicate this kind of behavior.
- */
- 'use strict';
- goog.provide('Blockly.Python.lists');
- goog.require('Blockly.Python');
- Blockly.Python['lists_create_with'] = function(block) {
- // Create a list with any number of elements of any type.
- var size = block.itemCount_;
- var code = new Array(this.itemCount_);
- for (var n = 0; n < this.itemCount_; n++) {
- code[n] = Blockly.Python.valueToCode(this, 'ADD' + n,
- Blockly.Python.ORDER_NONE) || '0';
- }
- var res_code = '{' + code.join(', ') + '}';
- return [res_code,Blockly.Python.ORDER_ATOMIC];
- };
- Blockly.Python['lists_create_with2'] = function(block) {
- // Create a list with any number of elements of any type.
- var size = block.itemCount_;
- var code = new Array(this.itemCount_);
- for (var n = 0; n < this.itemCount_; n++) {
- code[n] = Blockly.Python.valueToCode(this, 'ADD' + n,
- Blockly.Python.ORDER_NONE) || '"string"' ;
- }
- var res_code = '{' + code.join(', ') + '}';
- return [res_code,Blockly.Python.ORDER_ATOMIC];
- };
- //Blockly.Python['lists_repeat'] = Blockly.Python.noGeneratorCodeInline;
- Blockly.Python['lists_length'] = function(block) {
- var varName = Blockly.Python.valueToCode(this, 'VAR',
- Blockly.Python.ORDER_ATOMIC) || 'list';
- let code = 'sizeof('+varName+')/sizeof('+varName+'[0])';
- return [code, Blockly.Python.ORDER_ATOMIC];
- };
- //Blockly.Python['lists_isEmpty'] = Blockly.Python.noGeneratorCodeInline;
- //Blockly.Python['lists_indexOf'] = Blockly.Python.noGeneratorCodeInline;
- Blockly.Python['lists_getIndex'] = function(block) {
- // Indexing into a list is the same as indexing into a string.
- var varName = Blockly.Python.valueToCode(this, 'VAR',
- Blockly.Python.ORDER_ATOMIC) || 'list';
- var argument0 = Blockly.Python.valueToCode(this, 'AT',
- Blockly.Python.ORDER_ADDITIVE) || '0';
- if (argument0.match(/^\d+$/)) {
- // If the index is a naked number, decrement it right now.
- argument0 = parseInt(argument0, 10);
- } else {
- // If the index is dynamic, decrement it in code.
- //argument0 += ' - 1';
- }
- // console.log();
- var code = varName+'[(int)('+argument0+')]';
- return [code,Blockly.Python.ORDER_ATOMIC];
- };
- Blockly.Python['lists_setIndex'] = function(block) {
- // Set element at index.
- //checktip1 -- if can't success .check Blockly.Variables.NAME_TYPE
- var varName = Blockly.Python.valueToCode(this, 'VAR',
- Blockly.Python.ORDER_ATOMIC) || 'list';
- var argument0 = Blockly.Python.valueToCode(this, 'AT',
- Blockly.Python.ORDER_ADDITIVE) || '1';
- var argument1 = Blockly.Python.valueToCode(this, 'TO',
- Blockly.Python.ORDER_ASSIGNMENT) || '0';
- // Blockly uses one-based indicies.
- if (argument0.match(/^\d+$/)) {
- // If the index is a naked number, decrement it right now.
- argument0 = parseInt(argument0, 10);
- } else {
- // If the index is dynamic, decrement it in code.
- //argument0 += ' - 1';
- }
- return varName + '[(int)(' + argument0 + ')] = ' + argument1 + ';\n';
- };
- Blockly.Python['lists_variable_get'] = function(block) {
- var code = Blockly.Python.variableDB_.getName(block.getFieldValue('VAR'),
- Blockly.Variables.NAME_TYPE);
- return [code, Blockly.Python.ORDER_ATOMIC];
- };
- /**
- * Code generator for array variable (X) setter (Y).
- * Arduino code: type X;
- * loop { X = Y; }
- * @param {Blockly.Block} block Block to generate the code from.
- * @return {string} Completed code.
- */
- Blockly.Python['lists_variable_set'] = function(block) {
- var argument0 = Blockly.Python.valueToCode(block, 'VALUE',
- Blockly.Python.ORDER_ASSIGNMENT) || '{}';
- // console.log("generator_list -122- ");
- // console.log(block);
- // console.log("generator_list -122-end ");
- if (block.childBlocks_.length) {
- if (block.childBlocks_[0].type == "lists_create_with") {
- // console.log("test1");
-
- var varName = block.getFieldValue('VAR');
- var declName = 'create_int_list_' + varName;
- var decl = 'int '+ varName + '['+ this.getChildren()[0].itemCount_ +'] = ' + argument0 + ';\n';
- Blockly.Python.addDeclaration(declName, decl);
- return '';
- } else if (block.childBlocks_[0].type == "lists_create_with2"){
- // console.log("test2");
- var varName = block.getFieldValue('VAR');
- var declName = 'create_int_list_' + varName;
- var decl = 'String '+ varName + '['+ this.getChildren()[0].itemCount_ +'] = ' + argument0 + ';\n';
- Blockly.Python.addDeclaration(declName, decl);
- return '';
- }
- }
- var varName = Blockly.Python.variableDB_.getName(
- block.getFieldValue('VAR'), Blockly.Variables.NAME_TYPE);
- var decl = 'String '+ varName + '[] = ' + argument0 + ';\n';
- Blockly.Python.addDeclaration('create_string_list', decl);
- return '';
- };
|