Skip to content

Commit 428f6df

Browse files
committed
beginning of generating code
1 parent 06ebe8e commit 428f6df

File tree

1 file changed

+39
-3
lines changed

1 file changed

+39
-3
lines changed

src/blocks/mrc_steps.ts

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
* @author [email protected] (Alan Smith)
2121
*/
2222
import * as Blockly from 'blockly';
23+
import {Order} from 'blockly/python';
24+
2325
import { MRC_STYLE_STEPS } from '../themes/styles';
2426
import { ExtendedPythonGenerator } from '../editor/extended_python_generator';
2527
import { createStepFieldFlydown } from '../fields/field_flydown';
@@ -75,6 +77,9 @@ const STEPS = {
7577
*/
7678
mrcOnMutatorOpen: function(this: StepsBlock): void {
7779
stepContainer.onMutatorOpen(this);
80+
},
81+
mrcOnChange: function(this: StepsBlock): void {
82+
7883
},
7984
updateShape_: function (this: StepsBlock): void {
8085
// some way of knowing what was there before and what is there now
@@ -100,8 +105,39 @@ export const setup = function () {
100105
};
101106

102107
export const pythonFromBlock = function (
103-
_block: StepsBlock,
104-
_generator: ExtendedPythonGenerator,
108+
block: StepsBlock,
109+
generator: ExtendedPythonGenerator,
105110
) {
106-
return 'def steps(self):\n pass'
111+
112+
let code = 'def initialize_steps(self):\n';
113+
code += generator.INDENT + 'self.step_from_name = {}\n';
114+
code += generator.INDENT + 'self.name_from_step = {}\n';
115+
block.mrcStepNames.forEach((stepName, index) => {
116+
code += generator.INDENT + `self.step_from_name['${stepName}'] = ${index}\n`;
117+
code += generator.INDENT + `self.name_from_step[${index}] = '${stepName}'\n`;
118+
});
119+
120+
code += generator.INDENT + 'self.current_step_index = 0\n';
121+
code += generator.INDENT + 'self.initialized = True\n';
122+
123+
generator.addClassMethodDefinition('initialize_steps', code);
124+
125+
code = 'def steps(self):\n';
126+
code += generator.INDENT + 'if not self.initialized:\n';
127+
code += generator.INDENT.repeat(2) + 'self.initialize_steps()\n\n';
128+
code += generator.INDENT + 'match self.current_step_index:\n';
129+
block.mrcStepNames.forEach((stepName, index) => {
130+
code += generator.INDENT.repeat(2) + `case ${index}: # ${stepName}\n`;
131+
let stepCode = generator.statementToCode(block, 'STEP_' + index);
132+
if (stepCode !== '') {
133+
code += generator.prefixLines(stepCode, generator.INDENT.repeat(2));
134+
}
135+
let conditionCode = generator.valueToCode(block, 'CONDITION_' + index, Order.NONE) || 'False';
136+
code += generator.INDENT.repeat(3) + 'if ' + conditionCode + ':\n';
137+
code += generator.INDENT.repeat(4) + 'self.current_step_index += 1\n';
138+
});
139+
140+
generator.addClassMethodDefinition('steps', code);
141+
142+
return ''
107143
}

0 commit comments

Comments
 (0)