sb-edit-custom 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +9 -0
- package/README.md +0 -0
- package/lib/Block.d.ts +388 -0
- package/lib/Block.js +631 -0
- package/lib/BlockInput.d.ts +213 -0
- package/lib/BlockInput.js +3 -0
- package/lib/Costume.d.ts +25 -0
- package/lib/Costume.js +23 -0
- package/lib/Data.d.ts +50 -0
- package/lib/Data.js +44 -0
- package/lib/OpCode.d.ts +212 -0
- package/lib/OpCode.js +219 -0
- package/lib/Project.d.ts +29 -0
- package/lib/Project.js +66 -0
- package/lib/Script.d.ts +16 -0
- package/lib/Script.js +62 -0
- package/lib/Sound.d.ts +21 -0
- package/lib/Sound.js +21 -0
- package/lib/Target.d.ts +47 -0
- package/lib/Target.js +120 -0
- package/lib/cli/index.d.ts +2 -0
- package/lib/cli/index.js +511 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.js +48 -0
- package/lib/io/leopard/toLeopard.d.ts +22 -0
- package/lib/io/leopard/toLeopard.js +2199 -0
- package/lib/io/sb2/fromSb2.d.ts +0 -0
- package/lib/io/sb2/fromSb2.js +2 -0
- package/lib/io/sb2/index.d.ts +48 -0
- package/lib/io/sb2/index.js +3 -0
- package/lib/io/sb2/toSb2.d.ts +0 -0
- package/lib/io/sb2/toSb2.js +2 -0
- package/lib/io/sb3/fromSb3.d.ts +16 -0
- package/lib/io/sb3/fromSb3.js +628 -0
- package/lib/io/sb3/interfaces.d.ts +624 -0
- package/lib/io/sb3/interfaces.js +336 -0
- package/lib/io/sb3/toSb3.d.ts +8 -0
- package/lib/io/sb3/toSb3.js +851 -0
- package/lib/io/scratchblocks/toScratchblocks.d.ts +7 -0
- package/lib/io/scratchblocks/toScratchblocks.js +606 -0
- package/lib/util/id.d.ts +1 -0
- package/lib/util/id.js +12 -0
- package/package.json +68 -0
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
14
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
15
|
+
if (ar || !(i in from)) {
|
|
16
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
17
|
+
ar[i] = from[i];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
21
|
+
};
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
var OpCode_1 = require("../../OpCode");
|
|
24
|
+
function toScratchblocks(project, inOptions) {
|
|
25
|
+
if (inOptions === void 0) { inOptions = {}; }
|
|
26
|
+
var defaultOptions = {
|
|
27
|
+
indent: "\t"
|
|
28
|
+
};
|
|
29
|
+
var options = __assign(__assign({}, defaultOptions), inOptions);
|
|
30
|
+
function indent(str) {
|
|
31
|
+
return str
|
|
32
|
+
.split("\n")
|
|
33
|
+
.map(function (l) { return options.indent + l; })
|
|
34
|
+
.join("\n");
|
|
35
|
+
}
|
|
36
|
+
function input(inp, target, flag) {
|
|
37
|
+
if (flag === void 0) { flag = false; }
|
|
38
|
+
if (!inp) {
|
|
39
|
+
return "";
|
|
40
|
+
}
|
|
41
|
+
var escape = function (value) { return (value || "").toString().replace(/[()[\]]|v$/g, function (m) { return "\\" + m; }); };
|
|
42
|
+
switch (inp.type) {
|
|
43
|
+
case "number":
|
|
44
|
+
if (typeof inp.value === "number" || inp.value.trim().length === 0) {
|
|
45
|
+
return "(".concat(inp.value, ")");
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
return "[".concat(escape(inp.value), "]");
|
|
49
|
+
}
|
|
50
|
+
case "angle":
|
|
51
|
+
return "(".concat(inp.value || "", ")");
|
|
52
|
+
case "string":
|
|
53
|
+
return "[".concat(escape(inp.value), "]");
|
|
54
|
+
case "graphicEffect":
|
|
55
|
+
case "soundEffect":
|
|
56
|
+
case "currentMenu":
|
|
57
|
+
case "greaterThanMenu": {
|
|
58
|
+
var value = inp.value === "PAN" || inp.value === "DAYOFWEEK"
|
|
59
|
+
? {
|
|
60
|
+
PAN: "pan left/right",
|
|
61
|
+
DAYOFWEEK: "day of week"
|
|
62
|
+
}[inp.value]
|
|
63
|
+
: (inp.value || "").toLowerCase();
|
|
64
|
+
return "[".concat(escape(value), " v]");
|
|
65
|
+
}
|
|
66
|
+
case "variable":
|
|
67
|
+
case "list":
|
|
68
|
+
return "[".concat(escape(inp.value.name), " v]");
|
|
69
|
+
case "rotationStyle":
|
|
70
|
+
case "scrollAlignment":
|
|
71
|
+
case "stopMenu":
|
|
72
|
+
case "dragModeMenu":
|
|
73
|
+
case "propertyOfMenu":
|
|
74
|
+
case "mathopMenu":
|
|
75
|
+
case "frontBackMenu":
|
|
76
|
+
case "forwardBackwardMenu":
|
|
77
|
+
case "costumeNumberName":
|
|
78
|
+
return "[".concat(escape(inp.value), " v]");
|
|
79
|
+
case "goToTarget":
|
|
80
|
+
case "pointTowardsTarget":
|
|
81
|
+
case "cloneTarget":
|
|
82
|
+
case "distanceToMenu":
|
|
83
|
+
case "touchingTarget":
|
|
84
|
+
case "target": {
|
|
85
|
+
var value = {
|
|
86
|
+
_mouse_: "mouse-pointer",
|
|
87
|
+
_myself_: "myself",
|
|
88
|
+
_random_: "random position",
|
|
89
|
+
_stage_: "Stage"
|
|
90
|
+
}[inp.value] || inp.value;
|
|
91
|
+
return "(".concat(escape(value), " v)");
|
|
92
|
+
}
|
|
93
|
+
case "costume":
|
|
94
|
+
case "sound":
|
|
95
|
+
case "penColorParam":
|
|
96
|
+
case "musicDrum":
|
|
97
|
+
case "musicInstrument":
|
|
98
|
+
case "videoSensingAttribute":
|
|
99
|
+
case "videoSensingSubject":
|
|
100
|
+
case "videoSensingVideoState":
|
|
101
|
+
return "(".concat(escape(inp.value), " v)");
|
|
102
|
+
case "broadcast":
|
|
103
|
+
case "backdrop":
|
|
104
|
+
case "key":
|
|
105
|
+
if (flag) {
|
|
106
|
+
return "[".concat(escape(inp.value), " v]");
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
return "(".concat(escape(inp.value), " v)");
|
|
110
|
+
}
|
|
111
|
+
case "color": {
|
|
112
|
+
var hex = function (k) {
|
|
113
|
+
return (inp.value || { r: 0, g: 0, b: 0 })[k].toString(16).padStart(2, "0");
|
|
114
|
+
};
|
|
115
|
+
return "[#".concat(hex("r") + hex("g") + hex("b"), "]");
|
|
116
|
+
}
|
|
117
|
+
case "block":
|
|
118
|
+
if (flag) {
|
|
119
|
+
if (inp.value) {
|
|
120
|
+
return "\n" + indent(blockToScratchblocks(inp.value, target)) + "\n";
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
return "\n";
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
if (inp.value) {
|
|
128
|
+
var ret = blockToScratchblocks(inp.value, target);
|
|
129
|
+
if (ret[0] === "(" || ret[0] === "<") {
|
|
130
|
+
return ret;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
return "(" + ret + ")";
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
return "()";
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
case "blocks":
|
|
141
|
+
if (inp.value) {
|
|
142
|
+
return "\n" + indent(blocksToScratchblocks(inp.value, target)) + "\n";
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
return "\n";
|
|
146
|
+
}
|
|
147
|
+
default:
|
|
148
|
+
return "(unknown input type [".concat(inp.type, "])");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function blockToScratchblocks(block, target) {
|
|
152
|
+
if (!target) {
|
|
153
|
+
throw new Error("expected target");
|
|
154
|
+
}
|
|
155
|
+
var i = function (key, flag) {
|
|
156
|
+
// TODO: type this function properly and remove this type assertion
|
|
157
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access
|
|
158
|
+
return input(block.inputs[key], target, flag);
|
|
159
|
+
};
|
|
160
|
+
var operator = function (op) { return "(".concat(i("NUM1"), " ").concat(op, " ").concat(i("NUM2"), ")"); };
|
|
161
|
+
var boolop = function (op, flag) {
|
|
162
|
+
if (flag === void 0) { flag = false; }
|
|
163
|
+
if (flag) {
|
|
164
|
+
return "<".concat(i("OPERAND1") || "<>", " ").concat(op, " ").concat(i("OPERAND2") || "<>", ">");
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
return "<".concat(i("OPERAND1"), " ").concat(op, " ").concat(i("OPERAND2"), ">");
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
switch (block.opcode) {
|
|
171
|
+
// motion ------------------------------------------------------ //
|
|
172
|
+
case OpCode_1.OpCode.motion_movesteps:
|
|
173
|
+
return "move ".concat(i("STEPS"), " steps");
|
|
174
|
+
case OpCode_1.OpCode.motion_turnright:
|
|
175
|
+
return "turn cw ".concat(i("DEGREES"), " degrees");
|
|
176
|
+
case OpCode_1.OpCode.motion_turnleft:
|
|
177
|
+
return "turn ccw ".concat(i("DEGREES"), " degrees");
|
|
178
|
+
case OpCode_1.OpCode.motion_goto:
|
|
179
|
+
return "go to ".concat(i("TO"));
|
|
180
|
+
case OpCode_1.OpCode.motion_gotoxy:
|
|
181
|
+
return "go to x: ".concat(i("X"), " y: ").concat(i("Y"));
|
|
182
|
+
case OpCode_1.OpCode.motion_glideto:
|
|
183
|
+
return "glide ".concat(i("SECS"), " secs to ").concat(i("TO"));
|
|
184
|
+
case OpCode_1.OpCode.motion_glidesecstoxy:
|
|
185
|
+
return "glide ".concat(i("SECS"), " secs to x: ").concat(i("X"), " y: ").concat(i("Y"));
|
|
186
|
+
case OpCode_1.OpCode.motion_pointindirection:
|
|
187
|
+
return "point in direction ".concat(i("DIRECTION"));
|
|
188
|
+
case OpCode_1.OpCode.motion_pointtowards:
|
|
189
|
+
return "point towards ".concat(i("TOWARDS"));
|
|
190
|
+
case OpCode_1.OpCode.motion_changexby:
|
|
191
|
+
return "change x by ".concat(i("DX"));
|
|
192
|
+
case OpCode_1.OpCode.motion_setx:
|
|
193
|
+
return "set x to ".concat(i("X"));
|
|
194
|
+
case OpCode_1.OpCode.motion_changeyby:
|
|
195
|
+
return "change y by ".concat(i("DY"));
|
|
196
|
+
case OpCode_1.OpCode.motion_sety:
|
|
197
|
+
return "set y to ".concat(i("Y"));
|
|
198
|
+
case OpCode_1.OpCode.motion_ifonedgebounce:
|
|
199
|
+
return "if on edge, bounce";
|
|
200
|
+
case OpCode_1.OpCode.motion_setrotationstyle:
|
|
201
|
+
return "set rotation style ".concat(i("STYLE"));
|
|
202
|
+
case OpCode_1.OpCode.motion_xposition:
|
|
203
|
+
return "(x position)";
|
|
204
|
+
case OpCode_1.OpCode.motion_yposition:
|
|
205
|
+
return "(y position)";
|
|
206
|
+
case OpCode_1.OpCode.motion_direction:
|
|
207
|
+
return "(direction)";
|
|
208
|
+
case OpCode_1.OpCode.motion_scroll_right:
|
|
209
|
+
return "scroll right ".concat(i("DISTANCE"), " :: motion");
|
|
210
|
+
case OpCode_1.OpCode.motion_scroll_up:
|
|
211
|
+
return "scroll up ".concat(i("DISTANCE"), " :: motion");
|
|
212
|
+
case OpCode_1.OpCode.motion_align_scene:
|
|
213
|
+
return "align scene ".concat(i("ALIGNMENT"), " :: motion");
|
|
214
|
+
case OpCode_1.OpCode.motion_xscroll:
|
|
215
|
+
return "(x scroll)";
|
|
216
|
+
case OpCode_1.OpCode.motion_yscroll:
|
|
217
|
+
return "(y scroll)";
|
|
218
|
+
// looks ------------------------------------------------------- //
|
|
219
|
+
case OpCode_1.OpCode.looks_sayforsecs:
|
|
220
|
+
return "say ".concat(i("MESSAGE"), " for ").concat(i("SECS"), " seconds");
|
|
221
|
+
case OpCode_1.OpCode.looks_say:
|
|
222
|
+
return "say ".concat(i("MESSAGE"));
|
|
223
|
+
case OpCode_1.OpCode.looks_thinkforsecs:
|
|
224
|
+
return "think ".concat(i("MESSAGE"), " for ").concat(i("SECS"), " seconds");
|
|
225
|
+
case OpCode_1.OpCode.looks_think:
|
|
226
|
+
return "think ".concat(i("MESSAGE"));
|
|
227
|
+
case OpCode_1.OpCode.looks_switchcostumeto:
|
|
228
|
+
return "switch costume to ".concat(i("COSTUME"));
|
|
229
|
+
case OpCode_1.OpCode.looks_nextcostume:
|
|
230
|
+
return "next costume";
|
|
231
|
+
case OpCode_1.OpCode.looks_switchbackdropto:
|
|
232
|
+
return "switch backdrop to ".concat(i("BACKDROP"));
|
|
233
|
+
case OpCode_1.OpCode.looks_nextbackdrop:
|
|
234
|
+
return "next backdrop";
|
|
235
|
+
case OpCode_1.OpCode.looks_changesizeby:
|
|
236
|
+
return "change size by ".concat(i("CHANGE"));
|
|
237
|
+
case OpCode_1.OpCode.looks_setsizeto:
|
|
238
|
+
return "set size to ".concat(i("SIZE"), "%");
|
|
239
|
+
case OpCode_1.OpCode.looks_changeeffectby:
|
|
240
|
+
return "change ".concat(i("EFFECT"), " effect by ").concat(i("CHANGE"), " :: looks");
|
|
241
|
+
case OpCode_1.OpCode.looks_seteffectto:
|
|
242
|
+
return "set ".concat(i("EFFECT"), " effect to ").concat(i("VALUE"), " :: looks");
|
|
243
|
+
case OpCode_1.OpCode.looks_cleargraphiceffects:
|
|
244
|
+
return "clear graphic effects";
|
|
245
|
+
case OpCode_1.OpCode.looks_show:
|
|
246
|
+
return "show";
|
|
247
|
+
case OpCode_1.OpCode.looks_hide:
|
|
248
|
+
return "hide";
|
|
249
|
+
case OpCode_1.OpCode.looks_gotofrontback:
|
|
250
|
+
return "go to ".concat(i("FRONT_BACK"), " layer");
|
|
251
|
+
case OpCode_1.OpCode.looks_goforwardbackwardlayers:
|
|
252
|
+
return "go ".concat(i("FORWARD_BACKWARD"), " ").concat(i("NUM"), " layers");
|
|
253
|
+
case OpCode_1.OpCode.looks_costumenumbername:
|
|
254
|
+
return "(costume ".concat(i("NUMBER_NAME"), ")");
|
|
255
|
+
case OpCode_1.OpCode.looks_backdropnumbername:
|
|
256
|
+
return "(backdrop ".concat(i("NUMBER_NAME"), ")");
|
|
257
|
+
case OpCode_1.OpCode.looks_size:
|
|
258
|
+
return "(size)";
|
|
259
|
+
case OpCode_1.OpCode.looks_hideallsprites:
|
|
260
|
+
return "hide all sprites :: looks";
|
|
261
|
+
case OpCode_1.OpCode.looks_switchbackdroptoandwait:
|
|
262
|
+
return "switch backdrop to ".concat(i("BACKDROP"), " and wait");
|
|
263
|
+
case OpCode_1.OpCode.looks_changestretchby:
|
|
264
|
+
return "change stretch by ".concat(i("CHANGE"), " :: looks");
|
|
265
|
+
case OpCode_1.OpCode.looks_setstretchto:
|
|
266
|
+
return "set stretch to ".concat(i("STRETCH"), " % :: looks");
|
|
267
|
+
// sound ------------------------------------------------------- //
|
|
268
|
+
case OpCode_1.OpCode.sound_playuntildone:
|
|
269
|
+
return "play sound ".concat(i("SOUND_MENU"), " until done");
|
|
270
|
+
case OpCode_1.OpCode.sound_play:
|
|
271
|
+
return "start sound ".concat(i("SOUND_MENU"));
|
|
272
|
+
case OpCode_1.OpCode.sound_stopallsounds:
|
|
273
|
+
return "stop all sounds";
|
|
274
|
+
case OpCode_1.OpCode.sound_changeeffectby:
|
|
275
|
+
return "change ".concat(i("EFFECT"), " effect by ").concat(i("VALUE"), " :: sound");
|
|
276
|
+
case OpCode_1.OpCode.sound_seteffectto:
|
|
277
|
+
return "set ".concat(i("EFFECT"), " effect to ").concat(i("VALUE"), " :: sound");
|
|
278
|
+
case OpCode_1.OpCode.sound_cleareffects:
|
|
279
|
+
return "clear sound effects";
|
|
280
|
+
case OpCode_1.OpCode.sound_changevolumeby:
|
|
281
|
+
return "change volume by ".concat(i("VOLUME"));
|
|
282
|
+
case OpCode_1.OpCode.sound_setvolumeto:
|
|
283
|
+
return "set volume to ".concat(i("VOLUME"), " %");
|
|
284
|
+
case OpCode_1.OpCode.sound_volume:
|
|
285
|
+
return "(volume)";
|
|
286
|
+
// events ------------------------------------------------------ //
|
|
287
|
+
case OpCode_1.OpCode.event_whenflagclicked:
|
|
288
|
+
return "when green flag clicked";
|
|
289
|
+
case OpCode_1.OpCode.event_whenkeypressed:
|
|
290
|
+
return "when ".concat(i("KEY_OPTION", true), " key pressed");
|
|
291
|
+
case OpCode_1.OpCode.event_whenthisspriteclicked:
|
|
292
|
+
return "when this sprite clicked";
|
|
293
|
+
case OpCode_1.OpCode.event_whenstageclicked:
|
|
294
|
+
return "when stage clicked :: control hat";
|
|
295
|
+
case OpCode_1.OpCode.event_whenbackdropswitchesto:
|
|
296
|
+
return "when backdrop switches to ".concat(i("BACKDROP", true));
|
|
297
|
+
case OpCode_1.OpCode.event_whengreaterthan:
|
|
298
|
+
return "when ".concat(i("WHENGREATERTHANMENU"), " > ").concat(i("VALUE"));
|
|
299
|
+
case OpCode_1.OpCode.event_whenbroadcastreceived:
|
|
300
|
+
return "when I receive ".concat(i("BROADCAST_OPTION", true));
|
|
301
|
+
case OpCode_1.OpCode.event_broadcast:
|
|
302
|
+
return "broadcast ".concat(i("BROADCAST_INPUT"));
|
|
303
|
+
case OpCode_1.OpCode.event_broadcastandwait:
|
|
304
|
+
return "broadcast ".concat(i("BROADCAST_INPUT"), " and wait");
|
|
305
|
+
// control ----------------------------------------------------- //
|
|
306
|
+
case OpCode_1.OpCode.control_wait:
|
|
307
|
+
return "wait ".concat(i("DURATION"), " seconds");
|
|
308
|
+
case OpCode_1.OpCode.control_repeat:
|
|
309
|
+
return "repeat ".concat(i("TIMES")) + (i("SUBSTACK", true) || "\n") + "end";
|
|
310
|
+
case OpCode_1.OpCode.control_forever:
|
|
311
|
+
return "forever" + (i("SUBSTACK", true) || "\n") + "end";
|
|
312
|
+
case OpCode_1.OpCode.control_if:
|
|
313
|
+
return "if ".concat(i("CONDITION") || "<>", " then") + (i("SUBSTACK", true) || "\n") + "end";
|
|
314
|
+
case OpCode_1.OpCode.control_if_else:
|
|
315
|
+
return ("if ".concat(i("CONDITION") || "<>", " then") +
|
|
316
|
+
(i("SUBSTACK", true) || "\n") +
|
|
317
|
+
"else" +
|
|
318
|
+
(i("SUBSTACK2", true) || "\n") +
|
|
319
|
+
"end");
|
|
320
|
+
case OpCode_1.OpCode.control_wait_until:
|
|
321
|
+
return "wait until ".concat(i("CONDITION") || "<>");
|
|
322
|
+
case OpCode_1.OpCode.control_repeat_until:
|
|
323
|
+
return "repeat until ".concat(i("CONDITION") || "<>") + (i("SUBSTACK", true) || "\n") + "end";
|
|
324
|
+
case OpCode_1.OpCode.control_while:
|
|
325
|
+
return "while ".concat(i("CONDITION") || "<>", " {") + (i("SUBSTACK", true) || "\n") + "} :: control";
|
|
326
|
+
case OpCode_1.OpCode.control_for_each:
|
|
327
|
+
return "for each ".concat(i("VARIABLE"), " in ").concat(i("VALUE"), " {") + (i("SUBSTACK", true) || "\n") + "} :: control";
|
|
328
|
+
case OpCode_1.OpCode.control_all_at_once:
|
|
329
|
+
return "all at once {" + (i("SUBSTACK", true) || "\n") + "} :: control";
|
|
330
|
+
case OpCode_1.OpCode.control_stop:
|
|
331
|
+
return "stop ".concat(i("STOP_OPTION"));
|
|
332
|
+
case OpCode_1.OpCode.control_start_as_clone:
|
|
333
|
+
return "when I start as a clone";
|
|
334
|
+
case OpCode_1.OpCode.control_create_clone_of:
|
|
335
|
+
return "create clone of ".concat(i("CLONE_OPTION"));
|
|
336
|
+
case OpCode_1.OpCode.control_delete_this_clone:
|
|
337
|
+
return "delete this clone";
|
|
338
|
+
case OpCode_1.OpCode.control_get_counter:
|
|
339
|
+
return "(counter :: control)";
|
|
340
|
+
case OpCode_1.OpCode.control_incr_counter:
|
|
341
|
+
return "increment counter :: control";
|
|
342
|
+
case OpCode_1.OpCode.control_clear_counter:
|
|
343
|
+
return "clear coutner :: control";
|
|
344
|
+
// sensing ----------------------------------------------------- //
|
|
345
|
+
case OpCode_1.OpCode.sensing_touchingobject:
|
|
346
|
+
return "<touching ".concat(i("TOUCHINGOBJECTMENU"), " ?>");
|
|
347
|
+
case OpCode_1.OpCode.sensing_touchingcolor:
|
|
348
|
+
return "<touching ".concat(i("COLOR"), " ?>");
|
|
349
|
+
case OpCode_1.OpCode.sensing_coloristouchingcolor:
|
|
350
|
+
return "<color ".concat(i("COLOR"), " is touching ").concat(i("COLOR2"), " ?>");
|
|
351
|
+
case OpCode_1.OpCode.sensing_distanceto:
|
|
352
|
+
return "(distance to ".concat(i("DISTANCETOMENU"), ")");
|
|
353
|
+
case OpCode_1.OpCode.sensing_askandwait:
|
|
354
|
+
return "ask ".concat(i("QUESTION"), " and wait");
|
|
355
|
+
case OpCode_1.OpCode.sensing_answer:
|
|
356
|
+
return "(answer)";
|
|
357
|
+
case OpCode_1.OpCode.sensing_keypressed:
|
|
358
|
+
return "<key ".concat(i("KEY_OPTION"), " pressed?>");
|
|
359
|
+
case OpCode_1.OpCode.sensing_mousedown:
|
|
360
|
+
return "<mouse down?>";
|
|
361
|
+
case OpCode_1.OpCode.sensing_mousex:
|
|
362
|
+
return "(mouse x)";
|
|
363
|
+
case OpCode_1.OpCode.sensing_mousey:
|
|
364
|
+
return "(mouse y)";
|
|
365
|
+
case OpCode_1.OpCode.sensing_setdragmode:
|
|
366
|
+
return "set drag mode ".concat(i("DRAG_MODE"));
|
|
367
|
+
case OpCode_1.OpCode.sensing_loudness:
|
|
368
|
+
return "(loudness)";
|
|
369
|
+
case OpCode_1.OpCode.sensing_loud:
|
|
370
|
+
return "<loud? :: sensing>";
|
|
371
|
+
case OpCode_1.OpCode.sensing_timer:
|
|
372
|
+
return "(timer)";
|
|
373
|
+
case OpCode_1.OpCode.sensing_resettimer:
|
|
374
|
+
return "reset timer";
|
|
375
|
+
case OpCode_1.OpCode.sensing_of:
|
|
376
|
+
return "(".concat(i("PROPERTY"), " of ").concat(i("OBJECT"), ")");
|
|
377
|
+
case OpCode_1.OpCode.sensing_current:
|
|
378
|
+
return "(current ".concat(i("CURRENTMENU"), ")");
|
|
379
|
+
case OpCode_1.OpCode.sensing_dayssince2000:
|
|
380
|
+
return "(days since 2000)";
|
|
381
|
+
case OpCode_1.OpCode.sensing_username:
|
|
382
|
+
return "(username)";
|
|
383
|
+
case OpCode_1.OpCode.sensing_userid:
|
|
384
|
+
return "(user id :: sensing)";
|
|
385
|
+
// operators --------------------------------------------------- //
|
|
386
|
+
case OpCode_1.OpCode.operator_add:
|
|
387
|
+
return operator("+");
|
|
388
|
+
case OpCode_1.OpCode.operator_subtract:
|
|
389
|
+
return operator("-");
|
|
390
|
+
case OpCode_1.OpCode.operator_multiply:
|
|
391
|
+
return operator("*");
|
|
392
|
+
case OpCode_1.OpCode.operator_divide:
|
|
393
|
+
return operator("/");
|
|
394
|
+
case OpCode_1.OpCode.operator_random:
|
|
395
|
+
return "(pick random ".concat(i("FROM"), " to ").concat(i("TO"), ")");
|
|
396
|
+
case OpCode_1.OpCode.operator_gt:
|
|
397
|
+
return boolop(">");
|
|
398
|
+
case OpCode_1.OpCode.operator_lt:
|
|
399
|
+
return boolop("<");
|
|
400
|
+
case OpCode_1.OpCode.operator_equals:
|
|
401
|
+
return boolop("=");
|
|
402
|
+
case OpCode_1.OpCode.operator_and:
|
|
403
|
+
return boolop("and", true);
|
|
404
|
+
case OpCode_1.OpCode.operator_or:
|
|
405
|
+
return boolop("or", true);
|
|
406
|
+
case OpCode_1.OpCode.operator_not:
|
|
407
|
+
return "<not ".concat(i("OPERAND") || "<>", ">");
|
|
408
|
+
case OpCode_1.OpCode.operator_join:
|
|
409
|
+
return "(join ".concat(i("STRING1"), " ").concat(i("STRING2"), ")");
|
|
410
|
+
case OpCode_1.OpCode.operator_letter_of:
|
|
411
|
+
return "(letter ".concat(i("LETTER"), " of ").concat(i("STRING"), ")");
|
|
412
|
+
case OpCode_1.OpCode.operator_length:
|
|
413
|
+
return "(length of ".concat(i("STRING"), ")");
|
|
414
|
+
case OpCode_1.OpCode.operator_contains:
|
|
415
|
+
return "<".concat(i("STRING1"), " contains ").concat(i("STRING2"), " ? :: operators>");
|
|
416
|
+
case OpCode_1.OpCode.operator_mod:
|
|
417
|
+
return operator("mod");
|
|
418
|
+
case OpCode_1.OpCode.operator_round:
|
|
419
|
+
return "(round ".concat(i("NUM"), ")");
|
|
420
|
+
case OpCode_1.OpCode.operator_mathop:
|
|
421
|
+
return "(".concat(i("OPERATOR"), " of ").concat(i("NUM"), ")");
|
|
422
|
+
// data -------------------------------------------------------- //
|
|
423
|
+
case OpCode_1.OpCode.data_variable:
|
|
424
|
+
return "(".concat(block.inputs.VARIABLE.value.name, " :: variables)");
|
|
425
|
+
case OpCode_1.OpCode.data_setvariableto:
|
|
426
|
+
return "set ".concat(i("VARIABLE"), " to ").concat(i("VALUE"));
|
|
427
|
+
case OpCode_1.OpCode.data_changevariableby:
|
|
428
|
+
return "change ".concat(i("VARIABLE"), " by ").concat(i("VALUE"));
|
|
429
|
+
case OpCode_1.OpCode.data_showvariable:
|
|
430
|
+
return "show variable ".concat(i("VARIABLE"));
|
|
431
|
+
case OpCode_1.OpCode.data_hidevariable:
|
|
432
|
+
return "hide variable ".concat(i("VARIABLE"));
|
|
433
|
+
case OpCode_1.OpCode.data_listcontents:
|
|
434
|
+
return "(".concat(block.inputs.LIST.value.name, " :: list)");
|
|
435
|
+
case OpCode_1.OpCode.data_addtolist:
|
|
436
|
+
return "add ".concat(i("ITEM"), " to ").concat(i("LIST"));
|
|
437
|
+
case OpCode_1.OpCode.data_deleteoflist:
|
|
438
|
+
return "delete ".concat(i("INDEX"), " of ").concat(i("LIST"));
|
|
439
|
+
case OpCode_1.OpCode.data_deletealloflist:
|
|
440
|
+
return "delete all of ".concat(i("LIST"));
|
|
441
|
+
case OpCode_1.OpCode.data_insertatlist:
|
|
442
|
+
return "insert ".concat(i("ITEM"), " at ").concat(i("INDEX"), " of ").concat(i("LIST"));
|
|
443
|
+
case OpCode_1.OpCode.data_replaceitemoflist:
|
|
444
|
+
return "replace item ".concat(i("INDEX"), " of ").concat(i("LIST"), " with ").concat(i("ITEM"));
|
|
445
|
+
case OpCode_1.OpCode.data_itemoflist:
|
|
446
|
+
return "(item ".concat(i("INDEX"), " of ").concat(i("LIST"), ")");
|
|
447
|
+
case OpCode_1.OpCode.data_itemnumoflist:
|
|
448
|
+
return "(item # of ".concat(i("ITEM"), " in ").concat(i("LIST"), ")");
|
|
449
|
+
case OpCode_1.OpCode.data_lengthoflist:
|
|
450
|
+
return "(length of ".concat(i("LIST"), ")");
|
|
451
|
+
case OpCode_1.OpCode.data_listcontainsitem:
|
|
452
|
+
return "<".concat(i("LIST"), " contains ").concat(i("ITEM"), " ? :: list>");
|
|
453
|
+
case OpCode_1.OpCode.data_showlist:
|
|
454
|
+
return "show list ".concat(i("LIST"));
|
|
455
|
+
case OpCode_1.OpCode.data_hidelist:
|
|
456
|
+
return "hide list ".concat(i("LIST"));
|
|
457
|
+
// custom blocks ----------------------------------------------- //
|
|
458
|
+
case OpCode_1.OpCode.procedures_definition: {
|
|
459
|
+
var spec = block.inputs.ARGUMENTS.value
|
|
460
|
+
.map(function (_a) {
|
|
461
|
+
var type = _a.type, name = _a.name;
|
|
462
|
+
switch (type) {
|
|
463
|
+
case "label":
|
|
464
|
+
return name.replace(/\//g, "\\/");
|
|
465
|
+
case "numberOrString":
|
|
466
|
+
return "(".concat(name, ")");
|
|
467
|
+
case "boolean":
|
|
468
|
+
return "<".concat(name, ">");
|
|
469
|
+
}
|
|
470
|
+
})
|
|
471
|
+
.join(" ");
|
|
472
|
+
return "define ".concat(spec) + (block.inputs.WARP.value ? " // run without screen refresh" : "");
|
|
473
|
+
}
|
|
474
|
+
case OpCode_1.OpCode.procedures_call: {
|
|
475
|
+
var definition = target.scripts
|
|
476
|
+
.map(function (s) { return s.blocks[0]; })
|
|
477
|
+
.find(function (b) { return b.opcode === OpCode_1.OpCode.procedures_definition && b.inputs.PROCCODE.value === block.inputs.PROCCODE.value; });
|
|
478
|
+
// we guarantee the opcode check is true already by checking it in find(), but typescript doesn't seem to notice that, so we include this assert here
|
|
479
|
+
if (definition && definition.opcode === OpCode_1.OpCode.procedures_definition) {
|
|
480
|
+
var index_1 = 0;
|
|
481
|
+
return (definition.inputs.ARGUMENTS.value
|
|
482
|
+
.map(function (_a) {
|
|
483
|
+
var type = _a.type, name = _a.name;
|
|
484
|
+
switch (type) {
|
|
485
|
+
case "label":
|
|
486
|
+
return name.replace(/\//g, "\\/");
|
|
487
|
+
default:
|
|
488
|
+
// TODO: deal with empty boolean inputs, which can't even load yet
|
|
489
|
+
return input(block.inputs.INPUTS.value[index_1++], target);
|
|
490
|
+
}
|
|
491
|
+
})
|
|
492
|
+
.join(" ") + " :: custom");
|
|
493
|
+
}
|
|
494
|
+
else {
|
|
495
|
+
return "... // missing custom block definition for ".concat(block.inputs.PROCCODE.value);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
case OpCode_1.OpCode.argument_reporter_string_number:
|
|
499
|
+
return "(".concat(block.inputs.VALUE.value, " :: custom-arg)");
|
|
500
|
+
case OpCode_1.OpCode.argument_reporter_boolean:
|
|
501
|
+
return "<".concat(block.inputs.VALUE.value, " :: custom-arg>");
|
|
502
|
+
// extension: music -------------------------------------------- //
|
|
503
|
+
case OpCode_1.OpCode.music_playDrumForBeats:
|
|
504
|
+
return "play drum ".concat(i("DRUM"), " for ").concat(i("BEATS"), " beats");
|
|
505
|
+
case OpCode_1.OpCode.music_midiPlayDrumForBeats:
|
|
506
|
+
return "play (old midi) drum ".concat(i("DRUM"), " for ").concat(i("BEATS"), " beats :: music");
|
|
507
|
+
case OpCode_1.OpCode.music_restForBeats:
|
|
508
|
+
return "rest for ".concat(i("BEATS"), " beats");
|
|
509
|
+
case OpCode_1.OpCode.music_playNoteForBeats:
|
|
510
|
+
return "play note ".concat(i("NOTE"), " for ").concat(i("BEATS"), " beats");
|
|
511
|
+
case OpCode_1.OpCode.music_setInstrument:
|
|
512
|
+
return "set instrument to ".concat(i("INSTRUMENT"));
|
|
513
|
+
case OpCode_1.OpCode.music_midiSetInstrument:
|
|
514
|
+
return "set (old midi) instrument to ".concat(i("INSTRUMENT"), " :: music");
|
|
515
|
+
case OpCode_1.OpCode.music_setTempo:
|
|
516
|
+
return "set tempo to ".concat(i("TEMPO"));
|
|
517
|
+
case OpCode_1.OpCode.music_changeTempo:
|
|
518
|
+
return "change tempo by ".concat(i("TEMPO"));
|
|
519
|
+
case OpCode_1.OpCode.music_getTempo:
|
|
520
|
+
return "(tempo)";
|
|
521
|
+
// extension: pen ---------------------------------------------- //
|
|
522
|
+
case OpCode_1.OpCode.pen_clear:
|
|
523
|
+
return "erase all";
|
|
524
|
+
case OpCode_1.OpCode.pen_stamp:
|
|
525
|
+
return "stamp";
|
|
526
|
+
case OpCode_1.OpCode.pen_penDown:
|
|
527
|
+
return "pen down";
|
|
528
|
+
case OpCode_1.OpCode.pen_penUp:
|
|
529
|
+
return "pen up";
|
|
530
|
+
case OpCode_1.OpCode.pen_setPenColorToColor:
|
|
531
|
+
return "set pen color to ".concat(i("COLOR"));
|
|
532
|
+
case OpCode_1.OpCode.pen_changePenColorParamBy:
|
|
533
|
+
return "change pen ".concat(i("COLOR_PARAM"), " by ").concat(i("VALUE"));
|
|
534
|
+
case OpCode_1.OpCode.pen_setPenColorParamTo:
|
|
535
|
+
return "set pen ".concat(i("COLOR_PARAM"), " to ").concat(i("VALUE"));
|
|
536
|
+
case OpCode_1.OpCode.pen_changePenSizeBy:
|
|
537
|
+
return "change pen size by ".concat(i("SIZE"));
|
|
538
|
+
case OpCode_1.OpCode.pen_setPenSizeTo:
|
|
539
|
+
return "set pen size to ".concat(i("SIZE"));
|
|
540
|
+
case OpCode_1.OpCode.pen_changePenShadeBy:
|
|
541
|
+
return "change pen shade by ".concat(i("SHADE"));
|
|
542
|
+
case OpCode_1.OpCode.pen_setPenShadeToNumber:
|
|
543
|
+
return "set pen shade to ".concat(i("SHADE"));
|
|
544
|
+
case OpCode_1.OpCode.pen_changePenHueBy:
|
|
545
|
+
return "change pen color by ".concat(i("HUE"));
|
|
546
|
+
case OpCode_1.OpCode.pen_setPenHueToNumber:
|
|
547
|
+
return "set pen hue to ".concat(i("HUE"));
|
|
548
|
+
// extension: video sensing ----------------------------------- //
|
|
549
|
+
case OpCode_1.OpCode.videoSensing_whenMotionGreaterThan:
|
|
550
|
+
return "when video motion > ".concat(i("REFERENCE"));
|
|
551
|
+
case OpCode_1.OpCode.videoSensing_videoOn:
|
|
552
|
+
return "(video ".concat(i("ATTRIBUTE"), " on ").concat(i("SUBJECT"), ")");
|
|
553
|
+
case OpCode_1.OpCode.videoSensing_videoToggle:
|
|
554
|
+
return "turn video ".concat(i("VIDEO_STATE"));
|
|
555
|
+
case OpCode_1.OpCode.videoSensing_setVideoTransparency:
|
|
556
|
+
return "set video transparency to ".concat(i("TRANSPARENCY"));
|
|
557
|
+
// leftover menu "blocks" ----------------------------------- //
|
|
558
|
+
case OpCode_1.OpCode.motion_pointtowards_menu:
|
|
559
|
+
case OpCode_1.OpCode.motion_glideto_menu:
|
|
560
|
+
case OpCode_1.OpCode.motion_goto_menu:
|
|
561
|
+
case OpCode_1.OpCode.looks_costume:
|
|
562
|
+
case OpCode_1.OpCode.looks_backdrops:
|
|
563
|
+
case OpCode_1.OpCode.sound_sounds_menu:
|
|
564
|
+
case OpCode_1.OpCode.control_create_clone_of_menu:
|
|
565
|
+
case OpCode_1.OpCode.sensing_touchingobjectmenu:
|
|
566
|
+
case OpCode_1.OpCode.sensing_distancetomenu:
|
|
567
|
+
case OpCode_1.OpCode.sensing_keyoptions:
|
|
568
|
+
case OpCode_1.OpCode.sensing_of_object_menu:
|
|
569
|
+
case OpCode_1.OpCode.pen_menu_colorParam:
|
|
570
|
+
case OpCode_1.OpCode.music_menu_DRUM:
|
|
571
|
+
case OpCode_1.OpCode.music_menu_INSTRUMENT:
|
|
572
|
+
case OpCode_1.OpCode.videoSensing_menu_ATTRIBUTE:
|
|
573
|
+
case OpCode_1.OpCode.videoSensing_menu_SUBJECT:
|
|
574
|
+
case OpCode_1.OpCode.videoSensing_menu_VIDEO_STATE:
|
|
575
|
+
case OpCode_1.OpCode.wedo2_menu_MOTOR_ID:
|
|
576
|
+
case OpCode_1.OpCode.wedo2_menu_MOTOR_DIRECTION:
|
|
577
|
+
case OpCode_1.OpCode.wedo2_menu_TILT_DIRECTION:
|
|
578
|
+
case OpCode_1.OpCode.wedo2_menu_TILT_DIRECTION_ANY:
|
|
579
|
+
return "";
|
|
580
|
+
default:
|
|
581
|
+
return "unknown block [".concat(block.opcode, "] \\(").concat(Object.keys(block.inputs)
|
|
582
|
+
.map(function (k) { return "[".concat(k, "]"); })
|
|
583
|
+
.join(", "), "\\)");
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
function blocksToScratchblocks(blocks, target) {
|
|
587
|
+
return blocks.map(function (b) { return blockToScratchblocks(b, target); }).join("\n");
|
|
588
|
+
}
|
|
589
|
+
function scriptToScratchblocks(script, target) {
|
|
590
|
+
return blocksToScratchblocks(script.blocks, target);
|
|
591
|
+
}
|
|
592
|
+
var targets = {};
|
|
593
|
+
var _loop_1 = function (target) {
|
|
594
|
+
targets[target.name] = target.scripts
|
|
595
|
+
.map(function (script) { return scriptToScratchblocks(script, target); })
|
|
596
|
+
.filter(function (scratchblocks) { return scratchblocks.length > 0; })
|
|
597
|
+
.join("\n\n");
|
|
598
|
+
};
|
|
599
|
+
for (var _i = 0, _a = __spreadArray([project.stage], project.sprites, true); _i < _a.length; _i++) {
|
|
600
|
+
var target = _a[_i];
|
|
601
|
+
_loop_1(target);
|
|
602
|
+
}
|
|
603
|
+
return targets;
|
|
604
|
+
}
|
|
605
|
+
exports.default = toScratchblocks;
|
|
606
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TY3JhdGNoYmxvY2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lvL3NjcmF0Y2hibG9ja3MvdG9TY3JhdGNoYmxvY2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLQSx1Q0FBc0M7QUFNdEMsU0FBd0IsZUFBZSxDQUNyQyxPQUFnQixFQUNoQixTQUErQztJQUEvQywwQkFBQSxFQUFBLGNBQStDO0lBSS9DLElBQU0sY0FBYyxHQUEyQjtRQUM3QyxNQUFNLEVBQUUsSUFBSTtLQUNiLENBQUM7SUFDRixJQUFNLE9BQU8seUJBQVEsY0FBYyxHQUFLLFNBQVMsQ0FBRSxDQUFDO0lBRXBELFNBQVMsTUFBTSxDQUFDLEdBQVc7UUFDekIsT0FBTyxHQUFHO2FBQ1AsS0FBSyxDQUFDLElBQUksQ0FBQzthQUNYLEdBQUcsQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFsQixDQUFrQixDQUFDO2FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUyxLQUFLLENBQUMsR0FBbUIsRUFBRSxNQUFjLEVBQUUsSUFBWTtRQUFaLHFCQUFBLEVBQUEsWUFBWTtRQUM5RCxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELElBQU0sTUFBTSxHQUFHLFVBQUMsS0FBYSxJQUFhLE9BQUEsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFBLENBQUMsSUFBSSxPQUFBLElBQUksR0FBRyxDQUFDLEVBQVIsQ0FBUSxDQUFDLEVBQTlELENBQThELENBQUM7UUFFekcsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ2hCLEtBQUssUUFBUTtnQkFDWCxJQUFJLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxR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
|