Skip to content

Project parsed wrong when Variables contain "()" . #10

@huangganggui

Description

@huangganggui

Scratch variables support special characters like "()".
But Project parsed wrong when Variables contain "()" .

Scratch:
screenshot-20240428-170713

This is my test code:

const { toScratchblocks } = require('parse-sb3-blocks');

const project = {"targets":[{"isStage":true,"name":"Stage","variables":{"`jEk@4|i[#Fk?(8x)AV.-my variable":["my variable",0],"wyhMB{kprZpl6JK?|A}c":["var(test)",0]},"lists":{},"broadcasts":{},"blocks":{},"comments":{},"currentCostume":0,"costumes":[{"name":"backdrop1","dataFormat":"svg","assetId":"cd21514d0531fdffb22204e0ec5ed84a","md5ext":"cd21514d0531fdffb22204e0ec5ed84a.svg","rotationCenterX":240,"rotationCenterY":180}],"sounds":[{"name":"pop","assetId":"83a9787d4cb6f3b7632b4ddfebf74367","dataFormat":"wav","format":"","rate":44100,"sampleCount":1032,"md5ext":"83a9787d4cb6f3b7632b4ddfebf74367.wav"}],"volume":100,"layerOrder":0,"tempo":60,"videoTransparency":50,"videoState":"on","textToSpeechLanguage":null},{"isStage":false,"name":"Sprite1","variables":{},"lists":{},"broadcasts":{},"blocks":{"(sSbmuP@#^jp$JTTMmST":{"opcode":"looks_say","next":null,"parent":"3xN|,lf_qLn;Y].JzKXQ","inputs":{"MESSAGE":[3,[12,"var(test)","wyhMB{kprZpl6JK?|A}c"],[10,"Hello!"]]},"fields":{},"shadow":false,"topLevel":false},"3xN|,lf_qLn;Y].JzKXQ":{"opcode":"event_whenflagclicked","next":"(sSbmuP@#^jp$JTTMmST","parent":null,"inputs":{},"fields":{},"shadow":false,"topLevel":true,"x":160,"y":109}},"comments":{},"currentCostume":0,"costumes":[{"name":"costume1","bitmapResolution":1,"dataFormat":"svg","assetId":"bcf454acf82e4504149f7ffe07081dbc","md5ext":"bcf454acf82e4504149f7ffe07081dbc.svg","rotationCenterX":48,"rotationCenterY":50},{"name":"costume2","bitmapResolution":1,"dataFormat":"svg","assetId":"0fb9be3e8397c983338cb71dc84d0b25","md5ext":"0fb9be3e8397c983338cb71dc84d0b25.svg","rotationCenterX":46,"rotationCenterY":53}],"sounds":[{"name":"Meow","assetId":"83c36d806dc92327b9e7049a565c6bff","dataFormat":"wav","format":"","rate":44100,"sampleCount":37376,"md5ext":"83c36d806dc92327b9e7049a565c6bff.wav"}],"volume":100,"layerOrder":1,"visible":true,"x":0,"y":0,"size":100,"direction":90,"draggable":false,"rotationStyle":"all around"}],"monitors":[{"id":"wyhMB{kprZpl6JK?|A}c","mode":"default","opcode":"data_variable","params":{"VARIABLE":"var(test)"},"spriteName":null,"value":0,"width":0,"height":0,"x":5,"y":5,"visible":true,"sliderMin":0,"sliderMax":100,"isDiscrete":true}],"extensions":[],"meta":{"semver":"3.0.0","vm":"2.3.0","agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"}}
// console.log(project)

project.targets.forEach(el=>{
  if (el.blocks) {
    Object.keys(el.blocks).forEach(key=>{
      if (el.blocks[key].parent === null) {
        console.log(toScratchblocks(key, el.blocks, 'en', { tabs: ' '.repeat(4) }))
      }
    })
  }
})

And this is result:

when @greenFlag clicked
say (var(test\))

screenshot-20240428-171045
I think the correct result shoud be:

when @greenFlag clicked
say (var\(test\))


screenshot-20240428-171101

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions