From 26a4774b35bf359d781eac0174fb63f4c298aa79 Mon Sep 17 00:00:00 2001 From: Abby Schmiedt Date: Wed, 21 Nov 2018 09:00:29 -0800 Subject: [PATCH] Adds option to generate code for a single block --- core/generator.js | 7 ++++--- generators/dart.js | 5 +++-- generators/javascript.js | 5 +++-- generators/lua.js | 5 +++-- generators/php.js | 5 +++-- generators/python.js | 5 +++-- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/core/generator.js b/core/generator.js index f6f5e7a75..2ea0f3213 100644 --- a/core/generator.js +++ b/core/generator.js @@ -158,11 +158,12 @@ Blockly.Generator.prototype.allNestedComments = function(block) { /** * Generate code for the specified block (and attached blocks). * @param {Blockly.Block} block The block to generate code for. + * @param {boolean} opt_thisOnly True to generate code for only this block. * @return {string|!Array} For statement blocks, the generated code. * For value blocks, an array containing the generated code and an * operator order value. Returns '' if block is null. */ -Blockly.Generator.prototype.blockToCode = function(block) { +Blockly.Generator.prototype.blockToCode = function(block, opt_thisOnly) { if (!block) { return ''; } @@ -186,13 +187,13 @@ Blockly.Generator.prototype.blockToCode = function(block) { if (!block.outputConnection) { throw TypeError('Expecting string from statement block: ' + block.type); } - return [this.scrub_(block, code[0]), code[1]]; + return [this.scrub_(block, code[0], opt_thisOnly), code[1]]; } else if (typeof code == 'string') { var id = block.id.replace(/\$/g, '$$$$'); // Issue 251. if (this.STATEMENT_PREFIX) { code = this.STATEMENT_PREFIX.replace(/%1/g, '\'' + id + '\'') + code; } - return this.scrub_(block, code); + return this.scrub_(block, code, opt_thisOnly); } else if (code === null) { // Block has handled code generation itself. return ''; diff --git a/generators/dart.js b/generators/dart.js index 4dfb9971f..a444105ff 100644 --- a/generators/dart.js +++ b/generators/dart.js @@ -188,10 +188,11 @@ Blockly.Dart.quote_ = function(string) { * Calls any statements following this block. * @param {!Blockly.Block} block The current block. * @param {string} code The Dart code created for this block. + * @param {boolean} opt_thisOnly True to generate code for only this block. * @return {string} Dart code with comments and subsequent blocks added. * @private */ -Blockly.Dart.scrub_ = function(block, code) { +Blockly.Dart.scrub_ = function(block, code, opt_thisOnly) { var commentCode = ''; // Only collect comments for blocks that aren't inline. if (!block.outputConnection || !block.outputConnection.targetConnection) { @@ -221,7 +222,7 @@ Blockly.Dart.scrub_ = function(block, code) { } } var nextBlock = block.nextConnection && block.nextConnection.targetBlock(); - var nextCode = Blockly.Dart.blockToCode(nextBlock); + var nextCode = opt_thisOnly ? "" : Blockly.Dart.blockToCode(nextBlock); return commentCode + code + nextCode; }; diff --git a/generators/javascript.js b/generators/javascript.js index aa05826c2..ba8b23440 100644 --- a/generators/javascript.js +++ b/generators/javascript.js @@ -229,10 +229,11 @@ Blockly.JavaScript.quote_ = function(string) { * Calls any statements following this block. * @param {!Blockly.Block} block The current block. * @param {string} code The JavaScript code created for this block. + * @param {boolean} opt_thisOnly True to generate code for only this block. * @return {string} JavaScript code with comments and subsequent blocks added. * @private */ -Blockly.JavaScript.scrub_ = function(block, code) { +Blockly.JavaScript.scrub_ = function(block, code, opt_thisOnly) { var commentCode = ''; // Only collect comments for blocks that aren't inline. if (!block.outputConnection || !block.outputConnection.targetConnection) { @@ -264,7 +265,7 @@ Blockly.JavaScript.scrub_ = function(block, code) { } } var nextBlock = block.nextConnection && block.nextConnection.targetBlock(); - var nextCode = Blockly.JavaScript.blockToCode(nextBlock); + var nextCode = opt_thisOnly ? "" : Blockly.JavaScript.blockToCode(nextBlock); return commentCode + code + nextCode; }; diff --git a/generators/lua.js b/generators/lua.js index b7f8d5c90..81cce0d9f 100644 --- a/generators/lua.js +++ b/generators/lua.js @@ -162,10 +162,11 @@ Blockly.Lua.quote_ = function(string) { * Calls any statements following this block. * @param {!Blockly.Block} block The current block. * @param {string} code The Lua code created for this block. + * @param {boolean} opt_thisOnly True to generate code for only this block. * @return {string} Lua code with comments and subsequent blocks added. * @private */ -Blockly.Lua.scrub_ = function(block, code) { +Blockly.Lua.scrub_ = function(block, code, opt_thisOnly) { var commentCode = ''; // Only collect comments for blocks that aren't inline. if (!block.outputConnection || !block.outputConnection.targetConnection) { @@ -190,6 +191,6 @@ Blockly.Lua.scrub_ = function(block, code) { } } var nextBlock = block.nextConnection && block.nextConnection.targetBlock(); - var nextCode = Blockly.Lua.blockToCode(nextBlock); + var nextCode = opt_thisOnly ? "" : Blockly.Lua.blockToCode(nextBlock); return commentCode + code + nextCode; }; diff --git a/generators/php.js b/generators/php.js index cd53662dc..9cf4870af 100644 --- a/generators/php.js +++ b/generators/php.js @@ -218,10 +218,11 @@ Blockly.PHP.quote_ = function(string) { * Calls any statements following this block. * @param {!Blockly.Block} block The current block. * @param {string} code The PHP code created for this block. + * @param {boolean} opt_thisOnly True to generate code for only this block. * @return {string} PHP code with comments and subsequent blocks added. * @private */ -Blockly.PHP.scrub_ = function(block, code) { +Blockly.PHP.scrub_ = function(block, code, opt_thisOnly) { var commentCode = ''; // Only collect comments for blocks that aren't inline. if (!block.outputConnection || !block.outputConnection.targetConnection) { @@ -246,7 +247,7 @@ Blockly.PHP.scrub_ = function(block, code) { } } var nextBlock = block.nextConnection && block.nextConnection.targetBlock(); - var nextCode = Blockly.PHP.blockToCode(nextBlock); + var nextCode = opt_thisOnly ? "" : Blockly.PHP.blockToCode(nextBlock); return commentCode + code + nextCode; }; diff --git a/generators/python.js b/generators/python.js index 1c25f7ba7..65c7a2bae 100644 --- a/generators/python.js +++ b/generators/python.js @@ -244,10 +244,11 @@ Blockly.Python.quote_ = function(string) { * Calls any statements following this block. * @param {!Blockly.Block} block The current block. * @param {string} code The Python code created for this block. + * @param {boolean} opt_thisOnly True to generate code for only this block. * @return {string} Python code with comments and subsequent blocks added. * @private */ -Blockly.Python.scrub_ = function(block, code) { +Blockly.Python.scrub_ = function(block, code, opt_thisOnly) { var commentCode = ''; // Only collect comments for blocks that aren't inline. if (!block.outputConnection || !block.outputConnection.targetConnection) { @@ -277,7 +278,7 @@ Blockly.Python.scrub_ = function(block, code) { } } var nextBlock = block.nextConnection && block.nextConnection.targetBlock(); - var nextCode = Blockly.Python.blockToCode(nextBlock); + var nextCode = opt_thisOnly ? "" : Blockly.Python.blockToCode(nextBlock); return commentCode + code + nextCode; };