diff --git a/.github/workflows/mdbook.yml b/.github/workflows/mdbook.yml new file mode 100644 index 0000000..8d6697b --- /dev/null +++ b/.github/workflows/mdbook.yml @@ -0,0 +1,60 @@ +# Sample workflow for building and deploying a mdBook site to GitHub Pages +# +# To get started with mdBook see: https://rust-lang.github.io/mdBook/index.html +# +name: Deploy mdBook site to Pages + +on: + # Runs on pushes targeting the mdbook branch + push: + branches: ["mdbook"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + env: + MDBOOK_VERSION: 0.4.36 + steps: + - uses: actions/checkout@v4 + - name: Install mdBook + run: | + curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf -y | sh + rustup update + cargo install --version ${MDBOOK_VERSION} mdbook + - name: Setup Pages + id: pages + uses: actions/configure-pages@v5 + - name: Build with mdBook + run: mdbook build + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./book + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/SPECIFICATION.md b/SPECIFICATION.md deleted file mode 100644 index 25052c4..0000000 --- a/SPECIFICATION.md +++ /dev/null @@ -1,12 +0,0 @@ -# Scratch Specification -This is a formal [specification](https://en.wikipedia.org/wiki/Programming_language_specification) of [Scratch](https://scratch.mit.edu/), a block-based programming language. - -## Introduction -Scratch works like this: -``` -when green flag clicked -move (10) steps -``` - -## THE END -Thank you for coming to my TED talk. _more soon_ diff --git a/book.toml b/book.toml new file mode 100644 index 0000000..2af573f --- /dev/null +++ b/book.toml @@ -0,0 +1,10 @@ +[book] +title = "Scratch Specification" +authors = ["Endless-Ocean"] +description = "A formal programming language specification of Scratch." + +[output.html] +additional-js = ["scratchblocks.js"] +smart-punctuation = true +mathjax-support = true + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..96377a5 --- /dev/null +++ b/docs/index.html @@ -0,0 +1 @@ +HMM \ No newline at end of file diff --git a/scratchblocks.js b/scratchblocks.js new file mode 100644 index 0000000..64caadf --- /dev/null +++ b/scratchblocks.js @@ -0,0 +1,17 @@ +/** + * scratchblocks v3.6.1 + * https://scratchblocks.github.io/ + * Render scratchblocks code to SVG images. + * + * Copyright 2013–2022, Tim Radvan + * @license MIT + */ + +var scratchblocks=function(){"use strict";function e(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,s)}return i}function t(t){for(var i=1;ie.length)&&(t=e.length);for(var i=0,s=Array(t);i=e.length?{done:!0}:{done:!1,value:e[s++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n,o=!0,c=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return o=e.done,e},e:function(e){c=!0,n=e},f:function(){try{o||null==i.return||i.return()}finally{if(c)throw n}}}}var h={pen:"pen",video:"sensing",music:"sound"},u=t(t({},h),{},{tts:"tts",translate:"translate",microbit:"microbit",wedo:"wedo",makeymakey:"makeymakey",ev3:"ev3",boost:"boost",gdxfor:"gdxfor"}),p={wedo2:"wedo",text2speech:"tts"},f=["motion","looks","sound","variables","list","events","control","sensing","operators","custom","custom-arg","extension","grey","obsolete"].concat(o(Object.keys(u)),o(Object.keys(p))),d=["hat","cap","stack","boolean","reporter","ring","cat"],g=["ar","ckb","fa","he"],y=/%([0-9]+)/,v=/(%[a-zA-Z0-9](?:\.[a-zA-Z0-9]+)?)/,m=RegExp(v.source,"g"),k=/(@[a-zA-Z]+)/,b=RegExp(v.source+"|"+k.source+"| +","g"),w=/^#(?:[0-9a-fA-F]{3}){1,2}?$/;function A(e){var t=y.exec(e);return t?+t[1]:0}function O(e){var t=e.split(b).filter((function(e){return e})),i=t.filter((function(e){return v.test(e)}));return{spec:e,parts:t,inputs:i,hash:S(e)}}function S(e){return L(e.replace(m," _ "))}function L(e){return e.replace(/_/g," _ ").replace(/ +/g," ").replace(/[,%?:]/g,"").replace(/ß/g,"ss").replace(/ä/g,"a").replace(/ö/g,"o").replace(/ü/g,"u").replace(". . .","...").replace(/^…$/,"...").trim().toLowerCase()}var E={},T=[{id:"MOTION_MOVESTEPS",selector:"forward:",spec:"move %1 steps",inputs:["%n"],shape:"stack",category:"motion"},{id:"MOTION_TURNRIGHT",selector:"turnRight:",spec:"turn @turnRight %1 degrees",inputs:["%n"],shape:"stack",category:"motion"},{id:"MOTION_TURNLEFT",selector:"turnLeft:",spec:"turn @turnLeft %1 degrees",inputs:["%n"],shape:"stack",category:"motion"},{id:"MOTION_POINTINDIRECTION",selector:"heading:",spec:"point in direction %1",inputs:["%d.direction"],shape:"stack",category:"motion"},{id:"MOTION_POINTTOWARDS",selector:"pointTowards:",spec:"point towards %1",inputs:["%m.spriteOrMouse"],shape:"stack",category:"motion"},{id:"MOTION_GOTOXY",selector:"gotoX:y:",spec:"go to x:%1 y:%2",inputs:["%n","%n"],shape:"stack",category:"motion"},{id:"MOTION_GOTO",selector:"gotoSpriteOrMouse:",spec:"go to %1",inputs:["%m.location"],shape:"stack",category:"motion"},{id:"MOTION_GLIDESECSTOXY",selector:"glideSecs:toX:y:elapsed:from:",spec:"glide %1 secs to x:%2 y:%3",inputs:["%n","%n","%n"],shape:"stack",category:"motion"},{id:"MOTION_GLIDETO",spec:"glide %1 secs to %2",inputs:["%n","%m.location"],shape:"stack",category:"motion"},{id:"MOTION_CHANGEXBY",selector:"changeXposBy:",spec:"change x by %1",inputs:["%n"],shape:"stack",category:"motion"},{id:"MOTION_SETX",selector:"xpos:",spec:"set x to %1",inputs:["%n"],shape:"stack",category:"motion"},{id:"MOTION_CHANGEYBY",selector:"changeYposBy:",spec:"change y by %1",inputs:["%n"],shape:"stack",category:"motion"},{id:"MOTION_SETY",selector:"ypos:",spec:"set y to %1",inputs:["%n"],shape:"stack",category:"motion"},{id:"MOTION_SETROTATIONSTYLE",selector:"setRotationStyle",spec:"set rotation style %1",inputs:["%m.rotationStyle"],shape:"stack",category:"motion"},{id:"LOOKS_SAYFORSECS",selector:"say:duration:elapsed:from:",spec:"say %1 for %2 seconds",inputs:["%s","%n"],shape:"stack",category:"looks"},{id:"LOOKS_SAY",selector:"say:",spec:"say %1",inputs:["%s"],shape:"stack",category:"looks"},{id:"LOOKS_THINKFORSECS",selector:"think:duration:elapsed:from:",spec:"think %1 for %2 seconds",inputs:["%s","%n"],shape:"stack",category:"looks"},{id:"LOOKS_THINK",selector:"think:",spec:"think %1",inputs:["%s"],shape:"stack",category:"looks"},{id:"LOOKS_SHOW",selector:"show",spec:"show",inputs:[],shape:"stack",category:"looks"},{id:"LOOKS_HIDE",selector:"hide",spec:"hide",inputs:[],shape:"stack",category:"looks"},{id:"LOOKS_SWITCHCOSTUMETO",selector:"lookLike:",spec:"switch costume to %1",inputs:["%m.costume"],shape:"stack",category:"looks"},{id:"LOOKS_NEXTCOSTUME",selector:"nextCostume",spec:"next costume",inputs:[],shape:"stack",category:"looks"},{id:"LOOKS_NEXTBACKDROP_BLOCK",selector:"nextScene",spec:"next backdrop",inputs:[],shape:"stack",category:"looks"},{id:"LOOKS_SWITCHBACKDROPTO",selector:"startScene",spec:"switch backdrop to %1",inputs:["%m.backdrop"],shape:"stack",category:"looks"},{id:"LOOKS_SWITCHBACKDROPTOANDWAIT",selector:"startSceneAndWait",spec:"switch backdrop to %1 and wait",inputs:["%m.backdrop"],shape:"stack",category:"looks"},{id:"LOOKS_CHANGEEFFECTBY",selector:"changeGraphicEffect:by:",spec:"change %1 effect by %2",inputs:["%m.effect","%n"],shape:"stack",category:"looks"},{id:"LOOKS_SETEFFECTTO",selector:"setGraphicEffect:to:",spec:"set %1 effect to %2",inputs:["%m.effect","%n"],shape:"stack",category:"looks"},{id:"LOOKS_CLEARGRAPHICEFFECTS",selector:"filterReset",spec:"clear graphic effects",inputs:[],shape:"stack",category:"looks"},{id:"LOOKS_CHANGESIZEBY",selector:"changeSizeBy:",spec:"change size by %1",inputs:["%n"],shape:"stack",category:"looks"},{id:"LOOKS_SETSIZETO",selector:"setSizeTo:",spec:"set size to %1%",inputs:["%n"],shape:"stack",category:"looks"},{selector:"comeToFront",spec:"go to front",inputs:[],shape:"stack",category:"looks"},{id:"LOOKS_GOTOFRONTBACK",spec:"go to %1 layer",inputs:["%m"],shape:"stack",category:"looks"},{selector:"goBackByLayers:",spec:"go back %1 layers",inputs:["%n"],shape:"stack",category:"looks"},{id:"LOOKS_GOFORWARDBACKWARDLAYERS",spec:"go %1 %2 layers",inputs:["%m","%n"],shape:"stack",category:"looks"},{id:"SOUND_PLAY",selector:"playSound:",spec:"start sound %1",inputs:["%m.sound"],shape:"stack",category:"sound"},{id:"SOUND_CHANGEEFFECTBY",spec:"change %1 effect by %2",inputs:["%m","%n"],shape:"stack",category:"sound"},{id:"SOUND_SETEFFECTO",spec:"set %1 effect to %2",inputs:["%m","%n"],shape:"stack",category:"sound"},{id:"SOUND_CLEAREFFECTS",spec:"clear sound effects",inputs:[],shape:"stack",category:"sound"},{id:"SOUND_PLAYUNTILDONE",selector:"doPlaySoundAndWait",spec:"play sound %1 until done",inputs:["%m.sound"],shape:"stack",category:"sound"},{id:"SOUND_STOPALLSOUNDS",selector:"stopAllSounds",spec:"stop all sounds",inputs:[],shape:"stack",category:"sound"},{id:"music.playDrumForBeats",selector:"playDrum",spec:"play drum %1 for %2 beats",inputs:["%d.drum","%n"],shape:"stack",category:"music"},{id:"music.restForBeats",selector:"rest:elapsed:from:",spec:"rest for %1 beats",inputs:["%n"],shape:"stack",category:"music"},{id:"music.playNoteForBeats",selector:"noteOn:duration:elapsed:from:",spec:"play note %1 for %2 beats",inputs:["%d.note","%n"],shape:"stack",category:"music"},{id:"music.setInstrument",selector:"instrument:",spec:"set instrument to %1",inputs:["%d.instrument"],shape:"stack",category:"music"},{id:"SOUND_CHANGEVOLUMEBY",selector:"changeVolumeBy:",spec:"change volume by %1",inputs:["%n"],shape:"stack",category:"sound"},{id:"SOUND_SETVOLUMETO",selector:"setVolumeTo:",spec:"set volume to %1%",inputs:["%n"],shape:"stack",category:"sound"},{id:"music.changeTempo",selector:"changeTempoBy:",spec:"change tempo by %1",inputs:["%n"],shape:"stack",category:"music"},{selector:"setTempoTo:",spec:"set tempo to %1 bpm",inputs:["%n"],shape:"stack",category:"sound"},{id:"music.setTempo",selector:"setTempoTo:",spec:"set tempo to %1",inputs:["%n"],shape:"stack",category:"music"},{id:"pen.clear",selector:"clearPenTrails",spec:"erase all",inputs:[],shape:"stack",category:"pen"},{id:"pen.stamp",selector:"stampCostume",spec:"stamp",inputs:[],shape:"stack",category:"pen"},{id:"pen.penDown",selector:"putPenDown",spec:"pen down",inputs:[],shape:"stack",category:"pen"},{id:"pen.penUp",selector:"putPenUp",spec:"pen up",inputs:[],shape:"stack",category:"pen"},{id:"pen.setColor",selector:"penColor:",spec:"set pen color to %1",inputs:["%c"],shape:"stack",category:"pen"},{id:"pen.changeHue",selector:"changePenHueBy:",spec:"change pen color by %1",inputs:["%n"],shape:"stack",category:"pen"},{id:"pen.setColorParam",spec:"set pen %1 to %2",inputs:["%m.color","%c"],shape:"stack",category:"pen"},{id:"pen.changeColorParam",spec:"change pen %1 by %2",inputs:["%m.color","%n"],shape:"stack",category:"pen"},{id:"pen.setHue",selector:"setPenHueTo:",spec:"set pen color to %1",inputs:["%n"],shape:"stack",category:"pen"},{id:"pen.changeShade",selector:"changePenShadeBy:",spec:"change pen shade by %1",inputs:["%n"],shape:"stack",category:"pen"},{id:"pen.setShade",selector:"setPenShadeTo:",spec:"set pen shade to %1",inputs:["%n"],shape:"stack",category:"pen"},{id:"pen.changeSize",selector:"changePenSizeBy:",spec:"change pen size by %1",inputs:["%n"],shape:"stack",category:"pen"},{id:"pen.setSize",selector:"penSize:",spec:"set pen size to %1",inputs:["%n"],shape:"stack",category:"pen"},{id:"EVENT_WHENFLAGCLICKED",selector:"whenGreenFlag",spec:"when @greenFlag clicked",inputs:[],shape:"hat",category:"events"},{id:"EVENT_WHENKEYPRESSED",selector:"whenKeyPressed",spec:"when %1 key pressed",inputs:["%m.key"],shape:"hat",category:"events"},{id:"EVENT_WHENTHISSPRITECLICKED",selector:"whenClicked",spec:"when this sprite clicked",inputs:[],shape:"hat",category:"events"},{id:"EVENT_WHENSTAGECLICKED",spec:"when stage clicked",inputs:[],shape:"hat",category:"events"},{id:"EVENT_WHENBACKDROPSWITCHESTO",selector:"whenSceneStarts",spec:"when backdrop switches to %1",inputs:["%m.backdrop"],shape:"hat",category:"events"},{id:"EVENT_WHENGREATERTHAN",selector:"whenSensorGreaterThan",spec:"when %1 > %2",inputs:["%m.triggerSensor","%n"],shape:"hat",category:"events"},{id:"EVENT_WHENBROADCASTRECEIVED",selector:"whenIReceive",spec:"when I receive %1",inputs:["%m.broadcast"],shape:"hat",category:"events"},{id:"EVENT_BROADCAST",selector:"broadcast:",spec:"broadcast %1",inputs:["%m.broadcast"],shape:"stack",category:"events"},{id:"EVENT_BROADCASTANDWAIT",selector:"doBroadcastAndWait",spec:"broadcast %1 and wait",inputs:["%m.broadcast"],shape:"stack",category:"events"},{id:"CONTROL_WAIT",selector:"wait:elapsed:from:",spec:"wait %1 seconds",inputs:["%n"],shape:"stack",category:"control"},{id:"CONTROL_REPEAT",selector:"doRepeat",spec:"repeat %1",inputs:["%n"],shape:"c-block",category:"control",hasLoopArrow:!0},{id:"CONTROL_FOREVER",selector:"doForever",spec:"forever",inputs:[],shape:"c-block cap",category:"control",hasLoopArrow:!0},{id:"CONTROL_IF",selector:"doIf",spec:"if %1 then",inputs:["%b"],shape:"c-block",category:"control"},{id:"CONTROL_WAITUNTIL",selector:"doWaitUntil",spec:"wait until %1",inputs:["%b"],shape:"stack",category:"control"},{id:"CONTROL_REPEATUNTIL",selector:"doUntil",spec:"repeat until %1",inputs:["%b"],shape:"c-block",category:"control",hasLoopArrow:!0},{id:"CONTROL_STOP",selector:"stopScripts",spec:"stop %1",inputs:["%m.stop"],shape:"cap",category:"control"},{id:"CONTROL_STARTASCLONE",selector:"whenCloned",spec:"when I start as a clone",inputs:[],shape:"hat",category:"control"},{id:"CONTROL_CREATECLONEOF",selector:"createCloneOf",spec:"create clone of %1",inputs:["%m.spriteOnly"],shape:"stack",category:"control"},{id:"CONTROL_DELETETHISCLONE",selector:"deleteClone",spec:"delete this clone",inputs:[],shape:"cap",category:"control"},{id:"SENSING_ASKANDWAIT",selector:"doAsk",spec:"ask %1 and wait",inputs:["%s"],shape:"stack",category:"sensing"},{id:"videoSensing.videoToggle",selector:"setVideoState",spec:"turn video %1",inputs:["%m.videoState"],shape:"stack",category:"video"},{id:"videoSensing.setVideoTransparency",selector:"setVideoTransparency",spec:"set video transparency to %1%",inputs:["%n"],shape:"stack",category:"video"},{id:"videoSensing.whenMotionGreaterThan",spec:"when video motion > %1",inputs:["%n"],shape:"hat",category:"video"},{id:"SENSING_RESETTIMER",selector:"timerReset",spec:"reset timer",inputs:[],shape:"stack",category:"sensing"},{id:"DATA_SETVARIABLETO",selector:"setVar:to:",spec:"set %1 to %2",inputs:["%m.var","%s"],shape:"stack",category:"variables"},{id:"DATA_CHANGEVARIABLEBY",selector:"changeVar:by:",spec:"change %1 by %2",inputs:["%m.var","%n"],shape:"stack",category:"variables"},{id:"DATA_SHOWVARIABLE",selector:"showVariable:",spec:"show variable %1",inputs:["%m.var"],shape:"stack",category:"variables"},{id:"DATA_HIDEVARIABLE",selector:"hideVariable:",spec:"hide variable %1",inputs:["%m.var"],shape:"stack",category:"variables"},{id:"DATA_ADDTOLIST",selector:"append:toList:",spec:"add %1 to %2",inputs:["%s","%m.list"],shape:"stack",category:"list"},{id:"DATA_DELETEOFLIST",selector:"deleteLine:ofList:",spec:"delete %1 of %2",inputs:["%d.listDeleteItem","%m.list"],shape:"stack",category:"list"},{id:"DATA_DELETEALLOFLIST",spec:"delete all of %1",inputs:["%m.list"],shape:"stack",category:"list"},{id:"MOTION_IFONEDGEBOUNCE",selector:"bounceOffEdge",spec:"if on edge, bounce",inputs:[],shape:"stack",category:"motion"},{id:"DATA_INSERTATLIST",selector:"insert:at:ofList:",spec:"insert %1 at %2 of %3",inputs:["%s","%d.listItem","%m.list"],shape:"stack",category:"list"},{id:"DATA_REPLACEITEMOFLIST",selector:"setLine:ofList:to:",spec:"replace item %1 of %2 with %3",inputs:["%d.listItem","%m.list","%s"],shape:"stack",category:"list"},{id:"DATA_SHOWLIST",selector:"showList:",spec:"show list %1",inputs:["%m.list"],shape:"stack",category:"list"},{id:"DATA_HIDELIST",selector:"hideList:",spec:"hide list %1",inputs:["%m.list"],shape:"stack",category:"list"},{id:"SENSING_OF_XPOSITION",selector:"xpos",spec:"x position",inputs:[],shape:"reporter",category:"motion"},{id:"SENSING_OF_YPOSITION",selector:"ypos",spec:"y position",inputs:[],shape:"reporter",category:"motion"},{id:"SENSING_OF_DIRECTION",selector:"heading",spec:"direction",inputs:[],shape:"reporter",category:"motion"},{id:"SENSING_OF_COSTUMENUMBER",selector:"costumeIndex",spec:"costume #",inputs:[],shape:"reporter",category:"looks"},{id:"LOOKS_COSTUMENUMBERNAME",selector:"LOOKS_COSTUMENUMBERNAME",spec:"costume %1",inputs:["%m"],shape:"reporter",category:"looks"},{id:"SENSING_OF_SIZE",selector:"scale",spec:"size",inputs:[],shape:"reporter",category:"looks"},{id:"SENSING_OF_BACKDROPNAME",selector:"sceneName",spec:"backdrop name",inputs:[],shape:"reporter",category:"looks"},{id:"LOOKS_BACKDROPNUMBERNAME",spec:"backdrop %1",inputs:["%m"],shape:"reporter",category:"looks"},{id:"SENSING_OF_BACKDROPNUMBER",selector:"backgroundIndex",spec:"backdrop #",inputs:[],shape:"reporter",category:"looks"},{id:"SOUND_VOLUME",selector:"volume",spec:"volume",inputs:[],shape:"reporter",category:"sound"},{id:"music.getTempo",selector:"tempo",spec:"tempo",inputs:[],shape:"reporter",category:"music"},{id:"SENSING_TOUCHINGOBJECT",selector:"touching:",spec:"touching %1?",inputs:["%m.touching"],shape:"boolean",category:"sensing"},{id:"SENSING_TOUCHINGCOLOR",selector:"touchingColor:",spec:"touching color %1?",inputs:["%c"],shape:"boolean",category:"sensing"},{id:"SENSING_COLORISTOUCHINGCOLOR",selector:"color:sees:",spec:"color %1 is touching %2?",inputs:["%c","%c"],shape:"boolean",category:"sensing"},{id:"SENSING_DISTANCETO",selector:"distanceTo:",spec:"distance to %1",inputs:["%m.spriteOrMouse"],shape:"reporter",category:"sensing"},{id:"SENSING_ANSWER",selector:"answer",spec:"answer",inputs:[],shape:"reporter",category:"sensing"},{id:"SENSING_KEYPRESSED",selector:"keyPressed:",spec:"key %1 pressed?",inputs:["%m.key"],shape:"boolean",category:"sensing"},{id:"SENSING_MOUSEDOWN",selector:"mousePressed",spec:"mouse down?",inputs:[],shape:"boolean",category:"sensing"},{id:"SENSING_MOUSEX",selector:"mouseX",spec:"mouse x",inputs:[],shape:"reporter",category:"sensing"},{id:"SENSING_MOUSEY",selector:"mouseY",spec:"mouse y",inputs:[],shape:"reporter",category:"sensing"},{id:"SENSING_SETDRAGMODE",spec:"set drag mode %1",inputs:["%m"],shape:"stack",category:"sensing"},{id:"SENSING_LOUDNESS",selector:"soundLevel",spec:"loudness",inputs:[],shape:"reporter",category:"sensing"},{id:"videoSensing.videoOn",selector:"senseVideoMotion",spec:"video %1 on %2",inputs:["%m.videoMotionType","%m.stageOrThis"],shape:"reporter",category:"video"},{id:"SENSING_TIMER",selector:"timer",spec:"timer",inputs:[],shape:"reporter",category:"sensing"},{id:"SENSING_OF",selector:"getAttribute:of:",spec:"%1 of %2",inputs:["%m.attribute","%m.spriteOrStage"],shape:"reporter",category:"sensing"},{id:"SENSING_CURRENT",selector:"timeAndDate",spec:"current %1",inputs:["%m.timeAndDate"],shape:"reporter",category:"sensing"},{id:"SENSING_DAYSSINCE2000",selector:"timestamp",spec:"days since 2000",inputs:[],shape:"reporter",category:"sensing"},{id:"SENSING_USERNAME",selector:"getUserName",spec:"username",inputs:[],shape:"reporter",category:"sensing"},{id:"OPERATORS_ADD",selector:"+",spec:"%1 + %2",inputs:["%n","%n"],shape:"reporter",category:"operators"},{id:"OPERATORS_SUBTRACT",selector:"-",spec:"%1 - %2",inputs:["%n","%n"],shape:"reporter",category:"operators"},{id:"OPERATORS_MULTIPLY",selector:"*",spec:"%1 * %2",inputs:["%n","%n"],shape:"reporter",category:"operators"},{id:"OPERATORS_DIVIDE",selector:"/",spec:"%1 / %2",inputs:["%n","%n"],shape:"reporter",category:"operators"},{id:"OPERATORS_RANDOM",selector:"randomFrom:to:",spec:"pick random %1 to %2",inputs:["%n","%n"],shape:"reporter",category:"operators"},{id:"OPERATORS_LT",selector:"<",spec:"%1 < %2",inputs:["%s","%s"],shape:"boolean",category:"operators"},{id:"OPERATORS_EQUALS",selector:"=",spec:"%1 = %2",inputs:["%s","%s"],shape:"boolean",category:"operators"},{id:"OPERATORS_GT",selector:">",spec:"%1 > %2",inputs:["%s","%s"],shape:"boolean",category:"operators"},{id:"OPERATORS_AND",selector:"&",spec:"%1 and %2",inputs:["%b","%b"],shape:"boolean",category:"operators"},{id:"OPERATORS_OR",selector:"|",spec:"%1 or %2",inputs:["%b","%b"],shape:"boolean",category:"operators"},{id:"OPERATORS_NOT",selector:"not",spec:"not %1",inputs:["%b"],shape:"boolean",category:"operators"},{id:"OPERATORS_JOIN",selector:"concatenate:with:",spec:"join %1 %2",inputs:["%s","%s"],shape:"reporter",category:"operators"},{id:"OPERATORS_LETTEROF",selector:"letter:of:",spec:"letter %1 of %2",inputs:["%n","%s"],shape:"reporter",category:"operators"},{id:"OPERATORS_LENGTH",selector:"stringLength:",spec:"length of %1",inputs:["%s"],shape:"reporter",category:"operators"},{id:"OPERATORS_MOD",selector:"%",spec:"%1 mod %2",inputs:["%n","%n"],shape:"reporter",category:"operators"},{id:"OPERATORS_ROUND",selector:"rounded",spec:"round %1",inputs:["%n"],shape:"reporter",category:"operators"},{id:"OPERATORS_MATHOP",selector:"computeFunction:of:",spec:"%1 of %2",inputs:["%m.mathOp","%n"],shape:"reporter",category:"operators"},{id:"OPERATORS_CONTAINS",spec:"%1 contains %2?",inputs:["%s","%s"],shape:"boolean",category:"operators"},{id:"DATA_ITEMOFLIST",selector:"getLine:ofList:",spec:"item %1 of %2",inputs:["%d.listItem","%m.list"],shape:"reporter",category:"list"},{id:"DATA_ITEMNUMOFLIST",spec:"item # of %1 in %2",inputs:["%s","%m.list"],shape:"reporter",category:"list"},{id:"DATA_LENGTHOFLIST",selector:"lineCountOfList:",spec:"length of %1",inputs:["%m.list"],shape:"reporter",category:"list"},{id:"DATA_LISTCONTAINSITEM",selector:"list:contains:",spec:"%1 contains %2?",inputs:["%m.list","%s"],shape:"boolean",category:"list"},{id:"CONTROL_ELSE",spec:"else",inputs:[],shape:"celse",category:"control"},{id:"scratchblocks:end",spec:"end",inputs:[],shape:"cend",category:"control"},{id:"scratchblocks:ellipsis",spec:". . .",inputs:[],shape:"stack",category:"grey"},{id:"scratchblocks:addInput",spec:"%1 @addInput",inputs:["%n"],shape:"ring",category:"grey"},{id:"SENSING_USERID",spec:"user id",inputs:[],shape:"reporter",category:"obsolete"},{selector:"doIf",spec:"if %1",inputs:["%b"],shape:"c-block",category:"obsolete"},{selector:"doForeverIf",spec:"forever if %1",inputs:["%b"],shape:"c-block cap",category:"obsolete"},{selector:"doReturn",spec:"stop script",inputs:[],shape:"cap",category:"obsolete"},{selector:"stopAll",spec:"stop all",inputs:[],shape:"cap",category:"obsolete"},{selector:"lookLike:",spec:"switch to costume %1",inputs:["%m.costume"],shape:"stack",category:"obsolete"},{selector:"nextScene",spec:"next background",inputs:[],shape:"stack",category:"obsolete"},{selector:"startScene",spec:"switch to background %1",inputs:["%m.backdrop"],shape:"stack",category:"obsolete"},{selector:"backgroundIndex",spec:"background #",inputs:[],shape:"reporter",category:"obsolete"},{id:"SENSING_LOUD",selector:"isLoud",spec:"loud?",inputs:[],shape:"boolean",category:"obsolete"},{id:"text2speech.speakAndWaitBlock",spec:"speak %1",inputs:["%s"],shape:"stack",category:"tts"},{id:"text2speech.setVoiceBlock",spec:"set voice to %1",inputs:["%m"],shape:"stack",category:"tts"},{id:"text2speech.setLanguageBlock",spec:"set language to %1",inputs:["%m"],shape:"stack",category:"tts"},{id:"translate.translateBlock",spec:"translate %1 to %2",inputs:["%s","%m"],shape:"reporter",category:"translate"},{id:"translate.viewerLanguage",spec:"language",shape:"reporter",category:"translate"},{id:"makeymakey.whenKeyPressed",spec:"when %1 key pressed",inputs:["%m"],shape:"hat",category:"makeymakey"},{id:"makeymakey.whenKeysPressedInOrder",spec:"when %1 pressed in order",inputs:["%m"],shape:"hat",category:"makeymakey"},{id:"microbit.whenButtonPressed",spec:"when %1 button pressed",inputs:["%m"],shape:"hat",category:"microbit"},{id:"microbit.isButtonPressed",spec:"%1 button pressed?",inputs:["%m"],shape:"boolean",category:"microbit"},{id:"microbit.whenGesture",spec:"when %1",inputs:["%m"],shape:"hat",category:"microbit"},{id:"microbit.displaySymbol",spec:"display %1",inputs:["%m"],shape:"stack",category:"microbit"},{id:"microbit.displayText",spec:"display text %1",inputs:["%s"],shape:"stack",category:"microbit"},{id:"microbit.clearDisplay",spec:"clear display",shape:"stack",category:"microbit"},{id:"microbit.whenTilted",spec:"when tilted %1",inputs:["%m"],shape:"hat",category:"microbit"},{id:"microbit.isTilted",spec:"tilted %1?",inputs:["%m"],shape:"boolean",category:"microbit"},{id:"microbit.tiltAngle",spec:"tilt angle %1",inputs:["%m"],shape:"reporter",category:"microbit"},{id:"microbit.whenPinConnected",spec:"when pin %1 connected",inputs:["%m"],shape:"hat",category:"microbit"},{id:"ev3.motorTurnClockwise",spec:"motor %1 turn this way for %2 seconds",inputs:["%m","%n"],shape:"stack",category:"ev3"},{id:"ev3.motorTurnCounterClockwise",spec:"motor %1 turn that way for %2 seconds",inputs:["%m","%n"],shape:"stack",category:"ev3"},{id:"ev3.motorSetPower",spec:"motor %1 set power %2%",inputs:["%m","%n"],shape:"stack",category:"ev3"},{id:"ev3.getMotorPosition",spec:"motor %1 position",inputs:["%m"],shape:"reporter",category:"ev3"},{id:"ev3.whenButtonPressed",spec:"when button %1 pressed",inputs:["%m"],shape:"hat",category:"ev3"},{id:"ev3.whenDistanceLessThan",spec:"when distance < %1",inputs:["%n"],shape:"hat",category:"ev3"},{id:"ev3.whenBrightnessLessThan",spec:"when brightness < %1",inputs:["%n"],shape:"hat",category:"ev3"},{id:"ev3.buttonPressed",spec:"button %1 pressed?",inputs:["%m"],shape:"boolean",category:"ev3"},{id:"ev3.getDistance",spec:"distance",shape:"reporter",category:"ev3"},{id:"ev3.getBrightness",spec:"brightness",shape:"reporter",category:"ev3"},{id:"ev3.beepNote",spec:"beep note %1 for %2 secs",inputs:["%d.note","%n"],shape:"stack",category:"ev3"},{id:"wedo2.motorOn",spec:"turn %1 on",inputs:["%m.motor"],shape:"stack",category:"wedo"},{id:"wedo2.motorOff",spec:"turn %1 off",inputs:["%m.motor"],shape:"stack",category:"wedo"},{id:"wedo2.startMotorPower",spec:"set %1 power to %2",inputs:["%m.motor","%n"],shape:"stack",category:"wedo"},{id:"wedo2.setMotorDirection",spec:"set %1 direction to %2",inputs:["%m.motor2","%m.motorDirection"],shape:"stack",category:"wedo"},{id:"wedo2.whenDistance",spec:"when distance %1 %2",inputs:["%m.lessMore","%n"],shape:"hat",category:"wedo"},{id:"wedo2.getDistance",spec:"distance",inputs:[],shape:"reporter",category:"wedo"},{id:"wedo2.motorOnFor",spec:"turn %1 on for %2 seconds",inputs:["%m.motor","%n"],shape:"stack",category:"wedo"},{id:"wedo2.setLightHue",spec:"set light color to %1",inputs:["%n"],shape:"stack",category:"wedo"},{id:"wedo2.playNoteFor",spec:"play note %1 for %2 seconds",inputs:["%n","%n"],shape:"stack",category:"wedo"},{id:"wedo2.whenTilted",spec:"when tilted %1",inputs:["%m.xxx"],shape:"hat",category:"wedo"},{id:"wedo2.isTilted",spec:"tilted %1?",inputs:["%m"],shape:"boolean",category:"wedo"},{id:"wedo2.getTiltAngle",spec:"tilt angle %1",inputs:["%m.xxx"],shape:"reporter",category:"wedo"},{id:"gdxfor.whenGesture",spec:"when %1",inputs:["%m"],shape:"hat",category:"gdxfor"},{id:"gdxfor.whenForcePushedOrPulled",spec:"when force sensor %1",inputs:["%m"],shape:"hat",category:"gdxfor"},{id:"gdxfor.getForce",spec:"force",shape:"reporter",category:"gdxfor"},{id:"gdxfor.whenTilted",spec:"when tilted %1",inputs:["%m"],shape:"hat",category:"gdxfor"},{id:"gdxfor.isTilted",spec:"tilted %1?",inputs:["%m"],shape:"boolean",category:"gdxfor"},{id:"gdxfor.getTilt",spec:"tilt angle %1",inputs:["%m"],shape:"reporter",category:"gdxfor"},{id:"gdxfor.isFreeFalling",spec:"falling?",shape:"boolean",category:"gdxfor"},{id:"gdxfor.getSpin",spec:"spin speed %1",inputs:["%m"],shape:"reporter",category:"gdxfor"},{id:"gdxfor.getAcceleration",spec:"acceleration %1",inputs:["%m"],shape:"reporter",category:"gdxfor"},{id:"boost.motorOnFor",spec:"turn motor %1 for %2 seconds",inputs:["%m","%n"],shape:"stack",category:"boost"},{id:"boost.motorOnForRotation",spec:"turn motor %1 for %2 rotations",inputs:["%m","%n"],shape:"stack",category:"boost"},{id:"boost.motorOn",spec:"turn motor %1 on",inputs:["%m"],shape:"stack",category:"boost"},{id:"boost.motorOff",spec:"turn motor %1 off",inputs:["%m"],shape:"stack",category:"boost"},{id:"boost.setMotorPower",spec:"set motor %1 speed to %2%",inputs:["%m","%n"],shape:"stack",category:"boost"},{id:"boost.setMotorDirection",spec:"set motor %1 direction %2",inputs:["%m","%m"],shape:"stack",category:"boost"},{id:"boost.getMotorPosition",spec:"motor %1 position",inputs:["%m"],shape:"reporter",category:"boost"},{id:"boost.whenColor",spec:"when %1 brick seen",inputs:["%m"],shape:"hat",category:"boost"},{id:"boost.seeingColor",spec:"seeing %1 brick?",inputs:["%m"],shape:"boolean",category:"boost"},{id:"boost.whenTilted",spec:"when tilted %1",inputs:["%m"],shape:"hat",category:"boost"},{id:"boost.getTiltAngle",spec:"tilt angle %1",inputs:["%m"],shape:"reporter",category:"boost"},{id:"boost.setLightHue",spec:"set light color to %1",inputs:["%n"],shape:"stack",category:"boost"}].map((function(e){if(!e.id){if(!e.selector)throw Error("Missing ID: "+e.spec);e.id="sb2:"+e.selector}if(!e.spec)throw Error("Missing spec: "+e.id);var t={id:e.id,spec:e.spec,parts:e.spec.split(b).filter((function(e){return e})),selector:e.selector||"sb3:"+e.id,inputs:null==e.inputs?[]:e.inputs,shape:e.shape,category:e.category,hasLoopArrow:!!e.hasLoopArrow};if(E[t.id])throw Error("Duplicate ID: "+t.id);return E[t.id]=t,t})),R={"@greenFlag":"⚑","@turnRight":"↻","@turnLeft":"↺","@addInput":"▸","@delInput":"◂"},C={};function I(e){Object.keys(e).forEach((function(t){return function(e,t){var i=t.blocksByHash={};Object.keys(t.commands).forEach((function(e){var s=t.commands[e],r=E[e],n=S(s);i[n]||(i[n]=[]),i[n].push(r);var o=k.exec(r.spec);if(o){var a=o[0],c=n.replace(S(a),R[a]);i[c]||(i[c]=[]),i[c].push(r)}})),t.nativeAliases={},Object.keys(t.aliases).forEach((function(e){var s=t.aliases[e],r=E[s];if(void 0===r)throw Error("Invalid alias '"+s+"'");var n=S(e);i[n]||(i[n]=[]),i[n].push(r),t.nativeAliases[s]||(t.nativeAliases[s]=[]),t.nativeAliases[s].push(e)})),Object.keys(t.renamedBlocks||{}).forEach((function(e){var i=t.renamedBlocks[e];if(!E[i])throw Error("Unknown ID: "+i);var s=E[i],r=S(e);M.blocksByHash[r]||(M.blocksByHash[r]=[]),M.blocksByHash[r].push(s)})),t.nativeDropdowns={},Object.keys(t.dropdowns).forEach((function(e){var i=t.dropdowns[e];t.nativeDropdowns[i]=e})),t.code=e,C[e]=t}(t,e[t])}))}var M={aliases:{"turn ccw %1 degrees":"MOTION_TURNLEFT","turn left %1 degrees":"MOTION_TURNLEFT","turn cw %1 degrees":"MOTION_TURNRIGHT","turn right %1 degrees":"MOTION_TURNRIGHT","when flag clicked":"EVENT_WHENFLAGCLICKED","when gf clicked":"EVENT_WHENFLAGCLICKED","when green flag clicked":"EVENT_WHENFLAGCLICKED"},renamedBlocks:{"say %1 for %2 secs":"LOOKS_SAYFORSECS","think %1 for %2 secs":"LOOKS_THINKFORSECS","play sound %1":"SOUND_PLAY","wait %1 secs":"CONTROL_WAIT",clear:"pen.clear"},definePrefix:["define"],defineSuffix:[],ignorelt:["when distance"],math:["abs","floor","ceiling","sqrt","sin","cos","tan","asin","acos","atan","ln","log","e ^","10 ^"],soundEffects:["pitch","pan left/right"],microbitWhen:["moved","shaken","jumped"],osis:["other scripts in sprite","other scripts in stage"],dropdowns:{},commands:{}};function N(e,t){if(!E[e])throw Error("Unknown ID: "+e);E[e].accepts=t}function x(e,t,i){N(e,(function(e,t,s){return i(t,s)})),N(t,(function(e,t,s){return!i(t,s)}))}function B(e){var t,i=[],s=l(e.children);try{for(s.s();!(t=s.n()).done;){var r=t.value;if(!r.isLabel)return;i.push(r.value)}}catch(e){s.e(e)}finally{s.f()}return i.join(" ")}function D(e,t){if(!e)throw Error("Assertion failed! "+(t||""))}T.forEach((function(e){M.commands[e.id]=e.spec})),I({en:M}),x("OPERATORS_MATHOP","SENSING_OF",(function(e,t){var i=e[0];if(i.isInput){var s=i.value;return t.math.includes(s)}})),x("SOUND_CHANGEEFFECTBY","LOOKS_CHANGEEFFECTBY",(function(e,t){var i,s=l(e);try{for(s.s();!(i=s.n()).done;){var r=i.value;if("dropdown"===r.shape){var n,o=r.value,a=l(t.soundEffects);try{for(a.s();!(n=a.n()).done;){if(L(n.value)===L(o))return!0}}catch(e){a.e(e)}finally{a.f()}}}}catch(e){s.e(e)}finally{s.f()}return!1})),x("SOUND_SETEFFECTO","LOOKS_SETEFFECTTO",(function(e,t){var i,s=l(e);try{for(s.s();!(i=s.n()).done;){var r=i.value;if("dropdown"===r.shape){var n,o=r.value,a=l(t.soundEffects);try{for(a.s();!(n=a.n()).done;){if(L(n.value)===L(o))return!0}}catch(e){a.e(e)}finally{a.f()}}}}catch(e){s.e(e)}finally{s.f()}return!1})),x("DATA_LENGTHOFLIST","OPERATORS_LENGTH",(function(e,t){var i=e[e.length-1];if(i.isInput)return"dropdown"===i.shape})),x("DATA_LISTCONTAINSITEM","OPERATORS_CONTAINS",(function(e,t){var i=e[0];if(i.isInput)return"dropdown"===i.shape})),x("pen.setColor","pen.setHue",(function(e,t){var i=e[e.length-1];return i.isInput&&i.isColor||i.isBlock})),x("microbit.whenGesture","gdxfor.whenGesture",(function(e,t){var i,s=l(e);try{for(s.s();!(i=s.n()).done;){var r=i.value;if("dropdown"===r.shape){var n,o=r.value,a=l(t.microbitWhen);try{for(a.s();!(n=a.n()).done;){if(L(n.value)===L(o))return!0}}catch(e){a.e(e)}finally{a.f()}}}}catch(e){s.e(e)}finally{s.f()}return!1})),x("ev3.buttonPressed","microbit.isButtonPressed",(function(e,t){var i,s=l(e);try{for(s.s();!(i=s.n()).done;){var r=i.value;if("dropdown"===r.shape)switch(L(r.value)){case"1":case"2":case"3":case"4":return!0}}}catch(e){s.e(e)}finally{s.f()}return!1})),function(e,t){if(!E[e])throw Error("Unknown ID: "+e);E[e].specialCase=t}("CONTROL_STOP",(function(e,i,s){var r=i[i.length-1];if(r.isInput){var n=r.value;return s.osis.includes(n)?t(t({},E.CONTROL_STOP),{},{shape:"stack"}):void 0}}));var P=function(){function e(e,t){this.value=e,this.cls=t||"",this.el=null,this.height=12,this.metrics=null,this.x=0}return s(e,[{key:"isLabel",get:function(){return!0}},{key:"stringify",value:function(){return"<"===this.value||">"===this.value?this.value:this.value.replace(/([<>[\](){}])/g,"\\$1")}}]),e}(),F=function(){function e(t){this.name=t,this.isArrow="loopArrow"===t,D(e.icons[t],"no info for icon "+t)}return s(e,[{key:"isIcon",get:function(){return!0}},{key:"stringify",value:function(){return R["@"+this.name]||""}}],[{key:"icons",get:function(){return{greenFlag:!0,stopSign:!0,turnLeft:!0,turnRight:!0,loopArrow:!0,addInput:!0,delInput:!0,list:!0}}}]),e}(),z=function(){function e(e,t,i){this.shape=e,this.value=t,this.menu=i||null,this.isRound="number"===e||"number-dropdown"===e,this.isBoolean="boolean"===e,this.isStack="stack"===e,this.isInset="boolean"===e||"stack"===e||"reporter"===e,this.isColor="color"===e,this.hasArrow="dropdown"===e||"number-dropdown"===e,this.isDarker="boolean"===e||"stack"===e||"dropdown"===e,this.isSquare="string"===e||"color"===e||"dropdown"===e,this.hasLabel=!(this.isColor||this.isInset),this.label=this.hasLabel?new P(t,"literal-"+this.shape):null,this.x=0}return s(e,[{key:"isInput",get:function(){return!0}},{key:"stringify",value:function(){if(this.isColor)return D("#"===this.value[0]),"["+this.value+"]";var e=(this.value?this.value+"":"").replace(/([\]\\])/g,"\\$1").replace(/ v$/," \\v");return this.hasArrow&&(e+=" v"),this.isRound?"("+e+")":this.isSquare?"["+e+"]":this.isBoolean?"<>":this.isStack?"{}":e}},{key:"translate",value:function(e){if(this.hasArrow){var t=this.menu||this.value;this.value=t,this.label=new P(this.value,"literal-"+this.shape)}}}]),e}(),H=function(){function e(e,i,s){D(e),this.info=t({},e),this.children=i,this.comment=s||null,this.diff=null;var r=this.info.shape;this.isHat="hat"===r||"cat"===r||"define-hat"===r,this.hasPuzzle="stack"===r||"hat"===r||"cat"===r||"c-block"===r,this.isFinal=/cap/.test(r),this.isCommand="stack"===r||"cap"===r||/block/.test(r),this.isOutline="outline"===r,this.isReporter="reporter"===r,this.isBoolean="boolean"===r,this.isRing="ring"===r,this.hasScript=/block/.test(r),this.isElse="celse"===r,this.isEnd="cend"===r}return s(e,[{key:"isBlock",get:function(){return!0}},{key:"stringify",value:function(e){var t=null,i=!1,s=this.children.map((function(e){return e.isIcon&&(i=!0),t||e.isLabel||e.isIcon||(t=e),e.isScript?"\n"+function(e){return e.split("\n").map((function(e){return" "+e})).join("\n")}(e.stringify())+"\n":e.stringify().trim()+" "})).join("").trim(),r=this.info.language;if(i&&r&&this.info.selector){var n=r.nativeAliases[this.info.id];if(n&&n.length){var o=n[0];return v.test(o)&&t&&(o=o.replace(v,t.stringify())),o}}var a=e||"";return(!1===this.info.categoryIsDefault||"custom-arg"===this.info.category&&(this.isReporter||this.isBoolean)||"custom"===this.info.category&&"stack"===this.info.shape)&&(a&&(a+=" "),a+=this.info.category),a&&(s+=" :: "+a),this.hasScript?s+"\nend":"reporter"===this.info.shape?"("+s+")":"boolean"===this.info.shape?"<"+s+">":s}},{key:"translate",value:function(e,t){var i=this;if(!e)throw Error("Missing language");var s=this.info.id;if(s)if("PROCEDURES_DEFINITION"!==s){var r=this.info.language.commands[s],n=e.commands[s];if(n){var o=O(n),a=this.children.filter((function(e){return!e.isLabel&&!e.isIcon}));t||a.forEach((function(t){return t.translate(e)}));var c=O(r).parts.map((function(e){return A(e)})).filter((function(e){return e})),h=0,u=c.map((function(e){return h=Math.max(h,e),a[e-1]})),p=a.slice(h);this.children=o.parts.map((function(e){if(e=e.trim()){var t=A(e);return t?u[t-1]:k.test(e)?new F(e.slice(1)):new P(e)}})).filter((function(e){return e})),p.forEach((function(t,s){1===s&&"CONTROL_IF"===i.info.id&&i.children.push(new P(e.commands.CONTROL_ELSE)),i.children.push(t)})),this.info.language=e,this.info.isRTL=g.includes(e.code),this.info.categoryIsDefault=!0}}else{var f=this.children.find((function(e){return e.isOutline}));this.children=[];var d,y=l(e.definePrefix);try{for(y.s();!(d=y.n()).done;){var v=d.value;this.children.push(new P(v))}}catch(e){y.e(e)}finally{y.f()}this.children.push(f);var m,b=l(e.defineSuffix);try{for(b.s();!(m=b.n()).done;){var w=m.value;this.children.push(new P(w))}}catch(e){b.e(e)}finally{b.f()}}}}]),e}(),G=function(){function e(e,t){this.label=new P(e,"comment-label"),this.width=null,this.hasBlock=t}return s(e,[{key:"isComment",get:function(){return!0}},{key:"stringify",value:function(){return"// "+this.label.value}}]),e}(),U=function(){function e(e){D(e),this.child=e,e.isBlock?(this.shape=e.info.shape,this.info=e.info):this.shape="stack"}return s(e,[{key:"isGlow",get:function(){return!0}},{key:"stringify",value:function(){return this.child.isBlock?this.child.stringify("+"):this.child.stringify().split("\n").map((function(e){return"+ "+e})).join("\n")}},{key:"translate",value:function(e){this.child.translate(e)}}]),e}(),V=function(){function e(e){this.blocks=e,this.isEmpty=!e.length,this.isFinal=!this.isEmpty&&e[e.length-1].isFinal}return s(e,[{key:"isScript",get:function(){return!0}},{key:"stringify",value:function(){return this.blocks.map((function(e){var t=e.stringify();return e.comment&&(t+=" "+e.comment.stringify()),t})).join("\n")}},{key:"translate",value:function(e){this.blocks.forEach((function(t){return t.translate(e)}))}}]),e}(),_=function(){function e(e){this.scripts=e}return s(e,[{key:"stringify",value:function(){return this.scripts.map((function(e){return e.stringify()})).join("\n\n")}},{key:"translate",value:function(e){this.scripts.forEach((function(t){return t.translate(e)}))}}]),e}();function j(e,t,i){var s=[];Array.isArray(t[t.length-1])&&(s=t.pop());var r,n=[],o=l(t);try{for(o.s();!(r=o.n()).done;){var a=r.value;a.isLabel?n.push(a.value):a.isIcon?n.push("@"+a.name):n.push("_")}}catch(e){o.e(e)}finally{o.f()}var c,h,u=n.join(" "),p=function(e,t,i,s){var r,n=l(s);try{for(n.s();!(r=n.n()).done;){var o=r.value;if(Object.prototype.hasOwnProperty.call(o.blocksByHash,e)){var a,c=o.blocksByHash[e],h=l(c);try{for(h.s();!(a=h.n()).done;){var u=a.value;if(("reporter"!==t.shape||"reporter"===u.shape||"ring"===u.shape)&&("boolean"!==t.shape||"boolean"===u.shape)&&(!(c.length>1&&u.accepts)||u.accepts(t,i,o)))return u.specialCase&&(u=u.specialCase(t,i,o)||u),{type:u,lang:o}}}catch(e){h.e(e)}finally{h.f()}}}}catch(e){n.e(e)}finally{n.f()}}(e.hash=L(u),e,t,i);if(p)c=p.lang,h=p.type,e.language=c,e.isRTL=g.includes(c.code),("ring"===h.shape?"reporter"===e.shape:"stack"===e.shape)&&(e.shape=h.shape),e.category=h.category,e.categoryIsDefault=!0,h.selector&&(e.selector=h.selector),h.id&&(e.id=h.id),e.hasLoopArrow=h.hasLoopArrow,". . ."===h.spec&&(t=[new P(". . .")]);else{var y,v=l(i);try{for(v.s();!(y=v.n()).done;){var m=y.value;if(K(t,m)){e.shape="define-hat",e.category="custom";var b=t.splice(m.definePrefix.length,t.length-m.defineSuffix.length).map((function(e){if(e.isInput&&e.isBoolean)e=j({shape:"boolean",argument:"boolean",category:"custom-arg"},[new P("")],i);else if(!e.isInput||"string"!==e.shape&&"number"!==e.shape)(e.isReporter||e.isBoolean)&&e.info.categoryIsDefault&&(e.info.category="custom-arg",e.info.argument=e.isBoolean?"boolean":"number");else{var t=e.value.split(/ +/g).map((function(e){return new P(e)}));e=j({shape:"reporter",argument:"string"===e.shape?"string":"number",category:"custom-arg"},t,i)}return e})),A=new H({shape:"outline",category:"custom",categoryIsDefault:!0,hasLoopArrow:!1},b);t.splice(m.definePrefix.length,0,A);break}}}catch(e){v.e(e)}finally{v.f()}}!function(e,t){var i,s=l(t);try{for(s.s();!(i=s.n()).done;){var r=i.value;w.test(r)?(e.color=r,e.category="",e.categoryIsDefault=!1):f.includes(r)?(e.category=r,e.categoryIsDefault=!1):d.includes(r)?e.shape=r:"loop"===r?e.hasLoopArrow=!0:"+"!==r&&"-"!==r||(e.diff=r)}}catch(e){s.e(e)}finally{s.f()}}(e,s),e.hasLoopArrow&&t.push(new F("loopArrow"));var O=new H(e,t);return h&&k.test(h.spec)&&O.translate(c,!0),"+"===e.diff?new U(O):(O.diff=e.diff,O)}function K(e,t){if(e.length"===s)&&">"===e&&1===i.length&&!i[i.length-1].isLabel){var r=a();if("["===r||"("===r||"<"===r||"{"===r){t=null,i.push(new P(s)),n();continue}}if(s===e)break;if("/"===s&&"/"===o()&&!e)break;switch(s){case"[":t=null,i.push(f());break;case"(":t=null,i.push(g());break;case"<":t=null,i.push(y());break;case"{":t=null,i.push(v());break;case" ":case"\t":n(),t=null;break;case"◂":case"▸":i.push(m()),t=null;break;case"@":n();for(var c="";s&&/[a-zA-Z]/.test(s);)c+=s,n();"cloud"===c?i.push(new P("☁")):i.push(Object.prototype.hasOwnProperty.call(F.icons,c)?new F(c):new P("@"+c)),t=null;break;case"\\":n();case":":if(":"===s&&":"===o())return i.push(k(e)),i;default:t||i.push(t=new P("")),t.value+=s,n()}}return i}function f(){n();for(var e="",t=!1;s&&"]"!==s&&"\n"!==s;){if("\\"===s){if(n(),"v"===s&&(t=!0),!s)break}else t=!1;e+=s,n()}return"]"===s&&n(),w.test(e)?new z("color",e):!t&&/ v$/.test(e)?u("dropdown",e.slice(0,e.length-2)):new z("string",e)}function d(e){var t=p(e);if(s&&"\n"===s&&(i=!0,n()),0!==t.length){if(1===t.length){var r=t[0];if(r.isBlock&&(r.isReporter||r.isBoolean||r.isRing))return r}return h("stack",t)}}function g(){if(n()," "===s&&(n(),"v"===s&&")"===o()))return n(),n(),new z("number-dropdown","");var e=p(")");if(s&&")"===s&&n(),0===e.length)return new z("number","");if(1===e.length&&e[0].isLabel){var t=e[0].value;if(/^[0-9e.-]*$/.test(t))return new z("number",t);if(w.test(t))return new z("color",t)}if(e.length>1&&e.every((function(e){return e.isLabel}))&&"v"===e[e.length-1].value)return e.pop(),u("number-dropdown",e.map((function(e){return e.value})).join(" "));var i=h("reporter",e);if(i.info&&"ring"===i.info.shape){var r=i.children[0];r&&r.isInput&&"number"===r.shape&&""===r.value?i.children[0]=new z("reporter"):(r&&r.isScript&&r.isEmpty||r&&r.isBlock&&!r.children.length)&&(i.children[0]=new z("stack"))}return i}function y(){n();var e=p(">");return s&&">"===s&&n(),0===e.length?new z("boolean"):h("boolean",e)}function v(){n(),i=!1;var e=Z((function(){for(;s&&"}"!==s;){var e=d("}");if(e)return e}})),t=[];return e.forEach((function(e){t=t.concat(e.blocks)})),"}"===s&&n(),i?new V(t):(function(e,t){if(!e)throw Error("Assertion failed! "+(t||""))}(t.length<=1),t.length?t[0]:h("stack",[]))}function m(){var e=s;switch(n(),e){case"▸":return new F("addInput");case"◂":return new F("delInput");default:return}}function k(e){n(),n();for(var t=[],i="";s&&"\n"!==s&&s!==e;){if(" "===s)i&&(t.push(i),i="");else{if("/"===s&&"/"===o())break;i+=s}n()}return i&&t.push(i),t}function b(){var e;"+"!==s&&"-"!==s||(e=s,n());var t=d();if("/"===s&&"/"===o()){var i=function(e){n(),n();for(var t="";s&&"\n"!==s&&s!==e;)t+=s,n();return s&&"\n"===s&&n(),new G(t,!0)}();if(i.hasBlock=t&&t.children.length,!i.hasBlock)return i;t.comment=i}return t&&(t.diff=e),t}return t.map((function(e){c=c.concat(e.define)})),function(){if(s)return b()||"NL"}}function Z(e){var i=e();function s(){i=e()}function r(){var e=i;if(s(),e.hasScript)for(;;){var t=n();if(e.children.push(new V(t)),!i||!i.isElse){i&&i.isEnd&&s();break}var r,o=l(i.children);try{for(o.s();!(r=o.n()).done;){var a=r.value;e.children.push(a)}}catch(e){o.e(e)}finally{o.f()}s()}return e}function n(){for(var e=[];i;)if("NL"!==i){if(!i.isCommand)return e;var t=r(),n="+"===t.diff;if(n&&(t.diff=null),n){var o=e[e.length-1],a=[];o&&o.isGlow&&(e.pop(),a=o.child.isScript?o.child.blocks:[o.child]),a.push(t),e.push(new U(new V(a)))}else e.push(t)}else s();return e}return function(){for(;"NL"===i;)s();for(var e=[];i;){for(var n=[];i&&"NL"!==i;){var o=r(),a="+"===o.diff;if(a&&(o.diff=null),(o.isElse||o.isEnd)&&(o=new H(t(t({},o.info),{},{shape:"stack"}),o.children)),a){var c=n[n.length-1],l=[];c&&c.isGlow&&(n.pop(),l=c.child.isScript?c.child.blocks:[c.child]),l.push(o),n.push(new U(new V(l)))}else if(o.isHat)n.length&&e.push(new V(n)),n=[o];else{if(o.isFinal){n.push(o);break}if(!o.isCommand){n.length&&e.push(new V(n)),e.push(new V([o])),n=[];break}n.push(o)}}for(n.length&&e.push(new V(n));"NL"===i;)s()}return e}()}function X(e,t){e.isScript?e.blocks=e.blocks.map((function(e){return X(e,t),t(e)||e})):e.isBlock?e.children=e.children.map((function(e){return X(e,t),t(e)||e})):e.isGlow&&X(e.child,t)}var Y,Q,q={"append:toList:":1,"deleteLine:ofList:":1,"insert:at:ofList:":2,"setLine:ofList:to:":1,"showList:":0,"hideList:":0};function J(e,i){if((i=t({inline:!1,languages:["en"]},i)).dialect)throw Error("Option 'dialect' no longer supported");e=(e=e.replace(/</g,"<")).replace(/>/g,">"),i.inline&&(e=e.replace(/\n/g," "));var s=i.languages.map((function(e){var t=C[e];if(!t)throw Error("Unknown language: '"+e+"'");return t})),r=Z(W(e,s));return function(e){var t=Object.create(null),i=new Set;e.forEach((function(e){var s=new Set;X(e,(function(e){if(e.isBlock)if("define-hat"===e.info.shape){var r=e.children.find((function(e){return e.isOutline}));if(!r)return;var n,o=[],a=[],c=l(r.children);try{for(c.s();!(n=c.n()).done;){var h=n.value;if(h.isLabel)a.push(h.value);else if(h.isBlock){if(!h.info.argument)return;a.push({number:"%n",string:"%s",boolean:"%b"}[h.info.argument]);var u=B(h);o.push(u),s.add(u)}}}catch(e){c.e(e)}finally{c.f()}var p=a.join(" "),f=S(p),d={spec:p,names:o};t[f]||(t[f]=d),e.info.id="PROCEDURES_DEFINITION",e.info.selector="procDef",e.info.call=d.spec,e.info.names=d.names,e.info.category="custom"}else if(e.info.categoryIsDefault&&(e.isReporter||e.isBoolean)){var g=B(e);s.has(g)&&(e.info.category="custom-arg",e.info.categoryIsDefault=!1,e.info.selector="getParam")}else if(Object.prototype.hasOwnProperty.call(q,e.info.selector)){var y=q[e.info.selector],v=e.children.filter((function(e){return!e.isLabel})),m=v[y];m&&m.isInput&&i.add(m.value)}}))})),e.forEach((function(e){X(e,(function(e){if(e.info&&e.info.categoryIsDefault&&"obsolete"===e.info.category){var s=t[e.info.hash];s&&(e.info.selector="call",e.info.call=s.spec,e.info.names=s.names,e.info.category="custom")}else{var r,n;e.isReporter&&"variables"===e.info.category&&e.info.categoryIsDefault&&(e.info.selector="readVariable",r=B(e),n=e.info),r&&i.has(r)&&(n.category="list",n.categoryIsDefault=!1,n.selector="contentsOfList:")}}))}))}(r),new _(r)}function $(e,t){if(!e)throw Error("Assertion failed! "+(t||""))}var ee={textContent:!0},te=function(){function e(){}return s(e,null,[{key:"init",value:function(t){Y=t.document;var i=t.DOMParser;Q=(new i).parseFromString("","application/xml"),e.XMLSerializer=t.XMLSerializer}},{key:"makeCanvas",value:function(){return Y.createElement("canvas")}},{key:"cdata",value:function(e){return Q.createCDATASection(e)}},{key:"el",value:function(t,i){var s=Y.createElementNS("http://www.w3.org/2000/svg",t);return e.setProps(s,i)}},{key:"setProps",value:function(e,t){for(var i in t){var s=t[i]+"";ee[i]?e[i]=s:null!=t[i]&&Object.prototype.hasOwnProperty.call(t,i)&&e.setAttributeNS(null,i,s)}return e}},{key:"withChildren",value:function(e,t){var i,s=l(t);try{for(s.s();!(i=s.n()).done;){var r=i.value;e.appendChild(r)}}catch(e){s.e(e)}finally{s.f()}return e}},{key:"group",value:function(t){return e.withChildren(e.el("g"),t)}},{key:"newSVG",value:function(t,i,s){return e.el("svg",{version:"1.1",width:t*s,height:i*s,viewBox:"0 0 "+t+" "+i})}},{key:"polygon",value:function(i){return e.el("polygon",t(t({},i),{},{points:i.points.join(" ")}))}},{key:"path",value:function(i){return e.el("path",t(t({},i),{},{path:null,d:i.path.join(" ")}))}},{key:"text",value:function(i,s,r,n){var o=e.el("text",t(t({},n),{},{x:i,y:s,textContent:r}));return o}},{key:"symbol",value:function(t){return e.el("use",{href:t})}},{key:"move",value:function(t,i,s){return e.setProps(s,{transform:"translate("+t+" "+i+")"}),s}},{key:"translatePath",value:function(e,t,i){for(var s=!0,r=i.split(" "),n=[],o=0;o0?r.concat(["L",s+2,t,"L",s,t+2]):r.concat(["L",s+3,t,"L",0,t-3])).join(" ")}},{key:"getArm",value:function(e,t){return"L 15 "+(t-2)+"\n L 17 "+t+"\n L "+(e-3)+" "+t+"\n L "+e+" "+(t+3)}},{key:"stackRect",value:function(i,s,r){return e.path(t(t({},r),{},{path:[e.getTop(i),e.getRightAndBottom(i,s,!0,0),"Z"]}))}},{key:"capPath",value:function(t,i){return[e.getTop(t),e.getRightAndBottom(t,i,!1,0),"Z"]}},{key:"capRect",value:function(i,s,r){return e.path(t(t({},r),{},{path:e.capPath(i,s)}))}},{key:"hatRect",value:function(i,s,r){return e.path(t(t({},r),{},{path:["M",0,12,e.arc(0,12,80,10,80,80),"L",i-3,10,"L",i,13,e.getRightAndBottom(i,s,!0),"Z"]}))}},{key:"curve",value:function(e,t,i,s,r){var n=(t+s)/2;return Math.round((e+i)/2+(r=r||.42)*(s-t))+" "+Math.round(n-r*(i-e))+" "+i+" "+s}},{key:"procHatBase",value:function(i,s,r,n){return r=Math.min(.2,35/i),e.path(t(t({},n),{},{path:["M",0,15,"Q",e.curve(0,15,i,15,r),e.getRightAndBottom(i,s,!0),"M",-1,13,"Q",e.curve(-1,13,i+1,13,r),"Q",e.curve(i+1,13,i,16,.6),"Q",e.curve(i,16,0,16,-r),"Q",e.curve(0,16,-1,13,.6),"Z"]}))}},{key:"procHatCap",value:function(t,i,s){return e.path({path:["M",-1,13,"Q",e.curve(-1,13,t+1,13,s),"Q",e.curve(t+1,13,t,16,.6),"Q",e.curve(t,16,0,16,-s),"Q",e.curve(0,16,-1,13,.6),"Z"],class:"sb-define-hat-cap"})}},{key:"procHatRect",value:function(t,i,s){var r=i-52,n=Math.min(.2,35/t);return e.move(0,r,e.group([e.procHatBase(t,52,n,s),e.procHatCap(t,52,n)]))}},{key:"mouthRect",value:function(i,s,r,n,o){for(var a=n[0].height,c=[e.getTop(i),e.getRightAndBottom(i,a,!0,15)],l=1;l1)return te.mouthRect(t,i,this.isFinal,s,{class:"sb-"+this.info.category+" sb-bevel"});if("outline"===this.info.shape)return te.setProps(te.stackRect(t,i),{class:"sb-outline"});if(this.isRing){var r=this.children[0];if(r&&(r.isStack||r.isBlock||r.isScript)){var n=r.isScript?"stack":r.isStack?r.shape:r.info.shape;return te.ringRect(t,i,r.y,r.width,r.height,n,{class:"sb-"+this.info.category+" sb-bevel"})}}var o=e.shapes[this.info.shape];if(!o)throw Error("no shape func: "+this.info.shape);return o(t,i,{class:"sb-"+this.info.category+" sb-bevel"})}},{key:"minDistance",value:function(e){return this.isBoolean?e.isReporter?4+e.height/4|0:e.isLabel?5+e.height/2|0:e.isBoolean||"boolean"===e.shape?5:2+e.height/2|0:this.isReporter?e.isInput&&e.isRound||(e.isReporter||e.isBoolean)&&!e.hasScript?0:e.isLabel?2+e.height/2|0:e.height/2-2|0:0}},{key:"draw",value:function(){var t="define-hat"===this.info.shape,i=this.children,s=e.padding[this.info.shape]||e.padding.null,r=s[0],n=s[1],o=s[2],a=0,c=function(e){this.y=e,this.width=0,this.height=e?13:16,this.children=[]},h=0,u=0,p=new c(a),f=function(e){0===v.length?p.height+=r+o:(p.height+=e?0:2,p.y-=1),a+=p.height,v.push(p)};if(this.info.isRTL){var d,g=0,y=function(){i=i.slice(0,g).concat(i.slice(g,d).reverse()).concat(i.slice(d))};for(d=0;d0?30:0,w=this.isCommand?0:this.minDistance(k),A=this.isCommand?k.isBlock||k.isInput?b:0:w;A&&!v.length&&p.width","application/xml"),e.XMLSerializer=t.XMLSerializer}},{key:"makeCanvas",value:function(){return ke.createElement("canvas")}},{key:"cdata",value:function(e){return be.createCDATASection(e)}},{key:"el",value:function(t,i){var s=ke.createElementNS("http://www.w3.org/2000/svg",t);return e.setProps(s,i)}},{key:"setProps",value:function(e,t){for(var i in t){var s=t[i]+"";Ae[i]?e[i]=s:null!=t[i]&&Object.prototype.hasOwnProperty.call(t,i)&&e.setAttributeNS(null,i,s)}return e}},{key:"withChildren",value:function(e,t){var i,s=l(t);try{for(s.s();!(i=s.n()).done;){var r=i.value;e.appendChild(r)}}catch(e){s.e(e)}finally{s.f()}return e}},{key:"group",value:function(t){return e.withChildren(e.el("g"),t)}},{key:"newSVG",value:function(t,i,s){return e.el("svg",{version:"1.1",width:t*s,height:i*s,viewBox:"0 0 "+t*s+" "+i*s})}},{key:"polygon",value:function(i){return e.el("polygon",t(t({},i),{},{points:i.points.join(" ")}))}},{key:"path",value:function(i){return e.el("path",t(t({},i),{},{path:null,d:i.path.join(" ")}))}},{key:"text",value:function(i,s,r,n){var o=e.el("text",t(t({},n),{},{x:i,y:s,textContent:r}));return o}},{key:"symbol",value:function(t){return e.el("use",{href:t})}},{key:"move",value:function(t,i,s){return e.setProps(s,{transform:"translate("+t+" "+i+")"}),s}},{key:"rect",value:function(i,s,r){return e.el("rect",t(t({},r),{},{x:0,y:0,width:i,height:s}))}},{key:"roundRect",value:function(i,s,r){return e.rect(i,s,t(t({},r),{},{rx:4,ry:4}))}},{key:"pillRect",value:function(i,s,r){var n=s/2;return e.rect(i,s,t(t({},r),{},{rx:n,ry:n}))}},{key:"pointedPath",value:function(e,t){var i=t/2;return["M "+i+" 0","L "+(e-i)+" 0 "+e+" "+i,"L "+e+" "+i+" "+(e-i)+" "+t,"L "+i+" "+t+" 0 "+i,"L 0 "+i+" "+i+" 0","Z"]}},{key:"pointedRect",value:function(i,s,r){return e.path(t(t({},r),{},{path:e.pointedPath(i,s)}))}},{key:"topNotch",value:function(e,t){return"c 2 0 3 1 4 2\n l 4 4\n c 1 1 2 2 4 2\n h 12\n c 2 0 3 -1 4 -2\n l 4 -4\n c 1 -1 2 -2 4 -2\n L "+(e-4)+" "+t+"\n a 4 4 0 0 1 4 4"}},{key:"getTop",value:function(t){return"M 0 4\n A 4 4 0 0 1 4 0\n H 12 "+e.topNotch(t,0)}},{key:"getRingTop",value:function(e){return"M 0 3\n L 3 0\n L 7 0\n L 10 3\n L 16 3\n L 19 0\n L "+(e-3)+" 0\n L "+e+" 3"}},{key:"getRightAndBottom",value:function(e,t,i,s){void 0===s&&(s=0);var r=["L "+e+" "+(t-4),"a 4 4 0 0 1 -4 4"];return i&&(r=r.concat(["L "+(s+48)+" "+t,"c -2 0 -3 1 -4 2","l -4 4","c -1 1 -2 2 -4 2","h -12","c -2 0 -3 -1 -4 -2","l -4 -4","c -1 -1 -2 -2 -4 -2"])),0===s?(r.push("L",s+4,t),r.push("a 4 4 0 0 1 -4 -4")):(r.push("L",s+4,t),r.push("a 4 4 0 0 0 -4 4")),r.join(" ")}},{key:"getArm",value:function(t,i){return"L 16 "+(i-4)+"\n a 4 4 0 0 0 4 4\n L 28 "+i+" "+e.topNotch(t,i)}},{key:"getArmNoNotch",value:function(e,t){return"L 16 "+(t-4)+"\n a 4 4 0 0 0 4 4\n L 28 "+t+" L "+(e-4)+" "+t+"\n a 4 4 0 0 1 4 4"}},{key:"stackRect",value:function(i,s,r){return e.path(t(t({},r),{},{path:[e.getTop(i),e.getRightAndBottom(i,s,!0,0),"Z"]}))}},{key:"capPath",value:function(t,i){return[e.getTop(t),e.getRightAndBottom(t,i,!1,0),"Z"]}},{key:"capRect",value:function(i,s,r){return e.path(t(t({},r),{},{path:e.capPath(i,s)}))}},{key:"getHatTop",value:function(e){return"M 0 16 c 25,-22 71,-22 96,0 L "+(e-4)+" 16 a 4 4 0 0 1 4 4"}},{key:"getCatTop",value:function(e){return"M 0 32\n c2.6,-2.3 5.5,-4.3 8.5,-6.2c-1,-12.5 5.3,-23.3 8.4,-24.8c3.7,-1.8 16.5,13.1 18.4,15.4c8.4,-1.3 17,-1.3 25.4,0c1.9,-2.3 14.7,-17.2 18.4,-15.4c3.1,1.5 9.4,12.3 8.4,24.8c3,1.8 5.9,3.9 8.5,6.1\n L "+(e-4)+" 32\n a 4 4 0 0 1 4 4"}},{key:"hatRect",value:function(i,s,r){return e.path(t(t({},r),{},{path:[e.getHatTop(i),e.getRightAndBottom(i,s,!0,0),"Z"]}))}},{key:"catHat",value:function(i,s,r){return e.group([e.path(t(t({},r),{},{path:[e.getCatTop(i),e.getRightAndBottom(i,s,!0,0),"Z"]})),e.move(0,32,e.setProps(e.group([e.el("circle",{cx:29.1,cy:-3.3,r:3.4}),e.el("circle",{cx:59.2,cy:-3.3,r:3.4}),e.el("path",{d:"M45.6,0.1c-0.9,0-1.7-0.3-2.3-0.9c-0.6,0.6-1.3,0.9-2.2,0.9c-0.9,0-1.8-0.3-2.3-0.9c-1-1.1-1.1-2.6-1.1-2.8c0-0.5,0.5-1,1-1l0,0c0.6,0,1,0.5,1,1c0,0.4,0.1,1.7,1.4,1.7c0.5,0,0.7-0.2,0.8-0.3c0.3-0.3,0.4-1,0.4-1.3c0-0.1,0-0.1,0-0.2c0-0.5,0.5-1,1-1l0,0c0.5,0,1,0.4,1,1c0,0,0,0.1,0,0.2c0,0.3,0.1,0.9,0.4,1.2C44.8-2.2,45-2,45.5-2s0.7-0.2,0.8-0.3c0.3-0.4,0.4-1.1,0.3-1.3c0-0.5,0.4-1,0.9-1.1c0.5,0,1,0.4,1.1,0.9c0,0.2,0.1,1.8-0.8,2.8C47.5-0.4,46.8,0.1,45.6,0.1z"})]),{fill:"#000","fill-opacity":.6})),e.move(0,32,e.el("path",{d:"M73.1-15.6c1.7-4.2,4.5-9.1,5.8-8.5c1.6,0.8,5.4,7.9,5,15.4c0,0.6-0.7,0.7-1.1,0.5c-3-1.6-6.4-2.8-8.6-3.6C72.8-12.3,72.4-13.7,73.1-15.6z",fill:"#FFD5E6",transform:"translate(0, 32)"})),e.move(0,32,e.el("path",{d:"M22.4-15.6c-1.7-4.2-4.5-9.1-5.8-8.5c-1.6,0.8-5.4,7.9-5,15.4c0,0.6,0.7,0.7,1.1,0.5c3-1.6,6.4-2.8,8.6-3.6C22.8-12.3,23.2-13.7,22.4-15.6z",fill:"#FFD5E6",transform:"translate(0, 32)"}))])}},{key:"getProcHatTop",value:function(e){return"M 0 20 a 20 20 0 0 1 20 -20 L "+(e-20)+" 0 a 20,20 0 0,1 20,20"}},{key:"procHatRect",value:function(i,s,r){return e.path(t(t({},r),{},{path:[e.getProcHatTop(i),e.getRightAndBottom(i,s,!0,0),"Z"]}))}},{key:"mouthRect",value:function(i,s,r,n,o){for(var a=n[0].height,c=[e.getTop(i),e.getRightAndBottom(i,a,!0,16)],l=1;l=18?11:(40-this.label.width)/2;i=this.label.width+2*r,s=Oe.move(r,9,s)}else i=this.isInset?30:null;this.hasArrow&&(i+=20),this.width=i;var n=this.height=32,o=e.shapes[this.shape](i,n);Oe.setProps(o,{class:(this.isColor?"":"sb3-"+t.info.category)+" sb3-input sb3-input-"+this.shape}),this.isColor?Oe.setProps(o,{fill:this.value}):"dropdown"===this.shape?t.info.color&&Oe.setProps(o,{fill:t.info.color,stroke:"rgba(0, 0, 0, 0.2)"}):"number-dropdown"===this.shape?(o.classList.add("sb3-"+t.info.category+"-alt"),t.info.color&&Oe.setProps(o,{fill:"rgba(0, 0, 0, 0.1)",stroke:"rgba(0, 0, 0, 0.15)"})):"boolean"===this.shape&&(o.classList.remove("sb3-"+t.info.category),o.classList.add("sb3-"+t.info.category+"-dark"),t.info.color&&Oe.setProps(o,{fill:"rgba(0, 0, 0, 0.15)"}));var a=Oe.group([o]);return this.hasLabel&&a.appendChild(s),this.hasArrow&&a.appendChild(Oe.move(i-24,13,Oe.symbol("#sb3-dropdownArrow",{}))),a}}],[{key:"shapes",get:function(){return{string:Oe.pillRect,number:Oe.pillRect,"number-dropdown":Oe.pillRect,color:Oe.pillRect,dropdown:Oe.roundRect,boolean:Oe.pointedRect,stack:Oe.stackRect,reporter:Oe.pillRect}}}]),e}(),xe=function(){function e(e){n(this,e),this.children=e.children.map(ze),this.comment=this.comment?ze(this.comment):null,this.isRound=this.isReporter,this.info=t({},e.info),Object.prototype.hasOwnProperty.call(p,this.info.category)&&(this.info.category=p[this.info.category]),Object.prototype.hasOwnProperty.call(u,this.info.category)&&(this.children.unshift(new Me),this.children.unshift(new Ie({name:this.info.category+"Block"})),this.info.category="extension"),this.x=0,this.width=null,this.height=null,this.firstLine=null,this.innerWidth=null}return s(e,[{key:"isBlock",get:function(){return!0}},{key:"measure",value:function(){var e,t=l(this.children);try{for(t.s();!(e=t.n()).done;){var i=e.value;i.measure&&i.measure()}}catch(e){t.e(e)}finally{t.f()}this.comment&&this.comment.measure()}},{key:"drawSelf",value:function(t,i,s){if(s.length>1)return Oe.mouthRect(t,i,this.isFinal,s,{class:"sb3-"+this.info.category});if("outline"===this.info.shape)return Oe.setProps(Oe.stackRect(t,i),{class:"sb3-"+this.info.category+" sb3-"+this.info.category+"-alt"});if(this.isRing){var r=this.children[0];if(r&&(r.isInput||r.isBlock||r.isScript))return Oe.roundRect(t,i,{class:"sb3-"+this.info.category})}var n=e.shapes[this.info.shape];if(!n)throw Error("no shape func: "+this.info.shape);return n(t,i,{class:"sb3-"+this.info.category})}},{key:"horizontalPadding",value:function(e){if(this.isRound){if(e.isIcon)return 16;if(e.isLabel)return 12;if(e.isDropdown)return 12;if(e.isBoolean)return 12;if(e.isRound)return 4}else if(this.isBoolean){if(e.isIcon)return 24;if(e.isLabel)return 20;if(e.isDropdown)return 20;if(e.isRound&&e.isBlock)return 24;if(e.isRound)return 20;if(e.isBoolean)return 8}return 8}},{key:"marginBetween",value:function(e,t){return e.isLabel&&t.isLabel?5:8}},{key:"draw",value:function(){var t="define-hat"===this.info.shape,i=this.children,s=this.isCommand,r=e.padding[this.info.shape]||e.padding.null,n=r[0],o=r[1],a="cat"===this.info.shape?16:0,c=function(e){this.y=e,this.width=0,this.height=s?40:32,this.children=[]},l=0,h=0,u=new c(a),p=function(){0===m.length?u.height+=n+o:(u.height-=11,u.y-=2),a+=u.height,m.push(u)};if(this.info.isRTL){var f,d=0,g=function(){i=i.slice(0,d).concat(i.slice(d,f).reverse()).concat(i.slice(f))};for(f=0;f\s?|\n|\r\n|\r/gi,"\n"),n=i.createElement("pre");n.innerHTML=r;var o=n.textContent;return s.inline&&(o=o.replace("\n","")),o}function o(e,t,s,r){var n;if(r.inline){n=i.createElement("span");var o="scratchblocks scratchblocks-inline";s.scripts[0]&&!s.scripts[0].isEmpty&&(o+=" scratchblocks-inline-"+s.scripts[0].blocks[0].shape),n.className=o,n.style.display="inline-block",n.style.verticalAlign="middle"}else(n=i.createElement("div")).className="scratchblocks";n.appendChild(t),e.innerHTML="",e.appendChild(n)}return function(e){te.init(e),he.measuring=te.makeCanvas().getContext("2d")}(e),function(e){Oe.init(e),Ce.measuring=Oe.makeCanvas().getContext("2d")}(e),{allLanguages:C,loadLanguages:I,stringify:function(e){return e.stringify()},Label:P,Icon:F,Input:z,Block:H,Comment:G,Script:V,Document:_,newView:s,read:n,parse:J,replace:o,render:r,renderMatching:function(e,s){e=e||"pre.blocks",s=t({style:"scratch2",inline:!1,languages:["en"],scale:1,read:n,parse:J,render:r,replace:o},s),[].slice.apply(i.querySelectorAll(e)).forEach((function(e){var t=s.read(e,s),i=s.parse(t,s),r=s.render(i,s);s.replace(e,r,i,s)}))},appendStyles:function(){i.head.appendChild(we()),i.head.appendChild(He())}}}(window);return Ge.appendStyles(),Ge}(); + +// Set up scratchblocks +scratchblocks.renderMatching('pre.blocks', { + style: 'scratch3', // Optional, defaults to 'scratch2'. + languages: ['en', 'de'], // Optional, defaults to ['en']. + scale: 1, // Optional, defaults to 1 +}); diff --git a/src/README.md b/src/README.md new file mode 100644 index 0000000..a299be9 --- /dev/null +++ b/src/README.md @@ -0,0 +1,9 @@ +# Scratch Specification + +This is an attempt to create a formal programming language specification of Scratch. + +
+when gf clicked
+move (10) steps
+
+; diff --git a/src/SUMMARY.md b/src/SUMMARY.md new file mode 100644 index 0000000..43a28d0 --- /dev/null +++ b/src/SUMMARY.md @@ -0,0 +1,3 @@ +# Summary + +[Introduction](README.md)