<snapdata remixID="14718432"><project name="Snap!Doc" app="Snap! 11.0.8, https://snap.berkeley.edu" version="2"><notes>Documentation generator for Snap!</notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="Snap!Doc"><notes>Documentation generator for Snap!</notes><palette><category name="Docs" color="30,30,30,1"/><category name="Blocks" color="0,116,143,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="$file doc %&apos;code&apos;" type="command" category="Docs"><header></header><code></code><translations></translations><inputs><input type="%cs" initial="1"></input></inputs></block-definition><block-definition s="$file block name %&apos;name&apos;" type="command" category="Docs" space="true"><header></header><code></code><translations></translations><inputs><input type="%txt" initial="1"></input></inputs><script><block s="doReplaceInList"><l>block name</l><custom-block s="var %s"><l>__doc__</l></custom-block><block var="name"/></block></script></block-definition><block-definition s="sum of %&apos;a&apos; and %&apos;b&apos;" type="reporter" category="Blocks"><comment w="90" collapsed="false">Computes the sum of two numbers.</comment><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">5</input><input type="%n" initial="1">5</input></inputs><script><custom-block s="$file doc %cs"><script><custom-block s="$file block name %txt"><l>sum of a and b</l></custom-block><custom-block s="$file description %mlt"><l>Computes the sum of two numbers.</l></custom-block><custom-block s="$file param %txt %txt"><l>a</l><l>The first number.</l></custom-block><custom-block s="$file param %txt %txt"><l>b</l><l>The second number.</l></custom-block><custom-block s="$file return value %mlt"><l>The sum of `a` and `b`.</l></custom-block></script></custom-block><block s="doReport"><block s="reportVariadicSum"><list><block var="a"/><block var="b"/></list></block></block></script></block-definition><block-definition s="create %&apos;_scope&apos; var %&apos;_names&apos;" type="command" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block creates  new variables on the selected scope: global (for all sprites), sprite (for this sprite only) or script (only for that blocks stack) with the names given (in &apos;names&apos; list).&#xD;&#xD;If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.</comment><header></header><code></code><translations>pt:cria as variáveis _ _&#xD;ca:crea les _ variables _&#xD;es:crear las _ variables _&#xD;de:erstellen _ var _&#xD;pl:utwórz zmienną _ _&#xD;</translations><inputs><input type="%s" readonly="true">global<options>global&#xD;sprite&#xD;script</options></input><input type="%mult%txt"></input></inputs><script><block s="doWarp"><script><block s="doForEach"><l>_item</l><block var="_names"/><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><block var="_scope"/><block var="_item"/></list></block></script></block></script></block></script></block-definition><block-definition s="delete var %&apos;_names&apos;" type="command" category="variables"><comment x="0" y="0" w="217" collapsed="false">This block deletes all the variables with the names given (inside input list).&#xD;&#xD;Each name will make only one variable deletion, and this will be the variable found following the scope order: &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos;.&#xD;&#xD;If we have a &quot;testing&quot; sprite variable and also a &quot;testing&quot; global one, deleting &quot;testing&quot; will delete only the sprite one (Yes! we can also do &quot;delete var (testing, testing)&quot; to delete both.&#xD;&#xD;If one variable does not exists (in any scope) an error happens, stopping block action in that point. You can check it before with the &quot;does var (name) exists?&quot;block. </comment><header></header><code></code><translations>pt:remove as variáveis _&#xD;ca:esborra les variables _&#xD;es:borrar variables _&#xD;de:löschen var _&#xD;pl:usuń zmienną _&#xD;</translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doWarp"><script><block s="doForEach"><l>_item</l><block var="_names"/><script><block s="doApplyExtension"><l>err_ignore</l><list><custom-block s="var %s"><block var="_item"/></custom-block></list></block><block s="doApplyExtension"><l>var_delete(name)</l><list><block var="_item"/></list></block></script></block></script></block></script></block-definition><block-definition s="set var %&apos;_name&apos; to %&apos;_value&apos;" type="command" category="variables"><comment x="0" y="0" w="240.4931640625" collapsed="false">This block sets the given value (last input) to the variable named with the name givent (var input).&#xD;&#xD;It looks for that variable following the scope order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos; (the first match it finds).&#xD;&#xD;If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the &quot;does var (name) exists?&quot; block. </comment><header></header><code></code><translations>ca:assigna a _ el valor _&#xD;es:asignar a _ el valor _&#xD;pt:altera _ para _&#xD;de:setze var _ auf _&#xD;pl:ustaw zmienną _ na _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input><input type="%s"></input></inputs><script><block s="doApplyExtension"><l>var_set(name, val)</l><list><block var="_name"/><block var="_value"/></list></block></script></block-definition><block-definition s="random number" type="reporter" category="Blocks"><comment w="90" collapsed="false">returns a TOTALLY random number! (XKCD)</comment><header></header><code></code><translations></translations><inputs></inputs><script><custom-block s="$file doc %cs"><script><custom-block s="$file block name %txt"><l>random number</l></custom-block><custom-block s="$file description %mlt"><l>returns a TOTALLY random number! (XKCD)</l></custom-block><custom-block s="$file return value %mlt"><l>Just the number 4.</l></custom-block></script></custom-block><block s="doReport"><l>4</l></block></script></block-definition><block-definition s="costume from script: %&apos;script&apos;" type="reporter" category="looks"><comment x="0" y="0" w="259.8173828125" collapsed="false">Turns a ringified script into a script pic that can be used as a costume.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input></inputs><script><custom-block s="load script pic costume extension"></custom-block><block s="doReport"><block s="reportApplyExtension"><l>spc_script_to_costume(script)</l><list><block var="script"/></list></block></block></script></block-definition><block-definition s="load script pic costume extension" type="command" category="looks" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/microworlds/script-pic-costume.js</l></list></block></script></block-definition><block-definition s="code join %&apos;vals&apos;" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">EXCLUDE</comment><header></header><code></code><translations></translations><inputs><input type="%mult%code" initial="1"></input></inputs><script><block s="doReport"><block s="reportJoinWords"><block var="vals"/></block></block></script></block-definition><block-definition s="$file description %&apos;desc&apos;" type="command" category="Docs"><header></header><code></code><translations></translations><inputs><input type="%mlt" initial="1"></input></inputs><script><block s="doReplaceInList"><l>description</l><custom-block s="var %s"><l>__doc__</l></custom-block><block var="desc"/></block></script></block-definition><block-definition s="Reporter" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="Command" type="reporter" category="control"><header></header><code></code><translations></translations><inputs></inputs></block-definition><block-definition s="Predicate" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="Hat" type="reporter" category="control"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l></l></block></script></block-definition><block-definition s="$file param %&apos;name&apos; %&apos;desc&apos;" type="command" category="Docs"><header></header><code></code><translations></translations><inputs><input type="%txt" initial="1"></input><input type="%txt" initial="1"></input></inputs><script><block s="doAddToList"><block s="reportNewList"><list><block var="name"/><block var="desc"/></list></block><block s="reportListItem"><l>params</l><custom-block s="var %s"><l>__doc__</l></custom-block></block></block></script></block-definition><block-definition s="generate UUID" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>return crypto.randomUUID();</l></block><list></list></block></block></script></block-definition><block-definition s="$file return value %&apos;desc&apos;" type="command" category="Docs"><header></header><code></code><translations></translations><inputs><input type="%mlt" initial="1"></input></inputs><script><block s="doReplaceInList"><l>return</l><custom-block s="var %s"><l>__doc__</l></custom-block><block var="desc"/></block></script></block-definition><block-definition s="$file example $nl description: %&apos;desc&apos; $nl code: %&apos;code&apos;" type="command" category="Docs"><header></header><code></code><translations></translations><inputs><input type="%mlt" initial="1"></input><input type="%cmdRing" initial="1"></input></inputs><script><block s="doAddToList"><block s="reportNewList"><list><block var="desc"/><block var="code"/></list></block><block s="reportListItem"><l>examples</l><custom-block s="var %s"><l>__doc__</l></custom-block></block></block></script></block-definition><block-definition s="var %&apos;_name&apos;" type="reporter" category="variables"><comment x="0" y="0" w="178.00000000000003" collapsed="false">This block reports the value of the variable with the name given.&#xD;&#xD;It looks for that variable following the scope order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos; (the first match it finds).&#xD;&#xD;If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the &quot;does var (name) exists?&quot; block. </comment><header></header><code></code><translations>pt:o valor de _&#xD;pl:zmienna _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>var_get(name)</l><list><block var="_name"/></list></block></block></script></block-definition><block-definition s="does var %&apos;_name&apos; exist?" type="predicate" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block reports &quot;true&quot; if there is a variable with this given name (input slot) in that context.&#xD;&#xD;It can be a global, sprite or script variable.&#xD;&#xD;Otherwise it reports &quot;false&quot;.</comment><header></header><code></code><translations>pt:a variável _ existe&#xD;ca:existeix la variable _ ?&#xD;es:existe la variable _ ?&#xD;de:existiert var _ ?&#xD;pl:zmienna _ istnieje?&#xD;</translations><inputs><input type="%s"></input></inputs><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doApplyExtension"><l>err_ignore</l><list><block s="reportApplyExtension"><l>var_get(name)</l><list><block var="_name"/></list></block></list></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="reifyScript"><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block></script></block-definition><block-definition s="show var %&apos;_name&apos;" type="command" category="variables"><comment x="0" y="0" w="181" collapsed="false">This block turns on (show) the watcher view on stage (if it was not already activated) of the variable with the given name (slot input).&#xD;&#xD;It can only access to the closest variable scope (if there different variables with the same name in different scopes) following the order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos;.&#xD;&#xD;No errors if that variable does not exist.</comment><header></header><code></code><translations>ca:mostra la variable _&#xD;es:mostrar variable _&#xD;pt:mostra a variável _&#xD;de:zeige var _&#xD;pl:pokaż zmienną _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input></inputs><script><block s="doApplyExtension"><l>var_show(name)</l><list><block var="_name"/></list></block></script></block-definition><block-definition s="hide var %&apos;_name&apos;" type="command" category="variables"><comment x="0" y="0" w="181" collapsed="false">This block turns off (hide) the watcher view on stage (if it was not already activated) of the variable with the given name (slot input).&#xD;&#xD;It can only access to the closest variable scope (if there different variables with the same name in different scopes) following the order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos;.&#xD;&#xD;No errors if that variable does not exist.</comment><header></header><code></code><translations>ca:amaga la variable _&#xD;es:esconder variable _&#xD;pt:esconde a variável _&#xD;de:verstecke var _&#xD;pl:ukryj zmienną _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input></inputs><script><block s="doApplyExtension"><l>var_hide(name)</l><list><block var="_name"/></list></block></script></block-definition></blocks><primitives></primitives><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="257"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="258"></list></costumes><sounds><list struct="atomic" id="259"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="1" color="0,0,0,1" pen="tip" id="264"><costumes><list id="265"><item><ref mediaID="Snap!Doc_Sprite_cst_Message"></ref></item></list></costumes><sounds><list struct="atomic" id="266"></list></sounds><blocks><block-definition s="Snap!Doc generate $nl %&apos;options&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>zip</l><l>allBlocks</l><l>docs</l><l>_exclude</l><l>categories</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>https://cdn.jsdelivr.net/npm/marked/lib/marked.umd.js</l></list></block><block s="doSetVar"><l>zip</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>return new JSZip();</l></block><list></list></block></block><block s="doSetVar"><l>_exclude</l><block s="reportNewList"><list><block s="reifyReporter"><autolambda><custom-block s="costume from script: %repRing"><block s="reifyReporter"><script></script><list></list></block></custom-block></autolambda><list></list></block><block s="reifyReporter"><autolambda><custom-block s="code join %mult%code"><list><l></l></list></custom-block></autolambda><list></list></block><block s="reifyReporter"><autolambda><custom-block s="Reporter"></custom-block></autolambda><list></list></block><block s="reifyReporter"><autolambda><custom-block s="Predicate"></custom-block></autolambda><list></list></block><block s="reifyReporter"><autolambda><custom-block s="Command"></custom-block></autolambda><list></list></block><block s="reifyReporter"><autolambda><custom-block s="Hat"></custom-block></autolambda><list></list></block><block s="reifyReporter"><autolambda><custom-block s="generate UUID"></custom-block></autolambda><list></list></block></list></block></block><block s="doSetVar"><l>allBlocks</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicAnd"><list><block s="reportBlockAttribute"><l><option>custom?</option></l><block var="value"/></block><block s="reportBlockAttribute"><l><option>global?</option></l><block var="value"/></block><block s="reportListContainsItem"><block s="reportListItem"><l>categories</l><block var="options"/></block><block s="reportListItem"><block s="reportBlockAttribute"><l><option>category</option></l><block var="value"/></block><block s="reportAskFor"><l>Stage</l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>categories</option></l></block></autolambda><list></list></block><list></list></block></block></block><block s="reportNot"><block s="reportListContainsItem"><block var="_exclude"/><block var="value"/></block></block></list></block></autolambda><list><l>value</l></list></block><block s="reportAskFor"><l>Stage</l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>blocks</option></l></block></autolambda><list></list></block><list></list></block></block></block><block s="doSetVar"><l>docs</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><block var="value"/><block s="reportNewList"><list><block s="reportNewList"><list><l>block name</l><block s="reportBlockAttribute"><l><option>label</option></l><block var="value"/></block></list></block><block s="reportNewList"><list><l>description</l><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportBlockAttribute"><l><option>comment</option></l><block var="value"/></block><l></l></list></block><l>No description avaiable.</l><block s="reportBlockAttribute"><l><option>comment</option></l><block var="value"/></block></block></list></block><block s="reportNewList"><list><l>params</l><block s="reportNewList"><list></list></block></list></block><block s="reportNewList"><list><l>return</l><l></l></list></block><block s="reportNewList"><list><l>examples</l><block s="reportNewList"><list></list></block></list></block><block s="reportNewList"><list><l>uuid</l><custom-block s="generate UUID"></custom-block></list></block><block s="reportNewList"><list><l>category</l><block s="reportBlockAttribute"><l><option>category</option></l><block var="value"/></block></list></block><block s="reportNewList"><list><l>type</l><block s="reportListItem"><block s="reportBlockAttribute"><l><option>type</option></l><block var="value"/></block><block s="reportNewList"><list><l>command</l><l>reporter</l><l>predicate</l><l>hat</l></list></block></block></list></block></list></block></list></block></autolambda><list><l>value</l></list></block><block var="allBlocks"/></block></block><custom-block s="create %s var %mult%txt"><l>global</l><list><l>__doc__</l></list></custom-block><block s="doForEach"><l>block</l><block var="allBlocks"/><script><custom-block s="set var %s to %s"><l>__doc__</l><block s="reportListItem"><block var="block"/><block var="docs"/></block></custom-block><block s="doDeclareVariables"><list><l>def</l><l>split</l><l>item1</l><l>docBlock</l></list></block><block s="doSetVar"><l>def</l><block s="reportBlockAttribute"><l><option>definition</option></l><block var="block"/></block></block><block s="doSetVar"><l>split</l><block s="reportTextSplit"><block var="def"/><l><option>blocks</option></l></block></block><block s="doSetVar"><l>item1</l><block s="reportListItem"><l>1</l><block var="split"/></block></block><block s="doSetVar"><l>docBlock</l><l>NULL</l></block><block s="doIfElse"><block s="reportNot"><block s="reportIsA"><block var="item1"/><l><option>list</option></l></block></block><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="item1"/><block s="reifyScript"><script><custom-block s="$file doc %cs"><script></script></custom-block></script><list></list></block></list></block><script><block s="doSetVar"><l>docBlock</l><block s="reportJoinWords"><block var="split"/></block></block></script><list></list></block></script><script><block s="doSetVar"><l>docBlock</l><block s="reportJoinWords"><block var="item1"/></block></block></script></block><block s="doIf"><block s="reportVariadicNotEquals"><list><block var="docBlock"/><l>NULL</l></list></block><script><block s="doRun"><block var="docBlock"/><list></list></block></script><list></list></block><block s="doRun"><block s="reportJSFunction"><list><l>zip</l><l>name</l><l>block</l><l>fmt</l></list><l>zip.file("assets/" + name + "." + fmt, block.expression.fullImage()&#xD;    .toDataURL("image/" + fmt).split(&apos;,&apos;)[1], { base64: true });</l></block><list><block var="zip"/><block s="reportListItem"><l>uuid</l><block s="reportListItem"><block var="block"/><block var="docs"/></block></block><block var="block"/><block s="reportListItem"><l>imgFmt</l><block var="options"/></block></list></block><block s="doForEach"><l>example</l><block s="reportListItem"><l>examples</l><block s="reportListItem"><block var="block"/><block var="docs"/></block></block><script><block s="doDeclareVariables"><list><l>uuid</l></list></block><block s="doSetVar"><l>uuid</l><custom-block s="generate UUID"></custom-block></block><block s="doRun"><block s="reportJSFunction"><list><l>zip</l><l>name</l><l>block</l><l>fmt</l></list><l>zip.file("assets/" + name + "." + fmt, block.expression.fullImage()&#xD;    .toDataURL("image/" + fmt).split(&apos;,&apos;)[1], { base64: true });</l></block><list><block var="zip"/><block var="uuid"/><block s="reportListItem"><l>2</l><block var="example"/></block><block s="reportListItem"><l>imgFmt</l><block var="options"/></block></list></block><block s="doReplaceInList"><l>2</l><block var="example"/><block var="uuid"/></block></script></block></script></block><custom-block s="delete var %mult%txt"><list><l>__doc__</l></list></custom-block><block s="doForEach"><l>item</l><block s="reportNewList"><list><block s="reportNewList"><list><l>reporter</l><block s="reifyReporter"><autolambda><custom-block s="Reporter"></custom-block></autolambda><list></list></block></list></block><block s="reportNewList"><list><l>command</l><block s="reifyReporter"><autolambda><custom-block s="Command"></custom-block></autolambda><list></list></block></list></block><block s="reportNewList"><list><l>predicate</l><block s="reifyReporter"><autolambda><custom-block s="Predicate"></custom-block></autolambda><list></list></block></list></block><block s="reportNewList"><list><l>hat</l><block s="reifyReporter"><autolambda><custom-block s="Hat"></custom-block></autolambda><list></list></block></list></block></list></block><script><block s="doRun"><block s="reportJSFunction"><list><l>zip</l><l>name</l><l>block</l><l>fmt</l></list><l>zip.file("assets/tags/" + name + "." + fmt, block.expression.fullImage()&#xD;    .toDataURL("image/" + fmt).split(&apos;,&apos;)[1], { base64: true });</l></block><list><block var="zip"/><block s="reportListItem"><l>1</l><block var="item"/></block><block s="reportListItem"><l>2</l><block var="item"/></block><block s="reportListItem"><l>imgFmt</l><block var="options"/></block></list></block></script></block><block s="doSetVar"><l>categories</l><block s="reportListAttribute"><l><option>uniques</option></l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>category</l><block s="reportListItem"><l>2</l><l/></block></block></autolambda><list></list></block><block var="docs"/></block></block></block><block s="doDefineBlock"><l>tagBlock</l><l>...</l><block s="reifyReporter"><script></script><list></list></block></block><block s="doForEach"><l>category</l><block var="categories"/><script><block s="doSetBlockAttribute"><l><option>label</option></l><block var="tagBlock"/><block s="reportListItem"><block var="category"/><block s="reportAskFor"><l>Stage</l><block s="reifyReporter"><autolambda><block s="reportGet"><l><option>categories</option></l></block></autolambda><list></list></block><list></list></block></block></block><block s="doSetBlockAttribute"><l><option>category</option></l><block var="tagBlock"/><block var="category"/></block><block s="bubble"><block var="tagBlock"/></block><block s="doApplyExtension"><l>snap_yield</l><list></list></block><block s="doRun"><block s="reportJSFunction"><list><l>zip</l><l>name</l><l>block</l><l>fmt</l></list><l>zip.file("assets/tags/" + name + "." + fmt, block.expression.definition.blockInstance().fullImage()&#xD;    .toDataURL("image/" + fmt).split(&apos;,&apos;)[1], { base64: true });</l></block><list><block var="zip"/><block s="reportJoinWords"><list><l>category-</l><block var="category"/></list></block><block var="tagBlock"/><block s="reportListItem"><l>imgFmt</l><block var="options"/></block></list></block></script></block><block s="doDeleteBlock"><block var="tagBlock"/></block><block s="doRun"><block s="reportJSFunction"><list><l>zip</l><l>docs</l><l>options</l></list><l>function snapDictionary(list) {&#xD;    return Object.fromEntries(list.asArray().map((item) =&gt; item.asArray()));&#xD;}&#xD;&#xD;docs = docs.asArray().map((item) =&gt; snapDictionary(item.at(2)));&#xD;options = snapDictionary(options);&#xD;&#xD;zip.file("style.css",&#xD;`/* THIS FILE WAS GENERATED BY SNAP!DOC */&#xD;/* Main CSS file for documentation */&#xD;&#xD;* {&#xD;    font-family: sans-serif; /* Go with sans serif, its similar to Snap! */&#xD;}`);&#xD;&#xD;let blocks = zip.folder("blocks");&#xD;&#xD;let indexHtml = &#xD;`&lt;!-- THIS FILE WAS GENERATED BY SNAP!DOC --&gt;&#xD;&lt;!DOCTYPE html&gt;&#xD;&lt;html&gt;&#xD;&lt;head&gt;&#xD;&lt;meta charset="utf-8"&gt;&#xD;&lt;meta name="generator" content="Snap!Doc 1.0"&gt;&#xD;&lt;title&gt;Documentation&lt;/title&gt;&#xD;&lt;link href="style.css" rel="stylesheet" /&gt;&#xD;&lt;/head&gt;&#xD;&lt;body&gt;&#xD;&lt;h1&gt;Documentation&lt;/h1&gt;&#xD;`;&#xD;&#xD;docs.forEach((doc) =&gt; {&#xD;    let html =&#xD;`&lt;!-- THIS FILE WAS GENERATED BY SNAP!DOC --&gt;&#xD;&lt;!DOCTYPE html&gt;&#xD;&lt;html&gt;&#xD;&lt;head&gt;&#xD;&lt;meta charset="utf-8"&gt;&#xD;&lt;meta name="generator" content="Snap!Doc 1.0"&gt;&#xD;&lt;title&gt;Documentation for \`${doc["block name"]}\`&lt;/title&gt;&#xD;&lt;link href="../style.css" rel="stylesheet" /&gt;&#xD;&lt;/head&gt;&#xD;&lt;body&gt;&#xD;&lt;a href="../index.html"&gt;&amp;lt;- Back to home&lt;/a&gt;&#xD;&lt;h1&gt;Documentation for &lt;img src="../assets/${doc.uuid}.${options.imgFmt}" /&gt;&lt;/h1&gt;&#xD;`;&#xD;&#xD;    function tag(name) {&#xD;        html += `&lt;img src="../assets/tags/${name}.${options.imgFmt}" alt="tag ${name}" /&gt;\n`;&#xD;    }&#xD;&#xD;    tag(doc.type);&#xD;    tag(`category-${doc.category}`);&#xD;&#xD;    html += marked.parse(doc.description);&#xD;&#xD;    if (doc.params.length() &gt; 0) {&#xD;        html +=&#xD;`&lt;h1&gt;Parameters&lt;/h1&gt;&#xD;&lt;ul&gt;&#xD;`;&#xD;        doc.params.asArray().forEach((param) =&gt; {&#xD;            html +=&#xD;`&lt;li&gt;&lt;strong&gt;${param.at(1)}&lt;/strong&gt; - ${marked.parseInline(param.at(2))}&lt;/li&gt;&#xD;`;&#xD;        });&#xD;&#xD;        html += "&lt;/ul&gt;\n";&#xD;    }&#xD;&#xD;    if (doc.examples.length() &gt; 0) {&#xD;        html +=&#xD;`&lt;h1&gt;Examples&lt;/h1&gt;&#xD;&lt;ul&gt;&#xD;`;&#xD;        doc.examples.asArray().forEach((example) =&gt; {&#xD;            html +=&#xD;`&lt;li&gt;&#xD;    ${marked.parse(example.at(1))}&#xD;    &lt;img src="../assets/${example.at(2)}.${options.imgFmt}" /&gt;&#xD;&lt;/li&gt;&#xD;`;&#xD;        });&#xD;&#xD;        html += "&lt;/ul&gt;\n";&#xD;    }&#xD;&#xD;    if (doc.return != "") {&#xD;        html += `&#xD;&lt;h1&gt;Return value&lt;/h1&gt;&#xD;${marked.parse(doc.return)}`;&#xD;    }&#xD;&#xD;    blocks.file(doc.uuid + ".html", html + `&#xD;&lt;/body&gt;&#xD;&lt;/html&gt;`);&#xD;&#xD;    indexHtml += `&lt;a href="blocks/` + doc.uuid + ".html" + `"&gt;` +&#xD;        doc["block name"] + "&lt;/a&gt;\n&lt;br&gt;\n";&#xD;});&#xD;&#xD;indexHtml += `&#xD;&lt;/body&gt;&#xD;&lt;/html&gt;`;&#xD;&#xD;zip.file("index.html", indexHtml);&#xD;&#xD;zip.generateAsync({type:"blob"})&#xD;.then(function (blob) {&#xD;    saveAs(blob, "doc.zip");&#xD;});</l></block><list><block var="zip"/><block var="docs"/><block var="options"/></list></block></script></block-definition><block-definition s="Snap!Doc options $nl categories: %&apos;categories&apos; $nl image format: %&apos;imgFmt&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%mult%txt" initial="1"></input><input type="%txt" initial="1">png</input></inputs><script><block s="doReport"><block s="reportNewList"><list><block s="reportNewList"><list><l>categories</l><block var="categories"/></list></block><block s="reportNewList"><list><l>imgFmt</l><block var="imgFmt"/></list></block></list></block></block></script></block-definition><block-definition s="Snap!Doc options $nl json: %&apos;json&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%code" initial="1"></input></inputs><script><block s="doReport"><block s="reportTextSplit"><block var="json"/><l><option>json</option></l></block></block></script></block-definition></blocks><variables></variables><scripts><comment x="30" y="430.66666666666663" w="367" collapsed="false">You can also use the following blocks to use a JSON format for options, which allows you to save JSON with your libraries. To copy JSON, simply rightclick the output balloon and select &quot;copy&quot;.</comment><script x="30" y="508.66666666666663"><block s="reportListAttribute"><l><option>json</option></l><custom-block s="Snap!Doc options %br categories: %mult%txt %br image format: %txt" scope="local"><list><l>Blocks</l></list><l>png</l></custom-block><comment w="144.99999999999994" collapsed="true">Save JSON for options</comment></block></script><script x="30" y="570.5"><custom-block s="Snap!Doc generate %br %l" scope="local"><custom-block s="Snap!Doc options %br json: %code" scope="local"><l>{&#xD;    "categories": [&#xD;        "Blocks"&#xD;    ],&#xD;    "imgFmt": "png"&#xD;}</l></custom-block><comment w="159.99999999999994" collapsed="true">Generate using JSON</comment></custom-block></script><comment x="30" y="10" w="368" collapsed="false">Steps:&#xD;* Load your blocks into this project (drag the XML file in, eventually ill add auto-importing), and add documentation. You might want to, if you&apos;re going to make multiple bersion of that library, keep a copy with the documentation blocks, and simply add the new blocks or such that project, and then import the blocks from that project.&#xD;* Enable JS&#xD;* Fill out options&#xD;* Run the code and wait!&#xD;&#xD;Options:&#xD;* categories - List of category names to include in the documentation. Can include Snap! categories, not just custom blocks.&#xD;* image format - Image format for blocks and examples. Couild be any type supported by your browser, just be warned its best to use image formats that SUPPORT transparency (png, webp) and avoid formats that DONT (e.g. jpeg).&#xD;&#xD;Notes:&#xD;Does not support local blocks - as, well, they are LOCAL to a sprite/stage.&#xD;Best to run this script in normal theme (no block fading, no flat design, 1x block zoom) so the blocks can look the same.&#xD;A example custom block category is provided, &quot;Blocks&quot;, which contain two examples on how to use the documentation blocks.&#xD;&#xD;If any bugs occur, please tell me at the forum page.</comment><script x="30" y="352"><custom-block s="Snap!Doc generate %br %l" scope="local"><custom-block s="Snap!Doc options %br categories: %mult%txt %br image format: %txt" scope="local"><list><l>Blocks</l></list><l>png</l></custom-block></custom-block></script></scripts></sprite></sprites></stage><variables></variables></scene></scenes></project><media name="Snap!Doc" app="Snap! 11.0.8, https://snap.berkeley.edu" version="2"><costume name="Message" center-x="186" center-y="23" image="data:image/png;base64,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" mediaID="Snap!Doc_Sprite_cst_Message"/></media></snapdata>