feat(boards): xpython 文本分类下添加 字节串

This commit is contained in:
王立帮
2025-09-09 23:15:45 +08:00
parent 6609f26b3f
commit 263a925426
20 changed files with 106 additions and 16 deletions

View File

@@ -527,6 +527,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -548,6 +548,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -522,6 +522,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -522,6 +522,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -548,6 +548,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -548,6 +548,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -504,6 +504,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -360,6 +360,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -286,6 +286,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -538,6 +538,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -65,6 +65,37 @@ export const text_textarea = {
} }
}; };
export const text_bytes = {
/**
* Block for text value.
* @this Blockly.Block
*/
init: function () {
this.setColour(TEXTS_HUE);
this.appendDummyInput()
.appendField(Blockly.Msg.MIXLY_TEXT_BYTES)
.appendField(this.newQuote_(true))
.appendField(new Blockly.FieldTextInput(''), 'TEXT')
.appendField(this.newQuote_(false));
this.setOutput(true, String);
this.setTooltip(Blockly.Msg.TEXT_TEXT_TOOLTIP);
},
/**
* Create an image of an open or closed quote.
* @param {boolean} open True if open quote, false if closed.
* @return {!Blockly.FieldImage} The field image of the quote.
* @private
*/
newQuote_: function (open) {
if (open == this.RTL) {
var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAqUlEQVQI1z3KvUpCcRiA8ef9E4JNHhI0aFEacm1o0BsI0Slx8wa8gLauoDnoBhq7DcfWhggONDmJJgqCPA7neJ7p934EOOKOnM8Q7PDElo/4x4lFb2DmuUjcUzS3URnGib9qaPNbuXvBO3sGPHJDRG6fGVdMSeWDP2q99FQdFrz26Gu5Tq7dFMzUvbXy8KXeAj57cOklgA+u1B5AoslLtGIHQMaCVnwDnADZIFIrXsoXrgAAAABJRU5ErkJggg==';
} else {
var file = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAKCAQAAAAqJXdxAAAAn0lEQVQI1z3OMa5BURSF4f/cQhAKjUQhuQmFNwGJEUi0RKN5rU7FHKhpjEH3TEMtkdBSCY1EIv8r7nFX9e29V7EBAOvu7RPjwmWGH/VuF8CyN9/OAdvqIXYLvtRaNjx9mMTDyo+NjAN1HNcl9ZQ5oQMM3dgDUqDo1l8DzvwmtZN7mnD+PkmLa+4mhrxVA9fRowBWmVBhFy5gYEjKMfz9AylsaRRgGzvZAAAAAElFTkSuQmCC';
}
return new Blockly.FieldImage(file, 12, 12, '"');
}
};
Blockly.FieldTextInput.char_validator = function (text) { Blockly.FieldTextInput.char_validator = function (text) {
if (text.length > 1) { if (text.length > 1) {
if (text.charAt(0) === "\\") { if (text.charAt(0) === "\\") {

View File

@@ -14,6 +14,11 @@ export const text_textarea = function (_, generator) {
return [code, generator.ORDER_ATOMIC]; return [code, generator.ORDER_ATOMIC];
} }
export const text_bytes = function (_, generator) {
const text = this.getFieldValue('TEXT');
return [`b'${text}'`, generator.ORDER_ATOMIC];
}
export const text_char = function (_, generator) { export const text_char = function (_, generator) {
var code = '\'' + this.getFieldValue('TEXT') + '\''; var code = '\'' + this.getFieldValue('TEXT') + '\'';
return [code, generator.ORDER_ATOMIC]; return [code, generator.ORDER_ATOMIC];

View File

@@ -473,6 +473,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -473,6 +473,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -398,6 +398,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -356,6 +356,9 @@
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -356,6 +356,9 @@ type="application/javascript"></script> -->
</block> </block>
<block type="text_textarea"> <block type="text_textarea">
</block> </block>
<block type="text_bytes">
<field name="TEXT">Mixly</field>
</block>
<block type="text_join"> <block type="text_join">
<value name="A"> <value name="A">
<shadow type="text"> <shadow type="text">

View File

@@ -3978,12 +3978,15 @@ En.MIXLY_MICROPHONE_AMPLIFICATION = 'microphone amplification';
En.MIXLY_MUSIC_VOLUME_SET = 'set music volume'; En.MIXLY_MUSIC_VOLUME_SET = 'set music volume';
En.MIXLY_HOTSPOT= 'hot spot'; En.MIXLY_HOTSPOT= 'hot spot';
En.MIXLY_NAME = 'name'; En.MIXLY_NAME = 'name';
En.MIXLY_Service_quality_display= "service quality", En.MIXLY_Service_quality_display = "service quality";
En.MIXLY_AT_MOST_ONCE= "At most once", En.MIXLY_AT_MOST_ONCE = "At most once";
En.MIXLY_AT_LEAST_ONCE= "At least once", En.MIXLY_AT_LEAST_ONCE = "At least once";
En.MIXLY_ONLY_ONCE= "Only once", En.MIXLY_ONLY_ONCE = "Only once";
En.MIXLY_ADD= "Append", En.MIXLY_ADD = "Append";
En.MIXLY_R_W= "Readable and Writable, Error if File Does Not Exist", En.MIXLY_R_W = "Readable and Writable, Error if File Does Not Exist";
En.MIXLY_W_R= "Readable and Writable, Create if File Does Not Exist", En.MIXLY_W_R = "Readable and Writable, Create if File Does Not Exist";
En.MIXLY_A_R= "Appendable and Writable, Create if File Does Not Exist" En.MIXLY_A_R = "Appendable and Writable, Create if File Does Not Exist";
En.MIXLY_TEXT_BYTES = 'bytes';
En.MIXLY_TEXT_BYTE_ARRAY = 'bytearray';
})(); })();

View File

@@ -4145,4 +4145,7 @@ ZhHans.MIXLY_ADD = '追加';
ZhHans.MIXLY_R_W ='可读可写,文件若不存在就报错'; ZhHans.MIXLY_R_W ='可读可写,文件若不存在就报错';
ZhHans.MIXLY_W_R = '可读可写,文件若不存在就创建'; ZhHans.MIXLY_W_R = '可读可写,文件若不存在就创建';
ZhHans.MIXLY_A_R = '可追加可写,文件若不存在就创建'; ZhHans.MIXLY_A_R = '可追加可写,文件若不存在就创建';
ZhHans.MIXLY_TEXT_BYTES = '字节串';
ZhHans.MIXLY_TEXT_BYTE_ARRAY = '字节数组';
})(); })();

View File

@@ -4132,12 +4132,15 @@ ZhHant.MIXLY_MICROPHONE_AMPLIFICATION = '麥克風放大倍數';
ZhHant.MIXLY_MUSIC_VOLUME_SET = '音量調節'; ZhHant.MIXLY_MUSIC_VOLUME_SET = '音量調節';
ZhHant.MIXLY_HOTSPOT= '熱點'; ZhHant.MIXLY_HOTSPOT= '熱點';
ZhHant.MIXLY_NAME = '名稱'; ZhHant.MIXLY_NAME = '名稱';
ZhHant.MIXLY_Service_quality_display= "服務質量"; ZhHant.MIXLY_Service_quality_display = "服務質量";
ZhHant.MIXLY_AT_MOST_ONCE= "至多一次"; ZhHant.MIXLY_AT_MOST_ONCE = "至多一次";
ZhHant.MIXLY_AT_LEAST_ONCE= "至少一次"; ZhHant.MIXLY_AT_LEAST_ONCE = "至少一次";
ZhHant.MIXLY_ONLY_ONCE= "僅一次"; ZhHant.MIXLY_ONLY_ONCE = "僅一次";
ZhHant.MIXLY_ADD= "追加"; ZhHant.MIXLY_ADD = "追加";
ZhHant.MIXLY_R_W= "可讀可寫,文件若不存在就報錯"; ZhHant.MIXLY_R_W = "可讀可寫,文件若不存在就報錯";
ZhHant.MIXLY_W_R= "可讀可寫,文件若不存在就創建"; ZhHant.MIXLY_W_R = "可讀可寫,文件若不存在就創建";
ZhHant.MIXLY_A_R= "可追加可寫,文件若不存在就創建"; ZhHant.MIXLY_A_R = "可追加可寫,文件若不存在就創建";
ZhHant.MIXLY_TEXT_BYTES = '位元組字串';
ZhHant.MIXLY_TEXT_BYTE_ARRAY = '位元組數組';
})(); })();