Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions src/lib/ruby-generator/microbit.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,10 @@ export default function (Generator) {

Generator.microbit_displaySymbol = function (block) {
let matrix = Generator.valueToCode(block, 'MATRIX', Generator.ORDER_NONE) || null;
matrix = Generator.prefixLines(matrix, Generator.INDENT);
return `microbit.display(\n${matrix}\n)\n`;
if (matrix.indexOf('\n') >= 0) {
matrix = `\n${Generator.prefixLines(matrix, Generator.INDENT)}\n`;
}
return `microbit.display(${matrix})\n`;
};

Generator.microbit_displayText = function (block) {
Expand Down
176 changes: 90 additions & 86 deletions src/lib/ruby-generator/microbit_more.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,163 +6,190 @@
export default function (Generator) {
Generator.microbitMore_whenButtonPressed = function (block) {
block.isStatement = true;
const btn = Generator.valueToCode(block, 'BTN', Generator.ORDER_NONE) || null;
return `${Generator.spriteName()}.when(:mbit_more_button_pressed, ${btn}) do\n`;
const btn = Generator.valueToCode(block, 'BTN', Generator.ORDER_NONE) || Generator.quote_('A');
return `microbit_more.when_button_pressed(${btn}) do\n`;
};

Generator.microbitMore_isButtonPressed = function (block) {
const btn = Generator.valueToCode(block, 'BTN', Generator.ORDER_NONE) || null;
return `mbit_more.button_pressed?(${btn})\n`;
const btn = Generator.valueToCode(block, 'BTN', Generator.ORDER_NONE) || Generator.quote_('A');
return [`microbit_more.button_pressed?(${btn})`, Generator.ORDER_FUNCTION_CALL];
};

Generator.microbitMore_whenGesture = function (block) {
block.isStatement = true;
const gesture = Generator.valueToCode(block, 'GESTURE', Generator.ORDER_NONE) || null;
return `${Generator.spriteName()}.when(:mbit_more_gesture, ${gesture}) do\n`;
const gesture = Generator.valueToCode(block, 'GESTURE', Generator.ORDER_NONE) || Generator.quote_('moved');
return `microbit_more.when(${gesture}) do\n`;
};

const makeMatrixArgs = function (matrix) {
matrix = matrix.replace(/0/g, '.');
matrix = matrix.match(/.{5}/g).map(s => Generator.quote_(s));
return matrix.join(',\n');
};
Generator.microbitMore_displaySymbol = function (block) {
let matrix = Generator.valueToCode(block, 'MATRIX', Generator.ORDER_NONE) || null;
matrix = Generator.prefixLines(matrix, Generator.INDENT);
return `mbit_more.display(\n${matrix}\n)\n`;
let matrix = Generator.valueToCode(block, 'MATRIX', Generator.ORDER_NONE);
if (!matrix) {
matrix = makeMatrixArgs('0101010101100010101000100');
}
if (matrix.indexOf('\n') >= 0) {
matrix = `\n${Generator.prefixLines(matrix, Generator.INDENT)}\n`;
}
return `microbit_more.display(${matrix})\n`;
};

Generator.microbitMore_displayText = function (block) {
const text = Generator.valueToCode(block, 'TEXT', Generator.ORDER_NONE) || null;
return `mbit_more.display_text(${text})\n`;
const text = Generator.valueToCode(block, 'TEXT', Generator.ORDER_NONE) || Generator.quote_('Hello!');
return `microbit_more.display_text(${text})\n`;
};

Generator.microbitMore_displayClear = function () {
return `mbit_more.clear_display\n`;
return `microbit_more.clear_display\n`;
};

Generator.microbitMore_whenTilted = function (block) {
block.isStatement = true;
const direction = Generator.valueToCode(block, 'DIRECTION', Generator.ORDER_NONE) || null;
return `${Generator.spriteName()}.when(:mbit_more_tilted, ${direction}) do\n`;
return `microbit_more.when_tilted(${direction}) do\n`;
};

Generator.microbitMore_isTilted = function (block) {
const direction = Generator.valueToCode(block, 'DIRECTION', Generator.ORDER_NONE) || null;
return [`mbit_more.tilted?(${direction})`, Generator.ORDER_ATOMIC];
return [`microbit_more.tilted?(${direction})`, Generator.ORDER_ATOMIC];
};

Generator.microbitMore_getTiltAngle = function (block) {
const direction = Generator.valueToCode(block, 'DIRECTION', Generator.ORDER_NONE) || null;
return [`mbit_more.tilt_angle(${direction})`, Generator.ORDER_ATOMIC];
return [`microbit_more.tilt_angle(${direction})`, Generator.ORDER_ATOMIC];
};

Generator.microbitMore_whenPinConnected = function (block) {
block.isStatement = true;
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || null;
return `${Generator.spriteName()}.when(:mbit_more_pin_connected, ${pin}) do\n`;
return `microbit_more.when_pin_connected(${pin}) do\n`;
};

Generator.microbitMore_isPinConnected = function (block) {
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || null;
return `mbit_more.pin_connected?(${pin})\n`;
return [`microbit_more.pin_connected?(${pin})`, Generator.ORDER_FUNCTION_CALL];
};

Generator.microbitMore_getLightLevel = function () {
return `mbit_more.light_level\n`;
return ['microbit_more.light_intensity', Generator.ORDER_FUNCTION_CALL];
};

Generator.microbitMore_getTemperature = function () {
return `mbit_more.temperature\n`;
return ['microbit_more.temperature', Generator.ORDER_FUNCTION_CALL];
};

Generator.microbitMore_getCompassHeading = function () {
return `mbit_more.compass_heading\n`;
return ['microbit_more.angle_with_the_north', Generator.ORDER_FUNCTION_CALL];
};

Generator.microbitMore_getPitch = function () {
return `mbit_more.pitch\n`;
return ['microbit_more.pitch', Generator.ORDER_FUNCTION_CALL];
};

Generator.microbitMore_getRoll = function () {
return `mbit_more.roll\n`;
return ['microbit_more.roll', Generator.ORDER_FUNCTION_CALL];
};

Generator.microbitMore_getMagneticForce = function (block) {
const axis = Generator.valueToCode(block, 'AXIS', Generator.ORDER_NONE) || null;
return `mbit_more.get_magnetic_force(${axis})\n`;
Generator.microbitMore_getMagneticForce = function () {
return ['microbit_more.magnetic_force', Generator.ORDER_FUNCTION_CALL];
};

Generator.microbitMore_getAcceleration = function (block) {
const axis = Generator.valueToCode(block, 'AXIS', Generator.ORDER_NONE) || null;
return `mbit_more.get_acceleration(${axis})\n`;
return [`microbit_more.acceleration(${axis})`, Generator.ORDER_FUNCTION_CALL];
};

Generator.microbitMore_getAnalogValue = function (block) {
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || null;
return `mbit_more.get_analog_value(${pin})\n`;
return [`microbit_more.analog_value_of_pin(${pin})`, Generator.ORDER_FUNCTION_CALL];
};

Generator.microbitMore_getDigitalValue = function (block) {
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || null;
return `mbit_more.get_digital_value(${pin})\n`;
return [`microbit_more.digital_value_of_pin(${pin})`, Generator.ORDER_FUNCTION_CALL];
};

const PinModeLabel = {
pullNone: 'none',
pullUp: 'up',
pullDown: 'down'
};
Generator.microbitMore_setPinMode = function (block) {
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || null;
const mode = Generator.quote_(Generator.getFieldValue(block, 'MODE')) || null;
return `mbit_more.set_pin_mode(${pin}, ${mode})\n`;
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || 0;
const mode = Generator.getFieldValue(block, 'MODE') || 'pullUp';
const modeLabel = Generator.quote_(PinModeLabel[mode]);
return `microbit_more.set_pin_to_input_pull(${pin}, ${modeLabel})\n`;
};

Generator.microbitMore_setOutput = function (block) {
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || null;
const level = Generator.valueToCode(block, 'LEVEL', Generator.ORDER_NONE) || null;
return `mbit_more.set_output(${pin}, ${level})\n`;
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || 0;
const level = Generator.valueToCode(block, 'LEVEL', Generator.ORDER_NONE) || 0;
return `microbit_more.set_digital(${pin}, ${level})\n`;
};

Generator.microbitMore_setPWM = function (block) {
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || null;
const level = Generator.valueToCode(block, 'LEVEL', Generator.ORDER_NONE) || null;
return `mbit_more.set_pwm(${pin}, ${level})\n`;
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || 0;
const level = Generator.valueToCode(block, 'LEVEL', Generator.ORDER_NONE) || 0;
return `microbit_more.set_pwm(${pin}, ${level})\n`;
};

Generator.microbitMore_setServo = function (block) {
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || null;
const angle = Generator.valueToCode(block, 'ANGLE', Generator.ORDER_NONE) || null;
const range = Generator.valueToCode(block, 'RANGE', Generator.ORDER_NONE) || 2000;
const center = Generator.valueToCode(block, 'CENTER', Generator.ORDER_NONE) || 1500;
return `mbit_more.set_servo(${pin}, ${angle}, ${range}, ${center})\n`;
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || 0;
const angle = Generator.valueToCode(block, 'ANGLE', Generator.ORDER_NONE) || 0;
return `microbit_more.set_servo(${pin}, ${angle})\n`;
};

const EventTypeLabel = {
0: 'none',
1: 'edge',
2: 'pulse'
};
Generator.microbitMore_setPinEventType = function (block) {
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || null;
const eventType = Generator.getFieldValue(block, 'EVENT_TYPE') || null;
return `mbit_more.set_pin_event_type(${pin}, ${eventType})\n`;
const eventType = Generator.getFieldValue(block, 'EVENT_TYPE') || 0;
const eventTypeLabel = Generator.quote_(EventTypeLabel[eventType]);
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || 0;
return `microbit_more.catch_event_on(${eventTypeLabel}, ${pin})\n`;
};

const EventLabel = {
5: 'low pulse',
4: 'high pulse',
3: 'fall',
2: 'rise'
};
Generator.microbitMore_whenPinEvent = function (block) {
block.isStatement = true;
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || null;
const event = Generator.getFieldValue(block, 'EVENT') || null;
return `${Generator.spriteName()}.when(:mbit_more_pin_event, ${pin}, ${event}) do\n`;
const event = Generator.getFieldValue(block, 'EVENT') || 5;
const eventLabel = Generator.quote_(EventLabel[event]);
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || 0;
return `microbit_more.when_catch_at_pin(${eventLabel}, ${pin}) do\n`;
};

Generator.microbitMore_getPinEventTimestamp = function (block) {
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || null;
const event = Generator.getFieldValue(block, 'EVENT') || null;
return `mbit_more.get_pin_event_timestamp(${pin}, ${event})\n`;
const event = Generator.getFieldValue(block, 'EVENT') || 5;
const eventLabel = Generator.quote_(EventLabel[event]);
const pin = Generator.valueToCode(block, 'PIN', Generator.ORDER_NONE) || 0;
return `microbit_more.timestamp_of(${eventLabel}, ${pin})\n`;
};

Generator.microbitMore_getSharedData = function (block) {
const index = Generator.valueToCode(block, 'INDEX', Generator.ORDER_NONE) || null;
return `mbit_more.get_shared_data(${index})\n`;
const index = Generator.valueToCode(block, 'INDEX', Generator.ORDER_NONE) || 0;
return [`microbit_more.shared_data[${index}]`, Generator.ORDER_FUNCTION_CALL];
};

Generator.microbitMore_setSharedData = function (block) {
const index = Generator.valueToCode(block, 'INDEX', Generator.ORDER_NONE) || null;
const value = Generator.valueToCode(block, 'VALUE', Generator.ORDER_NONE) || null;
return `mbit_more.set_shared_data(${index}, ${value})\n`;
const index = Generator.valueToCode(block, 'INDEX', Generator.ORDER_NONE) || 0;
const value = Generator.valueToCode(block, 'VALUE', Generator.ORDER_NONE) || 0;
return `microbit_more.shared_data[${index}] = ${value}\n`;
};

Generator.microbitMore_whenConnectionChanged = function (block) {
block.isStatement = true;
const state = Generator.getFieldValue(block, 'STATE') || null;
return `${Generator.spriteName()}.when(:mbit_more_connection_changed, ${state}) do\n`;
const state = Generator.quote_(Generator.getFieldValue(block, 'STATE') || 'connected');
return `microbit_more.when_microbit(${state}) do\n`;
};

Generator.microbitMore_menu_buttons = function (block) {
Expand Down Expand Up @@ -196,7 +223,7 @@ export default function (Generator) {
};

Generator.microbitMore_menu_axis = function (block) {
const axis = Generator.quote_(Generator.getFieldValue(block, 'axis') || 'absolute');
const axis = Generator.quote_(Generator.getFieldValue(block, 'axis') || 'x');
return [axis, Generator.ORDER_ATOMIC];
};

Expand All @@ -205,42 +232,19 @@ export default function (Generator) {
return [analogIn, Generator.ORDER_ATOMIC];
};

Generator.microbitMore_menu_pinMode = function (block) {
const pinMode = Generator.quote_(Generator.getFieldValue(block, 'pinMode') || 'pullUp');
return [pinMode, Generator.ORDER_ATOMIC];
};

Generator.microbitMore_menu_digitalValue = function (block) {
const digitalValue = Generator.getFieldValue(block, 'digitalValue') || 0;
return [digitalValue, Generator.ORDER_ATOMIC];
};

Generator.microbitMore_menu_pinEventTypeMenu = function (block) {
const pinEventTypeMenu = Generator.getFieldValue(block, 'pinEventTypeMenu') || 0;
return [pinEventTypeMenu, Generator.ORDER_ATOMIC];
};

Generator.microbitMore_menu_pinEventTimestampMenu = function (block) {
const pinEventTimestampMenu = Generator.getFieldValue(block, 'pinEventTimestampMenu') || 5;
return [pinEventTimestampMenu, Generator.ORDER_ATOMIC];
};

Generator.microbitMore_menu_sharedDataIndex = function (block) {
const sharedDataIndex = Generator.quote_(Generator.getFieldValue(block, 'sharedDataIndex') || 'absolute');
return [sharedDataIndex, Generator.ORDER_ATOMIC];
};

Generator.microbitMore_menu_connectionStateMenu = function (block) {
const connectionStateMenu =
Generator.quote_(Generator.getFieldValue(block, 'connectionStateMenu') || 'connected');
return [connectionStateMenu, Generator.ORDER_ATOMIC];
const index = Generator.getFieldValue(block, 'sharedDataIndex') || 0;
return [index, Generator.ORDER_ATOMIC];
};

Generator.matrix = function (block) {
let matrix = Generator.getFieldValue(block, 'MATRIX') || '0000000000000000000000000';
matrix = matrix.replace(/0/g, '.');
matrix = matrix.match(/.{5}/g).map(s => Generator.quote_(s));
return [matrix.join(',\n'), Generator.ORDER_ATOMIC];
const matrix = Generator.getFieldValue(block, 'MATRIX') || '0000000000000000000000000';
return [makeMatrixArgs(matrix), Generator.ORDER_ATOMIC];
};

return Generator;
Expand Down
6 changes: 3 additions & 3 deletions src/lib/ruby-generator/text2speech.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
export default function (Generator) {
Generator.text2speech_speakAndWait = function (block) {
const words = Generator.valueToCode(block, 'WORDS', Generator.ORDER_NONE) || null;
return `text2speech_speak(${words})\n`;
return `text2speech.speak(${words})\n`;
};

Generator.text2speech_setVoice = function (block) {
const voice = Generator.valueToCode(block, 'VOICE', Generator.ORDER_NONE);
return `self.text2speech_voice = ${voice}\n`;
return `text2speech.voice = ${voice}\n`;
};

Generator.text2speech_menu_voices = function (block) {
Expand All @@ -21,7 +21,7 @@ export default function (Generator) {

Generator.text2speech_setLanguage = function (block) {
const language = Generator.valueToCode(block, 'LANGUAGE', Generator.ORDER_NONE);
return `self.text2speech_language = ${language}\n`;
return `text2speech.language = ${language}\n`;
};

Generator.text2speech_menu_languages = function (block) {
Expand Down
Loading