diff --git a/API.md b/API.md index f72ce5af..14f10028 100755 --- a/API.md +++ b/API.md @@ -1,6 +1,6 @@ # The Snap! API -Jens Mönig, Bernat Romagosa, January 07, 2021 +Jens Mönig, Bernat Romagosa, November 17, 2021 This document describes how Snap! can be accessed from an outside program to start scripts, send and retrieve information. The model use case is embedding interactive Snap! projects in other websites such as MOOCs or other adaptive learning platforms. @@ -8,6 +8,17 @@ This experimental Snap! API is a set of methods for an IDE_Morph containing a Sn Currently the API consists of the following methods: +#### Navigate Scenes + +* IDE_Morph.prototype.getScenes() +* IDE_Morph.prototype.getCurrentScene() +* IDE_Morph.prototype.switchTo() + +#### Control Processes + +* IDE_Morph.prototype.isRunning() +* IDE_Morph.prototype.stop() + #### Broadcast Messages (and optionally wait) * IDE_Morph.prototype.broadcast() @@ -94,6 +105,60 @@ request, while `e.data.response` carries the return value of the API method call ## Interacting with the IDE +### IDE_Morph.prototype.getScenes() +The getScenes() method returns an array with the names of all scenes in the projects. The minimum number of elements is 1, since there is always at least one scene per project. The scene names are unique strings within the array. Note that the empty string ('') is a valid scene identifier. + +#### syntax + ide.getScenes(); + +#### return value +an Array of Strings, minimum length 1 + + +### IDE_Morph.prototype.getCurrentScene() +The getCurrentScene() method returns a string representing the name of the currently active scene in the project. If the scene is unnamed and empty string is returned. + +#### syntax + ide.getCurrentScene(); + +#### return value +a String, can be an empty String + + +### IDE_Morph.prototype.switchTo() +The switchTo() method displays the specified scene. It suspends all processes and clones of the previously active scene and passes control to the new scene. + +#### syntax + ide.switchTo(sceneName); + +#### parameters +* sceneName + - string, the name of the scene to be activated + +#### return value +undefined + + +### IDE_Morph.prototype.isRunning() +The isRunning() method returns `true` if the active scene is currently running one or more threads, `false` if the scene is idle. + +#### syntax + ide.isRunning(); + +#### return value +a Boolean + + +### IDE_Morph.prototype.stop() +The stop() method immediately terminates all currently running threads in the active scene and removes all temporary clones. It does not trigger a "When I am stopped" event. + +#### syntax + ide.stop(); + +#### return value +undefined + + ### IDE_Morph.prototype.broadcast() The broadcast() method triggers all scripts whose hat block listens to the specified message. An optional callback can be added to be run after all triggered scripts have terminated. @@ -209,7 +274,7 @@ the loadProjectXML() method replaces the current project of the IDE with another #### parameters * projectData * XML string representing a serialized project - + #### return value unefined @@ -219,7 +284,7 @@ the unsavedChanges() method return a Boolean value indicating whether the curren #### syntax ide.unsavedChanges(); - + #### return value a Boolean diff --git a/HISTORY.md b/HISTORY.md index 3188c1e2..e7045f62 100755 --- a/HISTORY.md +++ b/HISTORY.md @@ -2,6 +2,1008 @@ ## in development: +* **New Features:** +* **Notable Changes:** +* **Notable Fixes:** +* **Documentation Updates:** +* **Translation Updates:** + +## 7.1.3: +* **New Features:** + * new bitwise operators library, thanks, Bernat! +* **Notable Fixes:** + * JSON encoding for nested lists + * enforce static typing for stage backgrounds and sounds, and for sprite duplicates + * prevent Chrome from crashing when using serial ports on a Mac, thanks, Dariusz! + * fixed missing blocks in variadic reporters library, thanks, Brian! + * fixed an infinite loop in the signada library, thanks, Bernat! + * fixed missing blocks in bar chars library + * fixed missing blocks in frequency distribution analysis library + * fixed missing blocks in iteration composition library + * fixed a comment in "remove duplicates" in the list utilities library + * fixed missing blocks in parallelization library + +### 2022-02-08 +* signade library: fixed cached values being stuck forever in edge case, thanks, Bernat! +* variadic reporters library: fixed blocks that apparently were "lost in translation" before, thanks, Brian! +* fixed PIPE in bar-charts library +* fixed PIPE in frequency distribution analysis library +* fixed PIPE in iteration composition library +* fixed the comment in "remove duplicates" in the list utilities library to reflect that the last match is kept +* fixed "do in parallel" block in parallelization library +* new bitwise operators library, thanks, Bernat! +* moved bitwise operators into standard extensions +* prepared v7.1.3 + +### 2022-02-07 +* lists: fixed JSON encoding for nested lists +* objects: fixed static "costume" type for stage backgrounds and sprite duplicates +* objects: fixed static "sound" type for stage backgrounds and sprite duplicates +* extensions: fixed #2980, thanks, Dariusz! + +### 2022-02-04 +* new dev version + +## 7.1.2: +* **Notable Changes:** + * friendlier error messages +* **Translation Updates:** + * German + +### 2022-01-31 +* new dev version +* threads, locale: friendlier error messages +* German translation update +* prepared v7.1.2 + +## 7.1.1: +* **Notable Fixes:** + * disabled reporter drops into "When I am ..." hat block (again) + * fixed "pick random" for descending ranges, thanks, Brian! + +### 2022-01-30 +* new dev version +* blocks: disabled reporter drops into "When I am ..." hat block (again) +* threads: fixed #2972 (fixed "pick random" for descending ranges), thanks, Brian! +* prepared v7.1.1 + +## 7.1.0: +* **New Features:** + * delete and insert individual variadic slots, script vars & ring params via the context menu + * drag blocks, costumes and sounds out from result bubbles, and from speech balloons and variable watchers when in edit mode + * export data (costumes, sounds, text, numbers, atomic lists) from result bubbles, and from speech balloons and variable watchers when in edit mode via the context menu +* **Notable Fixes:** + * fixed layout for scrolling custom categories, thanks, Eckart, for the bug report! + * text-costumes library: fixed preserving (more) pen state, thanks, Brian! +* **Translation Updates:** + * Hungarian, thank you, Attila Faragó, for this HUGE update! + * German + +### 2022-01-28 +* tables: support dragging costumes and sounds out from table views +* blocks: support exporting costumes from result bubbles +* blocks: support exporting sounds from result bubbles +* objects: support exporting sounds and costumes from speech balloons in edit mode +* objects: support exporting sounds and costumes from variable watchers in edit mode +* blocks: support exporting numbers and text from result bubbles +* objects: support exporting numbers and text from speech balloons when in edit mode +* lists: support exporting atomic lists from list watchers everywhere when in edit mode +* tables: support exporting atomic tables from table views everywhere when in edit mode +* v7.1.0 + +### 2022-01-27 +* blocks, gui: support dragging costumes and sounds out from result bubbles +* objects: support dragging costumes and sounds out from speech balloons +* objects: support dragging costumes and sounds out from variable watchers + +### 2022-01-26 +* blocks: refactored slot context menus +* blocks: support for deleting and inserting individual script vars & ring params +* German translation update +* blocks: support for deleting and inserting individual rings inside variadic inputs +* updated text-costumes library, thanks, Brian! +* Hungarian translation update, thank you, Attila Faragó! + +### 2022-01-25 +* blocks: support deleting and inserting individual variadic slots + +### 2022-01-23 +* morphic: added Node >> childThatIsA +* tables: support dragging blocks out from table views + +### 2022-01-22 +* blocks: support dragging blocks out from result bubbles +* objects: support dragging blocks out from speech balloons +* objects: support dragging blocks out from variable watchers +* morphic, objects: only allow dragging block out from balloons and watchers in edit mode (not in presentation mode) + +### 2022-01-21 +* new dev version +* gui: fixed layout for scrolling custom categories, thanks, Eckart, for the bug report! + +## 7.0.6: +* **Notable Changes:** + * added more localizable error strings +* **Notable Fixes:** + * fixed binding an unbound context to a sprite (e.g. when using JOIN blocks) + * fixed loading the Chinese translation, thanks, @moodykeke +* **Translation Updates:** + * German (for error messages) + +### 2022-01-21 +* threads: refactored Context >> image +* v7.0.6 + +### 2022-01-20 +* German translation update (for error messages) +* threads: added more localizable error strings +* objects: added more localizable error strings + +### 2022-01-17 +* new dev version +* fixed loading the Chinese translation, thanks, @moodykeke +* threads: fixed binding an unbound context to a sprite (e.g. when using JOIN blocks) + +## 7.0.5: +* **New Features:** + * text costumes library: new block to add a rectangular colored background with optional padding to a copy of a costume, for making "clickable buttons" +* **Notable Changes:** + * improved emoji handling for "length of text" reporter, thanks, Michael! + * added support for EDC's Early Math Microworld extension +* **Notable Fixes:** + * strings library: fixed an index range bug, thanks, Brian! +* **Translation Updates:** + * Chinese, thanks, Simon! + +### 2022-01-14 +* v7.0.5 + +### 2022-01-13 +* threads: improved emoji handling for "length of text" reporter, thanks, Michael! +* extensions: added support for EDC's Early Math Microworld extension + +### 2022-01-10 +* new dev version +* text costumes library: new block to add a rectangular colored background with padding to a copy of a costume +* Chinese translation update, thanks, Simon! +* strings library: fixed an index range bug, thanks, Brian! + +## 7.0.4: +* **New Features:** + * syntax tree format for translatable input options and constants: "[choice]" + * syntax tree support for variable getter names +* **Notable Fixes:** + * strings library: substrings handle negative indices as documented, thanks, Brian! +* **Translation Updates:** + * Catalan library translations, thanks, Joan! + +### 2022-01-07 +* blocks: added syntax tree representation for variable getters +* blocks, byob: blank-out variable getters in syntax-tree result list +* v7.0.4 + +### 2022-01-06 +* Catalan library translations, thanks, Joan! + +### 2022-01-05 +* new dev version +* blocks: added syntax tree representation for translated input options and constants +* strings library update, thanks, Brian! + +## 7.0.3: +* **New Features:** + * arity control for assembling polyadic inputs using JOIN (pass a list whose first item is an integer representing the number of slots followed by the contents of those slots) +* **Notable Changes:** + * same blocks with empty variadic inputs compare as equal regardless of their arity + * made "When I receive any messagge" non-thread-safe by default (again) to enable tail recursive broadcasts + * improved handling of user-defined errors and errors inside custom blocks +* **Notable Fixes:** + * fixed storing the stage name(s) - also fixes undesired translation + * removed distinction between number and string keys in "analyze" + * fixed variable binding when broadcasting through the API, thanks, Zak! + * fixed programmatically hiding palette blocks using the "hide variable" block, thanks, Zak! + * fixed / worked around PWA caching for URLs with query parts, thanks, Ken! + * added missing "identical to" relabel option to "less than" reporter, thanks, Mary! +* **Translation Updates:** + * Italian, thanks, Stefano! + +### 2022-01-04 +* manifest: fixed #2954 +* threads, blocks: added arity control for assembling polyadic inputs +* v7.0.3 + +### 2022-01-03 +* Italian translation update, thanks, Stefano! +* api: fixed variable binding when broadcasting through the API, thanks, Zak! +* objects: fixed programmatically hiding palette blocks using the "hide variable" block, thanks, Zak! +* threads, api: made "When I receive any messagge" non-thread-safe by default (again) to enable tail recursive broadcasts +* threads, extensions: improved handling of user-defined errors and errors inside custom blocks +* sw.js: fixed #2957, thanks, Ken! +* objects: fixed #2950, thanks, Mary! +* manifest: fixed #2954 + +### 2022-01-02 +* store: fixed storing the stage name(s) + +### 2022-01-01 +* extensions: removed distinction between number and string keys in "analyze" + +### 2021-12-22 +* new dev version +* threads: same blocks with empty variadic inputs compare as equal regardless of their arity + +## 7.0.2: +* **Notable Fixes:** + * setting a clone's rotation coordinates shadows its inherited costumes + * preserve embedded inputs when JOINing a nested expression with an empty list + * improved loading custom block categories + +### 2021-12-21 +* prepared patch + +### 2021-12-20 +* blocks, threads: preserve embedded inputs when JOINing a nested expression with an empty list +* objects: improved loading custom block categories + +### 2021-12-18 +* new dev version +* objects: shadow (a clone's) costumes when setting its rotation coordinates + +## 7.0.1: +* **Notable Changes:** + * better support for multi-byte emojis with "split" and "unicode", thanks, Michael! + * added support for Uni Oxford (Ken Kahn's) ecraft2learn extension +* **Notable Fixes:** + * keep the order of sprites in the corral when saving newly created projects + * allow parentheses in project names (again) + * dropping a library or sprite file into presentation mode switches back to edit mode + * exporting blocks uses the project name as file name, followed by "blocks" + +### 2021-12-17 +* prepared patch + +### 2021-12-16 +* gui: removed some commented out code +* gui: fixed #2941 +* byob: fixed #2945 + +### 2021-12-15 +* threads, lists: better support for multi-byte emojis with "split" and "unicode", thanks, Michael! +* extensions: added support for Uni Oxford (Ken Kahn's) ecraft2learn extension + +### 2021-12-14 +* new dev version +* store: keep the order of sprites in the corral when saving newly created projects +* gui: allow parens in project names + +## 7.0.0: +* **New Features:** + * scenes + * extensions + * single blocks palette option, thanks, Michael! + * web-serial support, thanks, Dariusz Dorożalski! + * hide any block, including variables and custom helper blocks in palette, also use "hide/show var" primitive on custom blocks (same as on primitives) + * generate Parsons Problems from projects: Hide all unused blocks from the scripting area in the palette + * user defined custom block palettes + * introspection, syntax analysis and assembly (new block-attribute reporter, split & join scripts) + * PWA, thanks, Joan and John, for pioneering this at Robolot and in Mircoblocks! + * new "blocksZoom=n" url parameter, thanks, Bernat! + * message and key hat blocks can be expanded to show an optional upvar referencing their event data + * BROADCAST blocks are expandable to feature a second input for message receivers, default is "all" + * block-instances can be dragged off from templates in the "export blocks", "unused blocks" and "hide blocks" dialogs + * added "enter" key to key-pressed dropdown + * added green flag symbol to message drop-down + * the green flag button's background color indicates whether the current scene is running or idle + * empty categories are indicated by half-tone buttons + * added "r-g-b-a" option to dropdown menu of SET / CHANGE PEN command and PEN reporter + * new preference setting per scene for pen color model and graphic effects, HSV or HSL, default is HSV + * new preference setting per scene to "disable click-to-run" on blocks, for use in micro-world extensions + * new Signada hardware library, thanks, Citilab Barcelona! +* **Notable Changes:** + * saved projects remember the last edited sprite + * libraries no longer rely on the JSF primitive, projects may need to re-import their libraries to run without having to enable JS extensions + * bulk hide/show arbitrary blocks in the palette via the palette's context menu (instead of the primitive blocks' context menus) + * hidden blocks don't appear in search results / keyboard input options + * codification and js-func blocks don't appear in search results unless enabled + * migrated SEND blocks to be BROADCAST TO blocks + * "when I receive 'any message'" hat scripts are threadsafe (uninterruptable by other messages) + * changed the scale of the graphics color effect from 0-200 to 0-100 + * result-bubbles (when clicking on a reporter) now stay visible until the next click + * took out "Hyper blocks support" setting from the gears menu (it's now hidden behind shift-click) + * new Birdbrain Technology extensions for Finch and Hummingbird, thanks, Kristina and Bambi! + * retired Leap Motion library + * display blocks with their error messages for custom blocks, thanks, Michael! + * made scrollbars thinner by default and slightly transparent in flat design mode + * blocked xhr requests from Snap! to s.b.e + * the "message" reporter and watcher in the control category has been deprecated and moved to dev mode for backwards compatibility + * updated the Snap! API and documentation with methods to navigate among scenes and control processes + * removed old hidden "prefer smooth animations" setting (no longer used, old projects will continue to work just fine) + * removed old hidden "virtual keyboard" setting (was no longer used for the last years) + * removed old hidden "project urls" setting + * removed hidden "cache inputs" setting (only used for debugging the evaluator) +* **Notable Fixes:** + * made scrollbars in the wardrobe and jukebox more responsive + * fixed centering of menus, thanks, Brian Broll! + * fixed occasional invisible error messages + * fixed audio_comp library "plot sound" block to work with translations, thanks, Hans, for the report! + * colors library: fixed SET PEN to work with more than a single sprite per costume, thanks, Jadga, for the report! + * fixed exporting comment pics from inside the block editor, thanks, Jadga, for the report! + * fixed copying unattached comments among sprites, thanks, Jadga, for the report! + * disabled dropping reporters onto message hat block input slots + * fixed outdated blocks specs for "When I am ..." hat block in many translations + * fixed duplicating custom block definitions that don't have a body + * allow selecting the fill color in the vector editor via touch-hold gesture on touch devices + * fixed an infinite loop in the FILL block when the pen colors have been set to an invalid color (via a bad library) + * fixed some minor variable-renaming issues + * fixed STOP OTHER SCRIPTS for use inside TELL + * made "remove duplicates" reporter in the "list utilities" library (a lot) faster + * fixed translation support for the libraries list, thanks, Joan! +* **Documentation Updates:** + * updated manual, thanks, Brian! + * updated readme, thanks, Michael! +* **Translation Updates:** + * German + * Chinese, thanks, Simon! + * Brazilian Portuguese, thank you, Cassiano D'Andrea! + * Catalan, thanks, Joan! + +### 2021-12-13 +* objects: tweaked asynchronous costume loading/rendering issue +* rc7 +* v7 release + +### 2021-12-12 +* threads: fixed #2932 + +### 2021-12-11 +* objects: remove all clones when the green flag is sent to a scene +* rc6 + +### 2021-12-10 +* Catalan and German translation updates, thanks, Joan! +* translation support for the libraries list, thanks, Joan! +* objects: fixed categories cache invalidation for duplicated sprites +* rc4 +* threads: remove all clones when the green flag is broadcast to all +* rc5 + +### 2021-12-09 +* blocks, threads: never push untested last minute changes that might break everything +* gui: select motion category when switching to a scene that doesn't have the current custom category +* rc2 +* objects: worked around an asynchronous rendering issue +* rc3 + +### 2021-12-08 +* blocks: refactored syntax trees +* rc1 + +### 2021-12-07 +* objects: backwards-compatibility fix for key-event hat blocks +* store, objects: load category-less custom blocks into "other" + +### 2021-12-06 +* blocks, threads: refactored block assembly, experimental +* German translation update + +### 2021-12-05 +* blocks, threads, objects: introspection & syntax analysis, experimental + +### 2021-12-03 +* blocks, threads: block-assembly support for multi-args, experimental +* threads: changed the visualization for an empty context to reporter-ring + +### 2021-12-02 +* blocks, threads: block-assembly support refactorings, experimental + +### 2021-12-01 +* blocks, threads: block-assembly support refactorings, experimental +* blocks, threads: equality testing for scripts, experimental + +### 2021-11-30 +* blocks, threads: block-assembly support, experimental +* gui: fixed #2920 + +### 2021-11-29 +* renamed "r-g-b-a" option to "RGBA" and "r-g-b(-a)" to "RGB(A)" + +### 2021-11-28 +* fixed a glitch in "remove duplicates" in the "list utilities" library + +### 2021-11-27 +* blocks, threads: tweaked SET / CHANGE PEN dropdown option to "r-g-b(-a)" +* made "remove duplicates" reporter in the "list utilities" library (a lot) faster + +### 2021-11-26 +* added signada extension files to the pwa cache +* blocks, treads, objects: added "r-g-b-a" option to dropdown menu of SET / CHANGE PEN command and PEN reporter + +### 2021-11-25 +* gui: rearranged and amended the project menu +* German translation update for project menu entries +* objects: fixed a FILL issue when the pen color has been set to an invalid color via a bad library + +### 2021-11-24 +* threads: fixed #2918 +* gui, objects, scenes: added scene-setting to hide/show buttons in the unified palette +* store: made "show buttons" setting for unified palette persistent in the XML +* German translation update for "Show buttons" setting +* added indented sub-preferences to the settings menu + +### 2021-11-23 +* byob: refresh category buttons when hiding / showing blocks +* gui: refresh category buttons when switching to dev mode and back +* gui: refresh category buttons when turning built-in extensions on and off + +### 2021-11-19 +* objects, byob, gui: visually indicate empty categories by half-toning their buttons + +### 2021-11-18 +* gui: only pause generic hat blocks when loading a new project, not when switching to a new scene + +### 2021-11-17 +* gui: set the green-flag button's background color to "active" while a thread is running +* api: changed "processes" method to "isRunning" +* updated api documentation +* gui: refresh stop button when switching scenes + +### 2021-11-16 +* store, gui: updated serializer app tag to v7 +* api: removed incomplete api documentation from the source code +* updated api documentation + +### 2021-11-15 +* German translation update +* gui: made "Hyper blocks support" setting hidden in the gears menu +* gui, objects, threads, store, translations: Removed old hidden "prefer smooth animations" setting +* gui: removed experimental hidden "add scenes" option from the settings menus +* gui, translations: removed old hidden "virtual keyboard" setting +* gui: removed old hidden "project urls" setting +* gui: removed hidden "cache inputs" setting (only used for debugging the evaluator) + +### 2021-11-14 +* locale: contextualize translations +* gui: refresh IDE when changing the pen color model + +### 2021-11-12 +* store: fixed importing custom categories from libraries, thanks, Eckart, for reporting this! +* gui, objects, scenes, store: reverted to HSV as default pen color model +* store: fixed a serialization conflict for global variables referencing the stage +* gui: made HSL preference setting hidden behind shift-click + +### 2021-11-11 +* German translation update, changed %hsva -> %clrdim +* Brazilian Portuguese translation update, thank you, Cassiano D'Andrea!! +* threads, gui: experimental "disalbe click-to-run" preference +* gui, scenes, store: made "pen color model" and "disable click-to-run" settings persistent per scene + +### 2021-11-10 +* objects, store: new "penColorModel" setting, can e 'hsv' or 'hsl' +* gui, objects: new (hidden) pen-color-model preference setting (per session) +* objects: changed the scale of the graphics color effect from 0-200 to 0-100 +* objects: refactored graphics color effect to reuse Morphic's conversion methods +* objects: use the selected pen color model (hsl or hsv) for graphic effects + +### 2021-11-09 +* objects, store: refactored block-migration mechanism +* gui: changed display of project name in the IDE to PROJECT (SCENE) +* gui: adjusted random color for new sprites to HSL model +* objects: fixed keyboard entry for script variable getters +* gui: changed edit project notes to always edit project motes instead of scene notes +* byob, blocks, gui: allow block-instances to be dragged off from templates in the "export blocks" dialog +* byob, gui: allow block-instances to be dragged off from templates in the "unused blocks" dialog + +### 2021-11-08 +* objects: renamed some internal color methods +* objects, store: renamed internal pen color channel cache +* objects, blocks, threads: renamed internal pen accessor methods +* objects, threads, store, extensions: switched pen color dimensions from HSV to HSL +* threads: fixed upvars in hat block prims when the user clicks on them to run them + +### 2021-11-07 +* widgets, blocks, byob: allow block-instances to be dragged off from templates in the "hide blocks" dialog +* gui: prevent switching to another sprite if a "hide blocks" dialog is open + +### 2021-11-06 +* blocks: fixed some minor variable-renaming issues + +### 2021-11-03 +* sketch: allow selecting the fill color in the vector editor via touch-hold gesture on touch devices +* updated version history + +### 2021-10-29 +* objects: flood-fill edge case fix, thanks, Dariusz! +* gui: removed obsolete dev comments +* blocks, objects: fixed scanning for senders and receivers of messages for new BROADCAST scheme + +### 2021-10-28 +* introduced default values for expandable slot specs +* updated German translation +* migrated Basque and Swedish translations to new BROADCAST block specs +* migrated Slovenian, Romanian and Interlingua translations to new BROADCAST block specs +* migrated Estonian, Hungarian, Croatian and Esperanto translations to new BROADCAST block specs +* migrated Danish, Czech, Valencian Catalan and Arabic translations to new BROADCAST block specs +* migrated Bulgarian, Traditional Chinese, Indonesian and Galician translations to new BROADCAST block specs +* migrated Hebrew, Japanese Hiragana, Slovakian and Ukrainian translations to new BROADCAST block specs +* migrated Japanese, Bangla, Portuguese and Norwegian translations to new BROADCAST block specs +* migrated French, Italian, Greek and Spanish translations to new BROADCAST block specs +* migrated Russian, Dutch, Tamil and Turkish translations to new BROADCAST block specs +* migrated Catalan, Hindi, Polish and Telagu translations to new BROADCAST block specs +* migrated Brazilian Portuguese, Malayam, Korean and Kannada translations to new BROADCAST block specs +* migrated Finnish and Simplified Chinese translations to new BROADCAST block specs + +### 2021-10-27 +* included bbt extensions +* updated service worker to cache bbtSnapExtension.js +* pwa versioning & cache-busting mechanism +* changed PWA icon to Alonzo +* tweaked PWA + +### 2021-10-26 +* objects: don't show codification and js-func blocks in search results unless enabled +* gui, objects: new "showingExtensions" session setting for showing extension prims in the palette +* German translation update for "extension blocks" setting +* widgets: r-g-b editor for custom category colors (right-click on color-field) + +### 2021-10-25 +* byob: fixed #2902 + +### 2021-10-22 +* blocks, objects: only show the "message" upvar in the "When I receive" hat if "any message" is selected +* blocks: only show "key" upvar in the "When ... is pressed" hat if "any key" is selected +* blocks: tweaked blocks layout for hidden expansion slots +* blocks, objects, store, threads: made SEND blocks expandable for receivers and renamed them back to BROADCAST +* threads: deep copy atomic lists sent from one scene to another +* bignum library: fixed IS IDENTICAL + +### 2021-10-21 +* threads, objects: make "when I receive 'any message'" hat scripts threadsafe (uninterruptable by other messages) +* threads: enabled sending atomic lists to other scenes +* threads: took out broadcasting a 2-item list to mean a message directed to a particular sprite +* blocks, objects, threads: added "all" option to the receiver-dropdown of the SEND block +* objects, blocks, threads: replaced BROADCAST block variants with SEND block variants +* tweaked German translation for "all" + +### 2021-10-20 +* blocks: enable sending green-flag events when switching scenes +* blocks, objects, gui, threads: removed "When switched to this scene hat block" +* objects: rearranged "switch to scene" and "pause all" blocks in the palette +* updated German translation (removed "when switched to this scene") +* blocks, threads: removed options "1" and "last" from "switch to scene" dropdown + +### 2021-10-19 +* threads: enable sending green-flag events to specific sprites + +### 2021-10-14 +* gui, byob, objects: scroll custom category buttons if there are more than 6 +* gui, byob: scroll selected custom category button into view +* gui: fixed "show categories" setting display +* gui: sort custom category menu ("delete a category") alphabetically +* blocks: enabled symbols inside input slots, activated %greenflag as selectable message + +### 2021-10-12 +* scenes, store: store single palette setting per project (for making extensions) +* gui, scenes, objects: added scene-setting to hide/show category names in the unified palette +* store: made "hide/show categories in unified palette" setting persistent +* byob: hide unused blocks in palette +* objects: tweaked unified palette formatting for hidden categories + +### 2021-10-11 +* objects: sort order of blocks in custom categories alphabetically in the unified palette + +### 2021-10-08 +* objects: tweaked variable block visibility +* objects: filter hidden blocks out from search / keyboard input results +* objects: prevent deprecated "message" reporter from showing up in search results +* objects: tweaked hiding / showing inherited local blocks + +### 2021-10-07 +* objects, byob: new BlockVisibilityDialogMorph for bulk-selecting blocks to hide / show in the palette +* ojects: simplified palette context menu +* blocks: removed "hide" option from context menu of primitive blocks in the palette +* objects, byob: optimized bulk hiding & showing palette blocks + +### 2021-10-06 +* threads: programmatically hide individual variables in palette +* extensions: new extension primitives for hiding and showing arbitrary blocks in the palette +* threads: keep hidden variables out of the palette and drop-down menus +* objects: added utilities to enumerate all palette blocks for hiding & showing +* objects, threads, extensions: refactored block hiding methods +* objects: added method to check whether an arbitrary block is hidden in the palette + +### 2021-10-05 +* threads, store: added infrastructure for hiding individual variables in palette + +### 2021-10-04 +* blocks: added "enter" key to key-pressed dropdown +* updated German translation for "enter" key +* threads: extended "hide/show var" primitive to also hide/show custom blocks in the palette + +* migrated Bangla block specs +* migrated Portuguese block specs +* migrated Norwegian block specs +* migrated French block specs +* migrated Italian block specs +* migrated Greek block specs +* migrated Spanish block specs +* migrated Russian block specs +* migrated Dutch block specs +* migrated and fixed Tamil block specs +* migrated Turkish block specs +* migrated Catalan block specs +* migrated Hindi block specs +* migrated Polish block specs +* migrated and fixed Simplified Chinese block specs +* fixed Telagu block specs for %interaction +* fixed Brazilian-Portuguese block specs for %interaction +* fixed Malayalam block specs for %interaction +* fixed Korean block specs for %interaction +* fixed Kannada block specs for %interaction +* fixed Finnish block specs for %interaction + +### 2021-10-03 +* migrated Hebrew block specs +* migrated and fixed Japanese Hiragana block specs +* migrated Slovak block specs +* migrated Ukrainian block specs +* migrated and fixed Japanese block specs + +### 2021-10-02 +* migrated Indonesian block specs +* migrated Galician block specs + +### 2021-10-01 +* objects: tweaked detectable keynames and representations +* German translation update +* migrated Euskara block specs +* migrated Telagu block specs +* migrated Swedish block specs +* migrated Slovenian block specs +* migrated Romanian block specs +* migrated Brazilian-Portuguese block specs +* migrated Malayalam block specs +* migrated Korean block specs +* migrated Kannada block specs +* migrated Interlingua block specs +* migrated Hungarian block specs +* migrated Croatian block specs +* migrated Finnish block specs +* migrated Estonian block specs +* migrated Esperanto block specs +* migrated Danish block specs +* fixed Danish block spec for "When I am %interaction" +* migrated Czech block specs +* migrated Valencian-Catalan block specs +* migrated Arabic block specs +* migrated and fixed Bulgarian block specs +* migrated and fixed Traditial-Chinese block specs + +### 2021-09-30 +* blocks, objects, threads, gui: optional upvars referencing event data for message, key and scene hat blocks +* blocks: disabled dropping reporters onto message hat block input slots +* threads: restricted inter-scene messages to text and numbers +* objects: assign case-sensitive key symbol to key event hat blocks' upvars + +### 2021-09-29 +* objects, blocks: refactored experimental "When I receive message" hat block + +### 2021-09-28 +* objects, blocks, threads: new "When I receive message" hat block featuring an upvar for the transmission, experimental in dev mode + +### 2021-09-27 +* objects: renamed scene event hat block +* German translation update + +### 2021-09-09 +* German translation update + +### 2021-09-08 +* objects: changed category for "switch to scene" to control +* blocks, objects, threads: new hat block for "when this scene starts" +* blocks, threads: changed "switch to scene" to be a stop block +* threads: disabled "when this scene starts" hat blocks to directly switch to another scene +* threads: slowed down scene switching to let the user better interrupt it, commented out for now + +### 2021-09-07 +* blocks, objects, threads: new change-of-scene event +* gui, threads: enabled change-of-scene events for user-induced scene switches, made them user-stoppable + +### 2021-09-06 +* blocks: fixed exporting comment pics from inside the block editor, thanks, Jadga, for the report! +* gui: fixed copying unattached comments among sprites, thanks, Jadga, for the report! + +### 2021-08-27 +* colors library: fixed SET PEN to work with more than a single sprite per costume, thanks, Jadga, for the report! + +### 2021-08-06 +* gui: new "blocksZoom=n" url parameter, thanks, Bernat! +* extensions: added to the documentation + +### 2021-08-03 +* extensions: updated documentation +* byob: record unsaved changes when applying edits to a custom block definition + +### 2021-08-02 +* extensions: updated documentation + +### 2021-08-01 +* gui: fixed saving projects with their names +* store: fixed deserializing global settings per scene in multi-scene projects + +### 2021-07-29 +* gui: fixed switching scenes in presentation mode + +### 2021-07-23 +* byob, objects, gui, store: support custom categories in libraries +* gui, byob: arrange custom categories alphabetically +* store: fixed exporting sprites + +### 2021-07-22 +* store: serialize user defined block palettes +* objects: enabled custom categories for the stage +* store: load user defined palettes +* gui: restore custom palettes when activating a scene +* objects: added new category feature to palette context menu +* gui, objects, scenes: fixed costume maximum extent +* gui: cleaned up hidden menu +* objects, gui: added delete category feature to palette context menu + +### 2021-07-21 +* user defined custom block palettes, under construction + +### 2021-07-20 +* threads, extensions: blocked xhr requests to from Snap! to s.b.e, thanks, Bernat! +* widgets, scenes, gui: custom category prompter + +### 2021-07-19 +* fixed #2863, thanks, Brian! + +### 2021-07-16 +* new libraries manual versions, thanks, Brian! +* palette hiding/showing primitives fixes, tanks, Michael! +* readme update, thanks, Michael! +* objects, gui: rearranged internal order of categories +* byob: rearranged internal order of categories +* objects: fixed overlapping blocks bug in unified palette +* store, gui: fixed capturing global settings for serializing scenes +* gui: update palette when switching to a new scene / loading a new project + +### 2021-07-15 +* gui: made sprite-bar height independent of the number of categories + +### 2021-07-13 +* objects: fixed search from palette context menu + +### 2021-07-12 +* Chinese translation update, thanks, Simon! +* objects: fixed refactored "Delete a variable" button for stage palette + +### 2021-07-11 +* added libraries and media to cache, thanks, Joan! + +### 2021-07-10 +* PWA support, thanks, John, for showing me! + +### 2021-07-09 +* extensions: whitelisted 'https://snap.berkeley.edu/' +* morphic: made scrollbars thinner by default +* morphic: tweaked slider transparency for flat design mode +* objects: translation support for category labels in the unified palette +* threads: fixed vanishing JSF block bug in new error messages +* gui: fixed blocks cache invalidation for unified palette + +### 2021-07-08 +* objects: added category labels to unified palette +* gui: accelerated unified palette scrolling animation +* adjust scroll bars when refreshing the palette +* store: commented out saving the unified palette setting in the project xml during development +* gui: fixed scroll-into-view glitch when adding scenes + +### 2021-07-07 +* morphic, gui: tweaked perish() animation +* objects: fixed "hide / show primitives" for unified palette +* threads: display blocks with their error messages for custom blocks, thanks, Michael! + +### 2021-07-06 +* byob, objects: new feature: hide custom helper blocks in palette +* German translation update (hiding helper blocks in the palette) +* gui: unified palette: offer the currently visible category when letting the user make a block +* scenes, objects, gui: made unified palette the default for dev + +### 2021-07-05 +* gui: unified palette: indicate "selected" category in selector buttons +* extensions: web-serial extension primitives, pioneered by Dariusz Dorożalski +* added new "serial ports" library +* added jshint esversion tags +* gui: unified palette: don't animate scrolling if delta is zero +* byob: replaced checkboxes in custom block context menus with symbols + +### 2021-07-04 +* fixed audio_comp library "plot sound" block to work with translations, thanks, Hans, for the report! + +### 2021-07-03 +* objects: arranged the blocks in the unified palette column-wise +* gui: fixed the paletteHandle for the unified palette +* gui, scenes, store: fixed unified palette for multi-scene projects +* gui: fixed unified palette for searching +* gui: renamed "Unified palette" to "Single palette" in the settings menu +* updated German translation for unified palette setting + +### 2021-07-02 +* gui, object, store, etc.: unified blocks palette option, thanks, Michael! +* merged scenes branch +* morphic: fixed centering of menus, thanks, Brian Broll! +* gui: animate scrollToPaletteCategory() +* gui: guard against missing categories when scrolling the unified palette + +### 2021-05-21 +* gui, scenes, store: proxied thumbnail, name and notes in project, restored in XML +* gui: distinguished project name from scene names, removed hidden "export as plain text" option +* gui: sceneified project notes +* gui: adjusted project thumbnail in "save" dialog +* gui: some cleanups +* gui, scenes: sceneified unsaved changes management +* blocks: fixed search-blocks for scenesMenu + +### 2021-05-20 +* gui: marked projectName to be refactored and sceneified + +### 2021-05-19 +* gui: disabled scene icon context menu for project scene +* gui: disabled dragging the project scene icon +* gui: made sure the project scene stays in place +* gui: added exporting single scenes +* scenes, store: removed redundant properties "notes" and "thumbnail" from project +* store: removed "thumbnail" property from scene xml + +### 2021-05-18 +* gui: fixed exporting media only for a single scene +* gui: fixed cloud file format components +* gui: "projectized" cloud file format for a single scene +* gui: fixed cloud file format for multi-scene projects +* gui: ensured unique scene names + +### 2021-05-11 +* gui: add multi-scene projects +* gui: adjusted scene album rendering +* gui: tweaked scene album rendering + +### 2021-05-10 +* gui: project menu entries for "new scene" and "add scene" + +### 2021-04-28 +* gui: only show scene album if the project has more than a single scene + +### 2021-04-23 +* store: serialize sprite-order from scenes +* gui: sceneified refreshIDE() +* gui: sceneified toggling dynamic input labels and switching languages +* gui: sceneified "zoom blocks" +* store: moved sprite-selection attribute from stage to scenes tag +* scenes, store, gui: remember last edited scene in a project + +### 2021-04-22 +* store, gui: first pass at deserializing multi-scene projects +* gui, scenes: migrated "new project" feature +* gui: replaced openScene() with openProject() + +### 2021-04-21 +* store, gui: refactored project loading structure + +### 2021-04-20 +* scenes, store, gui: multi-scene project serialization format, first pass + +### 2021-04-16 +* scenes, store, gui: remember last edited sprite in a scene / project +* scenes: removed Project class +* scenes, store, gui: export multi-scene projects + +### 2021-04-14 +* scenes: new Project class +* store: sceneified projects +* gui: switched to scene-based project serialization + +### 2021-04-12 +* blocks, objects, threads, gui: new "switch to scene _" command primitive +* morphic, gui: support bulk-file-drop for importing scenes +* gui: tweaked scene album colors + +### 2021-04-08 +* gui: scroll selected scene icon into view + +### 2021-04-01 +* gui: made scrollbars in the wardrobe and jukebox more responsive + +### 2021-04-01 +* gui: made scene icons selectable +* gui: made scene icons observe the scene's stage versions + +### 2021-07-02 +* extensions: took out web-serial extension prims (not yet ready) + +### 2021-06-25 +* extensions: added first rough experimental version of web-serial extension primitives +* extensions: commented out web-serial extension prims while thinking about their design + +### 2021-06-24 +* extensions: tweaked loading unlisted script-extensions +* byob, threads, store: removed unused code +* extensions: added documentation for adding external JS modules +* updated bignumbers library + +### 2021-06-23 +* updated bignums library +* pushed dev version to 6.10 +* took out device libraries (Hummingbird blocks and Leap Motion) + +### 2021-06-22 +* extensions: added script-loading extension primitive + +### 2021-06-20 +* updated extensions documentation + +### 2021-06-19 +* extensions: added color extension primitives +* byob: fixed search for dynamic extension menus +* tweaked make-vars library to reduce internal dependencies +* updated the abominable colors library ;-) + +### 2021-06-18 +* extensions: added text extension primitives +* updated strings library +* extensions: tweaked variable declaration extension primitive, commented out palette refresh prim +* tweaked make-variables library +* tweaked strings library +* extensions: added color library dropdown menu +* blocks, threads, extensions: separated extension primitives from extension dropdown menus +* blocks, byob: dynamic extension dropdown menu support +* updated strings library (changed variable name to '_case independent') + +### 2021-06-17 +* extensions: added APL extension primitives +* updated apl library +* threads, extensions: added variable extension primitives +* updated make-variables library + +### 2021-06-16 +* threads: added exception handling primitives for try/catch +* extensions: added try-catch extension primitives +* updated try-catch library +* extensions: added object-naming extension primitive +* updated text-costume library + +### 2021-06-15 +* extensions: tweaked world-map primitives +* updated maps library +* extensions: new naming convention +* updated list-utilities library +* extensions: documented function semantics +* updated frequency-distribution-analysis library +* updated animation library +* updated words-sentences library +' extensions: added tts +* updated text-to-speech library +* updated bar-charts library +* fixed #2850 (occasional invisible error message), thanks, Ken, for the bug report! +* extensions: added long-form xhr primitive +* extensions: added geolocation extension primitive +* maps: changed default style to OpenStreetMap +* updated http-blocks library +* updated pixels library +* updated audio library +* updated localstorage library + +### 2021-06-14 +* new dev version +* threads, blocks, objects, extensions: new safe extensions mechanism +* objects: added new "primitive" blocks to dev palette +* updated list-utilities library +* updated animation library +* updated frequency-distribution-analysis library +* extensions: added some world-map extension primitives +* threads: associate setting with JSF-block rather than the evaluator +* extensions: added more world-map extension primitives + ## 6.9.0 * **Notable Changes:** * JS-functions are now disabled by default until switched on in the settings menu per session @@ -82,7 +1084,7 @@ * **Notable Fixes:** * fixed DEAL in the APL library, thanks, Brian! * fixed a resizing edge case bug for the stage prompter (ASK command) - * fixed finding "index of" block by search + * fixed finding "index of" block by search ### 2021-04-09 * objects fixed #2821 - "index of" block not found by search @@ -93,6 +1095,23 @@ * fixed DEAL in the APL library, thanks, Brian! * objects: fixed a resizing edge case bug for the stage prompter (ASK command) +### 2021-03-31 +* gui: tweaked scene icon settings +* gui: moved stage icon to the top of the corral + +### 2021-03-30 +* gui: added documentation +* gui: added SceneIconMorph and SceneAlbumMorph prototypes +* gui: turned scenes into an observable list +* gui: added scene icon thumbnails + +### 2021-03-25 +* gui, scenes: sceneified trash +* gui: first "live" multi-scene experiment + +### 2021-03-19 +* gui, store, scenes: capture global settings in scenes + ## 6.7.3 * **Notable Changes:** * hyperized "key _ pressed?" predicate @@ -107,7 +1126,11 @@ * threads: hyperized "key _ pressed?" predicate * prepared patch +### 2021-03-18 +* gui, scenes, objects: more scene-refactorings + ### 2021-03-17 +* objects, gui, paint, sketch, store: de-globalized stage dimensions * new dev version * threads fixed repeat for non-numbers, thanks Stefan! * updated list-utilities library, thanks, Brian! @@ -121,6 +1144,15 @@ * Catalan, thanks, Joan! ### 2021-03-15 +* gui: marked methods for scene refactorings + +### 2021-03-12 +* scenes, gui, store: added scenes class + +### 2021-03-11 +* gui, store: refactor loading a project into the IDE + +### 2021-03-09 * new dev version * Catalan translation update, thanks, Joan! * lists, apl: fixed "transpose", thanks, Brian! @@ -147,7 +1179,7 @@ * undelete sprites * **Notable Changes:** * optimized special cases for COMBINE (sum, product, min, max) by up to 34 x - * rebind (relabel) recursive calls when duplicating a custom block definition + * rebind (relabel) recursive calls when duplicating a custom block definition * custom block label parts inside the prototype (in the block editor) are now displayed the same as in block instances * variadic ring inputs are now arranged vertically (e.g. the reporter rings in PIPE) * changed zebra-coloring for yellow custom block prototypes (in the block editor) so the hat block changes the shade, not the prototype @@ -172,7 +1204,7 @@ * gui: added "trash is empty" information, commented out for now * gui: changed gui strings for undelete feature * updated German translation -* byob: rebind (relabel) recursive calls when duplicating a custom block definition +* byob: rebind (relabel) recursive calls when duplicating a custom block definition ### 2021-03-04 * gui: added trash button for undeleting sprites @@ -186,7 +1218,7 @@ ### 2021-03-02 * threads: optimized special cases for COMBINE (sum, product, min, max) by up to 34 x * threads: optimized special cases for compiled version of COMBINE -* gui, objects: undelete sprites +* gui, objects: undelete sprites * threads: correct identities when combining the items of an empty list with + / * / min / max * gui: pushed dev version to 6.7 because of new documentable features @@ -198,7 +1230,7 @@ ### 2021-02-27 * new dev version * blocks: arrange variadic ring inputs vertically (e.g. the reporter rings in PIPE) -* blocks: removed a redundant unused case for block highlights +* blocks: removed a redundant unused case for block highlights ## 6.6.0 * **New Features:** @@ -309,7 +1341,7 @@ * experimental "transpose (list)" primitive relabelling option for "all but first" * renamed "Obsolete!" blocks to "Undefined!" * **Notable Fixes:** - * fixed a glitch in the animation library's "sine in-out" easing function + * fixed a glitch in the animation library's "sine in-out" easing function * fixed a postMessage glitch in the API, thanks, Bernat! * fixed a glitch in the Turkish translation that broke the "Looks" blocks category * fixed a glitch that prevented the text cursor from displaying instantly in certain situations @@ -351,7 +1383,7 @@ * threads, objects experimental "column _ of _" reporter relabelling option for "item _ of _" * threads, objects experimental "width of _" reporter relabelling option for "length of _" * updated German translation (with experimental block specs) -* fixed an input slot spec glitch in the Turkish translation +* fixed an input slot spec glitch in the Turkish translation * store: renamed "Obsolete!" blocks to "Undefined!" ### 2021-01-25 @@ -360,7 +1392,7 @@ ### 2021-01-21 * new dev version -* animation library: fixed a glitch in the "sine in-out" easing function +* animation library: fixed a glitch in the "sine in-out" easing function ## 6.5.1 * **New Features:** @@ -369,7 +1401,7 @@ * 10% speed-up for reporters, WARP and TURBO * updated list utilities library, thanks, Brian! * **Notable Fixes:** - * fixed a bug when changing a Boolean input slot with a default value to numerical type + * fixed a bug when changing a Boolean input slot with a default value to numerical type * **Documentation Updates:** * Snap! Manual sources and compiling documentation, thanks, Brian! * updated "contentWindows" part of the Snap! API, thanks, Bernat @@ -402,7 +1434,7 @@ * automatic backup of unsaved changes to localstore, option to restore in the file menu until the first change in the new project * **Notable Changes:** * 25% speed-up for reporters, WARP and TURBO - * up to 40x speed-up for "new costume from list" reporter primitive + * up to 40x speed-up for "new costume from list" reporter primitive * re-enabled reporter drops in "key _ pressed?" input slot * **Notable Fixes:** * fixed a bug in hyperblocks @@ -420,7 +1452,7 @@ * prepared release ### 2020-12-22 -* threads: up to 40x speed-up for "new costume from list" reporter primitive +* threads: up to 40x speed-up for "new costume from list" reporter primitive * api: added unsavedChanges() method and documentation * blocks, gui: visual indication of unsaved changes in the IDE's project label * Russian translation update, thanks, Pavel! @@ -435,7 +1467,7 @@ ### 2020-12-19 * threads: added code-documentation for the WARP/timestamp optimization -* gui: new auto-backup to localstore feature +* gui: new auto-backup to localstore feature ### 2020-12-18 * threads: optimized scheduler, reduced system calls to Date.now(), 25 % speed-up for reporters, WARP and TURBO @@ -477,7 +1509,7 @@ * searching for blocks and keyboard entry now includes the contents of dropdown menus * disabled dropping reporters into certain dropdowns (monadic functions, types, costume attributes, graphic effects, layers, audio attributes, pen attributes, dates, relation, keys, video attributes) * changed VIDEO _ ON _ reporter primitive to be hyper-monadic (second slot) - * hyperized OBJECT reporter primitive in sensing + * hyperized OBJECT reporter primitive in sensing * **Notable Fixes:** * keep internal linked-list organization intact for hyperblocks * improved SVG loading in Firefox, thanks, Joan! @@ -497,7 +1529,7 @@ ### 2020-12-09 * Tamil translation update, thanks, Barthdry! * threads, objects: added hyperdyadic ATAN2 primitive reachable via "relabel" -* threads: hyperized OBJECT reporter primitive in sensing +* threads: hyperized OBJECT reporter primitive in sensing ### 2020-12-07 * GUI: improved SVG loading, thanks, Joan! @@ -523,7 +1555,7 @@ ### 2020-12-01 * threads, objects: added hyperdyadic MIN and MAX primitives reachable via "relabel" -* threads, objects: added hyperdyadic less/greaterThanOrEquals prims +* threads, objects: added hyperdyadic less/greaterThanOrEquals prims * blocks: made monadic functions and data types menus static * blocks: made costume attribute, graphic effects and layers menus static * blocks: made audio attributes menu static @@ -567,7 +1599,7 @@ ### 2020-11-22 * objects: fixed display of inherited sprite-local variables -* threads: make sure video capture is turned on before accessing it programmatically +* threads: make sure video capture is turned on before accessing it programmatically ### 2020-11-21 * new dev version @@ -718,12 +1750,12 @@ ### 2020-10-28 * gui: tweaked wait-until-assets-are-loaded mechanism * gui: fixed "rename costume" dialog title to distinguish between costumes and backgrounds -* German translation update for "rename background" +* German translation update for "rename background" * French translation update ### 2020-10-27 * gui, objects, store: pause generic WHEN hat blocks when loading a project or importing a sprite until the user clicks the green flag or un-pauses the red stop sign, unless opening it with #present:&noRun -* morphic: prevent unclosable menus, thanks, Brian B.! +* morphic: prevent unclosable menus, thanks, Brian B.! ### 2020-10-26 * objects: added test for the existence of generic WHEN hat blocks @@ -731,7 +1763,7 @@ ### 2020-10-23 * pushed dev version to v6.3.0 because of new features * objects: don't show some development-only blocks as search results -* blocks: fixed a multi-line-text spec typo +* blocks: fixed a multi-line-text spec typo * blocks: removed unused %month slot * blocks: removed unused %lst slot @@ -742,10 +1774,10 @@ * blocks: un-hid "extract" menu-option * morphic: create drop-shadows just in time * blocks: holding the shift-key when dragging extracts a single command from a stack of blocks -* German translation update for new string "extract" +* German translation update for new string "extract" ### 2020-10-21 -* gui: wait until all costumes have loaded before auto-triggering the green-flag event +* gui: wait until all costumes have loaded before auto-triggering the green-flag event * gui, objects, store: wait until all sounds have loaded before auto-triggering the green-flag event * gui, cloud: added noCloud flag that disables cloud access, thanks, Bernat! * blocks: new experimental (hidden) "extract" single command block context menu option @@ -756,7 +1788,7 @@ * blocks: fixed translation bug for zero-value menu selection entries * Russian translation update, thanks, Pavel! * api: added getProjectXML() method -* gui: removed an obsolete comment +* gui: removed an obsolete comment ### 2020-10-15 * new dev version @@ -796,14 +1828,14 @@ * enabled "result pic" for command scripts containing a "report" block * **Notable Changes:** * made (hidden) "Blurred shadows" setting persistent, use to get rid of "red bar" artifacts on old laptops using Chrome - * specifying alpha values is now optional for generating pixels in bitmaps (costumes), none means the pixel is solid + * specifying alpha values is now optional for generating pixels in bitmaps (costumes), none means the pixel is solid * attribute selection in the SET block are now prefixed with "my" * assume stage dimensions for "SWITCH TO COSTUME" with list if current costume dimensions don't fit - * new "48 kHz" option in the "sampling rate" dropdown + * new "48 kHz" option in the "sampling rate" dropdown * increased area / sensitivity for collapsing variadic input slots, esp. on mobile devices * **Notable Fixes:** * "append" block now shows up when searching for it - * disable blurred shadows inside input slots if the hidden "blurred shadows" setting is turned off, use this setting on old laptops displaying "red bars" in Chrome + * disable blurred shadows inside input slots if the hidden "blurred shadows" setting is turned off, use this setting on old laptops displaying "red bars" in Chrome * **Translation Updates:** * Greek, thanks, HM100! * German @@ -816,7 +1848,7 @@ * byob: added "settings" button to input slot dialog * symbols: added "gearPartial" icon * blocks: fixed an empty-slot detection issue (reported in the forums), but left it commented out for now, until researching the consequences ;-) -* blocks: increased area / sensitivity for collapsing variadic input slots +* blocks: increased area / sensitivity for collapsing variadic input slots * blocks: tweaked expanding variadic inputs * blocks: reverted sensitivity tweaks for variadic inputs * blocks, threads: reintroduced a different approach for making it easier to collapse variadic inputs @@ -832,7 +1864,7 @@ ### 2020-10-05 * Greek translation updata, thanks, HM100! -* blocks, threads: prefixed attribute selection in the SET block with "my" +* blocks, threads: prefixed attribute selection in the SET block with "my" * German translation update * objects: assume stage dimensions for "SWITCH TO COSTUME" with list if current costume dimensions don't fit @@ -842,16 +1874,16 @@ ### 2020-09-28 * tweaked "frequency distribution analysis" library to plot lines in any color or style - + ### 2020-09-25 * new dev version * updated "frequency distribution analysis" library: New "lines" option for plotting * blocks: new "add comment" option in the block context menu, thanks, Rob Fidler! -* blocks: added "48 kHz" option to the "sampling rate" dropdown +* blocks: added "48 kHz" option to the "sampling rate" dropdown ## 6.2.1 * **New Features:** - * added "get value from key" reporter to database library, thanks, Brian! + * added "get value from key" reporter to database library, thanks, Brian! * **Notable Changes:** * updated reference manual for v6.2, thanks, Brian! * **Notable Fixes:** @@ -925,7 +1957,7 @@ ### 2020-09-01 * Norwegian translation update, thanks, Olav * gui, blocks: fixed a bunch of typos and UI strings, thanks, Brian Broll! -* colors library update, thanks, Brian H.! +* colors library update, thanks, Brian H.! * German translation update * objects: also scan custom blocks for message sends @@ -970,7 +2002,7 @@ ### 2020-08-04 * new dev version -* blocks: include background color when exporting (semi-) transparent script pics +* blocks: include background color when exporting (semi-) transparent script pics ## 6.1.2: * fixed variable scope for ASK/TELL @@ -1048,12 +2080,12 @@ ### 2020-07-23 * morphic: fixed mouseDown events for touch devices * morphic, gui: added separators to list morphs, '~' for the libraries dialog -* blocks: tweaked block-fading coloring +* blocks: tweaked block-fading coloring ### 2020-07-22 * morphic, blocks, gui: tweaked block-fading mouse-over * blocks, threads: tweaked context visualizations to be alpha-independent -* gui: save block-transparency in settings +* gui: save block-transparency in settings * morphic: fixed input slider target update rendering ### 2020-07-21 @@ -1173,7 +2205,7 @@ * render Boolean slots correctly after mouse-over ### 2020-01-06 -* blocks: reset BooleanSlotMorph canvas context's global alpha after rendering the slider button +* blocks: reset BooleanSlotMorph canvas context's global alpha after rendering the slider button * prepared patch ## 5.4.2: @@ -1300,11 +2332,11 @@ ## v5.3.6: * **Notable Fix:** - * fixed variadic reporters library + * fixed variadic reporters library ## v5.3.5: * **Notable Fix:** - * make sure list watchers are correctly initiailized + * make sure list watchers are correctly initiailized ## v5.3.4: * **Notable Fixes:** @@ -1316,7 +2348,7 @@ ### 2019-11-15 * objects: prevent costumes from becoming "broken" when pasting video snaps on them while the camera is not yet fully initialized -* objects: catch sub-pixel sized thumbnails +* objects: catch sub-pixel sized thumbnails * prepared release ### 2019-11-14 @@ -1340,7 +2372,7 @@ * new dev version * drop-down menu translation improvements by Joan * submenu-title translation control -* help screen fixes by Brian and Michael +* help screen fixes by Brian and Michael * prepared release ## v5.3.2: @@ -1380,7 +2412,7 @@ ## v5.3.0: * **New Features:** - * expanding the rings in "map", "keep" and "find" shows 3 inputs named "value", "index" and "list" + * expanding the rings in "map", "keep" and "find" shows 3 inputs named "value", "index" and "list" * limited expanding rings in special HOFs to 3 parameters * calling an empty reporter-ring with no formal parameters passing a single argument treats it as the identity function of that argument * **Notable Changes:** @@ -1531,7 +2563,7 @@ * **New Features:** * new cloud-menu entry: "Open in Community Site", thanks, Michael! * accept a list of pixels in the SWITCH TO COSTUME block - * URLs in dialog boxes are now clickable and can open new browser tabs, thanks, Brian Broll! + * URLs in dialog boxes are now clickable and can open new browser tabs, thanks, Brian Broll! * **Notable Changes:** * made "i" upvar inside FOR loop's C-Shape slot mutable by user script * prevent switching to another sprite if a block editor is open (so local blocks of different sprites don't mix) @@ -1545,7 +2577,7 @@ * enable costumes created in the vector editor to be stretchable in Firefox, thanks, @coproc * **Translation Updates:** * Catalan - * Ukrainian, thanks, + * Ukrainian, thanks, * Galician, thanks, Bernat * Turkish, thanks, Turgut! * German @@ -1560,7 +2592,7 @@ ### 2019-10-14 * morphic: new "reactToInput" text-editing event * objects: fixed #2485 (find blocks and text-entry mode feature) -* gui: fixed ProjectDialog's search field behavior for IME +* gui: fixed ProjectDialog's search field behavior for IME * threads: fixed MY PARTS so mutating the result list has no effect * threads: made "i" upvar inside FOR loop's C-Shape slot mutable by user script * URLs in dialog boxes are now clickable and can open new browser tabs, thanks, Brian Broll! @@ -1602,7 +2634,7 @@ * blocks, threads: made "temporary?" attribute for clones settable (in the SET->my... block) * objects: made the "paste on" block avaible in the "pen" palette * fix for tainted audio context when the user interacts with an auto-playing project -* store: persist temporary costumes that aren't in the wardrobe (e.g. generated graphics, maps, paste-ups) +* store: persist temporary costumes that aren't in the wardrobe (e.g. generated graphics, maps, paste-ups) * German translation update * Galician translation update, thanks, Miguel! @@ -1659,7 +2691,7 @@ ## v5.0.4 * **Notable Fixes:** * fixed a glitch when running a generic WHEN hat block with a literal Boolean input - * fixed a bug in the SHOW PICTURE block of the "Pixels" library + * fixed a bug in the SHOW PICTURE block of the "Pixels" library ### 2019-07-10 * threads: fixed a glitch when running a generic WHEN hat block with a literal Boolean input @@ -1715,14 +2747,14 @@ * new dev version * lists: fixed #2446 * threads: fixed an issue when iterating over a linked list with a script mutating it, thanks, Brian! -* cloud: fixed collection grid page size, thanks, Bernat! +* cloud: fixed collection grid page size, thanks, Bernat! * morphic: fixed a race condition in Morph.glideTo() * blocks: added gliding animation when inserting blocks using the keyboard ## v5 ### 2019-06-27 * **New Features:** - * the "tools" library has been integrated as primitives + * the "tools" library has been integrated as primitives * export 1- /2- dimensional lists with atomic data as CSV * export n-dimensional lists with atomic data as JSON * import CSV, Text, or JSON via drag & drop @@ -1734,7 +2766,7 @@ * new experimental live audio-scripting support * new video capturing and video-motion detection support, thanks, Josep! * new "object" reporter in the Sensing category for getting a sprite by its name - * blocks for changing and querying the "flat line ends" setting + * blocks for changing and querying the "flat line ends" setting * selectors for changing and querying "draggable" and "rotation style" settings * new sound + music "volume" feature + blocks * new sound + music stereo "panning" feature + blocks @@ -1758,7 +2790,7 @@ * added "width" and "height" to the MY blocks dropdown * added "width" and "height" as attribute selectors of the OF primitive * added "costume" selector to the MY attributes dropdown - * added plus (+) and minus (-) keys to sensing and key hat + * added plus (+) and minus (-) keys to sensing and key hat * special context-aware drop-downs for custom blocks * new "stick to" submenu in the sprite context menu where applicable * multi-line and monospaced "code" input slots for custom blocks @@ -1773,9 +2805,9 @@ * added transparency (alpha) to pen colors * new drop-down options for sprite-layer control ("GO TO front/back") * "loop arrow" symbol for primitive loops, also available for custom blocks - * optimized in-project storage of atomic-data lists (more efficient, less space) + * optimized in-project storage of atomic-data lists (more efficient, less space) * remove all clones when the Green Flag is clicked - * adjust bottom of STOP block to reflect the menu selection (show / hide bottom notch) + * adjust bottom of STOP block to reflect the menu selection (show / hide bottom notch) * enable dropping commands into all rings * colors in the vector editor are now named "Edge color" and "Fill color", thanks, Brian! * renamed "whitespace" option in SPLIT to "word" @@ -1835,7 +2867,7 @@ ### 2019-06-04 * Objects, Lists: fixed #682 -* Lists, Tables: fixed table watcher cell updates for costumes (save / load) +* Lists, Tables: fixed table watcher cell updates for costumes (save / load) ### 2019-06-03 * Threads: fixed #2249, predicates inside generic WHEN hats should be able to pass upvars @@ -1844,7 +2876,7 @@ ### 2019-06-02 * Objects, Store: made "pen down?" and "shown?" attributes watchable onstage -* Objects, Blocks: made "shown?" attribute inheritable +* Objects, Blocks: made "shown?" attribute inheritable * Objects, Blocks: made "pen down?" attribute inheritable * Objects: made watchers immediately react to inheritance changes @@ -1890,7 +2922,7 @@ * enhanced detecting '+' and '-' keys for Firefox ### 2019-05-20 -* Objects, Blocks added plus- and minus- keys to key pressed predicate and hat block +* Objects, Blocks added plus- and minus- keys to key pressed predicate and hat block * Objects: refactored projection layer update * Catalan translation update, thanks, Joan! @@ -1908,7 +2940,7 @@ * Threads: fixed costume names and thumbnails for computed costumes ### 2019-05-09 -* Blocks, Objects, Threads: tweaked new video-snap (still capture) feature +* Blocks, Objects, Threads: tweaked new video-snap (still capture) feature * Objects: fixed video still "snap on sprite" for Firefox * GUI: added credits in the "about" dialog for @jferran6 and @jguille2 * German and Catalan translation updates @@ -1919,7 +2951,7 @@ * Blocks, Threads, Objects: Finalized Video ops * Objects, Threads, GUI: auto-start video capture when querying, stop video on stop-all * GUI, Objects: arranged video blocks in palette -* Blocks, Objects, Threads: new video-snap (still capture) feature +* Blocks, Objects, Threads: new video-snap (still capture) feature ### 2019-05-07 * Blocks, Objects, Threads, Video: optimized video motion detection @@ -1940,7 +2972,7 @@ * Blocks: reordered MY block dropdown by data type * Blocks, Threads: added "width" and "height" to the MY block's dropdown * Blocks, Threads: added "width" and "height" to the OF block's dropdown for sprites -* Blocks, Objects: added hidden "blitz-HOF primitives" for MAP, KEEP and COMBINE +* Blocks, Objects: added hidden "blitz-HOF primitives" for MAP, KEEP and COMBINE * updated German, Catalan, Spanish and French translations for "blitz-HOF" primitives * duplicated help-screens for "map" & friends for their atomic "blitz" variants * Objects: expose "import raw data" option in variable watcher context menu @@ -2035,7 +3067,7 @@ * Objects, Threads: new "stretch" primitive for costumes, also for flipping * Threads: new feature: new costume from list of pixels * Objects, Threads: added "current" to costume input slot dropdown -* Blocks: deprecated graphic effects: "duplicate", "comic" and "confetti" +* Blocks: deprecated graphic effects: "duplicate", "comic" and "confetti" * Objects: added reporter for graphic effects * Objects, Blocks: added pen attribute reporter * Objects: added "write" command to Pen category (same as "label" from tools @@ -2168,7 +3200,7 @@ * removed "loudness / microphone" block from AudioComp lib (turned into primitive) * new "microphone" reporter in Sensing for getting volume, signals and frequencies * Objects: keep microphone always on when running Snap! locally -* GUI: let users turn off microphone manually in the settings menu (in the offline version) +* GUI: let users turn off microphone manually in the settings menu (in the offline version) ### 2019-03-05 * GUI: added "globe" icon to language menu item @@ -2200,9 +3232,9 @@ * new help screens for some blocks, thanks, Brian! ### 2019-02-22 -* Paint, Sketch: fixed pipette bug for fill color introduced +* Paint, Sketch: fixed pipette bug for fill color introduced * Tweaked German translation -* Tweaked sharing scripts with global custom blocks among projects, thanks, Bernat! +* Tweaked sharing scripts with global custom blocks among projects, thanks, Bernat! ### 2019-02-21 * Blocks: fixed deleting a single command inside a stack @@ -2237,7 +3269,7 @@ ### 2019-02-06 * Blocks, BYOB: refactored custom block input options and drop-down menus * Blocks: adjust bottom of STOP block to reflect the menu selection (show / hide bottom notch) -* Blocks: enable dropping commands into all rings, under constructions +* Blocks: enable dropping commands into all rings, under constructions ### 2019-02-05 * BYOB: radio button symbols for special slot / drop-down menu options @@ -2273,7 +3305,7 @@ * Objects, Threads: new blocks for setting and changing the stage's background color * Store: save stage's background color in project * updated German translation -* Blocks: Tweaked rendering of C-shaped slots in predicates +* Blocks: Tweaked rendering of C-shaped slots in predicates * updated cases library blocks with new loop-arrow symbols * updated animation library blocks with new loop-arrow symbols, tweaked FOR block @@ -2287,8 +3319,8 @@ ### 2019-01-21 * let users make C-shape slots with loop arrow symbols. Sigh. -* updated internal "for each" primitive block with new arrow symbol. Sigh. -* updated Indonesian translation, thanks, Emmanuella Rumanti +* updated internal "for each" primitive block with new arrow symbol. Sigh. +* updated Indonesian translation, thanks, Emmanuella Rumanti * updated FOR and FOREACH in tools library with new new loop-arrow symbols ### 2019-01-19 @@ -2332,7 +3364,7 @@ * Objects: fixed "set pen color (color picker)" to observe, i.e. overwrite transparency * Lists, Threads, Objects: added (Bernat's) JSON parser to SPLIT block * Lists, Objects: added "export as JSON" capability -* Lists, Objects: automatically parse json files on import +* Lists, Objects: automatically parse json files on import * Lists: prevent Booleans in CSVs ### 2019-01-08 @@ -2347,8 +3379,8 @@ ### 2019-01-04 * Objects, Blocks, Threads: new feature/block: sense colors and sprites anywhere -* updated German translation -* Objects: fixed pixel color sensing for stage pen trails +* updated German translation +* Objects: fixed pixel color sensing for stage pen trails ### 2019-01-02 * Objects, Blocks, Threads, GUI, Store: added third color dimension and transparency to pen @@ -2428,7 +3460,7 @@ * don't stamp if the canvas is too small, avoid a JS error message * changed "csv" option in SPLIT to comply with RFC 4180 and parse the whole table * Notable Fix: - * help for local custom blocks + * help for local custom blocks * Translation Update: * Japanese, thanks Yoshiteru Nakamura! @@ -2465,8 +3497,8 @@ * reorganized source code files and translations into a subfolder structure * SET PEN COLOR TO (number) now wraps the hue around for numbers < 0 and > 100 * Notable Fixes: - * restore propagation of inherited attributes when loading - * support for older versions of Chrome, thanks, Michael! + * restore propagation of inherited attributes when loading + * support for older versions of Chrome, thanks, Michael! * fixed "letter of" primitive for numeric input, thanks, Michael and Dan! ### 2018-10-07 diff --git a/OFFLINE.md b/OFFLINE.md index 5c1e63f7..5514f263 100755 --- a/OFFLINE.md +++ b/OFFLINE.md @@ -7,7 +7,7 @@ If you would like to use TurtleStitch without being connected to the internet, e or in a school with limited or unreliable online service you can easily set up TurtleStitch locally on your computer, by following these -## Simple Steps: +### Simple Steps: 1. Download the latest TurtleStitch Release from [https://github.com/backface/turtlestitch/releases/latest](https://github.com/backface/turtlestitch/releases/latest "TurtleStitch Source Code"), and unpack the contents of the archive to your local disk. @@ -18,9 +18,9 @@ TurtleStitch is just a web page, you can open it locally in your browser, no nee on your computer. You can use whichever operating system you like, you don't even need admin rights. You can also use a memory stick to distribute the directory with source files among the participants of a workshop or the students of your class, even if some of them -are using MacOS and others run MS Windows or Linux. +are using MacOS and others run MS Windows or Linux. -## Remember to Unpack +### Remember to Unpack Windows users, this is for you. @@ -30,7 +30,7 @@ to your computer. If you downloaded the zip file please actually unzip it, befor on Windows double clicking the zip fie will *not* unzip it but instead show you the contents of the archive. -## Which Web Browser? +### Which Web Browser? It's best to open TurtleStitch in Chrome or Firefox. @@ -41,14 +41,13 @@ will work, but some operations will be so slow it takes the fun out of programmi ## What about Tablets? -We don't recommend it. TurtleStitch sorta runs on tablets, but the UI isn't optimized for mobile use. Also, many mobile web browsers enforce some restrictions that are not web-standards compliant, e.g. they will not support the soft keyboard or intentionally slow down certain operations to discourage using web apps in favor of proprietary "native" apps. -## Restrictions of the Offline Version +### Restrictions of the Offline Version You can't access the cloud, duh. Everything else just works. @@ -57,7 +56,7 @@ file locally there aren't any restrictions. You can use all the blocks, import p libraries, take snapshots with the webcom, record sounds with the microphone, draw your own costumes etc. -## Saving and Loading +### Saving and Loading When you use TurtleStitch locally you will not be able to save projects to the cloud, nor can you access projects saved in the cloud. Instead projects will be exported as xml-files to your @@ -79,8 +78,3 @@ Easy, isn't it? From time to time it's wise to check whether a new version of TurtleStitch is available. You can find out the lastest release using the link above, and compare that to the offline sources on your computer. If there is a newer version, simply replace the source files with the newer ones. - - -Enjoy! - --Jens diff --git a/README.md b/README.md index e1438209..0fddf549 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ + # TurtleStitch TurtleStitch is a visual, blocks-based programming environment for turtle graphics with a primary focus on @@ -24,14 +25,15 @@ You can also try the [latest stable version from the git master branch](https:// or [download it and run it offline](https://github.com/backface/turtlestitch/blob/master/OFFLINE.md) - ## Acknowledgements / License Snap! Build Your Own Blocks [http://snap.berkeley.edu] is a visual, blocks based programming language inspired by Scratch -Copyright (C) 2008-2021 by Jens Mönig and Brian Harvey +## License +Copyright (C) 2008-2022 by Jens Mönig and Brian Harvey +Copyright (C) 2008-2022 by Michael Aschauer Snap! is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as diff --git a/help/Frobnicate Snap! Manual.sequ b/help/Frobnicate Snap! Manual.sequ new file mode 100755 index 00000000..72d1b584 --- /dev/null +++ b/help/Frobnicate Snap! Manual.sequ @@ -0,0 +1,355 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/help/SnapManual.docx b/help/SnapManual.docx index e4ddca87..ff54e236 100644 Binary files a/help/SnapManual.docx and b/help/SnapManual.docx differ diff --git a/help/SnapManual.md b/help/SnapManual.md index 5329756f..1b617bbc 100644 --- a/help/SnapManual.md +++ b/help/SnapManual.md @@ -22,7 +22,7 @@ Displayed figures: The manual is inconsistent between centering and left-justif There is a special case of display alignment for pictures with a list as the shown result of an expression. These pictures take a lot of vertical space, so in some cases they are aligned right, with a text paragraph in a text box to the left of the speech balloon but overlapping horizontally with the actual block. See page 38 for two examples. -Pictures in line with text (typically a single block): Text Wrap > Tight, then Format Picture > Layout > Advanced left space to zero, right space to 0.6 inches. Then you can drag the block where it belongs in the text, but the fine positioning will require the cursor arrow keys. Put spaces in the text left or right of the picture where syntactically appropriate, i.e., where you'd put a space left or right of a word. To see why pictures taller than a single block are problematic in line, look at the second paragraph on page 7. It's layed out correctly, with respect to its meaning, but it /looks/ screwy. I should fix it. +Pictures in line with text (typically a single block): Text Wrap > Tight, then Format Picture > Layout > Advanced left space to zero, right space to 0.06 inches. Then you can drag the block where it belongs in the text, but the fine positioning will require the cursor arrow keys. Put spaces in the text left or right of the picture where syntactically appropriate, i.e., where you'd put a space left or right of a word. To see why pictures taller than a single block are problematic in line, look at the second paragraph on page 7. It's layed out correctly, with respect to its meaning, but it /looks/ screwy. I should fix it. Writing style: Use exclamation points (other than in the name "Snap!") very sparingly; they should indicate danger, not enthusiasm. Absolutely do not suggest that something is "fun" or "interesting," etc. (But "more interesting" is okay when it means that you are giving a first, trivial example followed by an example that actually does something useful.) @@ -73,13 +73,13 @@ Yes, this is a 22-step process. :-( 3. Carefully check every line of the Table of Contents! Look for wrong fonts, missing labels (I, II, etc for level 1; A, B, etc for level 2; nothing for level 3), Chapter VII header at the top of the second column (if not, adjust spacing around chapters in the first column), Heading 2 letters restarting from A in each chapter. -4. Edit Table of Contents: On page 2, insert a page break before Appendix A; change the text of II.E ("if you lose...") to boldface italic. On page 3, insert a column break before Appendix B. +4. Edit Table of Contents: On page 2, insert a page break before Appendix A; change the text of II.E ("if you lose...") to boldface italic. On page 3, insert a column break before Appendix B. Manually fix the page number for the Index at the end of the ToC, which is not an official section (so it won't be numbered or lettered), so not automatically updated by Word. 5. Save again. 6. Scroll through the entire manual, looking for bad page breaks, mislabeled headings, and pictures out of place. (Some old pictures that are run in with text were inserted into their pages by putting a bunch of spaces in the text, setting the picture's "Wrap Text" to "None," and manually positioning the picture. These pictures will be out of place if the text on that page changes. To fix them, move the picture out of the way; delete the extra spaces (keeping one before and/or one after where the picture belongs, depending on nearby punctuation; set the picture's "Wrap Text" to "Tight"; then position the picture where it belongs. The last little bit of positioning should be done with the cursor arrow keys rather than with the mouse. Finally, go to Format Picture > Layout > Advanced > Text Wrapping -and change the left distance to 0 and the right distance to 0.6 inches.) +and change the left distance to 0 and the right distance to 0.06 inches.) 7. If you made changes, save again, then go back to step 2. diff --git a/help/SnapManual.pdf b/help/SnapManual.pdf old mode 100644 new mode 100755 index c0c5f4da..facf1bbc Binary files a/help/SnapManual.pdf and b/help/SnapManual.pdf differ diff --git a/help/reportConcatenatedLists.png b/help/reportConcatenatedLists.png new file mode 100644 index 00000000..6698feec Binary files /dev/null and b/help/reportConcatenatedLists.png differ diff --git a/help/reportListLength.png b/help/reportListAttribute.png similarity index 100% rename from help/reportListLength.png rename to help/reportListAttribute.png diff --git a/help/reportListIndex.png b/help/reportListIndex.png new file mode 100644 index 00000000..6497381e Binary files /dev/null and b/help/reportListIndex.png differ diff --git a/img/snap-icon-120.png b/img/snap-icon-120.png new file mode 100644 index 00000000..7765b0ce Binary files /dev/null and b/img/snap-icon-120.png differ diff --git a/img/snap-icon-128.png b/img/snap-icon-128.png new file mode 100644 index 00000000..032ea495 Binary files /dev/null and b/img/snap-icon-128.png differ diff --git a/img/snap-icon-144.png b/img/snap-icon-144.png new file mode 100644 index 00000000..fa4e7637 Binary files /dev/null and b/img/snap-icon-144.png differ diff --git a/img/snap-icon-152.png b/img/snap-icon-152.png new file mode 100644 index 00000000..d8654098 Binary files /dev/null and b/img/snap-icon-152.png differ diff --git a/img/snap-icon-192.png b/img/snap-icon-192.png new file mode 100644 index 00000000..01cd9bc8 Binary files /dev/null and b/img/snap-icon-192.png differ diff --git a/img/snap-icon-256.png b/img/snap-icon-256.png new file mode 100644 index 00000000..371968e4 Binary files /dev/null and b/img/snap-icon-256.png differ diff --git a/img/snap-icon-384.png b/img/snap-icon-384.png new file mode 100644 index 00000000..ab6b7b22 Binary files /dev/null and b/img/snap-icon-384.png differ diff --git a/img/snap-icon-512.png b/img/snap-icon-512.png new file mode 100644 index 00000000..3d06cb95 Binary files /dev/null and b/img/snap-icon-512.png differ diff --git a/img/snap-icon-72.png b/img/snap-icon-72.png new file mode 100644 index 00000000..ee5811a8 Binary files /dev/null and b/img/snap-icon-72.png differ diff --git a/img/snap-icon-96.png b/img/snap-icon-96.png new file mode 100644 index 00000000..654eddff Binary files /dev/null and b/img/snap-icon-96.png differ diff --git a/index.html b/index.html index 016c725d..2ee387fd 100644 --- a/index.html +++ b/index.html @@ -4,25 +4,28 @@ TurtleStitch - + + - - - - - - - - - - + + + + + + + + + + + - - - - + + + + + - + @@ -44,9 +47,9 @@ - - - + + + Allows changing global settings programmatically. This block is for Boolean (checkbox) settings; use SET VALUE for numeric or text values. Eisenberg's Law: Anything you can do from the user interface you should be able to do in your program, and vice versa. This library is just a beginning; there are many UI controls outside of the Settings menu.
pt:altera o valor da configuração _ para _ Presentation mode Retina display support Long form input dialog Plain prototype labels Input sliders Execute on slider change Clicking sound Turbo mode Flat design Keyboard editing Visible stepping Thread safe scripts Prefer smooth animations Flat line ends Codification support Inheritance support Hyper blocks support
Allows changing global settings programmatically. This block is for numeric or text settings; use SET FLAG for Boolean (checkbox) values. Eisenberg's Law: Anything you can do from the user interface you should be able to do in your program, and vice versa. This library is just a beginning; there are many UI controls outside of the Settings menu.
pt:altera o valor da configuração _ para _ Project notes Project name Language Zoom blocks Stage size Stage scale Visible palette
\ No newline at end of file +Allows reading global settings programmatically. Eisenberg's Law: Anything you can do from the user interface you should be able to do in your program, and vice versa. This library is just a beginning; there are many UI controls outside of the Settings menu.
pt:o valor da configuração _ ca:paràmetre _ Project notes Project name User Presentation mode Language Zoom blocks Stage size Stage scale Retina display support Long form input dialog Plain prototype labels Input sliders Execute on slider change Clicking sound Turbo mode Flat design Keyboard editing Visible stepping Thread safe scripts Prefer smooth animations Flat line ends Codification support Inheritance support Hyper blocks support Visible palette
Allows changing global settings programmatically. This block is for Boolean (checkbox) settings; use SET VALUE for numeric or text values. Eisenberg's Law: Anything you can do from the user interface you should be able to do in your program, and vice versa. This library is just a beginning; there are many UI controls outside of the Settings menu.
pt:altera o valor da configuração _ para _ ca:fixa el paràmetre _ a _ Presentation mode Retina display support Long form input dialog Plain prototype labels Input sliders Execute on slider change Clicking sound Turbo mode Flat design Keyboard editing Visible stepping Thread safe scripts Prefer smooth animations Flat line ends Codification support Inheritance support Hyper blocks support
Allows changing global settings programmatically. This block is for numeric or text settings; use SET FLAG for Boolean (checkbox) values. Eisenberg's Law: Anything you can do from the user interface you should be able to do in your program, and vice versa. This library is just a beginning; there are many UI controls outside of the Settings menu.
pt:altera o valor da configuração _ para _ ca:fixa el valor de _ a _ Project notes Project name Language Zoom blocks Stage size Stage scale Visible palette
\ No newline at end of file diff --git a/libraries/LIBRARIES b/libraries/LIBRARIES index 8bf7d82b..9aeeb7ba 100644 --- a/libraries/LIBRARIES +++ b/libraries/LIBRARIES @@ -4,6 +4,7 @@ VectorAndFill.xml Vectors, filling Blocks about vectors and filling iteration-composition.xml Iteration, composition Traditional loop constructs (while, until, etc.) plus the Lisp "named let" (a generalization of FOR) plus functional iteration (repeated invocation of a function) and function composition. list-utilities.xml List utilities Some standard functions on lists (reverse, sort, etc.) colors.xml Colors and Crayons Incorporates the former crayon and set RGB libraries. Implements fair hues (more orange, less green, adds brown) and a linear color scale including grayscale and fair-hue-based shades. +crayons.xml Crayons Just the crayons, without the rest of the colors library. Fast and simple. bignumbers.xml Bignums, rationals, complex #s The full Scheme numeric tower. "USE BIGNUMS " to enable. cases.xml Multi-branched conditional Like "switch" in C-like languages or "cond" in Lisp. Thanks to Nathan Dinsmore for inventing the idea of a separate block for each branch! try-catch.xml Catch errors Run a script; if an error happens, instead of stopping the script with a red halo, run another script to handle the error. Also includes a block to cause an error with a message given as input. Also includes a block to create a script variable and give it a value. @@ -28,11 +29,10 @@ word-sentence.xml Words, sentences One of the big ideas in Logo that they left o strings.xml Strings, Multi-line input Extract substrings of a string in various ways. In general, text inputs allow only a single line. The MULTILINE block accepts multi-line text input and can be used in text input slots of other blocks. apl.xml APL primitives Adds features from the APL language supporting hyperblocks. stream-tools.xml Streams (lazy lists) A variation on the list data type in which each list item isn't computed until it's needed, so you can construct million-item lists without really taking up all that time or memory, or even infinite-sized lists. (A block that reports all the prime numbers is included as an example.) See SICP 3.5 for a tutorial. -bar-charts.xml Bar charts Takes a table (typically from a CSV data set) as input and reports a summary of the table grouped by the field in the specified column number. The remaining three inputs are used only if the field values are numbers, in which case they can be grouped into buckets (e.g., decades, centuries, etc.). Those three inputs specify the smallest and largest values of interest and, most importantly, the width of a bucket (10 for decades, 100 for centuries). If the field isn't numeric, leave these three inputs empty or set them to zero. In that case, each string value of the field is its own bucket, and they appear sorted alphabetically. The block reports a new table with three columns. The first column contains the bucket name or smallest number. The second column contains a nonnegative integer that says how many records in the input table fall into this bucket. The third column is a subtable containing the actual records from the original table that fall into the bucket. If your buckets aren't of constant width, or you want to group by some function of more than one field, load the "Frequency Distribution Analysis" library instead. +bar-charts.xml Bar charts Takes a table (typically from a CSV data set) as input and reports a summary of the table grouped by the field in the specified column number. The remaining three inputs are used only if the field values are numbers, in which case they can be grouped into buckets (e.g., decades, centuries, etc.). Those three inputs specify the smallest and largest values of interest and, most importantly, the width of a bucket (10 for decades, 100 for centuries). If the field isn't numeric, leave these three inputs empty or set them to zero. In that case, each string value of the field is its own bucket, and they appear sorted alphabetically. The block reports a new table with three columns. The first column contains the bucket name or smallest number. The second column contains a nonnegative integer that says how many records in the input table fall into this bucket. The third column is a subtable containing the actual records from the original table that fall into the bucket. If your buckets aren't of constant width, or you want to group by some function of more than one field, load the "Frequency Distribution Analysis" library instead. httpBlocks.xml Web services access (https) An extended version of the URL block that allows POST, PUT, and DELETE as well as GET requests, allows using the secure HTTPS protocol, and gives control over headers, etc. Also parses JSON data. make-variables.xml Create variables Create and manage global/sprite/script variables in a script +bitwise.xml Bitwise operators Bitwise arithmetic operators for low-level bit manipulation. ~ ~ ~ ~ ~ ~ -HummingbirdBlocks.xml Hummingbird robotics Control the Hummingbird robotics kit processor -leap-library.xml LEAP Motion controller Report hand positions from LEAP Motion controller (leapmotion.com). diff --git a/libraries/animation_module.xml b/libraries/animation_module.xml index 8a0faa94..ac2dcab6 100644 --- a/libraries/animation_module.xml +++ b/libraries/animation_module.xml @@ -1 +1 @@ -
de:animiere Setter _ Getter _ Delta _ über _ Sek. beschleunigt _ ca:modifica setter _ i getter _ amb delta _ en _ segons de forma _ pt:anima com modificador _ e inspector _ de _ em _ s de forma _ 501
de:Grad _ ca:graus de _ radians pt:_ radianos em graus 0.5
de:Fehler _ pt:assinala o erro _
de:gleite _ in _ Sek. beschleunigt: _ ca:llisca _ en _ segons de forma _ fr:glisser _ en _ sec. accélérer _ pt:desliza _ em _ s de forma _ 501linearlinear quadratic={ quadratic-in quadratic-out quadratic-in-out } cubic={ cubic-in cubic-out cubic-in-out } quart={ quart-in quart-out quart-in-out } sinusoidal={ sine-in sine-out sine-in-out } elastic
de:animiere _ um _ in _ Sek. beschleunigt: _ ca:modifica _ amb _ en _ segons de forma _ pt:anima _ de _ em _ s de forma _ x positionx position y position direction size ghost effect color effect saturation effect brightness effect fisheye effect whirl effect pixelate effect mosaic effect negative effect tempo volume balance501linearlinear quadratic={ quadratic-in quadratic-out quadratic-in-out } cubic={ cubic-in cubic-out cubic-in-out } quart={ quart-in quart-out quart-in-out } sinusoidal={ sine-in sine-out sine-in-out } elasticy positiondirectionsizetempovolumebalance1 12
de:Beschleunigung _ ca:de forma _ pt:a forma _ linearlinear quadratic={ quadratic-in quadratic-out quadratic-in-out } cubic={ cubic-in cubic-out cubic-in-out } quart={ quart-in quart-out quart-in-out } sinusoidal={ sine-in sine-out sine-in-out } elasticquadratic-inquadratic-outquadratic-in-outcubic-incubic-outcubic-in-outquart-inquart-outquart-in-outsine-insine-outsine-in-outelasticunknown easing function ""
de:für _ = _ bis _ _ in _ Sek. beschleunigt: _ _ ca:per _ = _ fins _ _ en _ segons de forma _ _ pt:para _ de _ a _ _ em _ s de forma _ _ 01001linearlinear quadratic={ quadratic-in quadratic-out quadratic-in-out } cubic={ cubic-in cubic-out cubic-in-out } quart={ quart-in quart-out quart-in-out } sinusoidal={ sine-in sine-out sine-in-out } elastic
\ No newline at end of file +
de:animiere Setter _ Getter _ Delta _ über _ Sek. beschleunigt _ ca:modifica setter _ i getter _ amb delta _ en _ segons de forma _ pt:anima com modificador _ e inspector _ de _ em _ s de forma _ 501
de:Grad _ ca:graus de _ radians pt:_ radianos em graus 0.5
de:Fehler _ pt:assinala o erro _
de:gleite _ in _ Sek. beschleunigt: _ ca:llisca _ en _ segons de forma _ fr:glisser _ en _ sec. accélérer _ pt:desliza _ em _ s de forma _ 501linearlinear quadratic={ quadratic-in quadratic-out quadratic-in-out } cubic={ cubic-in cubic-out cubic-in-out } quart={ quart-in quart-out quart-in-out } sinusoidal={ sine-in sine-out sine-in-out } elastic
de:animiere _ um _ in _ Sek. beschleunigt: _ ca:modifica _ amb _ en _ segons de forma _ pt:anima _ de _ em _ s de forma _ x positionx position y position direction size ghost effect color effect saturation effect brightness effect fisheye effect whirl effect pixelate effect mosaic effect negative effect tempo volume balance501linearlinear quadratic={ quadratic-in quadratic-out quadratic-in-out } cubic={ cubic-in cubic-out cubic-in-out } quart={ quart-in quart-out quart-in-out } sinusoidal={ sine-in sine-out sine-in-out } elasticy positiondirectionsizetempovolumebalance1 12
de:Beschleunigung _ ca:de forma _ pt:a forma _ linearlinear quadratic={ quadratic-in quadratic-out quadratic-in-out } cubic={ cubic-in cubic-out cubic-in-out } quart={ quart-in quart-out quart-in-out } sinusoidal={ sine-in sine-out sine-in-out } elasticquadratic-inquadratic-outquadratic-in-outcubic-incubic-outcubic-in-outquart-inquart-outquart-in-outsine-insine-outsine-in-outelasticunknown easing function ""
de:für _ = _ bis _ _ in _ Sek. beschleunigt: _ _ ca:per _ = _ fins _ _ en _ segons de forma _ _ pt:para _ de _ a _ _ em _ s de forma _ _ 01001linearlinear quadratic={ quadratic-in quadratic-out quadratic-in-out } cubic={ cubic-in cubic-out cubic-in-out } quart={ quart-in quart-out quart-in-out } sinusoidal={ sine-in sine-out sine-in-out } elastic
\ No newline at end of file diff --git a/libraries/apl.xml b/libraries/apl.xml index 0d1fc38c..0eae836c 100644 --- a/libraries/apl.xml +++ b/libraries/apl.xml @@ -1 +1 @@ -The first input is a shape list as in SHAPE OF. The output is an array with those dimensions containing the atomic items of the second input, repeating values if more are needed.
Reports a flat list of the maximum size of the input array along each dimension: number of rows, number of columns, etc. "Maximum" because it works even if the array isn't uniformly shaped.
Reports the greater of its two inputs. Works on strings too.
Reports a flat list of all the atomic elements of sublists of the input list.
Reports the number of dimensions of the input.
111
Takes a multidimensional array, and reports an array whose dimensions are reversed (as reported by SHAPE OF). In the case of a two-dimensional array, does the usual transposition of rows and columns.
Reverses the order of the (toplevel) items of the input. If the input is a matrix, this means it reverses the order of the rows, which is a reflection through a horizontal axis, as the ⦵ symbol suggests.
Like MAP, but can take any number of lists as inputs. The lists must all be the same size. The function input must take a number of inputs equal to the number of lists. MULTIMAP calls the function with all the first items, then all the second items, and so on.
cols
Computes a generalized matrix multiplication. In normal matrix multiplication, each cell of the result is computed by multiplying individual numbers within a row of the left input and a column of the right input, and then adding those products. In APL terms this is +.× ("plus dot times") Any dyadic functions can replace addition and multiplication in this algorithm; a common case is ∨.∧ ("or dot and")
111111
Reports the smaller of its two inputs.
This function has two names because there are two ways to understand it. Lisp way: A matrix is a list of rows. This block combines the numbers in each row, producing one value for the entire row. APL way: A matrix is made of vectors. This block takes each column as a vector, and does vector arithmetic on the columns, producing one column as the result.
choicesindexchoices
Reports 1 if the input is positive, 0 if the input is zero, or -1 if the input is negative.
0false
reports 1 divided by its input.
This block reports a random integer between 1 and its input. To roll more than one die, use (for three dice) roll (reshape as 3 items of 6) APL: ?3⍴6 Don't use reshape as 3 items of (roll 6), because that would roll one die and report 3 copies of the same random roll.
Reports True if the input is an APL scalar, i.e., either an atomic (non-list) value, or an array (list of lists) of any depth with only one atomic item, e.g., (list (list (list (3)))).
1
The input must be a value for which SCALAR? reports true, i.e., either an atom or a list of any depth but only one scalar item of item of... etc. This function returns the underlying scalar (number, etc.).
1
Reports the not-and of its inputs, in the form 0 for false, 1 for true.
Reports the not-and of its inputs, in the form 0 for false, 1 for true.
Reports True if the left input is less than or equal to the right input. Reports a Snap! Boolean, not an integer 0 or 1.
Reports True if the left input is greater than than or equal to the right input. Reports a Snap! Boolean, not an integer 0 or 1.
Reports False if its inputs are equal; reports True if its inputs are not equal. The inputs can have any non-list values. (Lists are hyperized.) If the inputs are Booleans (True/False or 1/0), this is also the exclusive-or function.
reports True iff the input is 0 or False.
Reports a Snap! Boolean False if the input is False or 0; reports True otherwise.
0
Turns list of list of ... a single scalar (e.g., ((((x)))) ) into just the scalar. Error if called with anything else.
Make scalar called with non-singleton input
If the input is a positive integer, reports a list of the numbers from 1 to that input. (If the input is 0, reports an empty list.) If the input is a list of positive integers, reports an array with the shape specified by the input (as in ⍴ reshape) in which each item is a list of the indices of that item in the array (so technically the shape has one more dimension than the input, whose size is the size of the input). If the input is a list that includes 0, the result is an array whose shape is the part of the input list before the 0, in which every element is empty. If you'd like some other value in every element, MD-MAP a constant function over the result. For list inputs, the size of the result grows very quickly, more or less the factorial of the size of the input. Snap! will not attempt to compute a result bigger than a few million atomic items. ⍳(⍳ 9) will work (≈ 3 million atoms) but ⍳(⍳ 10) will give an error.
If the rank of the left input is one more than the rank of the right input, reports the index of the right input in the left input, or if not found, reports one more than the length of the left input. If the rank of the left input is equal to the rank of the right input, reports a vector of the indices of the items of the right input in the left input (mapping this function over the right input). If the rank of the left input is more than that of the right input by 2 or more, reports a vector, the location of the right input in the left in each dimension. It is an error if the rank of the left input is less than that of the right input.
1result
This isn't an APL function, although it's related to the outer product. It takes any number of lists, and reports a list of all possible tuples with one item from each of the lists. The length of the result is the product of the lengths of the inputs. The result gets very big very quickly. Snap! will refuse to do this computation if the result would be more than a few million atomic items. (crossproduct (⍳(⍳9))) makes about 3 million atomic items; (crossproduct (⍳(⍳10))) gives an error message.
Reports an array of Booleans the same shape as the left input, indicating which of the atoms in the left input appear anywhere in the right input. (The structure of the right input doesn't matter.)
Like append, but: A scalar input is treated as an array the same shape as the other input except that the last item of the shape is 1. If the two inputs are of different ranks, the function is mapped over the larger ranked input. Catenate adds new columns, by appending to each row.
If the input is a nesting of length=1 lists, which APL treats as a scalar (the innermost item) for many purposes, report that innermost scalar. Otherwise, report the input as is. Exposing this block for users is important because Snap! /does not/ treat such a nesting as a scalar, so you might need to use this in translating an APL program to Snap!. (But the functions in the APL library already use this block as needed.)
Reports a vector of indices of the items of the input, in order of the values of the items, so that item (grade up (foo)) of (foo) reports the items in sorted order, smallest to largest. For a matrix, sorts the rows based on their first items, or if those are equal, based on their second items, etc.
Compares two vectors for sorting. Compare first items; if those are equal compare second items; etc.
1111
Reports a vector of indices of the items of the input, in order of the values of the items, so that item (grade down (foo)) of (foo) reports the items in sorted order, largest to smallest. For a matrix, sorts the rows based on their first items, or if those are equal, based on their second items, etc.
The left input must be a vector of Booleans (either Snap! form or APL form); the right input must be an array whose first dimension is equal to the length of the left input. The block reports an array of the same rank as the right input, containing only those items (rows, for a matrix) for which the corresponding Boolean is True (or 1).
The left input must be a vector of Booleans (either Snap! form or APL form); the right input must be an array whose last dimension is equal to the length of the left input. The block reports an array of the same rank as the right input, containing only those items (columns, for a matrix) for which the corresponding Boolean is True (or 1).
Turns a row-wise (in Lisp terminology) function into a column-wise one.
Reverses the order of the columns of the input, which is a reflection through a vertical axis, as the ⏀ symbol suggests.
This function has two names because there are two ways to understand it. Lisp way: A matrix is a list of rows. This block turns it into a list of columns, and combines the numbers in each column, producing one value for the entire column. APL way: A matrix is made of vectors. This block takes each row as a vector, and does vector arithmetic on the rows, producing one row as the result.
Like append, but: A scalar input is treated as a vector of length 1. If the two inputs are of different ranks, the function is mapped over the larger ranked input. Catenate vertically adds new rows, by appending to each column.
A hyperblock version of JOIN. The regular JOIN isn't hyperized because it can accept a list as input, representing it as text.
A positive left input selects the first n items of the right input. A negative left input selects the last abs(n) items of the right input. If the right input is a matrix, a numeric left input selects rows; the left input may also be a two-item vector, in which case the first number is applied to the rows and the second number is applied to the columns. Similarly for higher-dimension arrays.
10valueindex
A positive left input selects all but the first n items of the right input. A negative left input selects all but the last abs(n) items of the right input. If the right input is a matrix, a numeric left input selects rows; the left input may also be a two-item vector, in which case the first number is applied to the rows and the second number is applied to the columns. Similarly for higher-dimension arrays.
0valueindex
Throw an error. Makes a red halo appear around the script that runs it, with the input text shown in a speech balloon next to the script, just like any Snap! error. This is useful to put in the second script of SAFELY TRY after some other instructions to undo the partial work of the first script.
pt:lança o erro _
Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot. For a list of numbers, using < as the comparison function will sort from low to high; using > will sort from high to low.
ca:ordena _ segons criteri _ copy of datasplitmerge11#1#2
1
Takes a (possibly deep) list as input, and reports a human-readable text form of the list (namely, Lisp notation). Will not work on circular lists.
( )
The identity function reports its input.
Takes as input a function of N inputs and N lists. The function is called with item 1 of all the lists as its inputs, with item 2 of all the lists as its inputs, and so on. (The lists should all be the same length.)
Takes a dyadic scalar function as input, and hyperizes it, so that it can take lists as inputs. Don't use on slow functions (this has compiled map calls). Meant for use on primitives.
ab
Computes logarithms in any base. The base is the left input. It's usual in APL that if there's a main data input and some sort of control input, the latter comes on the left. This is because APL syntax, unless you use parentheses, groups computations from right to left. APL has a monadic version of this function that computes natural logs (log to the base e).
Computes the number of combinations of right-input things taken left-input at a time, otherwise known as the elements of Pascal's triangle. This block shares the ! symbol with the monadic factorial function, because the formula for computing this function uses factorials.
The factorial of a positive integer n is the product of the integers from 1 to n. In real APL, the domain of this function is extended beyond integers to compute the gamma function.
Acts just like the function selected from the pulldown menu, but hyperized, so comparing two equal-sized lists reports a list of the same length as the inputs, with the results of item-by-item comparisons.
﹦ ≠ identical to and or is _ a _?
Reports the greatest common divisor of its inputs. If the inputs are values in {0,1} then this is equivalent to the logical OR of the values, with 0=False, 1=True. Hence the APL symbol ∨. Also accepts Snap! Booleans as inputs.
Reports the least common multiple of its inputs. If the inputs are values in {0,1} then this is equivalent to the logical AND of the values, with 0=False, 1=True. Hence the APL symbol ∧. Also accepts Snap! Booleans as inputs.
Reports 1 if the input is False or 0; otherwise reports 0.
Reports its input. This is useful to fit a value into a different-type input slot, e.g., number into list slot.
Report a list with left-input random integers in the range 1 to right-input. No number appears more than once in the result. The left input must be less than or equal to the right input.
Given two arrays A and B, reports an array whose dimensions are APPEND(SHAPE OF (A), SHAPE OF (B)) in which each atomic item of the result is computed by applying the dyadic function input to an item of A and an item of B.
11
\ No newline at end of file +The first input is a shape list as in SHAPE OF. The output is an array with those dimensions containing the atomic items of the second input, repeating values if more are needed.
Reports a flat list of the maximum size of the input array along each dimension: number of rows, number of columns, etc. "Maximum" because it works even if the array isn't uniformly shaped.
Reports the greater of its two inputs. Works on strings too.
Reports a flat list of all the atomic elements of sublists of the input list.
Reports the number of dimensions of the input.
111
Takes a multidimensional array, and reports an array whose dimensions are reversed (as reported by SHAPE OF). In the case of a two-dimensional array, does the usual transposition of rows and columns.
Reverses the order of the (toplevel) items of the input. If the input is a matrix, this means it reverses the order of the rows, which is a reflection through a horizontal axis, as the ⦵ symbol suggests.
Like MAP, but can take any number of lists as inputs. The lists must all be the same size. The function input must take a number of inputs equal to the number of lists. MULTIMAP calls the function with all the first items, then all the second items, and so on.
cols
Computes a generalized matrix multiplication. In normal matrix multiplication, each cell of the result is computed by multiplying individual numbers within a row of the left input and a column of the right input, and then adding those products. In APL terms this is +.× ("plus dot times") Any dyadic functions can replace addition and multiplication in this algorithm; a common case is ∨.∧ ("or dot and")
111111
Reports the smaller of its two inputs.
This function has two names because there are two ways to understand it. Lisp way: A matrix is a list of rows. This block combines the numbers in each row, producing one value for the entire row. APL way: A matrix is made of vectors. This block takes each column as a vector, and does vector arithmetic on the columns, producing one column as the result.
choicesindexchoices
Reports 1 if the input is positive, 0 if the input is zero, or -1 if the input is negative.
0false
reports 1 divided by its input.
This block reports a random integer between 1 and its input. To roll more than one die, use (for three dice) roll (reshape as 3 items of 6) APL: ?3⍴6 Don't use reshape as 3 items of (roll 6), because that would roll one die and report 3 copies of the same random roll.
Reports True if the input is an APL scalar, i.e., either an atomic (non-list) value, or an array (list of lists) of any depth with only one atomic item, e.g., (list (list (list (3)))).
1
The input must be a value for which SCALAR? reports true, i.e., either an atom or a list of any depth but only one scalar item of item of... etc. This function returns the underlying scalar (number, etc.).
1
Reports the not-and of its inputs, in the form 0 for false, 1 for true.
Reports the not-and of its inputs, in the form 0 for false, 1 for true.
Reports True if the left input is less than or equal to the right input. Reports a Snap! Boolean, not an integer 0 or 1.
Reports True if the left input is greater than than or equal to the right input. Reports a Snap! Boolean, not an integer 0 or 1.
Reports False if its inputs are equal; reports True if its inputs are not equal. The inputs can have any non-list values. (Lists are hyperized.) If the inputs are Booleans (True/False or 1/0), this is also the exclusive-or function.
reports True iff the input is 0 or False.
Reports a Snap! Boolean False if the input is False or 0; reports True otherwise.
0
Turns list of list of ... a single scalar (e.g., ((((x)))) ) into just the scalar. Error if called with anything else.
Make scalar called with non-singleton input
If the input is a positive integer, reports a list of the numbers from 1 to that input. (If the input is 0, reports an empty list.) If the input is a list of positive integers, reports an array with the shape specified by the input (as in ⍴ reshape) in which each item is a list of the indices of that item in the array (so technically the shape has one more dimension than the input, whose size is the size of the input). If the input is a list that includes 0, the result is an array whose shape is the part of the input list before the 0, in which every element is empty. If you'd like some other value in every element, MD-MAP a constant function over the result. For list inputs, the size of the result grows very quickly, more or less the factorial of the size of the input. Snap! will not attempt to compute a result bigger than a few million atomic items. ⍳(⍳ 9) will work (≈ 3 million atoms) but ⍳(⍳ 10) will give an error.
If the rank of the left input is one more than the rank of the right input, reports the index of the right input in the left input, or if not found, reports one more than the length of the left input. If the rank of the left input is equal to the rank of the right input, reports a vector of the indices of the items of the right input in the left input (mapping this function over the right input). If the rank of the left input is more than that of the right input by 2 or more, reports a vector, the location of the right input in the left in each dimension. It is an error if the rank of the left input is less than that of the right input.
1result
This isn't an APL function, although it's related to the outer product. It takes any number of lists, and reports a list of all possible tuples with one item from each of the lists. The length of the result is the product of the lengths of the inputs. The result gets very big very quickly. Snap! will refuse to do this computation if the result would be more than a few million atomic items. (crossproduct (⍳(⍳9))) makes about 3 million atomic items; (crossproduct (⍳(⍳10))) gives an error message.
Reports an array of Booleans the same shape as the left input, indicating which of the atoms in the left input appear anywhere in the right input. (The structure of the right input doesn't matter.)
Like append, but: A scalar input is treated as an array the same shape as the other input except that the last item of the shape is 1. If the two inputs are of different ranks, the function is mapped over the larger ranked input. Catenate adds new columns, by appending to each row.
If the input is a nesting of length=1 lists, which APL treats as a scalar (the innermost item) for many purposes, report that innermost scalar. Otherwise, report the input as is. Exposing this block for users is important because Snap! /does not/ treat such a nesting as a scalar, so you might need to use this in translating an APL program to Snap!. (But the functions in the APL library already use this block as needed.)
Reports a vector of indices of the items of the input, in order of the values of the items, so that item (grade up (foo)) of (foo) reports the items in sorted order, smallest to largest. For a matrix, sorts the rows based on their first items, or if those are equal, based on their second items, etc.
Compares two vectors for sorting. Compare first items; if those are equal compare second items; etc.
1111
Reports a vector of indices of the items of the input, in order of the values of the items, so that item (grade down (foo)) of (foo) reports the items in sorted order, largest to smallest. For a matrix, sorts the rows based on their first items, or if those are equal, based on their second items, etc.
The left input must be a vector of Booleans (either Snap! form or APL form); the right input must be an array whose first dimension is equal to the length of the left input. The block reports an array of the same rank as the right input, containing only those items (rows, for a matrix) for which the corresponding Boolean is True (or 1).
The left input must be a vector of Booleans (either Snap! form or APL form); the right input must be an array whose last dimension is equal to the length of the left input. The block reports an array of the same rank as the right input, containing only those items (columns, for a matrix) for which the corresponding Boolean is True (or 1).
Turns a row-wise (in Lisp terminology) function into a column-wise one.
Reverses the order of the columns of the input, which is a reflection through a vertical axis, as the ⏀ symbol suggests.
This function has two names because there are two ways to understand it. Lisp way: A matrix is a list of rows. This block turns it into a list of columns, and combines the numbers in each column, producing one value for the entire column. APL way: A matrix is made of vectors. This block takes each row as a vector, and does vector arithmetic on the rows, producing one row as the result.
Like append, but: A scalar input is treated as a vector of length 1. If the two inputs are of different ranks, the function is mapped over the larger ranked input. Catenate vertically adds new rows, by appending to each column.
A hyperblock version of JOIN. The regular JOIN isn't hyperized because it can accept a list as input, representing it as text.
A positive left input selects the first n items of the right input. A negative left input selects the last abs(n) items of the right input. If the right input is a matrix, a numeric left input selects rows; the left input may also be a two-item vector, in which case the first number is applied to the rows and the second number is applied to the columns. Similarly for higher-dimension arrays.
10valueindex
A positive left input selects all but the first n items of the right input. A negative left input selects all but the last abs(n) items of the right input. If the right input is a matrix, a numeric left input selects rows; the left input may also be a two-item vector, in which case the first number is applied to the rows and the second number is applied to the columns. Similarly for higher-dimension arrays.
0valueindex
Throw an error. Makes a red halo appear around the script that runs it, with the input text shown in a speech balloon next to the script, just like any Snap! error. This is useful to put in the second script of SAFELY TRY after some other instructions to undo the partial work of the first script.
pt:lança o erro _
Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot. For a list of numbers, using < as the comparison function will sort from low to high; using > will sort from high to low.
ca:ordena _ segons criteri _ copy of datasplitmerge11#1#2
1
Takes a (possibly deep) list as input, and reports a human-readable text form of the list (namely, Lisp notation). Will not work on circular lists.
( )
The identity function reports its input.
Takes as input a function of N inputs and N lists. The function is called with item 1 of all the lists as its inputs, with item 2 of all the lists as its inputs, and so on. (The lists should all be the same length.)
Takes a dyadic scalar function as input, and hyperizes it, so that it can take lists as inputs. Don't use on slow functions (this has compiled map calls). Meant for use on primitives.
ab
Computes logarithms in any base. The base is the left input. It's usual in APL that if there's a main data input and some sort of control input, the latter comes on the left. This is because APL syntax, unless you use parentheses, groups computations from right to left. APL has a monadic version of this function that computes natural logs (log to the base e).
Computes the number of combinations of right-input things taken left-input at a time, otherwise known as the elements of Pascal's triangle. This block shares the ! symbol with the monadic factorial function, because the formula for computing this function uses factorials.
The factorial of a positive integer n is the product of the integers from 1 to n. In real APL, the domain of this function is extended beyond integers to compute the gamma function.
Acts just like the function selected from the pulldown menu, but hyperized, so comparing two equal-sized lists reports a list of the same length as the inputs, with the results of item-by-item comparisons.
﹦ ≠ identical to and or is _ a _?
Reports the greatest common divisor of its inputs. If the inputs are values in {0,1} then this is equivalent to the logical OR of the values, with 0=False, 1=True. Hence the APL symbol ∨. Also accepts Snap! Booleans as inputs.
Reports the least common multiple of its inputs. If the inputs are values in {0,1} then this is equivalent to the logical AND of the values, with 0=False, 1=True. Hence the APL symbol ∧. Also accepts Snap! Booleans as inputs.
Reports 1 if the input is False or 0; otherwise reports 0.
Reports its input. This is useful to fit a value into a different-type input slot, e.g., number into list slot.
Report a list with left-input random integers in the range 1 to right-input. No number appears more than once in the result. The left input must be less than or equal to the right input.
Given two arrays A and B, reports an array whose dimensions are APPEND(SHAPE OF (A), SHAPE OF (B)) in which each atomic item of the result is computed by applying the dyadic function input to an item of A and an item of B.
11
\ No newline at end of file diff --git a/libraries/audioComp_module.xml b/libraries/audioComp_module.xml index b1b336d2..54cd63e9 100644 --- a/libraries/audioComp_module.xml +++ b/libraries/audioComp_module.xml @@ -1 +1 @@ -
pt:executa no modo turbo _
generate a list of samples representing a sine wave at the given frequency, duration and sample rate
pt:as amostras de som com _ Hz de _ s amostrado a _ Hz 440a 55=55 a 110=110 a 220=220 a 440=440 a 880=880 a 1760=1760 a 3520=352014410022.05 kHz=22050 44.1 kHz=44100 88.2 kHz=88200 96 kHz=96000
pt:π
pt:_ radianos em graus 0.5
pt:o som _ §_soundsMenu
quickly plot the samples of a sound, a list of samples (single channel), or a list of lists (multiple channels) to the stage at a lower resolution.
pt:desenha o gráfico do som _ §_soundsMenu1offsetStage-2
records an audio snippet and reports it as a new sound, or zero if the user cancels
pt:$circleSolid-1-255-0-0 uma nova gravação
pt:a nota com _ Hz 440
pt:a frequência da nota _ 69
pt:o nome da nota _ 69
\ No newline at end of file +
pt:executa no modo turbo _
generate a list of samples representing a sine wave at the given frequency, duration and sample rate
pt:as amostras de som com _ Hz de _ s amostrado a _ Hz ca:_ Hz durant _ segons amb mostreig de _ Hz 440a 55=55 a 110=110 a 220=220 a 440=440 a 880=880 a 1760=1760 a 3520=352014410022.05 kHz=22050 44.1 kHz=44100 88.2 kHz=88200 96 kHz=96000
pt:π
pt:_ radianos em graus ca:graus de _ radiants 0.5
pt:o som _ ca:so de nom _ §_soundsMenu
quickly plot the samples of a sound, a list of samples (single channel), or a list of lists (multiple channels) to the stage at a lower resolution.
pt:desenha o gráfico do som _ ca:dibuixa el so _ §_soundsMenu1offset-2
records an audio snippet and reports it as a new sound, or zero if the user cancels
pt:$circleSolid-1-255-0-0 uma nova gravação ca:$circleSolid-1-255-0-0 enregistra
pt:a nota com _ Hz ca:nota de _ Hz 440
pt:a frequência da nota _ ca:freqüència (hz) de la nota _ 69
pt:o nome da nota _ ca:nom de la nota _ 69
\ No newline at end of file diff --git a/libraries/bar-charts.xml b/libraries/bar-charts.xml index 9f847532..7fa594c3 100644 --- a/libraries/bar-charts.xml +++ b/libraries/bar-charts.xml @@ -1 +1 @@ -Takes a table (typically from a CSV data set) as input and reports a summary of the table grouped by the field in the specified column number. The remaining three inputs are used only if the field values are numbers, in which case they can be grouped into buckets (e.g., decades, centuries, etc.). Those three inputs specify the smallest and largest values of interest and, most importantly, the width of a bucket (10 for decades, 100 for centuries). If the field isn't numeric, leave these three inputs empty or set them to zero. In that case, each string value of the field is its own bucket, and they appear sorted alphabetically. The block reports a new table with three columns. The first column contains the bucket name or smallest number. The second column contains a nonnegative integer that says how many records in the input table fall into this bucket. The third column is a subtable containing the actual records from the original table that fall into the bucket. If your buckets aren't of constant width, or you want to group by some function of more than one field, load the "Frequency Distribution Analysis" library instead.
1110
add missing entries to a sorted list. Used for histograms
pt:os itens de _ com a chave _ entre _ e _ com passo _ completados por _ 11
pt:a aplicação a _ de _ 1
pt:desenha gráfico de barras de _ em (x: _ , y: _ ) com largura _ e altura _ -200-100400200If smallest value < 0, the x axis isn't at the bottom. Note that sort is by > not by <. Not clear this can happen in a histogram!max y1ratio1label delta y5010step2190draw x axis at y=00draw y axis902012i15Ready to draw bars.2data90
ascending descending
datafnprocreturn proc.reportAtomicGroup(data, fn);
\ No newline at end of file +Takes a table (typically from a CSV data set) as input and reports a summary of the table grouped by the field in the specified column number. The remaining three inputs are used only if the field values are numbers, in which case they can be grouped into buckets (e.g., decades, centuries, etc.). Those three inputs specify the smallest and largest values of interest and, most importantly, the width of a bucket (10 for decades, 100 for centuries). If the field isn't numeric, leave these three inputs empty or set them to zero. In that case, each string value of the field is its own bucket, and they appear sorted alphabetically. The block reports a new table with three columns. The first column contains the bucket name or smallest number. The second column contains a nonnegative integer that says how many records in the input table fall into this bucket. The third column is a subtable containing the actual records from the original table that fall into the bucket. If your buckets aren't of constant width, or you want to group by some function of more than one field, load the "Frequency Distribution Analysis" library instead.
ca:gràfica de la taula _ agrupada pel camp: _ des de: _ fins: _ interval: _ 1110
add missing entries to a sorted list. Used for histograms
pt:os itens de _ com a chave _ entre _ e _ com passo _ completados por _ ca:gràfica omplint _ amb clau: _ des de: _ fins: _ interval: _ amb _ 11
pt:desenha gráfico de barras de _ em (x: _ , y: _ ) com largura _ e altura _ ca:dibuixa gràfic _ a x: _ y: _ amplada: _ alçada: _ -200-100400200If smallest value < 0, the x axis isn't at the bottom. Note that sort is by > not by <. Not clear this can happen in a histogram!max y1ratio1label delta y5010step2190draw x axis at y=00draw y axis902012i15Ready to draw bars.2data90
ca:ordena taula _ pel camp _ en ordre _ ascending descending
ca:agrupa taula _ pel camp _ per intervals de _
pt:a aplicação a _ de _ ca:canalitza _ $arrowRight _ 1
\ No newline at end of file diff --git a/libraries/bbtSnapExtension.js b/libraries/bbtSnapExtension.js new file mode 100644 index 00000000..8ebedf94 --- /dev/null +++ b/libraries/bbtSnapExtension.js @@ -0,0 +1,1029 @@ + +window.birdbrain = {}; +window.birdbrain.sensorData = {}; +window.birdbrain.sensorData.A = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; +window.birdbrain.sensorData.B = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; +window.birdbrain.sensorData.C = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; +window.birdbrain.microbitIsV2 = {}; +window.birdbrain.microbitIsV2.A = false; +window.birdbrain.microbitIsV2.B = false; +window.birdbrain.microbitIsV2.C = false; +window.birdbrain.currentBeak = {}; +window.birdbrain.currentBeak.A = [0,0,0]; +window.birdbrain.currentBeak.B = [0,0,0]; +window.birdbrain.currentBeak.C = [0,0,0]; +window.birdbrain.robotType = { + FINCH: 1, + HUMMINGBIRDBIT: 2, + MICROBIT: 3, + GLOWBOARD: 4, + //connected robots default to type MICROBIT + A: 3, + B: 3, + C: 3 +}; + +//For the old style robots that connect over hid. +window.bbtLegacy = {}; +window.bbtLegacy.sensorData = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; + +console.log("setting up message channel") +window.birdbrain.messageChannel = new MessageChannel(); +window.birdbrain.messageChannel.port1.onmessage = function (e) { + //console.log("Got a message: "); + //console.log(e.data); + if (e.data.sensorData != null && e.data.robot != null) { + let robot = e.data.robot; + window.birdbrain.sensorData[robot] = e.data.sensorData; + window.birdbrain.robotType[robot] = e.data.robotType; + window.birdbrain.microbitIsV2[robot] = e.data.hasV2Microbit; + } + + if (e.data.hidSensorData != null ) { + window.bbtLegacy.sensorData = e.data.hidSensorData; + } +} +window.parent.postMessage("hello from snap", "*", [window.birdbrain.messageChannel.port2]); + +window.birdbrain.sendCommand = function(command) { + window.parent.postMessage(command, "*"); +} + +// Converts byte range 0 - 255 to -127 - 127 represented as a 32 bit signe int +function byteToSignedInt8 (byte) { + var sign = (byte & (1 << 7)); + var value = byte & 0x7F; + if (sign) { value = byte | 0xFFFFFF00; } + return value; +} + +// Converts byte range 0 - 255 to -127 - 127 represented as a 32 bit signe int +function byteToSignedInt16 (msb, lsb) { + var sign = msb & (1 << 7); + var value = (((msb & 0xFF) << 8) | (lsb & 0xFF)); + if (sign) { + value = 0xFFFF0000 | value; // fill in most significant bits with 1's + } + return value; +} + +window.birdbrain.getMicrobitAcceleration = function(axis, robot) { + const rawToMperS = 196/1280; //convert to meters per second squared + let sensorData = window.birdbrain.sensorData[robot]; + let accVal = 0; + switch (axis) { + case 'X': + accVal = byteToSignedInt8(sensorData[4]); + break; + case 'Y': + accVal = byteToSignedInt8(sensorData[5]); + break; + case 'Z': + accVal = byteToSignedInt8(sensorData[6]); + break; + } + return (accVal * rawToMperS); +} + +window.birdbrain.getMicrobitMagnetometer = function(axis, finch) { + const rawToUT = 1/10; //convert to uT + let sensorData = window.birdbrain.sensorData[finch]; + let msb = 0; + let lsb = 0; + switch (axis) { + case 'X': + msb = sensorData[8]; + lsb = sensorData[9]; + break; + case 'Y': + msb = sensorData[10]; + lsb = sensorData[11]; + break; + case 'Z': + msb = sensorData[12]; + lsb = sensorData[13]; + break; + } + let magVal = byteToSignedInt16(msb, lsb); + return Math.round(magVal * rawToUT); +} + +window.birdbrain.getFinchAcceleration = function(axis, finch) { + let sensorData = window.birdbrain.sensorData[finch]; + let accVal = 0; + switch (axis) { + case 'X': + accVal = byteToSignedInt8(sensorData[13]); + break; + case 'Y': + case 'Z': + const rawY = byteToSignedInt8(sensorData[14]); + const rawZ = byteToSignedInt8(sensorData[15]); + const rad = 40 * Math.PI / 180; //40° in radians + + switch(axis) { + case 'Y': + accVal = (rawY*Math.cos(rad) - rawZ*Math.sin(rad)); + break; + case 'Z': + accVal = (rawY*Math.sin(rad) + rawZ*Math.cos(rad)); + break; + } + } + return (accVal * 196/1280); +} + +window.birdbrain.getFinchMagnetometer = function(axis, finch) { + let sensorData = window.birdbrain.sensorData[finch]; + switch (axis) { + case 'X': + return byteToSignedInt8(sensorData[17]); + case 'Y': + case 'Z': + const rawY = byteToSignedInt8(sensorData[18]); + const rawZ = byteToSignedInt8(sensorData[19]); + const rad = 40 * Math.PI / 180 //40° in radians + + let magVal = 0; + switch(axis) { + case 'Y': + magVal = (rawY*Math.cos(rad) + rawZ*Math.sin(rad)); + break; + case 'Z': + magVal = (rawZ*Math.cos(rad) - rawY*Math.sin(rad)); + break; + } + return Math.round(magVal); + } +} + + + + +//// Motion Blocks //// + +SnapExtensions.primitives.set( + 'bbt_bitpositionservo(robot, port, position)', + function (robot, port, position) { + position = Math.max(0, Math.min(180, position)); + position = Math.round(1.41 * position);//254/180 Scaling Factor + + var thisCommand = { + robot: robot, + cmd: "servo", + port: port, + value: position + } + + window.birdbrain.sendCommand(thisCommand); + } +); + +SnapExtensions.primitives.set( + 'bbt_bitrotationservo(robot, port, speed)', + function (robot, port, speed) { + speed = Math.max(-100, Math.min(100, speed)); + if (speed < 10 && speed > -10) { + speed = 255; + } else { + speed = Math.round((speed * 23/100) + 122) + } + + var thisCommand = { + robot: robot, + cmd: "servo", + port: port, + value: speed + } + + window.birdbrain.sendCommand(thisCommand); + } +); + +SnapExtensions.primitives.set( + 'bbt_finchismoving(robot)', + function (robot) { + return (window.birdbrain.sensorData[robot][4] > 127); + } +); + +SnapExtensions.primitives.set( + 'bbt_finchmove(robot, direction, distance, speed)', + function (robot, direction, distance, speed) { + distance = Math.max(-10000, Math.min(10000, distance)); + speed = Math.max(0, Math.min(100, speed)); + + var thisCommand = { + robot: robot, + cmd: "move", + direction: direction, + distance: distance, + speed: speed + } + window.birdbrain.sendCommand(thisCommand) + } +); + +SnapExtensions.primitives.set( + 'bbt_finchstop(robot)', + function (robot) { + var thisCommand = { + robot: robot, + cmd: "stopFinch" + } + window.birdbrain.sendCommand(thisCommand) + } +); + +SnapExtensions.primitives.set( + 'bbt_finchturn(robot, direction, angle, speed)', + function (robot, direction, angle, speed) { + angle = Math.max(-360000, Math.min(360000, angle)); + speed = Math.max(0, Math.min(100, speed)); + + var thisCommand = { + robot: robot, + cmd: "turn", + direction: direction, + angle: angle, + speed: speed + } + window.birdbrain.sendCommand(thisCommand) + } +); + +SnapExtensions.primitives.set( + 'bbt_finchwheels(robot, left, right)', + function (robot, left, right) { + left = Math.max(-100, Math.min(100, left)); + right = Math.max(-100, Math.min(100, right)); + + var thisCommand = { + robot: robot, + cmd: "wheels", + speedL: left, + speedR: right + } + window.birdbrain.sendCommand(thisCommand) + } +); + +//// Looks Blocks //// + +SnapExtensions.primitives.set( + 'bbt_display(robot, symbol)', + function (robot, symbolString) { + var thisCommand = { + robot: robot, + cmd: "symbol", + symbolString: symbolString + } + + window.birdbrain.sendCommand(thisCommand); + } +); + +SnapExtensions.primitives.set( + 'bbt_led(robot, port, intensity)', + function (robot, port, intensity) { + var thisCommand = { + robot: robot, + cmd: "led", + port: port, + intensity: Math.floor(Math.max(Math.min(intensity*2.55, 255), 0)) + } + + window.birdbrain.sendCommand(thisCommand); + } +); + +SnapExtensions.primitives.set( + 'bbt_print(robot, string)', + function (robot, string) { + var thisCommand = { + robot: robot, + cmd: "print", + printString: string + } + + window.birdbrain.sendCommand(thisCommand); + } +); + +SnapExtensions.primitives.set( + 'bbt_triled(robot, port, red, green, blue)', + function (robot, port, red, green, blue) { + var thisCommand = { + robot: robot, + cmd: "triled", + port: port, + red: Math.floor(Math.max(Math.min(red*2.55, 255), 0)), + green: Math.floor(Math.max(Math.min(green*2.55, 255), 0)), + blue: Math.floor(Math.max(Math.min(blue*2.55, 255), 0)) + } + if (port == 1) { + window.birdbrain.currentBeak[robot] = [thisCommand.red, thisCommand.green, thisCommand.blue]; + } + + window.birdbrain.sendCommand(thisCommand); + } +); + +//// Control Blocks //// + +SnapExtensions.primitives.set( + 'bbt_stop(robot)', + function (robot) { + var thisCommand = { + robot: robot, + cmd: "stopAll" + } + window.birdbrain.sendCommand(thisCommand) + } +); + +//// Sound Blocks //// + +SnapExtensions.primitives.set( + 'bbt_playnote(robot, note, duration)', + function (robot, note, duration) { + note = Math.round(Math.max(32, Math.min(135, note))); + console.log("playing note " + note); + + var thisCommand = { + robot: robot, + cmd: "playNote", + note: note, + duration: duration + } + window.birdbrain.sendCommand(thisCommand) + } +); + +//// Sensing Blocks //// + +SnapExtensions.primitives.set( + 'bbt_accelerometer(robot, dimension)', + function (robot, dim) { + let acc = window.birdbrain.getMicrobitAcceleration(dim, robot); + return Math.round(acc * 10) / 10; + } +); + +SnapExtensions.primitives.set( + 'bbt_bitsensor(robot, sensor, port)', + function (robot, sensor, port) { + const distanceScaling = 117/100; + const dialScaling = 100/230; + const lightScaling = 100/255; + const soundScaling = 200/255; + const voltageScaling = 3.3/255; + + let value = window.birdbrain.sensorData[robot][port - 1]; + + switch(sensor) { + case "Distance (cm)": + return Math.round(value * distanceScaling); + case "Dial": + if (value > 230) { value = 230; } + return Math.round(value * dialScaling); + case "Light": + return Math.round(value * lightScaling); + case "Sound": + return Math.round(value * soundScaling); + case "Other (V)": + return Math.round(value * voltageScaling * 100) / 100; + default: + console.log("Unknown sensor: " + sensor); + return 0; + } + } +); + +SnapExtensions.primitives.set( + 'bbt_button(robot, button)', + function (robot, button) { + const type = window.birdbrain.robotType[robot]; + const index = (type == window.birdbrain.robotType.FINCH) ? 16 : 7; + var buttonState = window.birdbrain.sensorData[robot][index] & 0xF0; //Button Byte position = 7, clear LS Bits as it is for shake and calibrate + + switch (button) { + case 'A': + return (buttonState == 0x00 || buttonState == 0x20) + case 'B': + return (buttonState == 0x00 || buttonState == 0x10) + case 'Logo (V2)': + if(window.birdbrain.microbitIsV2[robot]) { + return (((window.birdbrain.sensorData[robot][index] >> 1) & 0x1) == 0x0) + } else { + return "micro:bit V2 required"; + } + default: + console.log("unknown button " + button); + return false; + } + } +); + +SnapExtensions.primitives.set( + 'bbt_compass(robot)', + function (robot) { + const ax = window.birdbrain.getMicrobitAcceleration('X', robot); + const ay = window.birdbrain.getMicrobitAcceleration('Y', robot); + const az = window.birdbrain.getMicrobitAcceleration('Z', robot); + const mx = window.birdbrain.getMicrobitMagnetometer('X', robot); + const my = window.birdbrain.getMicrobitMagnetometer('Y', robot); + const mz = window.birdbrain.getMicrobitMagnetometer('Z', robot); + + const phi = Math.atan(-ay / az) + const theta = Math.atan(ax / (ay * Math.sin(phi) + az * Math.cos(phi))) + + const xp = mx + const yp = my * Math.cos(phi) - mz * Math.sin(phi) + const zp = my * Math.sin(phi) + mz * Math.cos(phi) + + const xpp = xp * Math.cos(theta) + zp * Math.sin(theta) + const ypp = yp + + const angle = 180.0 + ((Math.atan2(xpp, ypp)) * (180 / Math.PI)) //convert result to degrees + + return Math.round(angle) + } +); + +SnapExtensions.primitives.set( + 'bbt_finchaccelerometer(robot, dimension)', + function (robot, dim) { + let acc = window.birdbrain.getFinchAcceleration(dim, robot); + return Math.round(acc * 10) / 10; + } +); + +SnapExtensions.primitives.set( + 'bbt_finchcompass(robot)', + function (robot) { + const ax = window.birdbrain.getFinchAcceleration('X', robot); + const ay = window.birdbrain.getFinchAcceleration('Y', robot); + const az = window.birdbrain.getFinchAcceleration('Z', robot); + const mx = window.birdbrain.getFinchMagnetometer('X', robot); + const my = window.birdbrain.getFinchMagnetometer('Y', robot); + const mz = window.birdbrain.getFinchMagnetometer('Z', robot); + + const phi = Math.atan(-ay / az) + const theta = Math.atan(ax / (ay * Math.sin(phi) + az * Math.cos(phi))) + + const xp = mx + const yp = my * Math.cos(phi) - mz * Math.sin(phi) + const zp = my * Math.sin(phi) + mz * Math.cos(phi) + + const xpp = xp * Math.cos(theta) + zp * Math.sin(theta) + const ypp = yp + + const angle = 180.0 + ((Math.atan2(xpp, ypp)) * (180 / Math.PI)) //convert result to degrees + + return ((Math.round(angle) + 180) % 360) //turn so that beak points north + } +); + +SnapExtensions.primitives.set( + 'bbt_finchdistance(robot)', + function (robot) { + if (window.birdbrain.microbitIsV2[robot]) { + return window.birdbrain.sensorData[robot][1]; + } else { + const cmPerDistance = 0.0919; + const msb = window.birdbrain.sensorData[robot][0]; + const lsb = window.birdbrain.sensorData[robot][1]; + + const distance = msb << 8 | lsb; + return Math.round(distance * cmPerDistance); + } + } +); + +SnapExtensions.primitives.set( + 'bbt_finchencoder(robot, port)', + function (robot, port) { + let TICKS_PER_ROTATION = 792 + var msb = 0; + var ssb = 0; + var lsb = 0; + switch (port) { + case 'Right': + msb = window.birdbrain.sensorData[robot][10]; + ssb = window.birdbrain.sensorData[robot][11]; + lsb = window.birdbrain.sensorData[robot][12]; + break; + case 'Left': + msb = window.birdbrain.sensorData[robot][7]; + ssb = window.birdbrain.sensorData[robot][8]; + lsb = window.birdbrain.sensorData[robot][9]; + break; + default: + console.log("unknown encoder port " + port); + } + var encoder = msb << 16 | ssb << 8 | lsb + if (encoder >= 0x800000) { + encoder = encoder | 0xFF000000; + } + return Math.round( encoder * 10 / TICKS_PER_ROTATION ) / 10 + } +); + +SnapExtensions.primitives.set( + 'bbt_finchencoderreset(robot)', + function (robot) { + var thisCommand = { + robot: robot, + cmd: "resetEncoders" + } + window.birdbrain.sendCommand(thisCommand) + } +); + +SnapExtensions.primitives.set( + 'bbt_finchlight(robot, port)', + function (robot, port) { + const beak = window.birdbrain.currentBeak[robot] || [0,0,0]; + const R = beak[0]*100/255; + const G = beak[1]*100/255; + const B = beak[2]*100/255; + var raw = 0; + var correction = 0; + switch (port) { + case 'Right': + raw = window.birdbrain.sensorData[robot][3]; + correction = 6.40473070e-03*R + 1.41015162e-02*G + 5.05547817e-02*B + 3.98301391e-04*R*G + 4.41091223e-04*R*B + 6.40756862e-04*G*B + -4.76971242e-06*R*G*B; + break; + case 'Left': + raw = window.birdbrain.sensorData[robot][2]; + correction = 1.06871493e-02*R + 1.94526614e-02*G + 6.12409825e-02*B + 4.01343475e-04*R*G + 4.25761981e-04*R*B + 6.46091068e-04*G*B + -4.41056971e-06*R*G*B; + break; + default: + console.log("unknown light port " + port); + return 0; + } + + return Math.round(Math.max(0, Math.min(100, (raw - correction)))); + } +); + +SnapExtensions.primitives.set( + 'bbt_finchline(robot, port)', + function (robot, port) { + var rawVal = 0; + switch (port) { + case 'Right': + rawVal = window.birdbrain.sensorData[robot][5]; + break; + case 'Left': + rawVal = window.birdbrain.sensorData[robot][4]; + //first bit is for position control + rawVal = (0x7F & rawVal) + break; + default: + console.log("unknown line port " + port); + } + var returnVal = 100 - ((rawVal - 6) * 100/121); + return Math.min(100, Math.max(0, Math.round(returnVal))); + } +); + +SnapExtensions.primitives.set( + 'bbt_finchmagnetometer(robot, dimension)', + function (robot, dim) { + return window.birdbrain.getFinchMagnetometer(dim, robot); + } +); + +SnapExtensions.primitives.set( + 'bbt_finchorientation(robot, dimension)', + function (robot, dim) { + if (dim == "Shake") { + let shake = window.birdbrain.sensorData[robot][16]; + return ((shake & 0x01) > 0); + } + const threshold = 7.848; + let acceleration = 0; + switch(dim) { + case "Tilt Left": + case "Tilt Right": + acceleration = window.birdbrain.getFinchAcceleration('X', robot); + break; + case "Beak Up": + case "Beak Down": + acceleration = window.birdbrain.getFinchAcceleration('Y', robot); + break; + case "Level": + case "Upside Down": + acceleration = window.birdbrain.getFinchAcceleration('Z', robot); + break; + } + switch(dim) { + case "Tilt Right": + case "Beak Up": + case "Upside Down": + return (acceleration > threshold); + case "Tilt Left": + case "Beak Down": + case "Level": + return (acceleration < -threshold); + } + + console.log("Unknown dimension " + dim); + return false; + } +); + +SnapExtensions.primitives.set( + 'bbt_magnetometer(robot, dimension)', + function (robot, dim) { + return window.birdbrain.getMicrobitMagnetometer(dim, robot); + } +); + +SnapExtensions.primitives.set( + 'bbt_orientation(robot, dimension)', + function (robot, dim) { + if (dim == "Shake") { + const index = 7; + let shake = window.birdbrain.sensorData[robot][index]; + return ((shake & 0x01) > 0); + } + const threshold = 7.848; + let acceleration = 0; + switch(dim) { + case "Tilt Left": + case "Tilt Right": + acceleration = window.birdbrain.getMicrobitAcceleration('X', robot); + break; + case "Logo Up": + case "Logo Down": + acceleration = window.birdbrain.getMicrobitAcceleration('Y', robot); + break; + case "Screen Up": + case "Screen Down": + acceleration = window.birdbrain.getMicrobitAcceleration('Z', robot); + break; + } + switch(dim) { + case "Tilt Left": + case "Logo Down": + case "Screen Down": + return (acceleration > threshold); + case "Tilt Right": + case "Logo Up": + case "Screen Up": + return (acceleration < -threshold); + } + + console.log("Unknown dimension " + dim); + return false; + } +); + +SnapExtensions.primitives.set( + 'bbt_sound(robot)', + function (robot) { + if (window.birdbrain.microbitIsV2[robot]) { + const type = window.birdbrain.robotType[robot]; + if (type == window.birdbrain.robotType.FINCH) { + return window.birdbrain.sensorData[robot][0]; + } else { + return window.birdbrain.sensorData[robot][14]; + } + } else { + return "micro:bit V2 required" + } + } +); + +SnapExtensions.primitives.set( + 'bbt_temperature(robot)', + function (robot) { + if (window.birdbrain.microbitIsV2[robot]) { + const type = window.birdbrain.robotType[robot]; + if (type == window.birdbrain.robotType.FINCH) { + return (window.birdbrain.sensorData[robot][6] >> 2); + } else { + return window.birdbrain.sensorData[robot][15]; + } + } else { + return "micro:bit V2 required" + } + } +); + +//// GlowBoard Blocks //// + +SnapExtensions.primitives.set( + 'bbt_gbbutton(robot, button)', + function (robot, button) { + var buttonState = window.birdbrain.sensorData[robot][5] & 0xF0; //Button Byte position = 7, clear LS Bits as it is for shake and calibrate + + switch (button) { + case 'right': + return (buttonState == 0x00 || buttonState == 0x20) + case 'left': + return (buttonState == 0x00 || buttonState == 0x10) + default: + console.log("unknown button " + button); + return false; + } + } +); + +SnapExtensions.primitives.set( + 'bbt_gbdial(robot, dial)', + function (robot, sensor) { + let index = 1 + if (sensor == "Right") { index = 3 } + const msb = window.birdbrain.sensorData[robot][index]; + const lsb = window.birdbrain.sensorData[robot][index + 1]; + const value = msb << 8 | lsb; + return value; + } +); + +SnapExtensions.primitives.set( + 'bbt_gbdisplay(robot, color, brightness, symbol)', + function (robot, color, brightness, symbolString) { + var thisCommand = { + robot: robot, + cmd: "glowboard", + color: color, + brightness: brightness, + symbolString: symbolString + } + + window.birdbrain.sendCommand(thisCommand); + } +); + +SnapExtensions.primitives.set( + 'bbt_gbsetpoint(robot, X, Y, color, brightness)', + function (robot, xPos, yPos, color, brightness) { + var thisCommand = { + robot: robot, + cmd: "setPoint", + xPos: Math.round(Math.max(Math.min(xPos, 12), 1)), + yPos: Math.round(Math.max(Math.min(yPos, 12), 1)), + color: color, + brightness: brightness + } + + window.birdbrain.sendCommand(thisCommand); + } +); + +//// Blocks for old style robots //// + +SnapExtensions.primitives.set( + 'bbt_legacyled(port, intensity)', + function (portnum, intensitynum) { + var realPort = portnum-1; + var realIntensity = Math.floor(intensitynum*2.55); + + var report = { + message:"L".charCodeAt(0), + port: realPort.toString().charCodeAt(0), + intensity: realIntensity + }; + + window.birdbrain.sendCommand( report ); + } +); + +SnapExtensions.primitives.set( + 'bbt_legacytriled(port, red, green, blue)', + function (portnum, rednum, greennum, bluenum) { + var realPort = portnum-1; + var realIntensities = [rednum, greennum, bluenum].map(function(intensity) { + return Math.floor(Math.max(Math.min(intensity*2.55, 255), 0)); + }); + + var report = { + message:"O".charCodeAt(0), + port: realPort.toString().charCodeAt(0), + red: realIntensities[0], + green: realIntensities[1], + blue: realIntensities[2] + }; + + window.birdbrain.sendCommand( report ); + } +); + +SnapExtensions.primitives.set( + 'bbt_legacyservo(port, position)', + function (portnum, ang) { + var realPort = portnum-1; + var realAngle = Math.floor(ang*1.25); + realAngle = Math.max(Math.min(realAngle,225.0),0.0); + + var report = { + message: "S".charCodeAt(0), + port: realPort.toString().charCodeAt(0), + angle: realAngle + }; + + window.birdbrain.sendCommand( report ); + } +); + +SnapExtensions.primitives.set( + 'bbt_legacymotor(port, speed)', + function (portnum, velocity) { + var realPort = portnum-1; + var realVelocity = Math.floor(velocity*2.55); + realVelocity = Math.max(Math.min(realVelocity,255), -255); + + var report = { + message: "M".charCodeAt(0), + port: realPort.toString().charCodeAt(0), + direction: (realVelocity < 0 ? 1 : 0).toString().charCodeAt(0), + velocity: Math.abs(realVelocity) + }; + + window.birdbrain.sendCommand( report ); + } +); + +SnapExtensions.primitives.set( + 'bbt_legacyvibration(port, intensity)', + function (portnum, intensitynum) { + var realPort = portnum-1; + var realIntensity = Math.floor(intensitynum*2.55); + realIntensity = Math.max(Math.min(realIntensity,255.0),0.0); + + var report = { + message: "V".charCodeAt(0), + port: realPort.toString().charCodeAt(0), + intensity: realIntensity + }; + + window.birdbrain.sendCommand( report ); + } +); + +SnapExtensions.primitives.set( + 'bbt_legacysaythis(phrase)', + function (phrase) { + var report = { message: "SPEAK", val: phrase}; + window.birdbrain.sendCommand( report ); + } +); + +SnapExtensions.primitives.set( + 'bbt_legacyhbsensor(sensor, port)', + function (sensor, port) { + var realport = port - 1; + var sensorvalue = window.bbtLegacy.sensorData[realport] + + switch(sensor) { + case "Light": + return parseInt(sensorvalue / 2.55); + case "Temperature": //Celsius + return Math.floor(((sensorvalue-127)/2.4+25)*100/100); + case "Distance": //cm + var reading = sensorvalue*4; + if (reading < 130) { + sensorvalue = 100; + } else { //formula based on mathematical regression + reading = reading - 120; + var distance; + if (reading > 680) { + distance = 5.0; + } else { + var sensor_val_square = reading*reading; + distance = sensor_val_square*sensor_val_square*reading*-0.000000000004789 + + sensor_val_square*sensor_val_square*0.000000010057143 + - sensor_val_square*reading*0.000008279033021 + + sensor_val_square*0.003416264518201 + - reading*0.756893112198934 + + 90.707167605683000; + } + sensorvalue = parseInt(distance); + } + return sensorvalue; + case "Dial": + return parseInt(sensorvalue / 2.55); + case "Sound": + if (sensorvalue > 14) { + return (sensorvalue - 15) * 3/2 + } else { + return 0 + } + case "Raw": + return parseInt(sensorvalue / 2.55); + default: + console.log("Unknown sensor: " + sensor); + return 0; + } + } +); + +SnapExtensions.primitives.set( + 'bbt_legacyfinchmove(left, right)', + function (left, right) { + function constrain(n) { + return Math.max(Math.min(n, 255), -255); + } + var speeds = [constrain(Math.round(left * 2.55)), constrain(Math.round(right * 2.55))]; + + var report = { + message: "M".charCodeAt(0), + leftDirection: speeds[0] < 0 ? 1 : 0, + leftSpeed: Math.abs(speeds[0]), + rightDirection: speeds[1] < 0 ? 1 : 0, + rightSpeed: Math.abs(speeds[1]), + }; + + window.birdbrain.sendCommand( report ); + } +); + +SnapExtensions.primitives.set( + 'bbt_legacyfinchled(red, green, blue)', + function (red, green, blue) { + // constrain n to the range [0..255] + function constrain(n) { + return Math.max(Math.min(n, 255), 0); + } + + var values = [constrain(Math.round(red * 2.55)), constrain(Math.round(green * 2.55)), constrain(Math.round(blue * 2.55))]; + + var report = { + message: "O".charCodeAt(0), + red: values[0], + green: values[1], + blue: values[2] + }; + + window.birdbrain.sendCommand( report ); + } +); + +SnapExtensions.primitives.set( + 'bbt_legacyfinchbuzzer(frequency, duration)', + function (freq, time) { + //constrain n to the range [0..65535] + function constrain(n) { + return Math.max(Math.min(n, 0xFFFF), 0); + } + var value = { + freq: constrain(Math.round(freq)), + time: constrain(Math.round(time)) + }; + + var report = { + message: "B".charCodeAt(0), + timeHigh: value.time >> 8, // Since the report must be in bytes + timeLow: value.time & 0xFF, // and these values are bigger than a byte + freqHigh: value.freq >> 8, // they are split into two bytes + freqLow: value.freq & 0xFF + }; + + window.birdbrain.sendCommand( report ); + } +); + +SnapExtensions.primitives.set( + 'bbt_legacyfinchsensor(port)', + function (port) { + //Ports: Left Light = 0; Right Light = 1; + // Acceleration (X, Y, Z) = (2, 3, 4); + // Left Obstacle = 5; Right Obstacle = 6; + // Temperature C = 7; + return window.bbtLegacy.sensorData[port]; + } +); + +SnapExtensions.primitives.set( + 'bbt_legacyfinchorientation()', + function () { + var acceleration = Array(3); + acceleration[0] = window.bbtLegacy.sensorData[2] + acceleration[1] = window.bbtLegacy.sensorData[3] + acceleration[2] = window.bbtLegacy.sensorData[4] + + var orientation; + + if(acceleration[0] > -0.5 && acceleration[0] < 0.5 && acceleration[1] < 0.5 && acceleration[1] > -0.5 && acceleration[2] > 0.65 && acceleration[2] < 1.5) + orientation = "level"; + else if(acceleration[0] > -0.5 && acceleration[0] < 0.5 && acceleration[1] < 0.5 && acceleration[1] > -0.5 && acceleration[2] > -1.5 && acceleration[2] < -0.65) + orientation = "upside down"; + else if(acceleration[0] < 1.5 && acceleration[0] > 0.8 && acceleration[1] > -0.3 && acceleration[1] < 0.3 && acceleration[2] > -0.3 && acceleration[2] < 0.3) + orientation = "beak down"; + else if(acceleration[0] < -0.8 && acceleration[0] > -1.5 && acceleration[1] > -0.3 && acceleration[1] < 0.3 && acceleration[2] > -0.3 && acceleration[2] < 0.3) + orientation = "beak up"; + else if(acceleration[0] > -0.5 && acceleration[0] < 0.5 && acceleration[1] > 0.7 && acceleration[1] < 1.5 && acceleration[2] > -0.5 && acceleration[2] < 0.5) + orientation = "left wing down"; + else if(acceleration[0] > -0.5 && acceleration[0] < 0.5 && acceleration[1] > -1.5 && acceleration[1] < -0.7 && acceleration[2] > -0.5 && acceleration[2] < 0.5) + orientation = "right wing down"; + else + orientation = "in between"; + + return orientation + } +); diff --git a/libraries/bignumbers.xml b/libraries/bignumbers.xml index 586c28e8..576a7bd5 100644 --- a/libraries/bignumbers.xml +++ b/libraries/bignumbers.xml @@ -1 +1 @@ -call with True to turn on the entire Scheme numeric tower, including infinite-precision integers, exact rationals, and complex numbers; call with False to restore native JavaScript arithmetic.
pt:altera utilização de aritmética do Scheme para _ useBigNumsvar done = false; function initialize (callback) { var bigScript = document.createElement('script'); bigScript.src = '//snap.berkeley.edu/snap/libraries/biginteger.js'; bigScript.onload = loadScheme; document.head.appendChild(bigScript); function loadScheme () { var schemeScript = document.createElement('script'); schemeScript.src = '//snap.berkeley.edu/snap/libraries/schemeNumber.js'; schemeScript.onload = finish; document.head.appendChild(schemeScript); } function finish () { makeGlobalObject(); callback(); } } function makeGlobalObject () { window.bigNumbers = { originalEvaluate: InputSlotMorph.prototype.evaluate, originalChangeVar: VariableFrame.prototype.changeVar, originalPrims: { reportBasicSum: Process.prototype.reportBasicSum, reportBasicDifference: Process.prototype.reportBasicDifference, reportBasicProduct: Process.prototype.reportBasicProduct, reportBasicQuotient: Process.prototype.reportBasicQuotient, reportBasicPower: Process.prototype.reportBasicPower, reportBasicModulus: Process.prototype.reportBasicModulus, reportBasicAtan2: Process.prototype.reportBasicAtan2, reportRound: Process.prototype.reportRound, reportBasicMin: Process.prototype.reportBasicMin, reportBasicMax: Process.prototype.reportBasicMax, reportBasicRandom: Process.prototype.reportBasicRandom, reportBasicLessThan: Process.prototype.reportBasicLessThan, reportBasicGreaterThan: Process.prototype.reportBasicGreaterThan, reportEquals: Process.prototype.reportEquals, reportIsIdentical: Process.prototype.reportIsIdentical, reportMonadic: Process.prototype.reportMonadic } }; } function loadBlocks () { var fn = SchemeNumber.fn; var originalPrims = window.bigNumbers.originalPrims; if (useBigNums) { InputSlotMorph.prototype.evaluate = function () { var contents = this.contents(); if (this.selectedBlock) { return this.selectedBlock; } if (this.constant) { return this.constant; } if (this.isNumeric) { return parseNumber(contents.text || '0'); } return contents.text; }; VariableFrame.prototype.changeVar = function (name, delta, sender) { var frame = this.find(name), value, newValue; if (frame) { value = parseNumber(frame.vars[name].value); newValue = Number.isNaN(value) ? delta : fn['+'](value, parseNumber(delta)); if (sender instanceof SpriteMorph && (frame.owner instanceof SpriteMorph) && (sender !== frame.owner)) { sender.shadowVar(name, newValue); } else { frame.vars[name].value = newValue; } } }; Object.assign(Process.prototype, { reportBasicSum: function (a, b) { a = parseNumber(a); b = parseNumber(b); if (Number.isNaN(a) || Number.isNaN(b)) return NaN; return fn['+'](a, b); }, reportBasicDifference: function (a, b) { a = parseNumber(a); b = parseNumber(b); if (Number.isNaN(a) || Number.isNaN(b)) return NaN; return fn['-'](a, b); }, reportBasicProduct: function (a, b) { a = parseNumber(a); b = parseNumber(b); if (Number.isNaN(a) || Number.isNaN(b)) return NaN; return fn['*'](a, b); }, reportBasicQuotient: function (a, b) { a = parseNumber(a); b = parseNumber(b); if (fn['='](b, '0') && !fn['='](a, '0')) { return (fn['<'](a, '0') ? SchemeNumber('-inf.0') : SchemeNumber('+inf.0')) }; if (Number.isNaN(a) || Number.isNaN(b) || fn['='](b, '0')) return NaN; return fn['/'](a, b); }, reportBasicPower: function (a, b) { a = parseNumber(a); b = parseNumber(b); if (Number.isNaN(a) || Number.isNaN(b)) return NaN; return fn['expt'](a, b); }, reportBasicModulus: function (a, b) { a = parseNumber(a); b = parseNumber(b); if (Number.isNaN(a) || Number.isNaN(b)) return NaN; var result = fn.mod(a, b); if (fn['<'](b, '0') && fn['>'](result, '0')) { result = fn['+'](result, b); } return result; }, reportBasicAtan2: function (a, b) { a = parseNumber(a); b = parseNumber(b); if (Number.isNaN(a) || Number.isNaN(b)) return NaN; return degrees(fn.atan2(a, b)); }, reportRound: function (n) { if (this.enableHyperOps) { if (n instanceof List) { return n.map(each => this.reportRound(each)); } } n = parseNumber(n); if (Number.isNaN(n)) return NaN; x = fn.round(n); if (fn["integer?"](x)) return fn["exact"](x); return x; }, reportBasicMin: function (a, b) { x = parseNumber(a); y = parseNumber(b); if (Number.isNaN(x) || Number.isNaN(y)) { return a<b ? a : b; } return fn['<'](x, y) ? x : y; }, reportBasicMax: function (a, b) { x = parseNumber(a); y = parseNumber(b); if (Number.isNaN(x) || Number.isNaN(y)) { return a>b ? a : b; } return fn['>'](x, y) ? x : y; }, reportBasicRandom: function (min, max) { var floor = parseNumber(min), ceil = parseNumber(max); if (Number.isNaN(floor) || Number.isNaN(ceil)) return NaN; if (!fn['='](fn.mod(floor, '1'), '0') || !fn['='](fn.mod(ceil, '1'), '0')) { // One of the numbers isn't whole. Include the decimal. return fn['+']( fn['*']( Math.random(), fn['-'](ceil, floor) ), floor ); } var size = Math.ceil(max.toString(10).length/14); const array = new Uint32Array(size); window.crypto.getRandomValues(array); var digits=""; for (i=0;i<size;i++) { digits = digits + array[i].toString(); } return fn.floor( fn['+']( // fn['*']( // Math.random(), fn.mod(parseNumber(digits), fn['+']( fn['-'](ceil, floor), '1' ) ), floor ) ); }, reportBasicLessThan: function (a, b) { x = parseNumber(a); y = parseNumber(b); if (Number.isNaN(x) || Number.isNaN(y)) return a<b; return fn['<'](x, y); }, reportBasicGreaterThan: function (a, b) { x = parseNumber(a); y = parseNumber(b); if (Number.isNaN(x) || Number.isNaN(y)) return a>b; return fn['>'](x, y); }, reportEquals: function (a, b) { x = parseNumber(a); y = parseNumber(b); if (Number.isNaN(x) || Number.isNaN(y)) return snapEquals(a, b); return fn['='](x, y); }, reportIsIdentical: function (a, b) { x = parseNumber(a); y = parseNumber(b); if (Number.isNaN(x) || Number.isNaN(y)) return originalPrims.reportIsIdentical(a, b); return fn['='](x, y); }, reportMonadic: function (fname, n) { if (this.enableHyperOps) { if (n instanceof List) { return n.map(each => this.reportMonadic(fname, each)); } } n = parseNumber(n); if (Number.isNaN(n)) return NaN; switch (Process.prototype.inputOption(fname)) { case 'abs': return fn.abs(n); case 'neg': return fn['-'](n); case 'sign': if (fn['='](n,SchemeNumber('0'))) return SchemeNumber('0'); return fn['/'](n, fn.abs(n)); case 'ceiling': return fn.ceiling(n); case 'floor': return fn.floor(n); case 'sqrt': return sqrt(n); case 'sin': return fn.sin(radians(n)); case 'cos': return fn.cos(radians(n)); case 'tan': return fn.tan(radians(n)); case 'asin': return degrees(fn.asin(n)); case 'acos': return degrees(fn.acos(n)); case 'atan': return degrees(fn.atan(n)); case 'ln': return fn.log(n); case 'log': return fn.log(n, '10'); case 'lg': return fn.log(n, '2'); case 'e^': return fn.exp(n); case '10^': return fn.expt('10', n); case '2^': return fn.expt('2', n); case 'id': return n; default: return SchemeNumber('0'); } } }); } else { InputSlotMorph.prototype.evaluate = window.bigNumbers.originalEvaluate; VariableFrame.prototype.changeVar = window.bigNumbers.originalChangeVar; Object.assign(Process.prototype, originalPrims); } done = true; } function parseNumber (n) { var fn = SchemeNumber.fn; if (!fn['number?'](n)) { n = '' + n; try { return parseENotation(n) || SchemeNumber(n); } catch (err) { return NaN; } } return n; } function parseENotation (n) { var fn = SchemeNumber.fn; var numbers = n.match(/^(-?\d+\.?\d*|-?\.\d+)e(-?\d+)$/i); if (!numbers) return null; var coefficient = numbers[1]; var exponent = numbers[2]; return fn['*']( coefficient, fn.expt('10', exponent) ); } function sqrt (n) { var fn = SchemeNumber.fn; if (!fn['exact?'](n) || !fn['rational?'](n) || fn['<'](n,'0')) return fn.sqrt(n); var rootNumerator = fn['exact-integer-sqrt'](fn.numerator(n)); if (!fn['='](rootNumerator[1], '0')) return fn.sqrt(n); var rootDenominator = fn['exact-integer-sqrt'](fn.denominator(n)); if (!fn['='](rootDenominator[1], '0')) return fn.sqrt(n); return fn['/'](rootNumerator[0], rootDenominator[0]); } function isDone () { return done; } if (window.bigNumbers) { loadBlocks(); } else { initialize(loadBlocks); } return isDone;
The factorial function, to make very large numbers, to demo bignums.
The identity function: reports its input. It's useful to get things like 3/4 or 5-2i into numeric input slots.
Provides Scheme arithmetic functions not in JavaScript
pt:_ de _ number? complex? real? rational? integer? exact? inexact? exact inexact finite? infinite? nan? numerator denominator real-part imag-part magnitude angle
\ No newline at end of file +call with True to turn on the entire Scheme numeric tower, including infinite-precision integers, exact rationals, and complex numbers; call with False to restore native JavaScript arithmetic.
pt:altera utilização de aritmética do Scheme para _ ca:sistema numèric d'Scheme _
The factorial function, to make very large numbers, to demo bignums.
The identity function: reports its input. It's useful to get things like 3/4 or 5-2i into numeric input slots.
Provides Scheme arithmetic functions not in JavaScript
pt:_ de _ ca:Scheme _ de _ number? complex? real? rational? integer? exact? inexact? exact inexact finite? infinite? nan? numerator denominator real-part imag-part magnitude angle
\ No newline at end of file diff --git a/libraries/bignums.js b/libraries/bignums.js new file mode 100644 index 00000000..427d56b5 --- /dev/null +++ b/libraries/bignums.js @@ -0,0 +1,375 @@ +makeGlobalObject(); + +SnapExtensions.primitives.set( + 'big_switch(bool)', + loadBlocks +); + +SnapExtensions.primitives.set( + 'big_scheme(fn, num)', + function (which, num) { + function parseNumber (n) { + var fn = SchemeNumber.fn; + if (!fn['number?'](n)) { + n = '' + n; + try { + return parseENotation(n) || SchemeNumber(n); + } catch (err) { + return NaN; + } + } + return n; + } + + function parseENotation (n) { + var fn = SchemeNumber.fn; + + var numbers = n.match(/^(-?\d+\.?\d*|-?\.\d+)e(-?\d+)$/i); + if (!numbers) return null; + + var coefficient = numbers[1]; + var exponent = numbers[2]; + return fn['*']( + coefficient, + fn.expt('10', exponent) + ); + } + var fn=SchemeNumber.fn, + number=parseNumber(num); + + switch (which) { + case 'number?': + case 'complex?': + return (fn['number?'](number)); + case 'real?': + return (fn['real?'](number) || fn['real-valued?'](number)); + case 'rational?': + return (fn['rational?'](number) || (fn['='](number, fn.rationalize(number, parseNumber('1.0e-5'))))); + case 'integer?': + return (fn['integer?'](number) || fn['integer-valued?'](number)); + case 'exact?': + case 'inexact?': + case 'finite?': + case 'infinite?': + case 'nan?': + case 'real-part': + case 'imag-part': + return (fn[which](number)); + case 'magnitude': + return (fn.magnitude(number)); + case 'angle': + return (fn.angle(number)); + case 'numerator': + return (fn.numerator(number)); + case 'denominator': + return (fn.denominator(number)); + case 'exact': + return (fn.exact(number)); + case 'inexact': + return (fn.inexact(number)); + } + } +); + +function makeGlobalObject () { + window.bigNumbers = { + originalEvaluate: InputSlotMorph.prototype.evaluate, + originalChangeVar: VariableFrame.prototype.changeVar, + originalPrims: { + reportBasicSum: Process.prototype.reportBasicSum, + reportBasicDifference: Process.prototype.reportBasicDifference, + reportBasicProduct: Process.prototype.reportBasicProduct, + reportBasicQuotient: Process.prototype.reportBasicQuotient, + reportBasicPower: Process.prototype.reportBasicPower, + reportBasicModulus: Process.prototype.reportBasicModulus, + reportBasicAtan2: Process.prototype.reportBasicAtan2, + reportRound: Process.prototype.reportRound, + reportBasicMin: Process.prototype.reportBasicMin, + reportBasicMax: Process.prototype.reportBasicMax, + reportBasicRandom: Process.prototype.reportBasicRandom, + reportBasicLessThan: Process.prototype.reportBasicLessThan, + reportBasicGreaterThan: Process.prototype.reportBasicGreaterThan, + reportEquals: Process.prototype.reportEquals, + reportIsIdentical: Process.prototype.reportIsIdentical, + reportMonadic: Process.prototype.reportMonadic + } + }; +} + +function loadBlocks (useBigNums) { + var fn = SchemeNumber.fn; + var originalPrims = window.bigNumbers.originalPrims; + if (useBigNums) { + InputSlotMorph.prototype.evaluate = function () { + var contents = this.contents(); + + if (this.selectedBlock) { + return this.selectedBlock; + } + + if (this.constant) { + return this.constant; + } + if (this.isNumeric) { + return parseNumber(contents.text || '0'); + } + return contents.text; + }; + VariableFrame.prototype.changeVar = function (name, delta, sender) { + var frame = this.find(name), + value, + newValue; + if (frame) { + value = parseNumber(frame.vars[name].value); + newValue = Number.isNaN(value) ? delta : fn['+'](value, parseNumber(delta)); + if (sender instanceof SpriteMorph && + (frame.owner instanceof SpriteMorph) && + (sender !== frame.owner)) { + sender.shadowVar(name, newValue); + } else { + frame.vars[name].value = newValue; + } + + } + }; + Object.assign(Process.prototype, { + reportBasicSum: function (a, b) { + a = parseNumber(a); + b = parseNumber(b); + if (Number.isNaN(a) || Number.isNaN(b)) return NaN; + return fn['+'](a, b); + }, + reportBasicDifference: function (a, b) { + a = parseNumber(a); + b = parseNumber(b); + if (Number.isNaN(a) || Number.isNaN(b)) return NaN; + return fn['-'](a, b); + }, + reportBasicProduct: function (a, b) { + a = parseNumber(a); + b = parseNumber(b); + if (Number.isNaN(a) || Number.isNaN(b)) return NaN; + return fn['*'](a, b); + }, + reportBasicQuotient: function (a, b) { + a = parseNumber(a); + b = parseNumber(b); + if (fn['='](b, '0') && !fn['='](a, '0')) { + return (fn['<'](a, '0') ? SchemeNumber('-inf.0') : SchemeNumber('+inf.0')) + }; + if (Number.isNaN(a) || Number.isNaN(b) || fn['='](b, '0')) return NaN; + return fn['/'](a, b); + }, + reportBasicPower: function (a, b) { + a = parseNumber(a); + b = parseNumber(b); + if (Number.isNaN(a) || Number.isNaN(b)) return NaN; + return fn['expt'](a, b); + }, + reportBasicModulus: function (a, b) { + a = parseNumber(a); + b = parseNumber(b); + if (Number.isNaN(a) || Number.isNaN(b)) return NaN; + var result = fn.mod(a, b); + if (fn['<'](b, '0') && fn['>'](result, '0')) { + result = fn['+'](result, b); + } + return result; + }, + reportBasicAtan2: function (a, b) { + a = parseNumber(a); + b = parseNumber(b); + if (Number.isNaN(a) || Number.isNaN(b)) return NaN; + return degrees(fn.atan2(a, b)); + }, + reportRound: function (n) { + if (this.enableHyperOps) { + if (n instanceof List) { + return n.map(each => this.reportRound(each)); + } + } + n = parseNumber(n); + if (Number.isNaN(n)) return NaN; + x = fn.round(n); + if (fn["integer?"](x)) return fn["exact"](x); + return x; + }, + reportBasicMin: function (a, b) { + x = parseNumber(a); + y = parseNumber(b); + if (Number.isNaN(x) || Number.isNaN(y)) { + return ab ? a : b; + } + return fn['>'](x, y) ? x : y; + }, + reportBasicRandom: function (min, max) { + var floor = parseNumber(min), + ceil = parseNumber(max); + if (Number.isNaN(floor) || Number.isNaN(ceil)) return NaN; + if (!fn['='](fn.mod(floor, '1'), '0') || !fn['='](fn.mod(ceil, '1'), '0')) { + // One of the numbers isn't whole. Include the decimal. + return fn['+']( + fn['*']( + Math.random(), + fn['-'](ceil, floor) + ), + floor + ); + } + var size = Math.ceil(max.toString(10).length/14); + const array = new Uint32Array(size); + window.crypto.getRandomValues(array); + var digits=""; + for (i=0;ib; + return fn['>'](x, y); + }, + reportEquals: function (a, b) { + x = parseNumber(a); + y = parseNumber(b); + if (Number.isNaN(x) || Number.isNaN(y)) return snapEquals(a, b); + return fn['='](x, y); + }, + reportIsIdentical: function (a, b) { + x = parseNumber(a); + y = parseNumber(b); + if (Number.isNaN(x) || Number.isNaN(y)) return originalPrims.reportIsIdentical.call(this, a, b); + return fn['='](x, y); + }, + reportMonadic: function (fname, n) { + if (this.enableHyperOps) { + if (n instanceof List) { + return n.map(each => this.reportMonadic(fname, each)); + } + } + + n = parseNumber(n); + if (Number.isNaN(n)) return NaN; + + switch (Process.prototype.inputOption(fname)) { + case 'abs': + return fn.abs(n); + case 'neg': + return fn['-'](n); + case 'sign': + if (fn['='](n,SchemeNumber('0'))) return SchemeNumber('0'); + return fn['/'](n, fn.abs(n)); + case 'ceiling': + return fn.ceiling(n); + case 'floor': + return fn.floor(n); + case 'sqrt': + return sqrt(n); + case 'sin': + return fn.sin(radians(n)); + case 'cos': + return fn.cos(radians(n)); + case 'tan': + return fn.tan(radians(n)); + case 'asin': + return degrees(fn.asin(n)); + case 'acos': + return degrees(fn.acos(n)); + case 'atan': + return degrees(fn.atan(n)); + case 'ln': + return fn.log(n); + case 'log': + return fn.log(n, '10'); + case 'lg': + return fn.log(n, '2'); + case 'e^': + return fn.exp(n); + case '10^': + return fn.expt('10', n); + case '2^': + return fn.expt('2', n); + case 'id': + return n; + default: + return SchemeNumber('0'); + } + } + }); + } else { + InputSlotMorph.prototype.evaluate = window.bigNumbers.originalEvaluate; + VariableFrame.prototype.changeVar = window.bigNumbers.originalChangeVar; + Object.assign(Process.prototype, originalPrims); + } + // +++ done = true; +} + +function parseNumber (n) { + var fn = SchemeNumber.fn; + if (!fn['number?'](n)) { + n = '' + n; + try { + return parseENotation(n) || SchemeNumber(n); + } catch (err) { + return NaN; + } + } + return n; +} + +function parseENotation (n) { + var fn = SchemeNumber.fn; + + var numbers = n.match(/^(-?\d+\.?\d*|-?\.\d+)e(-?\d+)$/i); + if (!numbers) return null; + + var coefficient = numbers[1]; + var exponent = numbers[2]; + return fn['*']( + coefficient, + fn.expt('10', exponent) + ); +} + +function sqrt (n) { + var fn = SchemeNumber.fn; + + if (!fn['exact?'](n) || !fn['rational?'](n) || fn['<'](n,'0')) return fn.sqrt(n); + + var rootNumerator = fn['exact-integer-sqrt'](fn.numerator(n)); + if (!fn['='](rootNumerator[1], '0')) return fn.sqrt(n); + + var rootDenominator = fn['exact-integer-sqrt'](fn.denominator(n)); + if (!fn['='](rootDenominator[1], '0')) return fn.sqrt(n); + + return fn['/'](rootNumerator[0], rootDenominator[0]); +} + diff --git a/libraries/bitwise.xml b/libraries/bitwise.xml new file mode 100644 index 00000000..31ec7097 --- /dev/null +++ b/libraries/bitwise.xml @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/libraries/cases.xml b/libraries/cases.xml index 5df390dc..e981df2c 100644 --- a/libraries/cases.xml +++ b/libraries/cases.xml @@ -1 +1 @@ -Multi-branched conditional. If the first (Boolean) input is True, then the script in the second (C-slot) input is run, and this block stops. Additional tests can be added by putting one or more ELSE IF blocks in the third (variadic) Boolean slot. Use the arrowheads to get the number of Boolean slots you need. Each ELSE IF block provides a Boolean slot for a condition to test and a script slot for what to do if the condition is True. You can put an ELSE block in the last Boolean input to CASES for a script to run if all the tests turn out False. As soon as a condition is True, no further tests are done and no further scripts are run.
pt:se _ , então _ _
pt:captura _ _ cont
pt:lança _ catchtag
For use with the CASES block. See its help message.
pt:senão, se _ , então _
For use with the CASES block. See its help message.
pt:senão, _
\ No newline at end of file +Multi-branched conditional. If the first (Boolean) input is True, then the script in the second (C-slot) input is run, and this block stops. Additional tests can be added by putting one or more ELSE IF blocks in the third (variadic) Boolean slot. Use the arrowheads to get the number of Boolean slots you need. Each ELSE IF block provides a Boolean slot for a condition to test and a script slot for what to do if the condition is True. You can put an ELSE block in the last Boolean input to CASES for a script to run if all the tests turn out False. As soon as a condition is True, no further tests are done and no further scripts are run.
pt:se _ , então _ _ ca:casos: si _ llavors _ _
pt:captura _ _ ca:agafa _ _ cont
pt:lança _ ca:llança _ catchtag
For use with the CASES block. See its help message.
pt:senão, se _ , então _ ca:altrament si _ llavors _
For use with the CASES block. See its help message.
pt:senão, _ ca:si no _
\ No newline at end of file diff --git a/libraries/colors.xml b/libraries/colors.xml index 480747fb..ff366878 100644 --- a/libraries/colors.xml +++ b/libraries/colors.xml @@ -1 +1 @@ -This block allows you to set the pen's color, transparency (on a scale from 0=opaque to 100=invisible), or size (in pixels). The color can be set in many ways, including RGB values, HSV values, HSL values, fair HSV or HSL (based on a modified spectrum that gives each spectral color equal space and promotes brown to a color), color number, crayon, or X11/W3C color name. See Appendix A in the Snap! Reference Manual for details.
color color number crayon fair hue ~1 size transparency X11/W3C name ~2 (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB(A) vector RGB(A) hex } }function () { // add/edit menus but don't forget to edit other slot manual menu options to match var color_number=[ "0 black=0", "14 white=14", "20 spectral red=20", "25 darkest red=25", "30 saddle brown=30", "35 darkest brown=35", "40 spectral orange=40", "45 darkest orange=45", "50 spectral yellow=50", "55 darkest yellow=55", "60 spectral green=60", "65 darkest green=65", "70 spectral cyan=70", "75 darkest cyan=75", "80 spectral blue=80", "85 darkest blue=85", "90 spectral violet=90", "95 magenta=95"]; var fair_hue=[ "0 red=0", "12.5 brown=12.5", "25 orange=25", "37.5 yellow=37.5", "50 green=50", "62.5 cyan=62.5", "75 blue=75", "87.5 violet=87.5"]; var crayon=[ "grays",[ "0 black #000000=0", "1 gray7 #121212=1", "2 gray14 #242424=2", "3 gray21 #363636=3", "4 gray28 #484848=4", "5 gray36 #5c5c5c=5", "6 gray43 #6d6d6d=6", "7 gray50 #7f7f7f=7", "8 gray57 #919191=8", "9 gray64 #a3a3a3=9", "10 gray71 #b5b5b5=10", "11 gray78 #c8c8c8=11", "12 gray85 #dadada=12", "13 gray92 #ececec=13", "14 white #ffffff=14"], "pinks",[ "15 deep pink #ff1493=15", "16 hot pink #ff69b4=16", "17 bright pink #ff007f=17", "18 raspberry #e30b5d=18", "19 amaranth #e52b50=19"], "reds",[ "20 red #ff0000=20", "21 burgundy #900020=21", "22 cherry #990000=22", "23 dark candy apple red #a40000=23", "24 sanguine #c00000=24", "25 maroon #800000=25", "26 crimson #c90016=26", "27 Lists #d94d11=27", "28 candy apple red #ff0800=28", "29 coquelicot #ff3800=29"], "browns",[ "30 saddle brown #8b4513=30", "31 chocolate #7b3f00=31", "32 kobicha #6b4423=32", "33 sepia #704214=33", "34 chestnut #954535=34", "35 dark brown #654321=35", "36 brown #964b00=36", "37 golden brown #996515=37", "38 cinnamon #b87333=38", "39 copper #d2691e=39"], "oranges",[ "40 orange #ff7f00=40", "41 Pantone orange #ff5800=41", "42 pumpkin #ff7518=42", "43 Variables #f3761d=43", "44 Spanish orange #e86100=44", "45 burnt orange #cc5500=45", "46 sinopia #cb410b=46", "47 ochre #cc7722=47", "48 carrot #ed9121=48", "49 tangerine #f28500=49"], "yellows",[ "50 yellow #ffff00=50", "51 Control #e6a822=51", "52 dark goldenrod #b8860b=52", "53 goldenrod #daa520=53", "54 saffron #f4c430=54", "55 sandstorm #ecd540=55", "56 mustard #ffdb58=56", "57 gold #ffd700=57", "58 egg yolk #fee33e=58", "59 rubber duck #fbe108=59"], "greens",[ "60 lime #00ff00=60", "61 apple green #8db600=61", "62 Operators #62c213=62", "63 forest green #228b22=63", "64 green #008000=64", "65 dark green #006400=65", "66 dark pastel green #03c03c=66", "67 emerald #50c878=67", "68 mint #3eb489=68", "69 Pen #00a178=69"], "cyans",[ "70 aqua (cyan) #00ffff=70", "71 dark cyan #008b8b=71", "72 cerulean #007ba7=72", "73 iceberg #71a6d2=73", "74 Sensing #0494dc=74", "75 teal #008080=75", "76 light sky blue #87cefa=76", "77 deep sky blue #00bfff=77", "78 dodger blue #1e90ff=78", "79 azure #007fff=79"], "blues",[ "80 blue #0000ff=80", "81 midnight blue #191970=81", "82 dark powder blue #003399=82", "83 cobalt #0047ab=83", "84 denim #1560bd=84", "85 navy blue #000080=85", "86 steel blue #4682b4=86", "87 Motion #4a6cd4=87", "88 cornflower #6495ed=88", "89 slate blue #6a5acd=89"], "purples",[ "90 violet #8000ff=90", "91 Looks #8f56e3=91", "92 grape #6f2da8=92", "93 indigo #4b0082=93", "94 x11 purple #a020f0=94", "95 magenta (fuchia) #ff00ff=95", "96 dark orchid #9932cc=96", "97 Sound #cf4ad9=97", "98 purple #7f007f=98", "99 dark magenta #8b008b=99"]]; function makeMenuHelper(items, output) { // in an array, walk through the items in pairs var i = 0; while (i < items.length) { var label = items[i]; var possiblyNested = items[i+1]; // if possiblyNested is array, it is a nest under label // if possiblyNested is string, it is just a sibling if (possiblyNested === undefined) { // label is actually the last element of the list var hasEquals = label.split("="); if (hasEquals.length == 2) { output[hasEquals[0]] = hasEquals[1]; i += 1; } else if (hasEquals.length == 3) { output[hasEquals[0]+"\u00A0"+"="+"\u00A0"+hasEquals[2]] = hasEquals[0]+"\u00A0"+"="+"\u00A0"+hasEquals[2]; i += 1; } else { output[label] = label; i += 1; } } else if (typeof possiblyNested == "string") { var hasEquals = label.split("="); if (hasEquals.length == 2) { output[hasEquals[0]] = hasEquals[1]; i += 1; } else if (hasEquals.length == 3) { output[hasEquals[0]+"\u00A0"+"="+"\u00A0"+hasEquals[2]] = hasEquals[0]+"\u00A0"+"="+"\u00A0"+hasEquals[2]; i += 1; } else { output[label] = label; i += 1; } } else if (Array.isArray(possiblyNested)) { var nestingOutput = {}; makeMenuHelper(possiblyNested, nestingOutput); output[label] = nestingOutput; i += 2 } else { throw new Error("Bad value at index " + i); } } } var ide = world.children[0]; var menuVarName = this.parent.blockSpec; try { menuVarName = this.parent.cachedInputs[0].children[0].text; } catch(err) { menuPoss = this.parent.children; menuPoss = menuPoss.filter(function (e) { return (e instanceof InputSlotMorph)}); menuVarName = menuPoss[0].children[0].text; } menuVarName = menuVarName.replace(" ","_"); try { var menu = eval(menuVarName); var output = {}; makeMenuHelper(menu, output); return output; } catch(err) { } }Note to myself: When the user sets a fair dimension, say fair HSL, variable HSL contains the corresponding "unfair" values, and "raw HSL" contains the numbers the user actually gave. It has to be this way because in the case of HSV, there is no "HSV" variable; rather, we use the pen's actual remembered-by-Javascript color's HSV coordinates. So our HSL variable has to be analogous to that. In both cases "raw" means the numbers the user gave us.
1
HSV✐ raw HSL100HSV100
The identity function reports its input.
This block reports the pen size, color, or transparency, in all the same ways that the SET PEN block allows you to set those pen properties. (It will also report the current crayon number, if the pen color was most recently set with SET PEN TO CRAYON.) See Appendix A of the Snap! Reference Manual for details.
color color number crayon fair hue ~1 size transparency X11/W3C name ~2 (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB vector RGBA vector RGB(A) hex } }huesaturation (HSV)value (brightness)transparencyRGB vectorRGBA vectorredgreenblueRGB(A) hex1616HSV vectorHSL vectorsaturation (HSL)lightnesscolor numbercolorfair huenot setfair saturation (HSL)not setfair lightnessnot setfair HSL vectornot setfair saturation (HSV)2not setfair value (brightness)3not setfair HSV vectornot setcrayonX11/W3C name
Changes any pen property by the specified amount. Some color scales can't be adjusted this way unless the color was first SET using that scale. Vectors (e.g., RGB color as a list of three numbers) can be incremented by a vector as the amount. X11/W3C names can't be incremented.
color number crayon fair hue ~1 size transparency ~2 (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB vector RGBA vector } }crayonRGB hexI don't know how to handle
pt:lança o erro _
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont3
de:wirf _ ca:llança _ es:lanzar _ fr:lance _ pt:lança _ catchtag
de:ignoriere _ ca:ignora _ es:ignorar _ fr:ignore _ pt:ignora _
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 'names' list). If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.
pt:cria as variáveis _ _ ca:crea les _ variables _ es:crear las _ variables _ de:erstellen _ var _ globalglobal sprite scripteach itemvar ide = this.parentThatIsA(IDE_Morph); ide.flushBlocksCache('variables'); // b/c of inheritance ide.refreshPalette();
This block reports "true" if there is a variable with this given name (input slot) in that context. It can be a global, sprite or script variable. Otherwise it reports "false".
pt:a variável _ existe ca:existeix la variable _ ? es:existe la variable _ ? de:existiert var _ ?
combines any number of colors, reporting the result of mixing them, either additively (like colored light beams) or subtractively (like paints). If the result is too bright (additive) or too dark (subtractive), try the "averaged" versions, which will make the brightness more like the brightnesses of the input colors.
additive (light) additive (averaged) subtractive (ideal) subtractive (averaged) simulated paint paint (sRGB corrected)waveformssum of weightscombined waveformweighted geometric mean of waveformssum of weightscombined waveformTback to RGBT5.47813E-05 0.000184722 0.000935514 0.003096265 0.009507714 0.017351596 0.022073595 0.016353161 0.002002407 -0.016177731 -0.033929391 -0.046158952 -0.06381706 -0.083911194 -0.091832385 -0.08258148 -0.052950086 -0.012727224 0.037413037 0.091701812 0.147964686 0.181542886 0.210684154 0.210058081 0.181312094 0.132064724 0.093723787 0.057159281 0.033469657 0.018235464 0.009298756 0.004023687 0.002068643 0.00109484 0.000454231 0.000255925-4.65552E-05 -0.000157894 -0.000806935 -0.002707449 -0.008477628 -0.016058258 -0.02200529 -0.020027434 -0.011137726 0.003784809 0.022138944 0.038965605 0.063361718 0.095981626 0.126280277 0.148575844 0.149044804 0.14239936 0.122084916 0.09544734 0.067421931 0.035691251 0.01313278 -0.002384996 -0.009409573 -0.009888983 -0.008379513 -0.005606153 -0.003444663 -0.001921041 -0.000995333 -0.000435322 -0.000224537 -0.000118838 -4.93038E-05 -2.77789E-050.00032594 0.001107914 0.005677477 0.01918448 0.060978641 0.121348231 0.184875618 0.208804428 0.197318551 0.147233899 0.091819086 0.046485543 0.022982618 0.00665036 -0.005816014 -0.012450334 -0.015524259 -0.016712927 -0.01570093 -0.013647887 -0.011317812 -0.008077223 -0.005863171 -0.003943485 -0.002490472 -0.001440876 -0.000852895 -0.000458929 -0.000248389 -0.000129773 -6.41985E-05 -2.71982E-05 -1.38913E-05 -7.35203E-06 -3.05024E-06 -1.71858E-06newsRGBRGB vector255addmax255RGB vector
pt:o texto multilinha _
Reports the part of the first string up to the first instance of the second string inside it. If the second string isn't found, reports the entire first string.
pt:o texto de _ antes de _
Reports the portion of the first input string starting after the first occurrence of the second string. If the second string isn't found in the first string, reports an empty string.
pt:o texto de _ depois de _
Reports the character position (starting from 1) of the beginning of the first input string inside the second input string. If it's not found, reports 0.
pt:a posição de _ em _
If input is TRUE, comparisons made by functions in the string library will be case-independent (so "FOO" = "foo"). This is the default. If input is FALSE, comparisons will be exact.
pt:altera comparações ignorando distinção minúsculas/maiúsculas para _
Reports the portion of the first input (string) starting at the position given by the second input (counting from 1, like LETTER n OF) and ending at the position given by the third input (also counting from 1). If the third input is empty, reports the portion from the first position to the end of the string. If a position number is negative, counts from the end backward, so -1 is the last character, -2 is the next to last, etc.
pt:o texto de _ entre as posições _ e _ , inclusive
Reports True if the first input string contains the second input string, otherwise false. Comparison is case-independent by default; use USE CASE-INDEPENDENT COMPARISONS to change that.
pt:o texto de _ antes de _
Reports the input text with lower case letters instead of capital letters in the input. Uses the user's locale's rules for case conversion.
pt:em minúsculas _
This block reports a color. The color can be set in many ways, including RGB values, HSV values, HSL values, fair HSV or HSL (based on a modified spectrum that gives each spectral color equal space and promotes brown to a color), color number, crayon, or X11/W3C color name. See Appendix A in the Snap! Reference Manual for details.
color color number crayon fair hue X11/W3C name ~ fair HSL=fair HSL vector fair HSV=fair HSV vector HSL=HSL vector HSV=HSV vector RGB (0-255)=RGB vector RGB hexfunction () { // add/edit menus but don't forget to edit 2nd slot manual menu options as well to match var color_number=[ "0 black=0", "14 white=14", "20 spectral red=20", "25 darkest red=25", "30 saddle brown=30", "35 darkest brown=35", "40 spectral orange=40", "45 darkest orange=45", "50 spectral yellow=50", "55 darkest yellow=55", "60 spectral green=60", "65 darkest green=65", "70 spectral cyan=70", "75 darkest cyan=75", "80 spectral blue=80", "85 darkest blue=85", "90 spectral violet=90", "95 magenta=95"]; var fair_hue=[ "0 red=0", "12.5 brown=12.5", "25 orange=25", "37.5 yellow=37.5", "50 green=50", "62.5 cyan=62.5", "75 blue=75", "87.5 violet=87.5"]; var crayon=[ "grays",[ "0 black #000000=0", "1 gray7 #121212=1", "2 gray14 #242424=2", "3 gray21 #363636=3", "4 gray28 #484848=4", "5 gray36 #5c5c5c=5", "6 gray43 #6d6d6d=6", "7 gray50 #7f7f7f=7", "8 gray57 #919191=8", "9 gray64 #a3a3a3=9", "10 gray71 #b5b5b5=10", "11 gray78 #c8c8c8=11", "12 gray85 #dadada=12", "13 gray92 #ececec=13", "14 white #ffffff=14"], "pinks",[ "15 deep pink #ff1493=15", "16 hot pink #ff69b4=16", "17 bright pink #ff007f=17", "18 raspberry #e30b5d=18", "19 amaranth #e52b50=19"], "reds",[ "20 red #ff0000=20", "21 burgundy #900020=21", "22 cherry #990000=22", "23 dark candy apple red #a40000=23", "24 sanguine #c00000=24", "25 maroon #800000=25", "26 crimson #c90016=26", "27 Lists #d94d11=27", "28 candy apple red #ff0800=28", "29 coquelicot #ff3800=29"], "browns",[ "30 saddle brown #8b4513=30", "31 chocolate #7b3f00=31", "32 kobicha #6b4423=32", "33 sepia #704214=33", "34 chestnut #954535=34", "35 dark brown #654321=35", "36 brown #964b00=36", "37 golden brown #996515=37", "38 cinnamon #b87333=38", "39 copper #d2691e=39"], "oranges",[ "40 orange #ff7f00=40", "41 Pantone orange #ff5800=41", "42 pumpkin #ff7518=42", "43 Variables #f3761d=43", "44 Spanish orange #e86100=44", "45 burnt orange #cc5500=45", "46 sinopia #cb410b=46", "47 ochre #cc7722=47", "48 carrot #ed9121=48", "49 tangerine #f28500=49"], "yellows",[ "50 yellow #ffff00=50", "51 Control #e6a822=51", "52 dark goldenrod #b8860b=52", "53 goldenrod #daa520=53", "54 saffron #f4c430=54", "55 sandstorm #ecd540=55", "56 mustard #ffdb58=56", "57 gold #ffd700=57", "58 egg yolk #fee33e=58", "59 rubber duck #fbe108=59"], "greens",[ "60 lime #00ff00=60", "61 apple green #8db600=61", "62 Operators #62c213=62", "63 forest green #228b22=63", "64 green #008000=64", "65 dark green #006400=65", "66 dark pastel green #03c03c=66", "67 emerald #50c878=67", "68 mint #3eb489=68", "69 Pen #00a178=69"], "cyans",[ "70 aqua (cyan) #00ffff=70", "71 dark cyan #008b8b=71", "72 cerulean #007ba7=72", "73 iceberg #71a6d2=73", "74 Sensing #0494dc=74", "75 teal #008080=75", "76 light sky blue #87cefa=76", "77 deep sky blue #00bfff=77", "78 dodger blue #1e90ff=78", "79 azure #007fff=79"], "blues",[ "80 blue #0000ff=80", "81 midnight blue #191970=81", "82 dark powder blue #003399=82", "83 cobalt #0047ab=83", "84 denim #1560bd=84", "85 navy blue #000080=85", "86 steel blue #4682b4=86", "87 Motion #4a6cd4=87", "88 cornflower #6495ed=88", "89 slate blue #6a5acd=89"], "purples",[ "90 violet #8000ff=90", "91 Looks #8f56e3=91", "92 grape #6f2da8=92", "93 indigo #4b0082=93", "94 x11 purple #a020f0=94", "95 magenta (fuchia) #ff00ff=95", "96 dark orchid #9932cc=96", "97 Sound #cf4ad9=97", "98 purple #7f007f=98", "99 dark magenta #8b008b=99"]]; function makeMenuHelper(items, output) { // in an array, walk through the items in pairs var i = 0; while (i < items.length) { var label = items[i]; var possiblyNested = items[i+1]; // if possiblyNested is array, it is a nest under label // if possiblyNested is string, it is just a sibling if (possiblyNested === undefined) { // label is actually the last element of the list var hasEquals = label.split("="); if (hasEquals.length == 2) { output[hasEquals[0]] = hasEquals[1]; i += 1; } else if (hasEquals.length == 3) { output[hasEquals[0]+"\u00A0"+"="+"\u00A0"+hasEquals[2]] = hasEquals[0]+"\u00A0"+"="+"\u00A0"+hasEquals[2]; i += 1; } else { output[label] = label; i += 1; } } else if (typeof possiblyNested == "string") { var hasEquals = label.split("="); if (hasEquals.length == 2) { output[hasEquals[0]] = hasEquals[1]; i += 1; } else if (hasEquals.length == 3) { output[hasEquals[0]+"\u00A0"+"="+"\u00A0"+hasEquals[2]] = hasEquals[0]+"\u00A0"+"="+"\u00A0"+hasEquals[2]; i += 1; } else { output[label] = label; i += 1; } } else if (Array.isArray(possiblyNested)) { var nestingOutput = {}; makeMenuHelper(possiblyNested, nestingOutput); output[label] = nestingOutput; i += 2 } else { throw new Error("Bad value at index " + i); } } } var ide = world.children[0]; var menuVarName = this.parent.blockSpec; try { menuVarName = this.parent.cachedInputs[0].children[0].text; } catch(err) { menuPoss = this.parent.children; menuPoss = menuPoss.filter(function (e) { return (e instanceof InputSlotMorph)}); menuVarName = menuPoss[0].children[0].text; } menuVarName = menuVarName.replace(" ","_"); try { var menu = eval(menuVarName); var output = {}; makeMenuHelper(menu, output); return output; } catch(err) { } }color numbercolor300index15scale1515255fromto122crayon132X11/W3C nameRGB hexcolorRGB vectorHSV vectorHSL vectorfair HSV vectorindex-1scale1index1color100fair HSL vectorindex-1scale1index1color110050
nearest color number crayon number fair hue ~1 transparency X11/W3C name ~2 (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB vector RGBA vector RGB hex } }X11/W3C namenearest color numberrgbhslhsvrgbtransparencytransparencyRGB vectorRGBA vectorRGB hexredgreenbluehsvfalseHSV vectorhuesaturation (HSV)value (brightness)hsltrueHSL vectorsaturation (HSL)lightnessHSLlightnessfair lightness310030.9833.333333330.986.9444444516.944444451.96100fair lightnessfair saturation (HSL)210075.9493610075.949366.9444444516.944444451.96100fair saturation (HSL)fair HSL vectorfair lightness310030.9833.333333330.986.9444444516.944444458.823529100fair lightnessfair saturation (HSL)210075.9493610075.949366.9444444516.944444458.823529100fair saturation (HSL)fair HSL vectorfair hue11111111fair huefair saturation (HSL)fair lightnessfair HSL vectorbrownfair value (brightness)310054.5166.66666666754.516.9444444516.944444451.96100fair value (brightness)fair saturation (HSV)210086.3310086.336.9444444516.944444451.96100fair saturation (HSV)fair HSV vectorfair value (brightness)310054.5166.66666666754.516.9444444516.944444451.96100fair value (brightness)fair saturation (HSV)210086.3310086.336.9444444516.944444451.96100fair saturation (HSV)fair HSV vectorfair hue11111111fair huefair saturation (HSV)fair value (brightness)fair HSV vectorbrownfair somethingCan't get here -- please post project and screenshot to forum.
This block reports the pen color (as a color, not as a list of numbers).
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont
de:wirf _ _ ca:llança _ _ es:lanzar _ _ fr:lance _ _ pt:lança _ _ catchtag
Sets the pen color to one of 100 preselected colors, like a box of 100 crayons. The colors have names that are meant to be evocative. They are organized in families, more or less corresponding to spectral (rainbow) colors; the input slot has a two-level menu in which you can hover over a family name to see the colors of that family, each including a crayon number and an RGB value. See Appendix A of the Snap! Reference Manual for more details.
grays={ 0 black #000000=0 1 gray7 #121212=1 2 gray14 #242424=2 3 gray21 #363636=3 4 gray28 #484848=4 5 gray36 #5c5c5c=5 6 gray43 #6d6d6d=6 7 gray50 #7f7f7f=7 8 gray57 #919191=8 9 gray64 #a3a3a3=9 10 gray71 #b5b5b5=10 11 gray78 #c8c8c8=11 12 gray85 #dadada=12 13 gray92 #ececec=13 14 white #ffffff=14 } pinks={ 15 deep pink #ff1493=15 16 hot pink #ff69b4=16 17 bright pink #ff007f=17 18 raspberry #e30b5d=18 19 amaranth #e52b50=19 } reds={ 20 red #ff0000=20 21 burgundy #900020=21 22 cherry #990000=22 23 dark candy apple red #a40000=23 24 sanguine #c00000=24 25 maroon #800000=25 26 crimson #c90016=26 27 Lists #d94d11=27 28 candy apple red #ff0800=28 29 coquelicot #ff3800=29 } browns={ 30 saddle brown #8b4513=30 31 chocolate #7b3f00=31 32 kobicha #6b4423=32 33 sepia #704214=33 34 chestnut #954535=34 35 dark brown #654321=35 36 brown #964b00=36 37 golden brown #996515=37 38 cinnamon #b87333=38 39 copper #d2691e=39 } oranges={ 40 orange #ff7f00=40 41 Pantone orange #ff5800=41 42 pumpkin #ff7518=42 43 Variables #f3761d=43 44 Spanish orange #e86100=44 45 burnt orange #cc5500=45 46 sinopia #cb410b=46 47 ochre #cc7722=47 48 carrot #ed9121=48 49 tangerine #f28500=49 } yellows={ 50 yellow #ffff00=50 51 Control #e6a822=51 52 dark goldenrod #b8860b=52 53 goldenrod #daa520=53 54 saffron #f4c430=54 55 sandstorm #ecd540=55 56 mustard #ffdb58=56 57 gold #ffd700=57 58 egg yolk #fee33e=58 59 rubber duck #fbe108=59 } greens={ 60 lime #00ff00=60 61 apple green #8db600=61 62 Operators #62c213=62 63 forest green #228b22=63 64 green #008000=64 65 dark green #006400=65 66 dark pastel green #03c03c=66 67 emerald #50c878=67 68 mint #3eb489=68 69 Pen #00a178=69 } cyans={ 70 aqua (cyan) #00ffff=70 71 dark cyan #008b8b=71 72 cerulean #007ba7=72 73 iceberg #71a6d2=73 74 Sensing #0494dc=74 75 teal #008080=75 76 light sky blue #87cefa=76 77 deep sky blue #00bfff=77 78 dodger blue #1e90ff=78 79 azure #007fff=79 } blues={ 80 blue #0000ff=80 81 midnight blue #191970=81 82 dark powder blue #003399=82 83 cobalt #0047ab=83 84 denim #1560bd=84 85 navy blue #000080=85 86 steel blue #4682b4=86 87 Motion #4a6cd4=87 88 cornflower #6495ed=88 89 slate blue #6a5acd=89 } purples={ 90 violet #8000ff=90 91 Looks #8f56e3=91 92 grape #6f2da8=92 93 indigo #4b0082=93 94 x11 purple #a020f0=94 95 magenta (fuchia) #ff00ff=95 96 dark orchid #9932cc=96 97 Sound #cf4ad9=97 98 purple #7f007f=98 99 dark magenta #8b008b=99 }✐ last set ascrayon✐ fair?false1231
Takes three inputs for red, green, and blue values, each between 0 and 255. 0,0,0 is black; 255,255,255 is white. 255,255,0 is yellow, and so on. The SET PEN block in this library lets you set individual red, green, or blue without changing the others, lets you provide a list of three RGB color components, and lets you provide a six-digit hexadecimal number, the form in which RGB color values are usually found online. See Appendix A of the Snap! Reference Manual for details.
pt:altera a cor da tua caneta para vermelho _ , verde _ e azul _ (0 a 255) 25500
Takes three inputs for hue, saturation, and value ("brightness") values, each between 0 and 1. 0,0,0 is black; 0,0,1 is white. 0.15,1,1 is yellow, and so on. The SET PEN block in this library lets you set individual hue, saturation, or value without changing the others, lets you provide a list of three HSV color components, and lets you use the very much superior HSL (hue, saturation, lightness) color space. See Appendix A of the Snap! Reference Manual for details.
pt:altera a cor da caneta para matiz _ , saturação _ e brilho _ (0 a 1) 0.30.70.6
Reports the current pen color as a list of three RGB values in the range 0-255. The PEN block in this library provides a large set of ways to examine the color. See Appendix A in the Snap! Reference Manual for details.
pt:a cor da caneta em RGB (vermelho, verde e azul; 0 a 255)
Reports the current pen color as a list of three HSV values in the range 0-1. See Appendix A in the Snap! Reference Manual for details.
pt:a cor da caneta em HSV (matiz, saturação e brilho, 0 a 1)
Takes a value from 0 to 15 and reports the corresponding hexadecimal digit. For internal use of the color library.
Don't ask. Only for internal use by the SET PEN block.
truetrue
Creates a bunch of global variables. For internal use by Color library.
global✐ last set as✐ fair?✐ color scale✐ HSL✐ last crayon✐ last X11✐ raw HSL✐ raw HSV✐ X11✐ crayon colors✐ fair hue table✐ colors✐ brights✐ pivots✐ HSV brights✐ HSL brights✐ HSV colors✐ HSL colors✐ X11 catch✐ dimension names✐ dimension dispatch✐ last set asRGB✐ fair?false✐ raw HSV0100100✐ HSL010050✐ raw HSL010050
not a crayon
not an X11 color
11000hues1fair hues00hue101100021000✐ fair hue table10
11
1
smallest componentrgb255
smallest component2rgb255
2Red family8.7Brown/orange family17yellow501427.7522.334green52cyan67blue83.33333333purple9550505left of black
falsehue603.61001003.6100100
hue mod 100, other components cut off at [0, 100]
value100color3.6index1index-1scale1255fromto1newHSVHSL✐ fair?true
color300index15scale15grayscale15255fromto121✐ last set ascolor number✐ fair?true✐ raw HSL10050✐ raw HSV100100
015866161216341656✐ last set asRGB✐ fair?false1
44partial matchestrue4matchhead matchestrueSUBSET throws here if it handles a unique match1
44partial matchesfalse4matchhead matchesfalseSUBSET throws here if it handles a unique match2
015866161216341656
fair hue transparency ~2 (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) } HSL={ hue saturation (HSL) lightness } HSV={ hue saturation (HSV) value (brightness) } RGB (0-255)={ red green blue } }255100We have to do this last test to rule out the vector options, which aren't numbers; their code makes three recursive calls and we catch range issues then.huesaturation (HSV)value (brightness)saturation (HSL)lightnesstransparencyredgreenbluefair huefair saturation (HSV)fair value (brightness)fair saturation (HSL)fair lightness
✐ last set asHSL33✐ fair?false1
✐ last set asRGB✐ fair?false
✐ last set asRGB✐ fair?false
✐ last set asRGB✐ fair?false
✐ last set asRGB✐ fair?false
0
4value0255131✐ last set asRGB✐ fair?false
✐ last set asHSL22✐ fair?false1
✐ last set asHSL✐ HSL11000100✐ raw HSL✐ fair?false1
✐ last set asHSV✐ fair?false✐ raw HSV1310031
100if USED TO BE fairHSL✐ fair?false1
✐ last set asHSL2222✐ fair?true1
✐ last set asHSL3333✐ fair?true1
2313
22✐ last set asHSV✐ fair?true1
33✐ last set asHSV✐ fair?true1
23131
\ No newline at end of file +This block allows you to set the pen's color, transparency (on a scale from 0=opaque to 100=invisible), or size (in pixels). The color can be set in many ways, including RGB values, HSV values, HSL values, fair HSV or HSL (based on a modified spectrum that gives each spectral color equal space and promotes brown to a color), color number, crayon, or X11/W3C color name. See Appendix A in the Snap! Reference Manual for details.
ca:$brush fixa el _ del llapis a _ _ color color number crayon fair hue ~1 size transparency X11/W3C name ~2 (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB(A) vector RGB(A) hex } }§_ext_clr_numbersNote to myself: When the user sets a fair dimension, say fair HSL, variable HSL contains the corresponding "unfair" values, and "raw HSL" contains the numbers the user actually gave. It has to be this way because in the case of HSV, there is no "HSV" variable; rather, we use the pen's actual remembered-by-Javascript color's HSV coordinates. So our HSL variable has to be analogous to that. In both cases "raw" means the numbers the user gave us.
1
HSV✐ raw HSL100HSV100
The identity function reports its input.
This block reports the pen size, color, or transparency, in all the same ways that the SET PEN block allows you to set those pen properties. (It will also report the current crayon number, if the pen color was most recently set with SET PEN TO CRAYON.) See Appendix A of the Snap! Reference Manual for details.
ca:$brush _ del llapis color color number crayon fair hue ~1 size transparency X11/W3C name ~2 (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB vector RGBA vector RGB(A) hex } }huesaturation (HSV)value (brightness)transparencyRGB vectorRGBA vectorredgreenblueRGB(A) hex1616HSV vectorHSL vectorsaturation (HSL)lightnesscolor numbercolorfair huenot setfair saturation (HSL)not setfair lightnessnot setfair HSL vectornot setfair saturation (HSV)2not setfair value (brightness)3not setfair HSV vectornot setcrayonX11/W3C name
Changes any pen property by the specified amount. Some color scales can't be adjusted this way unless the color was first SET using that scale. Vectors (e.g., RGB color as a list of three numbers) can be incremented by a vector as the amount. X11/W3C names can't be incremented.
ca:$brush augmenta _ del llapis en _ color number crayon fair hue ~1 size transparency ~2 (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB vector RGBA vector } }crayonRGB hexI don't know how to handle
pt:lança o erro _
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont3
de:wirf _ ca:llança _ es:lanzar _ fr:lance _ pt:lança _ catchtag
de:ignoriere _ ca:ignora _ es:ignorar _ fr:ignore _ pt:ignora _
combines any number of colors, reporting the result of mixing them, either additively (like colored light beams) or subtractively (like paints). If the result is too bright (additive) or too dark (subtractive), try the "averaged" versions, which will make the brightness more like the brightnesses of the input colors.
ca:$brush barreja colors _ amb criteri _ additive (light) additive (averaged) subtractive (ideal) subtractive (averaged) simulated paint paint (sRGB corrected)waveformssum of weightscombined waveformweighted geometric mean of waveformssum of weightscombined waveformTback to RGBT5.47813E-05 0.000184722 0.000935514 0.003096265 0.009507714 0.017351596 0.022073595 0.016353161 0.002002407 -0.016177731 -0.033929391 -0.046158952 -0.06381706 -0.083911194 -0.091832385 -0.08258148 -0.052950086 -0.012727224 0.037413037 0.091701812 0.147964686 0.181542886 0.210684154 0.210058081 0.181312094 0.132064724 0.093723787 0.057159281 0.033469657 0.018235464 0.009298756 0.004023687 0.002068643 0.00109484 0.000454231 0.000255925-4.65552E-05 -0.000157894 -0.000806935 -0.002707449 -0.008477628 -0.016058258 -0.02200529 -0.020027434 -0.011137726 0.003784809 0.022138944 0.038965605 0.063361718 0.095981626 0.126280277 0.148575844 0.149044804 0.14239936 0.122084916 0.09544734 0.067421931 0.035691251 0.01313278 -0.002384996 -0.009409573 -0.009888983 -0.008379513 -0.005606153 -0.003444663 -0.001921041 -0.000995333 -0.000435322 -0.000224537 -0.000118838 -4.93038E-05 -2.77789E-050.00032594 0.001107914 0.005677477 0.01918448 0.060978641 0.121348231 0.184875618 0.208804428 0.197318551 0.147233899 0.091819086 0.046485543 0.022982618 0.00665036 -0.005816014 -0.012450334 -0.015524259 -0.016712927 -0.01570093 -0.013647887 -0.011317812 -0.008077223 -0.005863171 -0.003943485 -0.002490472 -0.001440876 -0.000852895 -0.000458929 -0.000248389 -0.000129773 -6.41985E-05 -2.71982E-05 -1.38913E-05 -7.35203E-06 -3.05024E-06 -1.71858E-06newsRGBRGB vector255addmax255RGB vector
This block reports a color. The color can be set in many ways, including RGB values, HSV values, HSL values, fair HSV or HSL (based on a modified spectrum that gives each spectral color equal space and promotes brown to a color), color number, crayon, or X11/W3C color name. See Appendix A in the Snap! Reference Manual for details.
ca:$brush color amb _ _ _ color color number crayon fair hue X11/W3C name ~ fair HSL=fair HSL vector fair HSV=fair HSV vector HSL=HSL vector HSV=HSV vector RGB (0-255)=RGB vector RGB hex§_ext_clr_numberscolor numbercolor300index15scale1515255fromto122crayon132X11/W3C nameRGB hexcolorRGB vectorHSV vectorHSL vectorfair HSV vectorindex-1scale1index1color100fair HSL vectorindex-1scale1index1color110050
ca:$brush _ del color _ nearest color number crayon number fair hue ~1 transparency X11/W3C name ~2 (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness fair HSL vector } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) fair HSV vector } HSL={ hue saturation (HSL) lightness HSL vector } HSV={ hue saturation (HSV) value (brightness) HSV vector } RGB (0-255)={ red green blue RGB vector RGBA vector RGB hex } }X11/W3C namenearest color numberrgbhslhsvrgbtransparencytransparencyRGB vectorRGBA vectorRGB hexredgreenbluehsvfalseHSV vectorhuesaturation (HSV)value (brightness)hsltrueHSL vectorsaturation (HSL)lightnessHSLlightnessfair lightness310030.9833.333333330.986.9444444516.944444451.96100fair lightnessfair saturation (HSL)210075.9493610075.949366.9444444516.944444451.96100fair saturation (HSL)fair HSL vectorfair lightness310030.9833.333333330.986.9444444516.944444458.823529100fair lightnessfair saturation (HSL)210075.9493610075.949366.9444444516.944444458.823529100fair saturation (HSL)fair HSL vectorfair hue11111111fair huefair saturation (HSL)fair lightnessfair HSL vectorbrownfair value (brightness)310054.5166.66666666754.516.9444444516.944444451.96100fair value (brightness)fair saturation (HSV)210086.3310086.336.9444444516.944444451.96100fair saturation (HSV)fair HSV vectorfair value (brightness)310054.5166.66666666754.516.9444444516.944444451.96100fair value (brightness)fair saturation (HSV)210086.3310086.336.9444444516.944444451.96100fair saturation (HSV)fair HSV vectorfair hue11111111fair huefair saturation (HSV)fair value (brightness)fair HSV vectorbrownfair somethingCan't get here -- please post project and screenshot to forum.
This block reports the pen color (as a color, not as a list of numbers).
ca:✐ color de llapis actual
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont
de:wirf _ _ ca:llança _ _ es:lanzar _ _ fr:lance _ _ pt:lança _ _ catchtag
Sets the pen color to one of 100 preselected colors, like a box of 100 crayons. The colors have names that are meant to be evocative. They are organized in families, more or less corresponding to spectral (rainbow) colors; the input slot has a two-level menu in which you can hover over a family name to see the colors of that family, each including a crayon number and an RGB value. See Appendix A of the Snap! Reference Manual for more details.
ca:✐ fixa el llapis de color _ _ grays={ 0 black #000000=0 1 gray7 #121212=1 2 gray14 #242424=2 3 gray21 #363636=3 4 gray28 #484848=4 5 gray36 #5c5c5c=5 6 gray43 #6d6d6d=6 7 gray50 #7f7f7f=7 8 gray57 #919191=8 9 gray64 #a3a3a3=9 10 gray71 #b5b5b5=10 11 gray78 #c8c8c8=11 12 gray85 #dadada=12 13 gray92 #ececec=13 14 white #ffffff=14 } pinks={ 15 deep pink #ff1493=15 16 hot pink #ff69b4=16 17 bright pink #ff007f=17 18 raspberry #e30b5d=18 19 amaranth #e52b50=19 } reds={ 20 red #ff0000=20 21 burgundy #900020=21 22 cherry #990000=22 23 dark candy apple red #a40000=23 24 sanguine #c00000=24 25 maroon #800000=25 26 crimson #c90016=26 27 Lists #d94d11=27 28 candy apple red #ff0800=28 29 coquelicot #ff3800=29 } browns={ 30 saddle brown #8b4513=30 31 chocolate #7b3f00=31 32 kobicha #6b4423=32 33 sepia #704214=33 34 chestnut #954535=34 35 dark brown #654321=35 36 brown #964b00=36 37 golden brown #996515=37 38 cinnamon #b87333=38 39 copper #d2691e=39 } oranges={ 40 orange #ff7f00=40 41 Pantone orange #ff5800=41 42 pumpkin #ff7518=42 43 Variables #f3761d=43 44 Spanish orange #e86100=44 45 burnt orange #cc5500=45 46 sinopia #cb410b=46 47 ochre #cc7722=47 48 carrot #ed9121=48 49 tangerine #f28500=49 } yellows={ 50 yellow #ffff00=50 51 Control #e6a822=51 52 dark goldenrod #b8860b=52 53 goldenrod #daa520=53 54 saffron #f4c430=54 55 sandstorm #ecd540=55 56 mustard #ffdb58=56 57 gold #ffd700=57 58 egg yolk #fee33e=58 59 rubber duck #fbe108=59 } greens={ 60 lime #00ff00=60 61 apple green #8db600=61 62 Operators #62c213=62 63 forest green #228b22=63 64 green #008000=64 65 dark green #006400=65 66 dark pastel green #03c03c=66 67 emerald #50c878=67 68 mint #3eb489=68 69 Pen #00a178=69 } cyans={ 70 aqua (cyan) #00ffff=70 71 dark cyan #008b8b=71 72 cerulean #007ba7=72 73 iceberg #71a6d2=73 74 Sensing #0494dc=74 75 teal #008080=75 76 light sky blue #87cefa=76 77 deep sky blue #00bfff=77 78 dodger blue #1e90ff=78 79 azure #007fff=79 } blues={ 80 blue #0000ff=80 81 midnight blue #191970=81 82 dark powder blue #003399=82 83 cobalt #0047ab=83 84 denim #1560bd=84 85 navy blue #000080=85 86 steel blue #4682b4=86 87 Motion #4a6cd4=87 88 cornflower #6495ed=88 89 slate blue #6a5acd=89 } purples={ 90 violet #8000ff=90 91 Looks #8f56e3=91 92 grape #6f2da8=92 93 indigo #4b0082=93 94 x11 purple #a020f0=94 95 magenta (fuchia) #ff00ff=95 96 dark orchid #9932cc=96 97 Sound #cf4ad9=97 98 purple #7f007f=98 99 dark magenta #8b008b=99 }✐ last set ascrayon✐ fair?false1231
Takes three inputs for red, green, and blue values, each between 0 and 255. 0,0,0 is black; 255,255,255 is white. 255,255,0 is yellow, and so on. The SET PEN block in this library lets you set individual red, green, or blue without changing the others, lets you provide a list of three RGB color components, and lets you provide a six-digit hexadecimal number, the form in which RGB color values are usually found online. See Appendix A of the Snap! Reference Manual for details.
pt:altera a cor da tua caneta para vermelho _ , verde _ e azul _ (0 a 255) ca:fixa el llapis al color r: _ g: _ b: _ 25500
Takes three inputs for hue, saturation, and value ("brightness") values, each between 0 and 1. 0,0,0 is black; 0,0,1 is white. 0.15,1,1 is yellow, and so on. The SET PEN block in this library lets you set individual hue, saturation, or value without changing the others, lets you provide a list of three HSV color components, and lets you use the very much superior HSL (hue, saturation, lightness) color space. See Appendix A of the Snap! Reference Manual for details.
pt:altera a cor da caneta para matiz _ , saturação _ e brilho _ (0 a 1) ca:fixa el llapis al color h: _ s: _ v: _ 0.30.70.6
Reports the current pen color as a list of three RGB values in the range 0-255. The PEN block in this library provides a large set of ways to examine the color. See Appendix A in the Snap! Reference Manual for details.
pt:a cor da caneta em RGB (vermelho, verde e azul; 0 a 255)
Reports the current pen color as a list of three HSV values in the range 0-1. See Appendix A in the Snap! Reference Manual for details.
pt:a cor da caneta em HSV (matiz, saturação e brilho, 0 a 1)
Takes a value from 0 to 15 and reports the corresponding hexadecimal digit. For internal use of the color library.
Don't ask. Only for internal use by the SET PEN block.
truetrue
Creates a bunch of global variables. For internal use by Color library.
global✐ last set as✐ fair?✐ color scale✐ HSL✐ last crayon✐ last X11✐ raw HSL✐ raw HSV✐ X11✐ crayon colors✐ fair hue table✐ colors✐ brights✐ pivots✐ HSV brights✐ HSL brights✐ HSV colors✐ HSL colors✐ X11 catch✐ dimension names✐ dimension dispatch✐ last set asRGB✐ fair?false✐ raw HSV0100100✐ HSL010050✐ raw HSL010050
not a crayon
not an X11 color
11000hues1fair hues00hue101100021000✐ fair hue table10
11
1
smallest componentrgb255
smallest component2rgb255
2Red family8.7Brown/orange family17yellow501427.7522.334green52cyan67blue83.33333333purple9550505left of black
falsehue603.61001003.6100100
hue mod 100, other components cut off at [0, 100]
value100color3.6index1index-1scale1255fromto1newHSVHSL✐ fair?true
color300index15scale15grayscale15255fromto121✐ last set ascolor number✐ fair?true✐ raw HSL10050✐ raw HSV100100
015866161216341656✐ last set asRGB✐ fair?false1
44partial matchestrue4matchhead matchestrueSUBSET throws here if it handles a unique match1
44partial matchesfalse4matchhead matchesfalseSUBSET throws here if it handles a unique match2
015866161216341656
fair hue transparency ~2 (3D color spaces)={ fair HSL={ fair hue fair saturation (HSL) fair lightness } fair HSV={ fair hue fair saturation (HSV) fair value (brightness) } HSL={ hue saturation (HSL) lightness } HSV={ hue saturation (HSV) value (brightness) } RGB (0-255)={ red green blue } }255100We have to do this last test to rule out the vector options, which aren't numbers; their code makes three recursive calls and we catch range issues then.huesaturation (HSV)value (brightness)saturation (HSL)lightnesstransparencyredgreenbluefair huefair saturation (HSV)fair value (brightness)fair saturation (HSL)fair lightness
✐ last set asHSL33✐ fair?false1
✐ last set asRGB✐ fair?false
✐ last set asRGB✐ fair?false
✐ last set asRGB✐ fair?false
✐ last set asRGB✐ fair?false
0
4value0255131✐ last set asRGB✐ fair?false
✐ last set asHSL22✐ fair?false1
✐ last set asHSL✐ HSL11000100✐ raw HSL✐ fair?false1
✐ last set asHSV✐ fair?false✐ raw HSV1310031
100if USED TO BE fairHSL✐ fair?false1
✐ last set asHSL2222✐ fair?true1
✐ last set asHSL3333✐ fair?true1
2313
22✐ last set asHSV✐ fair?true1
33✐ last set asHSV✐ fair?true1
23131
pt:o texto multilinha _
Reports the part of the first string up to the first instance of the second string inside it. If the second string isn't found, reports the entire first string.
pt:o texto de _ antes de _
Reports the portion of the first input string starting after the first occurrence of the second string. If the second string isn't found in the first string, reports an empty string.
pt:o texto de _ depois de _
Reports the character position (starting from 1) of the beginning of the first input string inside the second input string. If it's not found, reports 0.
pt:a posição de _ em _
If input is TRUE, comparisons made by functions in the string library will be case-independent (so "FOO" = "foo"). This is the default. If input is FALSE, comparisons will be exact.
pt:altera comparações ignorando distinção minúsculas/maiúsculas para _
Reports the portion of the first input (string) starting at the position given by the second input (counting from 1, like LETTER n OF) and ending at the position given by the third input (also counting from 1). If the third input is empty, reports the portion from the first position to the end of the string. If a position number is negative, counts from the end backward, so -1 is the last character, -2 is the next to last, etc.
pt:o texto de _ entre as posições _ e _ , inclusive
Reports True if the first input string contains the second input string, otherwise false. Comparison is case-independent by default; use USE CASE-INDEPENDENT COMPARISONS to change that.
pt:o texto de _ antes de _
Reports the input text with lower case letters instead of capital letters in the input. Uses the user's locale's rules for case conversion.
pt:em minúsculas _
err_reset
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 'names' list). If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.
pt:cria as variáveis _ _ ca:crea les _ variables _ es:crear las _ variables _ de:erstellen _ var _ globalglobal sprite script
This block reports "true" if there is a variable with this given name (input slot) in that context. It can be a global, sprite or script variable. Otherwise it reports "false".
pt:a variável _ existe ca:existeix la variable _ ? es:existe la variable _ ? de:existiert var _ ? err_reset
\ No newline at end of file diff --git a/libraries/crayons.xml b/libraries/crayons.xml new file mode 100644 index 00000000..21eb6521 --- /dev/null +++ b/libraries/crayons.xml @@ -0,0 +1 @@ +Sets the pen color to one of 100 preselected colors, like a box of 100 crayons. The colors have names that are meant to be evocative. They are organized in families, more or less corresponding to spectral (rainbow) colors; the input slot has a two-level menu in which you can hover over a family name to see the colors of that family, each including a crayon number and an RGB value. See Appendix A of the Snap! Reference Manual for more details.
ca:fixa el llapis de color _ grays={ 0 black #000000=0 1 gray7 #121212=1 2 gray14 #242424=2 3 gray21 #363636=3 4 gray28 #484848=4 5 gray36 #5c5c5c=5 6 gray43 #6d6d6d=6 7 gray50 #7f7f7f=7 8 gray57 #919191=8 9 gray64 #a3a3a3=9 10 gray71 #b5b5b5=10 11 gray78 #c8c8c8=11 12 gray85 #dadada=12 13 gray92 #ececec=13 14 white #ffffff=14 } pinks={ 15 deep pink #ff1493=15 16 hot pink #ff69b4=16 17 bright pink #ff007f=17 18 raspberry #e30b5d=18 19 amaranth #e52b50=19 } reds={ 20 red #ff0000=20 21 burgundy #900020=21 22 cherry #990000=22 23 dark candy apple red #a40000=23 24 sanguine #c00000=24 25 maroon #800000=25 26 crimson #c90016=26 27 Lists #d94d11=27 28 candy apple red #ff0800=28 29 coquelicot #ff3800=29 } browns={ 30 saddle brown #8b4513=30 31 chocolate #7b3f00=31 32 kobicha #6b4423=32 33 sepia #704214=33 34 chestnut #954535=34 35 dark brown #654321=35 36 brown #964b00=36 37 golden brown #996515=37 38 cinnamon #b87333=38 39 copper #d2691e=39 } oranges={ 40 orange #ff7f00=40 41 Pantone orange #ff5800=41 42 pumpkin #ff7518=42 43 Variables #f3761d=43 44 Spanish orange #e86100=44 45 burnt orange #cc5500=45 46 sinopia #cb410b=46 47 ochre #cc7722=47 48 carrot #ed9121=48 49 tangerine #f28500=49 } yellows={ 50 yellow #ffff00=50 51 Control #e6a822=51 52 dark goldenrod #b8860b=52 53 goldenrod #daa520=53 54 saffron #f4c430=54 55 sandstorm #ecd540=55 56 mustard #ffdb58=56 57 gold #ffd700=57 58 egg yolk #fee33e=58 59 rubber duck #fbe108=59 } greens={ 60 lime #00ff00=60 61 apple green #8db600=61 62 Operators #62c213=62 63 forest green #228b22=63 64 green #008000=64 65 dark green #006400=65 66 dark pastel green #03c03c=66 67 emerald #50c878=67 68 mint #3eb489=68 69 Pen #00a178=69 } cyans={ 70 aqua (cyan) #00ffff=70 71 dark cyan #008b8b=71 72 cerulean #007ba7=72 73 iceberg #71a6d2=73 74 Sensing #0494dc=74 75 teal #008080=75 76 light sky blue #87cefa=76 77 deep sky blue #00bfff=77 78 dodger blue #1e90ff=78 79 azure #007fff=79 } blues={ 80 blue #0000ff=80 81 midnight blue #191970=81 82 dark powder blue #003399=82 83 cobalt #0047ab=83 84 denim #1560bd=84 85 navy blue #000080=85 86 steel blue #4682b4=86 87 Motion #4a6cd4=87 88 cornflower #6495ed=88 89 slate blue #6a5acd=89 } purples={ 90 violet #8000ff=90 91 Looks #8f56e3=91 92 grape #6f2da8=92 93 indigo #4b0082=93 94 x11 purple #a020f0=94 95 magenta (fuchia) #ff00ff=95 96 dark orchid #9932cc=96 97 Sound #cf4ad9=97 98 purple #7f007f=98 99 dark magenta #8b008b=99 }123
Takes three inputs for red, green, and blue values, each between 0 and 255. 0,0,0 is black; 255,255,255 is white. 255,255,0 is yellow, and so on. The SET PEN block in this library lets you set individual red, green, or blue without changing the others, lets you provide a list of three RGB color components, and lets you provide a six-digit hexadecimal number, the form in which RGB color values are usually found online. See Appendix A of the Snap! Reference Manual for details.
pt:altera a cor da tua caneta para vermelho _ , verde _ e azul _ (0 a 255) 25500
Creates a bunch of global variables. For internal use by Color library.
global✐ last crayon✐ crayon colors
ca:canvia de llapis de color saltant _
pt:lança o erro _
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 'names' list). If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.
pt:cria as variáveis _ _ ca:crea les _ variables _ es:crear las _ variables _ de:erstellen _ var _ globalglobal sprite script
This block reports "true" if there is a variable with this given name (input slot) in that context. It can be a global, sprite or script variable. Otherwise it reports "false".
pt:a variável _ existe ca:existeix la variable _ ? es:existe la variable _ ? de:existiert var _ ? err_reset
pt:o texto multilinha _
ca:llapis de color
\ No newline at end of file diff --git a/libraries/frequency_distribution_module.xml b/libraries/frequency_distribution_module.xml index c1e2e4dd..2a757dfe 100644 --- a/libraries/frequency_distribution_module.xml +++ b/libraries/frequency_distribution_module.xml @@ -1 +1 @@ -returns a frequency analysis of the argument list, represented as a two-column table, where the first column contains the unique values and the second column their occurrences
pt:$flash as frequências dos itens de _
pt:o agrupamento dos itens de _ de acordo com _
pt:uma ordenação de _ com critério _
pt:o histograma de _ entre _ e _ com intervalo _ 1
pt:o histograma de _ agrupado de acordo com _ entre _ e _ com passo _
add missing entries to a sorted list. Used for histograms
pt:os itens de _ com a chave _ entre _ e _ com passo _ completados por _ 11
pt:a aplicação a _ de _ 1
pt:_ em minúsculas
pt:desenha gráfico de barras de _ em (x: _ , y: _ ) com largura _ e altura _ barsbars lines pie chart-200-10040020022100startsettingratio1step2lines
\ No newline at end of file +returns a frequency analysis of the argument list, represented as a two-column table, where the first column contains the unique values and the second column their occurrences
pt:$flash as frequências dos itens de _ ca:$flash analitza _
pt:o agrupamento dos itens de _ de acordo com _ ca:$flash agrupa _ per _
pt:uma ordenação de _ com critério _ ca:$flash ordena _ per _
pt:o histograma de _ entre _ e _ com intervalo _ ca:histograma de _ des de: _ fins: _ interval: _ 1
pt:o histograma de _ agrupado de acordo com _ entre _ e _ com passo _ ca:histograma de _ agrupat per: _ des de: _ fins: _ interval: _
add missing entries to a sorted list. Used for histograms
pt:os itens de _ com a chave _ entre _ e _ com passo _ completados por _ ca:omple _ clau: _ des de: _ fins: _ interval: _ amplada: _ 11
pt:_ em minúsculas ca:_ $arrowRight minúscules
pt:desenha gráfico de barras de _ em (x: _ , y: _ ) com largura _ e altura _ ca:dibuixa _ _ a x: _ y: _ i ample: _ alçada: _ barsbars lines pie chart-200-10040020022100startsettingratio1step2lines
pt:a aplicação a _ de _ ca:canalitza _ $arrowRight _ 1
\ No newline at end of file diff --git a/libraries/httpBlocks.xml b/libraries/httpBlocks.xml index 56708ecd..052efb75 100644 --- a/libraries/httpBlocks.xml +++ b/libraries/httpBlocks.xml @@ -1 +1 @@ -
pt:os dados JSON _ em formato de lista
pt:o valor com chave _ em _
pt:a resposta a _ de _ enviando _ e cabeçalhos _ GETGET POST PUT DELETEhttps://snap.berkeley.edu
pt:um par (chave: _ , valor: _ )
Reports a three-item list containing the latitude and longitude of the user, and the precision of the measurements. Works only if the user allows snap.berkeley.edu access to location data. Some browsers also require an HTTPS connection to Snap!.
pt:a localização actual do dispositivo
\ No newline at end of file +
pt:os dados JSON _ em formato de lista
pt:o valor com chave _ em _
pt:a resposta a _ de _ enviando _ e cabeçalhos _ GETGET POST PUT DELETEhttps://snap.berkeley.edu
pt:um par (chave: _ , valor: _ )
Reports a three-item list containing the latitude and longitude of the user, and the precision of the measurements. Works only if the user allows snap.berkeley.edu access to location data. Some browsers also require an HTTPS connection to Snap!.
pt:a localização actual do dispositivo
\ No newline at end of file diff --git a/libraries/iteration-composition.xml b/libraries/iteration-composition.xml index e320c206..3f4cfd46 100644 --- a/libraries/iteration-composition.xml +++ b/libraries/iteration-composition.xml @@ -1 +1 @@ -
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont
de:wirf _ ca:llança _ es:lanzar _ fr:lance _ pt:lança _ catchtag
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont
de:wirf _ _ ca:llança _ _ es:lanzar _ _ fr:lance _ _ pt:lança _ _ catchtag
This is a breakpoint block, to be used in debugging. The Boolean input specifies the condition under which the program should pause. (Use True for an unconditional breakpoint.) The intent is that the script should have SHOW VARIABLE blocks for the process's local variables. After the pause, this block automatically hides all temporary variables.
de:falls _ dann _ und pause $pause-1-255-220-0 ca:si _ fes _ i atura-ho tot $pause-1-255-220-0 es:si _ haz _ y páralo todo $pause-1-255-220-0 fr:si _ faire _ et mettre tout en pause $pause-1-255-220-0 pt:se _ , então _ e faz pausa em tudo $pause-1-255-220-0
This block does nothing. Use it when you are calling a reporter for its side effect and don't care about its return value.
de:ignoriere _ ca:ignora _ es:ignorar _ fr:ignore _ pt:ignora _
Call f(f(f(...(f(x))))) n times where the three input slots are n, f, and x from left to right. The # variable can be used inside f to represent how many times f has been called.
pt:o resultado de _ invocações em cascata de _ com argumento inicial _ _
Call f(f(f(...(f(x))))) until condition is true, where the three input slots are condition, f, and x from left to right. The # variable can be used inside f or condition to indicate how many times f has been called.
pt:o resultado da invocação em cascata até que _ de _ com argumento inicial _ _
Returns the function x↦f(g(x)) where f and g are the two inputs.
pt:a composição de _ com _
Like the built-in REPEAT UNTIL block, except that the ending condition is not tested until the script has been run the first time. So the script is run at least once.
pt:repete _ até que _ $loop-0.7
Run the script repeatedly, as long as the given condition is true. Runs the script at least once before testing the condition.
pt:repete _ enquanto _ $loop-0.7
Runs the script repeatedly, as long as the condition is true. Tests the condition before the first time the script is run. Like the built in REPEAT UNTIL except that in this block the condition must be true, not false.
pt:enquanto _ , repete _ $loop-0.7
Runs the script the specified number of times, like the built-in REPEAT block, but this one provides the # variable that can be used inside the script. Try REPEAT (200) MOVE (#) STEPS RIGHT 92 with the pen down.
pt:repete _ vezes _ _ $loop-0.7
The primitive FOR block uses an implicit step of ±1 depending on which of the starting and ending values is larger. This version allows you to provide an explicit step value. If the sign of the step input is incompatible with the ordering of the starting and ending values, the script will not be run at all.
pt:para _ de _ com passo _ a _ _ $loop-0.7 1110
Provides LOOP as a function of one input that runs the body of the LET with A set to the function input, so the body can run itself recursively. See COPY block in Variables for an example of use.
pt:tendo _ o valor inicial _ , executa _ definido como _ new value
The inputs are a starting value and one or more monadic functions. The first function is called with the starting value as its input. The second function is called with the value reported by the first function as its input, and so on. PIPE reports the value reported by the last function. PIPE provides an alternative notation for function composition instead of the usual nesting. nested acronym: report (combine (keep items (capital-letter? ( )) from (map (letter (1) of ( )) over (sentence→list (phrase)))) using (join ( ) ( ))) piped acronym: report (pipe (phrase) → (sentence→list ( )) (map (letter (1) of ( )) over ( )) (keep items (capital-letter? ( )) from ( )) (combine ( ) using (join ( ) ( ))) Some people find PIPE easier to read because the functions are called in the same order in which you read them, whereas in nested composition the innermost function is called first.
pt:a aplicação a _ de _ 1
\ No newline at end of file +
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont
de:wirf _ ca:llança _ es:lanzar _ fr:lance _ pt:lança _ catchtag
de:fange _ _ ca:agafa _ _ es:atrapar _ _ fr:attrape _ _ pt:captura _ _ cont
de:wirf _ _ ca:llança _ _ es:lanzar _ _ fr:lance _ _ pt:lança _ _ catchtag
This is a breakpoint block, to be used in debugging. The Boolean input specifies the condition under which the program should pause. (Use True for an unconditional breakpoint.) The intent is that the script should have SHOW VARIABLE blocks for the process's local variables. After the pause, this block automatically hides all temporary variables.
de:falls _ dann _ und pause $pause-1-255-220-0 ca:si _ fes _ i atura-ho tot $pause-1-255-220-0 es:si _ haz _ y páralo todo $pause-1-255-220-0 fr:si _ faire _ et mettre tout en pause $pause-1-255-220-0 pt:se _ , então _ e faz pausa em tudo $pause-1-255-220-0
This block does nothing. Use it when you are calling a reporter for its side effect and don't care about its return value.
de:ignoriere _ ca:ignora _ es:ignorar _ fr:ignore _ pt:ignora _
Call f(f(f(...(f(x))))) n times where the three input slots are n, f, and x from left to right. The # variable can be used inside f to represent how many times f has been called.
pt:o resultado de _ invocações em cascata de _ com argumento inicial _ _ ca:en cascada _ vegades _ _ _
Call f(f(f(...(f(x))))) until condition is true, where the three input slots are condition, f, and x from left to right. The # variable can be used inside f or condition to indicate how many times f has been called.
pt:o resultado da invocação em cascata até que _ de _ com argumento inicial _ _ ca:en cascada fins _ _ _ _
Returns the function x↦f(g(x)) where f and g are the two inputs.
pt:a composição de _ com _ ca:composa _ _
Like the built-in REPEAT UNTIL block, except that the ending condition is not tested until the script has been run the first time. So the script is run at least once.
pt:repete _ até que _ $loop-0.7 ca:repeteix _ fins _
Run the script repeatedly, as long as the given condition is true. Runs the script at least once before testing the condition.
pt:repete _ enquanto _ $loop-0.7 ca:repeteix _ mentre _
Runs the script repeatedly, as long as the condition is true. Tests the condition before the first time the script is run. Like the built in REPEAT UNTIL except that in this block the condition must be true, not false.
pt:enquanto _ , repete _ $loop-0.7
Runs the script the specified number of times, like the built-in REPEAT block, but this one provides the # variable that can be used inside the script. Try REPEAT (200) MOVE (#) STEPS RIGHT 92 with the pen down.
pt:repete _ vezes _ _ $loop-0.7 ca:repeteix _ _ _
The primitive FOR block uses an implicit step of ±1 depending on which of the starting and ending values is larger. This version allows you to provide an explicit step value. If the sign of the step input is incompatible with the ordering of the starting and ending values, the script will not be run at all.
pt:para _ de _ com passo _ a _ _ $loop-0.7 ca:per _ = _ incrementant _ fins _ _ 1110
Provides LOOP as a function of one input that runs the body of the LET with A set to the function input, so the body can run itself recursively. See COPY block in Variables for an example of use.
pt:tendo _ o valor inicial _ , executa _ definido como _ ca:fes que _ sigui _ al _ _ new value
The inputs are a starting value and one or more monadic functions. The first function is called with the starting value as its input. The second function is called with the value reported by the first function as its input, and so on. PIPE reports the value reported by the last function. PIPE provides an alternative notation for function composition instead of the usual nesting. nested acronym: report (combine (keep items (capital-letter? ( )) from (map (letter (1) of ( )) over (sentence→list (phrase)))) using (join ( ) ( ))) piped acronym: report (pipe (phrase) → (sentence→list ( )) (map (letter (1) of ( )) over ( )) (keep items (capital-letter? ( )) from ( )) (combine ( ) using (join ( ) ( ))) Some people find PIPE easier to read because the functions are called in the same order in which you read them, whereas in nested composition the innermost function is called first.
pt:a aplicação a _ de _ ca:canalitza _ $arrowRight _ 1
\ No newline at end of file diff --git a/libraries/list-utilities.xml b/libraries/list-utilities.xml index 0fb1a727..cdeeaa76 100644 --- a/libraries/list-utilities.xml +++ b/libraries/list-utilities.xml @@ -1 +1 @@ -Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the first one is kept in the result.
ca:elimina els duplicats de _ 1
Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot. For a list of numbers, using < as the comparison function will sort from low to high; using > will sort from high to low.
ca:ordena _ segons criteri _ copy of datasplitmerge11#1#2
The second input is an "association list," a list of two-item lists. Each of those smaller lists has a "key" as its first item and a "value" as its second. ASSOC reports the first key-value pair in the association list whose key matches the first input.
ca:associació _ _ 11
This block carries out the given script for each item of the given list, like the primitive FOR EACH. What's different is that it provides the # variable, which will contain the item number in the list of each item in turn, 1 while processing item 1, and so on.
ca:_ per cada _ de _ _
1
Takes a (possibly deep) list as input, and reports a human-readable text form of the list (namely, Lisp notation). Will not work on circular lists.
( )
SENTENCE is the main constructor for sentences, represented as lists of words. It takes zero or more inputs, each of which can be either a list or a text string. If a list, the input is assumed to be a list of words. If a text string, it is converted to a list of words using SENTENCE→LIST. Then all the lists of words are appended to form a new list of words. If the inputs are lists of lists rather than lists of words, SENTENCE, like APPEND, does only one level of flattening, reporting a list of all the items of all the input lists.
ZIP takes any number of lists as inputs. The lists should all be the same length. ZIP reports a list of lists in which the first item is a list of all the first items, the second item is a list of all the second items, etc. Viewing the inputs as the rows of a matrix, ZIP reports its transpose.
1
The identity function reports its input.
Takes as input a function of N inputs and N lists. The function is called with item 1 of all the lists as its inputs, with item 2 of all the lists as its inputs, and so on. (The lists should all be the same length.)
Takes a sentence in text string form and reports the sentence as a list of its words.
de:Satz $arrowRight Liste _ ca:frase $arrowRight llista _ es:frase $arrowRight lista _ fr:phrase $arrowRight liste _ pt:uma lista com as palavras da frase _
\ No newline at end of file +Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the last one is kept in the result.
ca:elimina els duplicats de _
Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot. For a list of numbers, using < as the comparison function will sort from low to high; using > will sort from high to low.
ca:ordena _ segons criteri _
The second input is an "association list," a list of two-item lists. Each of those smaller lists has a "key" as its first item and a "value" as its second. ASSOC reports the first key-value pair in the association list whose key matches the first input.
ca:associació _ _
This block carries out the given script for each item of the given list, like the primitive FOR EACH. What's different is that it provides the # variable, which will contain the item number in the list of each item in turn, 1 while processing item 1, and so on.
ca:_ per cada _ de _ _
1
Takes a (possibly deep) list as input, and reports a human-readable text form of the list (namely, Lisp notation). Will not work on circular lists.
ca:notació textual de _ ( )
SENTENCE is the main constructor for sentences, represented as lists of words. It takes zero or more inputs, each of which can be either a list or a text string. If a list, the input is assumed to be a list of words. If a text string, it is converted to a list of words using SENTENCE→LIST. Then all the lists of words are appended to form a new list of words. If the inputs are lists of lists rather than lists of words, SENTENCE, like APPEND, does only one level of flattening, reporting a list of all the items of all the input lists.
ca:frase _
ZIP takes any number of lists as inputs. The lists should all be the same length. ZIP reports a list of lists in which the first item is a list of all the first items, the second item is a list of all the second items, etc. Viewing the inputs as the rows of a matrix, ZIP reports its transpose.
The identity function reports its input.
Takes as input a function of N inputs and N lists. The function is called with item 1 of all the lists as its inputs, with item 2 of all the lists as its inputs, and so on. (The lists should all be the same length.)
ca:multi-mapeja _ sobre _
Takes a sentence in text string form and reports the sentence as a list of its words.
de:Satz $arrowRight Liste _ ca:frase $arrowRight llista _ es:frase $arrowRight lista _ fr:phrase $arrowRight liste _ pt:uma lista com as palavras da frase _
\ No newline at end of file diff --git a/libraries/localstorage_module.xml b/libraries/localstorage_module.xml index a0afa84c..1c607623 100644 --- a/libraries/localstorage_module.xml +++ b/libraries/localstorage_module.xml @@ -1 +1 @@ -
Reports the value previously stored under the input key in the browser's local storage. Reports False if the key is not found.
\ No newline at end of file +
ca:desa clau: _ amb valor: _ al navegador
ca:dades desades al navegador
ca:esborra clau: _ del navegador
ca:esborra dades del navegador
Reports the value previously stored under the input key in the browser's local storage. Reports False if the key is not found.
ca:obté valor de clau: _ al navegador
\ No newline at end of file diff --git a/libraries/make-variables.xml b/libraries/make-variables.xml index af2ddf02..cd49aabe 100644 --- a/libraries/make-variables.xml +++ b/libraries/make-variables.xml @@ -1 +1 @@ -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 'names' list). If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.
pt:cria as variáveis _ _ ca:crea les _ variables _ es:crear las _ variables _ de:erstellen _ var _ globalglobal sprite scripteach itemvar ide = this.parentThatIsA(IDE_Morph); ide.flushBlocksCache('variables'); // b/c of inheritance ide.refreshPalette();
This block deletes all the variables with the names given (inside input list). Each name will make only one variable deletion, and this will be the variable found following the scope order: 'script' -> 'sprite' -> 'global'. If we have a "testing" sprite variable and also a "testing" global one, deleting "testing" will delete only the sprite one (Yes! we can also do "delete var (testing, testing)" to delete both. 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 "does var (name) exists?"block.
pt:remove as variáveis _ ca:esborra les variables _ es:borrar variables _ de:löschen var _ var ide = this.parentThatIsA(IDE_Morph); ide.flushBlocksCache('variables'); // b/c of inheritance ide.refreshPalette();
This block sets the given value (last input) to the variable named with the name givent (var input). It looks for that variable following the scope order 'script' -> 'sprite' -> 'global' (the first match it finds). If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the "does var (name) exists?" block.
ca:assigna a _ el valor _ es:asignar a _ el valor _ pt:altera _ para _ de:setze var _ auf _ §_getVarNamesDict
This block reports the value of the variable with the name given. It looks for that variable following the scope order 'script' -> 'sprite' -> 'global' (the first match it finds). If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the "does var (name) exists?" block.
pt:o valor de _ §_getVarNamesDict
This block reports "true" if there is a variable with this given name (input slot) in that context. It can be a global, sprite or script variable. Otherwise it reports "false".
pt:a variável _ existe ca:existeix la variable _ ? es:existe la variable _ ? de:existiert var _ ?
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). It can only access to the closest variable scope (if there different variables with the same name in different scopes) following the order 'script' -> 'sprite' -> 'global'. No errors if that variable does not exist.
ca:mostra la variable _ es:mostrar variable _ pt:mostra a variável _ de:zeige var _ §_getVarNamesDict
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). It can only access to the closest variable scope (if there different variables with the same name in different scopes) following the order 'script' -> 'sprite' -> 'global'. No errors if that variable does not exist.
ca:amaga la variable _ es:esconder variable _ pt:esconde a variável _ de:verstecke var _ §_getVarNamesDict
\ No newline at end of file +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 'names' list). If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.
pt:cria as variáveis _ _ ca:crea les _ variables _ es:crear las _ variables _ de:erstellen _ var _ globalglobal sprite script
This block deletes all the variables with the names given (inside input list). Each name will make only one variable deletion, and this will be the variable found following the scope order: 'script' -> 'sprite' -> 'global'. If we have a "testing" sprite variable and also a "testing" global one, deleting "testing" will delete only the sprite one (Yes! we can also do "delete var (testing, testing)" to delete both. 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 "does var (name) exists?"block.
pt:remove as variáveis _ ca:esborra les variables _ es:borrar variables _ de:löschen var _
This block sets the given value (last input) to the variable named with the name givent (var input). It looks for that variable following the scope order 'script' -> 'sprite' -> 'global' (the first match it finds). If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the "does var (name) exists?" block.
ca:assigna a _ el valor _ es:asignar a _ el valor _ pt:altera _ para _ de:setze var _ auf _ §_getVarNamesDict
This block reports the value of the variable with the name given. It looks for that variable following the scope order 'script' -> 'sprite' -> 'global' (the first match it finds). If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the "does var (name) exists?" block.
pt:o valor de _ §_getVarNamesDict
This block reports "true" if there is a variable with this given name (input slot) in that context. It can be a global, sprite or script variable. Otherwise it reports "false".
pt:a variável _ existe ca:existeix la variable _ ? es:existe la variable _ ? de:existiert var _ ? err_reset
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). It can only access to the closest variable scope (if there different variables with the same name in different scopes) following the order 'script' -> 'sprite' -> 'global'. No errors if that variable does not exist.
ca:mostra la variable _ es:mostrar variable _ pt:mostra a variável _ de:zeige var _ §_getVarNamesDict
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). It can only access to the closest variable scope (if there different variables with the same name in different scopes) following the order 'script' -> 'sprite' -> 'global'. No errors if that variable does not exist.
ca:amaga la variable _ es:esconder variable _ pt:esconde a variável _ de:verstecke var _ §_getVarNamesDict
\ No newline at end of file diff --git a/libraries/maps_module.xml b/libraries/maps_module.xml index 6f48b042..57c6676e 100644 --- a/libraries/maps_module.xml +++ b/libraries/maps_module.xml @@ -1 +1 @@ -
de:$globe zeige aktuellen Standort pt:mostra a localização corrente do dispositivo no $globe ca:$globe centra a la meva ubicació
de:$globe Zoom pt:o zoom do $globe ca:$globe zoom
de:setze $globe Zoom auf _ pt:altera o zoom do $globe para _ ca:$globe fixa el zoom a _ 10
de:$globe Längengrad von x _ pt:a longitude no $globe da coordenada x _ ca:$globe longitud per a x _ 0
de:$globe Breitengrad von y _ pt:a latitude no $globe da coordenada y _ ca:$globe latitud per a y _ 0
de:setze $globe auf Länge: _ Breite: _ pt:altera a posição no $globe para (longitude: _ , latitude: _ ) ca:$globe centra a longitud: _ latitud: _ -122.25785237.872099
de:y von $globe Breitengrad _ pt:a coordenada y da latitude _ no $globe ca:$globe y per a latitud _
de:x von $globe Längengrad _ pt:a coordenada x da longidude _ no $globe ca:$globe x per a longitud _
de:ändere $globe um x: _ y: _ Pixel pt:desloca a posição do mapa de (x: _ , y: _ ) ca:$globe canvia la ubicació en x: _ y: _ píxels 1010
de:$globe Entfernung in km zu _ pt:a tua distância em km a _ no $globo ca:$globe distància en km fins a _ §_objectsMenustagelat1lng1lat2lng2return stage.worldMap.distanceInKm(lat1, lng1, lat2, lng2)
de:$globe aktuelle Position pt:a localização corrente do dispositivo no $globe ca:$globe ubicació actual
de:$globe aktueller Breitengrad pt:a latitude corrente do dispositivo no $globe ca:$globe latitud actual
de:$globe aktueller Längengrad pt:a longitude corrente do dispositivo no $globe ca:$globe longitud actual
de:aktualisiere $globe pt:actualiza o $globe ca:$globe força refresc
de:$globe als Kostüm pt:a parte visível do $globe na forma de traje ca:$globe vestit del mapa actual
de:setze $globe Stil auf _ pt:altera o estilo do $globe para _ ca:$globe fixa l'estil de mapa a _ WikimediaOpenStreetMap Wikimedia Watercolor Toner Terrain Topographic Satellite Streets Shading Mapbox (experimental)
\ No newline at end of file +
de:$globe zeige aktuellen Standort pt:mostra a localização corrente do dispositivo no $globe ca:$globe centra a la meva ubicació
de:$globe Zoom pt:o zoom do $globe ca:$globe zoom
de:setze $globe Zoom auf _ pt:altera o zoom do $globe para _ ca:$globe fixa el zoom a _ 10
de:$globe Längengrad von x _ pt:a longitude no $globe da coordenada x _ ca:$globe longitud per a x _ 0
de:$globe Breitengrad von y _ pt:a latitude no $globe da coordenada y _ ca:$globe latitud per a y _ 0
de:setze $globe auf Länge: _ Breite: _ pt:altera a posição no $globe para (longitude: _ , latitude: _ ) ca:$globe centra a longitud: _ latitud: _ -122.25785237.872099
de:y von $globe Breitengrad _ pt:a coordenada y da latitude _ no $globe ca:$globe y per a latitud _
de:x von $globe Längengrad _ pt:a coordenada x da longidude _ no $globe ca:$globe x per a longitud _
de:ändere $globe um x: _ y: _ Pixel pt:desloca a posição do mapa de (x: _ , y: _ ) ca:$globe canvia la ubicació en x: _ y: _ píxels 1010
de:$globe Entfernung in km zu _ pt:a tua distância em km a _ no $globo ca:$globe distància en km fins a _ §_objectsMenumap_dist(lat1, lon1, lat2, lon2)
de:$globe aktuelle Position pt:a localização corrente do dispositivo no $globe ca:$globe ubicació actual
de:$globe aktueller Breitengrad pt:a latitude corrente do dispositivo no $globe ca:$globe latitud actual
de:$globe aktueller Längengrad pt:a longitude corrente do dispositivo no $globe ca:$globe longitud actual
de:aktualisiere $globe pt:actualiza o $globe ca:$globe força refresc
de:$globe als Kostüm pt:a parte visível do $globe na forma de traje ca:$globe vestit del mapa actual
de:setze $globe Stil auf _ pt:altera o estilo do $globe para _ ca:$globe fixa l'estil de mapa a _ OpenStreetMapOpenStreetMap Wikimedia Watercolor Toner Terrain Topographic Satellite Streets Shading Mapbox (experimental)
\ No newline at end of file diff --git a/libraries/parallel_module.xml b/libraries/parallel_module.xml index d4ad15b7..ef196f0f 100644 --- a/libraries/parallel_module.xml +++ b/libraries/parallel_module.xml @@ -1 +1 @@ -Accepts any number of scripts as inputs. Launches a separate thread for each of them, so they are done in parallel, then waits for them all to complete. This doesn't change how the Snap! scheduler works; the threads are not truly asynchronous. And there is no increase in speed. Rather, the point of this block is to allow starting synchronized but independent scripts.
pt:executa _ em paralelo e espera each scripttest
Accepts any number of scripts as inputs. Launches a separate thread for each of them, so they are done in parallel, then continues with the current script while they all run. This doesn't change how the Snap! scheduler works; the threads are not truly asynchronous. And there is no increase in speed. Rather, the point of this block is to allow starting synchronized but independent scripts.
pt:executa _ em paralelo
\ No newline at end of file +Accepts any number of scripts as inputs. Launches a separate thread for each of them, so they are done in parallel, then waits for them all to complete. This doesn't change how the Snap! scheduler works; the threads are not truly asynchronous. And there is no increase in speed. Rather, the point of this block is to allow starting synchronized but independent scripts.
pt:executa _ em paralelo e espera ca:executa en paral·lel _ i espera each scripttest
Accepts any number of scripts as inputs. Launches a separate thread for each of them, so they are done in parallel, then continues with the current script while they all run. This doesn't change how the Snap! scheduler works; the threads are not truly asynchronous. And there is no increase in speed. Rather, the point of this block is to allow starting synchronized but independent scripts.
pt:executa _ em paralelo ca:executa en paral·lel _
\ No newline at end of file diff --git a/libraries/pixel_module.xml b/libraries/pixel_module.xml index bedf7d86..67e83c83 100644 --- a/libraries/pixel_module.xml +++ b/libraries/pixel_module.xml @@ -1 +1 @@ -takes a snapshot with the webcam and reports it as a new costume, or zero if the user cancels
pt:$camera a imagem actual do vídeo
\ No newline at end of file +takes a snapshot with the webcam and reports it as a new costume, or zero if the user cancels
pt:$camera a imagem actual do vídeo
\ No newline at end of file diff --git a/libraries/serial_module.xml b/libraries/serial_module.xml new file mode 100644 index 00000000..83322b05 --- /dev/null +++ b/libraries/serial_module.xml @@ -0,0 +1 @@ +
1152009600 19200 38400 57600 115200
Close port.
port
port
Write to the port a list containing numbers
port
\ No newline at end of file diff --git a/libraries/signada.js b/libraries/signada.js new file mode 100644 index 00000000..17cc0ce1 --- /dev/null +++ b/libraries/signada.js @@ -0,0 +1,162 @@ +/* Signada - a network remote control procotol + * =========================================== + * By Bernat Romagosa, August 2021 + * + * Enables Snap! to talk to wifi-enabled + * MicroBlocks devices. + * + * This protocol was designed for the Citilab + * ED1 microcontroller board, but it can be + * used for any ESP32 board that has a display + * and two buttons, like the M5Stack. + * + * First, load the Signada example project + * from the MicroBlocks IDE and follow the + * instructions on the long comment in that + * project. + * + * Get MicroBlocks at https://microblocks.fun + */ + +SnapExtensions.primitives.set( + 'sgd_connect(ip)', + function (ip) { + if (location.protocol.indexOf('https') > -1) { + throw new Error( + 'Signada requires an HTTP only instance of Snap!, like:\n' + + 'http://extensions.snap.berkeley.edu' + ); + } + var socket = new WebSocket('ws://' + ip + ':81'), + stage = this.parentThatIsA(StageMorph), + cache; + stage.signada = {}; + stage.signada.ip = ip; + stage.signada.socket = socket; + stage.signada.responses = {}; + stage.signada.responseCache = {}; + stage.signada.lastID = 0; + stage.signada.eventListener = function (event) { + response = JSON.parse(event.data); + if (Array.isArray(response[1])) { + response[1] = new List(response[1]); + } + stage.signada.responses[response[0]] = response[1]; + + // Cache the response for when hat blocks + cache = Object.values(stage.signada.responseCache).find( + each => each.requestID === response[0] + ); + if (cache) { + cache.value = response[1]; + cache.updating = false; + } + }; + + socket.addEventListener('message', stage.signada.eventListener); + } +); + +SnapExtensions.primitives.set( + 'sgd_disconnect()', + function () { + var stage = this.parentThatIsA(StageMorph); + if (SnapExtensions.primitives.get('sgd_connected()').call(this)) { + stage.signada.socket.removeEventListener( + 'message', + stage.signada.eventListener + ); + stage.signada.socket.close(); + } + } +); + +SnapExtensions.primitives.set( + 'sgd_connected()', + function () { + var signada = this.parentThatIsA(StageMorph).signada; + return (signada !== undefined) && (signada.socket.readyState === 1); + } +); + +SnapExtensions.primitives.set( + 'sgd_call(blockname, params, defaultresponse)', + function (blockname, params, defaultresponse, proc) { + var signada = this.parentThatIsA(StageMorph).signada, + hatBlock = proc.topBlock.parentThatIsA(HatBlockMorph), + needsCaching = !isNil(hatBlock) && + (hatBlock.selector === 'receiveCondition'), + updatingCache = (signada.responseCache[blockname]?.updating), + defaultresponse = + (defaultresponse === undefined) ? 0 : defaultresponse; + + if (!SnapExtensions.primitives.get('sgd_connected()').call(this)) { + throw new Error( + 'You are not connected to any device.\n' + + 'Please use the connect block to establish a connection and' + + 'try again.' + ); + } + + if (!proc.requestID) { + if (!needsCaching || !updatingCache) { + proc.startTime = new Date(); + proc.requestID = signada.lastID; + + // Cache responses for reporters inside when hat blocks + if (signada.responseCache[blockname]) { + // Let's mark the cached response as updating so we don't + // request it again until we get a response from the device + signada.responseCache[blockname].updating = true; + signada.responseCache[blockname].requestID = proc.requestID; + signada.responseCache[blockname].requestTime = + (new Date()).getTime(); + } else { + // Never sent a similar request before. Let's give it a + // default value. + signada.responseCache[blockname] = { + requestID: proc.requestID, + updating: true, + value: defaultresponse, + requestTime: (new Date()).getTime() + }; + } + + signada.socket.send( + JSON.stringify([signada.lastID, blockname, params.contents]) + ); + + // Last ID wraps at 1.000.000 to make sure it doesn't grow too + // much and doesn't wrap too early + signada.lastID = (signada.lastID + 1) % 1000000; + } + } else { + if (signada.responses[proc.requestID] !== undefined) { + var response = signada.responses[proc.requestID]; + proc.requestID = null; + return response; + } else if ((new Date() - proc.startTime) > 1000) { + // Timeout after 1 second. Return last cached value + proc.requestID = null; + signada.responseCache[blockname].updating = false; + return signada.responseCache[blockname].value; + } + } + + if (needsCaching) { + // This reporter needs caching. Let's return the last value for this + // particular block name. + if (updatingCache && + (((new Date()).getTime() - + signada.responseCache[blockname].requestTime) > 250)) { + // We've been waiting for the cache to update for a long time. + // Let's invalidate it so the value is requested again. + signada.responseCache[blockname].updating = false; + } + return signada.responseCache[blockname].value; + } + + proc.pushContext('doYield'); + proc.pushContext(); + } +); diff --git a/libraries/signada.xml b/libraries/signada.xml new file mode 100644 index 00000000..c2523c26 --- /dev/null +++ b/libraries/signada.xml @@ -0,0 +1 @@ +
ca:🤖 connecta't a _ 192.168.4.1
ca:🤖 desconnecta't
ca:🤖 connectat
ca:toca la nota _ a l'octava _ durant _ ms CC C# D D# E F F# G G# A A# B11 2 3 4 5100
ca:botó _ 🆗 ❌ ➡️ ⬆️ ⬇️ ⬅️
ca:dibuixa a la pantalla _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ falsefalsefalsefalsefalsefalsetruefalsetruefalsefalsefalsefalsefalsefalsetruefalsefalsefalsetruefalsetruetruetruefalse
ca:mou motor _ _ passos _ 1128clockwiseclockwise counter-clockwise
ca:mou motor 1 en _ motor 2 en _ _ passos clockwiseclockwise counter-clockwisecounter-clockwiseclockwise counter-clockwise64
ca:mou motor _ angle _ ° 1-90
ca:mou motor _ _ voltes completes 13
ca:escriu _ a x: _ y: _ color _ escala _ Hello, MicroBlocks!1030🔵🔵 🟢 ​🔴 ​🟣 ​🟡 ​⚪️1
ca:neteja pantalla
ca:posa el LED x: _ y: _ a _ 33true
ca:mostra caràcter _ A
ca:posa el pin digital _ a _ 1true
ca:posa el pin analògic _ a _ 1512
ca:llegeix el pin digital _
ca:llegeix el pin analògic _
ca:inclinació _ xx y z
memoized response,calling
ca:acceleració
ca:nivell de llum
ca:temperatura °C
\ No newline at end of file diff --git a/libraries/speech_module.xml b/libraries/speech_module.xml index 43901203..352407f1 100644 --- a/libraries/speech_module.xml +++ b/libraries/speech_module.xml @@ -1 +1 @@ -
de:sprich _ mit _ Aussprache _ und Höhe _ Geschwindigkeit _ pt:fala _ na língua _ _ com tom _ e velocidade _ Hello, World!en-USالعربية=ar Български=bg বাংলা=bn Català=ca Català - Valencià=ca-VA Česky=cs Deutsch=de Dansk=dk Ελληνικά=el English-American=en-US English-British=en-GB Esperanto=eo Español=es Eesti=et Euskara=eu suomi=fi Français=fr Galego=gl Hrvatski=hr Magyar=hu Interlingua=ia Bahasa Indonesia=id Italiano=it 日本語=ja にほんご=ja-HIRA ಕನ್ನಡ=kn 한국어=ko Malayalam=ml Nederlands=nl Norsk=no Polski=pl Português=pt Português do Brasil=pt-BR Român=ro Русский=ru Slovenščina=si svenska=sv Tamil=ta Telagu=te Türkçe=tr Українська=ua 简体中文=zh-CN 繁體中文=zh-TW11
de:sprich _ mit _ Aussprache _ und Höhe _ Geschwindigkeit _ und warte pt:fala _ na língua _ _ com tom _ e velocidade _ , e espera Hello, World!en-USالعربية=ar Български=bg বাংলা=bn Català=ca Català - Valencià=ca-VA Česky=cs Deutsch=de Dansk=dk Ελληνικά=el English-American=en-US English-British=en-GB Esperanto=eo Español=es Eesti=et Euskara=eu suomi=fi Français=fr Galego=gl Hrvatski=hr Magyar=hu Interlingua=ia Bahasa Indonesia=id Italiano=it 日本語=ja にほんご=ja-HIRA ಕನ್ನಡ=kn 한국어=ko Malayalam=ml Nederlands=nl Norsk=no Polski=pl Português=pt Português do Brasil=pt-BR Român=ro Русский=ru Slovenščina=si svenska=sv Tamil=ta Telagu=te Türkçe=tr Українська=ua 简体中文=zh-CN 繁體中文=zh-TW11
\ No newline at end of file +
de:sprich _ mit _ Aussprache _ und Höhe _ Geschwindigkeit _ pt:fala _ na língua _ _ com tom _ e velocidade _ ca:digues _ amb accent _ _ to _ i velocitat _ Hello, World!en-USالعربية=ar Български=bg বাংলা=bn Català=ca Català - Valencià=ca-VA Česky=cs Deutsch=de Dansk=dk Ελληνικά=el English-American=en-US English-British=en-GB Esperanto=eo Español=es Eesti=et Euskara=eu suomi=fi Français=fr Galego=gl Hrvatski=hr Magyar=hu Interlingua=ia Bahasa Indonesia=id Italiano=it 日本語=ja にほんご=ja-HIRA ಕನ್ನಡ=kn 한국어=ko Malayalam=ml Nederlands=nl Norsk=no Polski=pl Português=pt Português do Brasil=pt-BR Român=ro Русский=ru Slovenščina=si svenska=sv Tamil=ta Telagu=te Türkçe=tr Українська=ua 简体中文=zh-CN 繁體中文=zh-TW11
de:sprich _ mit _ Aussprache _ und Höhe _ Geschwindigkeit _ und warte pt:fala _ na língua _ _ com tom _ e velocidade _ , e espera ca:digues _ amb accent _ _ to _ velocitat _ i espera Hello, World!en-USالعربية=ar Български=bg বাংলা=bn Català=ca Català - Valencià=ca-VA Česky=cs Deutsch=de Dansk=dk Ελληνικά=el English-American=en-US English-British=en-GB Esperanto=eo Español=es Eesti=et Euskara=eu suomi=fi Français=fr Galego=gl Hrvatski=hr Magyar=hu Interlingua=ia Bahasa Indonesia=id Italiano=it 日本語=ja にほんご=ja-HIRA ಕನ್ನಡ=kn 한국어=ko Malayalam=ml Nederlands=nl Norsk=no Polski=pl Português=pt Português do Brasil=pt-BR Român=ro Русский=ru Slovenščina=si svenska=sv Tamil=ta Telagu=te Türkçe=tr Українська=ua 简体中文=zh-CN 繁體中文=zh-TW11
\ No newline at end of file diff --git a/libraries/strings.xml b/libraries/strings.xml index 7d1fc52a..bd0aab05 100644 --- a/libraries/strings.xml +++ b/libraries/strings.xml @@ -1 +1 @@ -
pt:o texto multilinha _
Reports the part of the first string up to the first instance of the second string inside it. If the second string isn't found, reports the entire first string.
pt:o texto de _ antes de _
Reports the portion of the first input string starting after the first occurrence of the second string. If the second string isn't found in the first string, reports an empty string.
pt:o texto de _ depois de _
Reports the character position (starting from 1) of the beginning of the first input string inside the second input string. If it's not found, reports 0.
pt:a posição de _ em _
If input is TRUE, comparisons made by functions in the string library will be case-independent (so "FOO" = "foo"). This is the default. If input is FALSE, comparisons will be exact.
pt:altera comparações ignorando distinção minúsculas/maiúsculas para _
Reports the portion of the first input (string) starting at the position given by the second input (counting from 1, like LETTER n OF) and ending at the position given by the third input (also counting from 1). If the third input is empty, reports the portion from the first position to the end of the string. If a position number is negative, counts from the end backward, so -1 is the last character, -2 is the next to last, etc.
pt:o texto de _ entre as posições _ e _ , inclusive
Reports True if the first input string contains the second input string, otherwise false. Comparison is case-independent by default; use USE CASE-INDEPENDENT COMPARISONS to change that.
pt:o texto de _ antes de _
Reports the input text with lower case letters instead of capital letters in the input. Uses the user's locale's rules for case conversion.
pt:em minúsculas _
\ No newline at end of file +
pt:o texto multilinha _ ca:multilínia _
Reports the part of the first string up to the first instance of the second string inside it. If the second string isn't found, reports the entire first string.
pt:o texto de _ antes de _ ca:part del text _ anterior a _
Reports the portion of the first input string starting after the first occurrence of the second string. If the second string isn't found in the first string, reports an empty string.
pt:o texto de _ depois de _ ca:part del text _ posterior a _
Reports the character position (starting from 1) of the beginning of the first input string inside the second input string. If it's not found, reports 0.
pt:a posição de _ em _ ca:posició de _ en _
If input is TRUE, comparisons made by functions in the string library will be case-independent (so "FOO" = "foo"). This is the default. If input is FALSE, comparisons will be exact.
pt:altera comparações ignorando distinção minúsculas/maiúsculas para _ ca:ignora la diferenciació de majúscules _
Reports the portion of the first input (string) starting at the position given by the second input (counting from 1, like LETTER n OF) and ending at the position given by the third input (also counting from 1). If the third input is empty, reports the portion from the first position to the end of the string. If a position number is negative, counts from the end backward, so -1 is the last character, -2 is the next to last, etc.
pt:o texto de _ entre as posições _ e _ , inclusive ca:part del text _ des de la posició _ fins _
Reports True if the first input string contains the second input string, otherwise false. Comparison is case-independent by default; use USE CASE-INDEPENDENT COMPARISONS to change that.
pt:o texto de _ antes de _ ca:text _ conté _ ?
Reports the input text with lower case letters instead of capital letters in the input. Uses the user's locale's rules for case conversion.
pt:em minúsculas _ ca:_ a minúscules
ca:comparacions ignorant majúscules? err_reset
\ No newline at end of file diff --git a/libraries/textCostumes_module.xml b/libraries/textCostumes_module.xml index cf98870e..fe3886d2 100644 --- a/libraries/textCostumes_module.xml +++ b/libraries/textCostumes_module.xml @@ -1 +1 @@ -
de:Kostüm aus Text _ Größe _ pt:um traje com o texto _ de tamanho _ A72
\ No newline at end of file +
de:Kostüm aus Text _ Größe _ pt:um traje com o texto _ de tamanho _ ca:vestit amb el text _ i mida _ A72
§_costumesMenu2002Use this block to make "clickable" buttons:
\ No newline at end of file diff --git a/libraries/try-catch.xml b/libraries/try-catch.xml index c42cc9c9..efb6431b 100644 --- a/libraries/try-catch.xml +++ b/libraries/try-catch.xml @@ -1 +1 @@ -Catch errors. Runs the first script. If it succeeds, nothing else happens. But if it has an error (something that would otherwise result in a red halo around the block), then the second script is run, with the text of the error message that would have been shown in the variable ERROR.
pt:tenta executar _ e, em caso de erro _ , executa _ return
Throw an error. Makes a red halo appear around the script that runs it, with the input text shown in a speech balloon next to the script, just like any Snap! error. This is useful to put in the second script of SAFELY TRY after some other instructions to undo the partial work of the first script.
pt:lança o erro _
LET (FOO) BE (5) is equivalent to SCRIPT VARIABLES (FOO) SET (FOO) TO (5)
pt:cria a variável de guião _ com valor _
Catch errors in a reporter. Evaluates its first input. If that expression successfully reports a value, this block reports that value. If the expression causes a Snap! error, then the final input slot is evaluated with the text of what would have been the error message in variable ERROR. SAFELY TRY then reports the value of that final expression. Sometimes you'll want to throw an error in the final expression. You can put an ERROR block inside a CALL block to do that.
err
\ No newline at end of file +Catch errors. Runs the first script. If it succeeds, nothing else happens. But if it has an error (something that would otherwise result in a red halo around the block), then the second script is run, with the text of the error message that would have been shown in the variable ERROR.
pt:tenta executar _ e, em caso de erro _ , executa _ ca:prova de forma segura _ i si _ _
Throw an error. Makes a red halo appear around the script that runs it, with the input text shown in a speech balloon next to the script, just like any Snap! error. This is useful to put in the second script of SAFELY TRY after some other instructions to undo the partial work of the first script.
pt:lança o erro _
Catch errors in a reporter. Evaluates its first input. If that expression successfully reports a value, this block reports that value. If the expression causes a Snap! error, then the final input slot is evaluated with the text of what would have been the error message in variable ERROR. SAFELY TRY then reports the value of that final expression. Sometimes you'll want to throw an error in the final expression. You can put an ERROR block inside a CALL block to do that.
ca:prova de forma segura reportant _ i si _ reportant _ err
\ No newline at end of file diff --git a/libraries/variadic-reporters.xml b/libraries/variadic-reporters.xml index 381e5189..88ca4454 100644 --- a/libraries/variadic-reporters.xml +++ b/libraries/variadic-reporters.xml @@ -1 +1 @@ -Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of adding them all, so (SUM (4) (100) (8)) reports 112.
pt:a soma de _ 1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of multiplying them all, so (PRODUCT (4) (100) (8)) reports 3200.
pt:o produto de _ 1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE only if all of the inputs are TRUE, otherwise FALSE. Like AND but for multiple inputs.
pt:todas as afirmações _ são verdadeiras 1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE if at least one input is TRUE, otherwise FALSE.
pt:alguma das afirmações _ é verdadeira 1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the smallest of them, so (MINIMUM (4) (100) (8)) reports 4.
pt:o produto de _ 1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the largest of them, so (MAXIMUM (4) (100) (8)) reports 100.
pt:o produto de _ 1
\ No newline at end of file +Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of adding them all, so (SUM (4) (100) (8)) reports 112.
pt:a soma de _ ca:suma _ 1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of multiplying them all, so (PRODUCT (4) (100) (8)) reports 3200.
pt:o produto de _ ca:producte _ 1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE only if all of the inputs are TRUE, otherwise FALSE. Like AND but for multiple inputs.
pt:todas as afirmações _ são verdadeiras ca:tots _ ? 1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE if at least one input is TRUE, otherwise FALSE.
pt:alguma das afirmações _ é verdadeira ca:qualsevol _ ? 1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the smallest of them, so (MINIMUM (4) (100) (8)) reports 4.
pt:o produto de _ ca:mínim _ 1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the largest of them, so (MAXIMUM (4) (100) (8)) reports 100.
pt:o produto de _ ca:màxim _ 1
\ No newline at end of file diff --git a/libraries/word-sentence.xml b/libraries/word-sentence.xml index 19c1f47d..d447f6bf 100644 --- a/libraries/word-sentence.xml +++ b/libraries/word-sentence.xml @@ -1 +1 @@ -Takes a text string as input, and reports a new text string containing all but the first character of the input.
pt:_ sem o primeiro caractere strreturn str.slice(1);All but first of empty word.
Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing all but the first word, with one space between words and no spaces at the beginning or end. (Note: consider using SENTENCE➞LIST and processing the resulting list instead of doing recursion on sentences in text string form. List operations are faster.)
pt:_ sem a primeira palavra All but first of empty sentence.
Takes a text string as input, and reports a new text string containing all but the last letter of the input.
pt:_ sem o último caractere strreturn str.slice(0,-1);All but last of empty word.
Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing all but the last word, with one space between words and no spaces at the beginning or end. (Note: consider using SENTENCE->LIST and processing the resulting list instead of doing recursion on sentences in text string form. List operations are faster.)
pt:_ sem a última palavra arrreturn new List(arr.asArray().slice(0,-1));All but last of empty sentence. 1 11 1
Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing only the first word, with no spaces before or after it.
pt:a primeira palavra de _
Takes a text string as input, and reports the last character in the string.
pt:o último caractere de _ 0
Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing only the last word of the input, with no spaces before or after it.
pt:a última palavra de _ Last of empty sentence.1 1
Takes a text string as input, and reports TRUE if the string has no characters in it of any kind, otherwise false.
pt:a palavra _ está vazia 0
Takes a text string as input, and reports TRUE if the input contains no characters other than spaces (therefore, no words when the string is considered as a sentence), otherwise FALSE.
pt:a frase _ está vazia
Like JOIN, takes any number of words (text strings) and reports a sentence with its inputs concatenated, but inserts a blank space between the inputs. Consider using SENTENCE (Lists palette) instead.
de:füge Wörter zusammen _ ca:uneix les paraules _ es:unir las palabras _ fr:fusionne les mots _ pt:uma frase com as palavras _ firstbffirst111bf 121
Takes a sentence in list form and reports the sentence as a text string.
de:Liste $arrowRight Satz _ ca:llista $arrowRight frase _ es:lista $arrowRight frase _ fr:liste $arrowRight phrase _ pt:uma frase com as palavras em _
Takes a sentence in text string form and reports the sentence as a list of its words.
de:Satz $arrowRight Liste _ ca:frase $arrowRight llista _ es:frase $arrowRight lista _ fr:phrase $arrowRight liste _ pt:uma lista com as palavras da frase _
report a list in which each item is one letter from the input word
de:Wort $arrowRight Liste _ ca:paraula $arrowRight llista _ es:palabra $arrowRight lista _ fr:mot $arrowRight liste _ pt:uma lista com os caracteres da palavra _
join all the items of the input list into a single word, and report it
de:Liste $arrowRight Wort _ ca:llista $arrowRight paraula _ es:lista $arrowRight palabra _ fr:liste $arrowRight mot _ pt:uma palavra com os caracteres em _
SENTENCE is the main constructor for sentences, represented as lists of words. It takes zero or more inputs, each of which can be either a list or a text string. If a list, the input is assumed to be a list of words. If a text string, it is converted to a list of words using SENTENCE→LIST. Then all the lists of words are appended to form a new list of words. If the inputs are lists of lists rather than lists of words, SENTENCE, like APPEND, does only one level of flattening, reporting a list of all the items of all the input lists.
pt:lança o erro _
Takes a (possibly deep) list as input, and reports a human-readable text form of the list (namely, Lisp notation).
( )
Helper function for word/sentence library. Reports its first input, unless that input is empty, in which case it gives its second input as an error message.
Takes a text string as input, and reports the first character in the string.
pt:a primeira palavra de _
\ No newline at end of file +Takes a text string as input, and reports a new text string containing all but the first character of the input.
pt:_ sem o primeiro caractere ca:_ sense la primera lletra All but first of empty word.
Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing all but the first word, with one space between words and no spaces at the beginning or end. (Note: consider using SENTENCE➞LIST and processing the resulting list instead of doing recursion on sentences in text string form. List operations are faster.)
pt:_ sem a primeira palavra ca:_ sense la primera paraula All but first of empty sentence.
Takes a text string as input, and reports a new text string containing all but the last letter of the input.
pt:_ sem o último caractere ca:_ sense la darrera lletra All but first of empty word.
Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing all but the last word, with one space between words and no spaces at the beginning or end. (Note: consider using SENTENCE->LIST and processing the resulting list instead of doing recursion on sentences in text string form. List operations are faster.)
pt:_ sem a última palavra ca:_ sense la darrera paraula All but last of empty sentence.
Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing only the first word, with no spaces before or after it.
pt:a primeira palavra de _ ca:primera paraula de _
Takes a text string as input, and reports the last character in the string.
pt:o último caractere de _ ca:primera lletra de _ 0
Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing only the last word of the input, with no spaces before or after it.
pt:a última palavra de _ ca:darrera paraula de _ Last of empty sentence.
Takes a text string as input, and reports TRUE if the string has no characters in it of any kind, otherwise false.
pt:a palavra _ está vazia ca:paraula buida? _ 0
Takes a text string as input, and reports TRUE if the input contains no characters other than spaces (therefore, no words when the string is considered as a sentence), otherwise FALSE.
pt:a frase _ está vazia ca:frase buida? _
Like JOIN, takes any number of words (text strings) and reports a sentence with its inputs concatenated, but inserts a blank space between the inputs. Consider using SENTENCE (Lists palette) instead.
de:füge Wörter zusammen _ ca:uneix les paraules _ es:unir las palabras _ fr:fusionne les mots _ pt:uma frase com as palavras _ firstbffirst111bf
Takes a sentence in list form and reports the sentence as a text string.
de:Liste $arrowRight Satz _ ca:llista $arrowRight frase _ es:lista $arrowRight frase _ fr:liste $arrowRight phrase _ pt:uma frase com as palavras em _
Takes a sentence in text string form and reports the sentence as a list of its words.
de:Satz $arrowRight Liste _ ca:frase $arrowRight llista _ es:frase $arrowRight lista _ fr:phrase $arrowRight liste _ pt:uma lista com as palavras da frase _
report a list in which each item is one letter from the input word
de:Wort $arrowRight Liste _ ca:paraula $arrowRight llista _ es:palabra $arrowRight lista _ fr:mot $arrowRight liste _ pt:uma lista com os caracteres da palavra _
join all the items of the input list into a single word, and report it
de:Liste $arrowRight Wort _ ca:llista $arrowRight paraula _ es:lista $arrowRight palabra _ fr:liste $arrowRight mot _ pt:uma palavra com os caracteres em _
SENTENCE is the main constructor for sentences, represented as lists of words. It takes zero or more inputs, each of which can be either a list or a text string. If a list, the input is assumed to be a list of words. If a text string, it is converted to a list of words using SENTENCE→LIST. Then all the lists of words are appended to form a new list of words. If the inputs are lists of lists rather than lists of words, SENTENCE, like APPEND, does only one level of flattening, reporting a list of all the items of all the input lists.
ca:frase _
pt:lança o erro _
Takes a (possibly deep) list as input, and reports a human-readable text form of the list (namely, Lisp notation).
ca:notació textual de _ ( )
Helper function for word/sentence library. Reports its first input, unless that input is empty, in which case it gives its second input as an error message.
Takes a text string as input, and reports the first character in the string.
pt:a primeira palavra de _ ca:primera lletra de _
\ No newline at end of file diff --git a/locale/lang-ar.js b/locale/lang-ar.js index 9d5dd4fa..bb584885 100755 --- a/locale/lang-ar.js +++ b/locale/lang-ar.js @@ -415,8 +415,8 @@ SnapTranslator.dict.ar = { // control: 'when %greenflag clicked': 'الأخضر العـَلم %greenflag نقر عنـد', - 'when %keyHat key pressed': - '%keyHat مفتـاح ضغط عند', + 'when %keyHat key pressed %keyName': + '%keyHat %keyName مفتـاح ضغط عند', 'when I am %interaction': 'الفـأرة مـؤشْـر %interaction لـ أتعرض عندما', 'clicked': @@ -431,12 +431,12 @@ SnapTranslator.dict.ar = { 'مغـادرة', 'when %b': '%b عندما', - 'when I receive %msgHat': - '%msgHat رسـالة أستقبال عند', - 'broadcast %msg': - ' %msg بث', - 'broadcast %msg and wait': - 'إنتظـر ثم %msg بِـث', + 'when I receive %msgHat %message': + '%msgHat %message رسـالة أستقبال عند', + 'broadcast %msg %receive': + ' %msg %receive بث', + 'broadcast %msg %receive and wait': + 'إنتظـر ثم %msg %receive بِـث', 'Message name': 'اسم الرسالة', 'message': diff --git a/locale/lang-bg.js b/locale/lang-bg.js index 16d79c74..46ca9765 100644 --- a/locale/lang-bg.js +++ b/locale/lang-bg.js @@ -410,16 +410,18 @@ SnapTranslator.dict.bg = { // control: 'when %greenflag clicked': 'когато %greenflag е кликнат', - 'when %keyHat key pressed': - 'когато бутон %keyHat е натиснат', - 'when I am clicked': - 'когато кликнеш върху мен', - 'when I receive %msgHat': - 'когато получа %msgHat', - 'broadcast %msg': - 'изпрати %msg към всички', - 'broadcast %msg and wait': - 'изпрати %msg към всички и изчакай', + 'when %keyHat key pressed %keyName': + 'когато бутон %keyHat е натиснат %keyName', + 'when I am %interaction': + 'когато %interaction върху мен', + 'when I receive %msgHat %message': + 'когато получа %msgHat %message', + 'broadcast %msg %receive': + 'изпрати %msg %receive', + 'broadcast %msg %receive and wait': + 'изпрати %msg %receive и изчакай', + 'to': + 'към', 'Message name': 'Име на съобщение', 'wait %n secs': diff --git a/locale/lang-bn.js b/locale/lang-bn.js index 6151ae48..24d8b4a9 100644 --- a/locale/lang-bn.js +++ b/locale/lang-bn.js @@ -439,8 +439,8 @@ SnapTranslator.dict.bn = { // control: 'when %greenflag clicked': 'যখন %greenflag ক্লিক করা হবে', - 'when %keyHat key pressed': - 'যখন %keyHat ক্লিক করা হবে', + 'when %keyHat key pressed %keyName': + 'যখন %keyHat %keyName ক্লিক করা হবে', 'when I am %interaction': 'যখন আমাকে %interaction', 'clicked': @@ -461,12 +461,12 @@ SnapTranslator.dict.bn = { 'থামানো হবে', 'when %b': 'যখন %b শর্তটি সত্য হবে', - 'when I receive %msgHat': - 'যখন আমি পাব বার্তা %msgHat', - 'broadcast %msg': - 'বার্তা %msg সম্প্রচার কর', - 'broadcast %msg and wait': - 'বার্তা %msg সম্প্রচার করে অপেক্ষা কর', + 'when I receive %msgHat %message': + 'যখন আমি পাব বার্তা %msgHat %message', + 'broadcast %msg %receive': + 'বার্তা %msg %receive সম্প্রচার কর', + 'broadcast %msg %receive and wait': + 'বার্তা %msg %receive সম্প্রচার করে অপেক্ষা কর', 'send %msg to %spr': 'বার্তা %msg সম্প্রচার কর %spr', 'Message name': diff --git a/locale/lang-ca.js b/locale/lang-ca.js index 5de26701..9bb36eef 100644 --- a/locale/lang-ca.js +++ b/locale/lang-ca.js @@ -185,7 +185,7 @@ SnapTranslator.dict.ca = { 'translator_e-mail': 'bernat@snap4arduino.rocks, jguille2@xtec.cat', // optional 'last_changed': - '2021-03-14', // this, too, will appear in the Translators tab + '2022-01-05', // this, too, will appear in the Translators tab // GUI // control bar: @@ -433,10 +433,10 @@ SnapTranslator.dict.ca = { 'augmenta en %n el color del llapis', 'set pen color to %n': 'fixa el color del llapis a %n', - 'change pen %hsva by %n': - 'augmenta %hsva del llapis en %n', - 'set pen %hsva to %n': - 'fixa %hsva del llapis a %n', + 'change pen %clrdim by %n': + 'augmenta %clrdim del llapis en %n', + 'set pen %clrdim to %n': + 'fixa %clrdim del llapis a %n', 'change pen shade by %n': 'augmenta en %n la intensitat del llapis', 'set pen shade to %n': @@ -447,10 +447,10 @@ SnapTranslator.dict.ca = { 'fixa la mida del llapis en %n', 'set background color to %clr': 'fixa el color del fons a %clr', - 'change background %hsva by %n': - 'augmenta %hsva del fons en %n', - 'set background %hsva to %n': - 'fixa %hsva del fons a %n', + 'change background %clrdim by %n': + 'augmenta %clrdim del fons en %n', + 'set background %clrdim to %n': + 'fixa %clrdim del fons a %n', 'stamp': 'estampa', 'fill': @@ -463,8 +463,10 @@ SnapTranslator.dict.ca = { // control: 'when %greenflag clicked': 'Quan la %greenflag es premi', - 'when %keyHat key pressed': - 'Quan la tecla %keyHat es premi', + 'when %keyHat key pressed %keyName': + 'Quan la tecla %keyHat es premi %keyName', + 'key': + 'tecla', 'when I am %interaction': 'Quan %interaction aquest personatge', 'clicked': @@ -479,12 +481,14 @@ SnapTranslator.dict.ca = { 'el ratolí surti d\'', 'when %b': 'quan %b', - 'when I receive %msgHat': - 'Quan rebi %msgHat', - 'broadcast %msg': - 'Envia a tots %msg', - 'broadcast %msg and wait': - 'Envia a tots %msg i espera', + 'when I receive %msgHat %message': + 'Quan rebi %msgHat %message', + 'broadcast %msg %receive': + 'Envia %msg %receive', + 'broadcast %msg %receive and wait': + 'Envia %msg %receive i espera', + 'to': + 'a', 'send %msg to %spr': 'envia %msg a %spr', 'Message name': @@ -516,7 +520,7 @@ SnapTranslator.dict.ca = { 'stop %stopChoices': 'atura %stopChoices', 'all': - 'tot', + 'tots', 'this script': 'aquest programa', 'this block': @@ -551,6 +555,14 @@ SnapTranslator.dict.ca = { 'mi mateix', 'delete this clone': 'esborra aquest clon', + 'switch to scene %scn %send': + 'canvia a l\'escena %scn %send', + 'and send': + 'i envia', + 'next': + 'següent', + 'previous': + 'prèvia', 'tell %spr to %cmdRing %inputs': 'digues a %spr que faci %cmdRing %inputs', 'ask %spr for %repRing %inputs': @@ -623,6 +635,14 @@ SnapTranslator.dict.ca = { 'objecte %self', 'r-g-b-a': 'color RGBA', + '%block of block %repRing': + '%block del bloc %repRing', + 'definition': + 'definició', + 'custom?': + 'personalitzat?', + 'global?': + 'global?', // operators: '%n mod %n': @@ -836,6 +856,18 @@ SnapTranslator.dict.ca = { 'no hi ha cap bloc\npersonalitzat no utilitzat\nen aquest projecte', 'unused block(s) removed': 'bloc(s) personalitzats no utilitzats esborrats', + 'Hide blocks...': + 'Amaga blocs...', + 'New category...': + 'Nova categoria...', + 'Remove a category...': + 'Esborra una categoria...', + 'Scenes...': + 'Escenes...', + 'New scene': + 'Nova escena', + 'Add scene...': + 'Afegeix una escena...', 'Export summary...': 'Exporta el resum...', 'save a summary\nof this project': @@ -925,14 +957,6 @@ SnapTranslator.dict.ca = { 'marqueu per a mostrar sempre\nel diàleg de selecció de tipus\nen afegir paràmetres als blocs\npersonalitzats', 'uncheck to use the input\ndialog in short form': 'desmarqueu per a no mostrar\nautomàticament el diàleg de selecció\nde tipus en afegir paràmetres\nals blocs personalitzats', - 'Virtual keyboard': - 'Teclat virtual', - 'uncheck to disable\nvirtual keyboard support\nfor mobile devices': - 'desmarqueu per inhabilitar\nel suport per al teclat virtual\nen dispositius mòbils', - - 'check to enable\nvirtual keyboard support\nfor mobile devices': - 'marqueu per habilitar\nel suport per al teclat virtual\nen dispositius mòbils', - 'Input sliders': 'Lliscadors d\'entrada', 'uncheck to disable\ninput sliders for\nentry fields': @@ -975,12 +999,6 @@ SnapTranslator.dict.ca = { 'desmarqueu per permetre\nla re-entrada als programes', 'check to disallow\nscript reentrance': 'marqueu per no permetre\nla re-entrada als programes', - 'Prefer smooth animations': - 'Suavitza les animacions', - 'uncheck for greater speed\nat variable frame rates': - 'desmarqueu per augmentar la velocitat de\nles animacions fins la màxima capacitat d\'aquesta màquina', - 'check for smooth, predictable\nanimations across computers': - 'marqueu per aconseguir unes animacions\nmés suaus i a velocitat previsible en màquines diferents', 'Flat line ends': 'Puntes de llapis planes', 'check for flat ends of lines': @@ -1011,10 +1029,28 @@ SnapTranslator.dict.ca = { // palette: 'find blocks': 'Cerca blocs', - 'hide primitives': - 'amaga els blocs primitius', - 'show primitives': - 'mostra els blocs primitius', + 'hide blocks...': + 'amaga blocs...', + 'Hide blocks in palette': + 'Amaga blocs de la paleta', + 'unused': + 'no utilitzats', + 'make a category...': + 'crea una categoria...', + 'New Category': + 'Nova Categoria', + 'Blocks category name:': + 'Nom de la categoria de blocs:', + 'Category color': + 'Color de la categoria', + 'red': + 'vermell', + 'green': + 'verd', + 'blue': + 'blau', + 'delete a category...': + 'esborra una categoria...', // blocks: 'help...': @@ -1055,6 +1091,8 @@ SnapTranslator.dict.ca = { 'activeu l\'opció per evitar que els continguts\nes desin', 'new line': 'nova línia', + 'open a new window\nwith a picture of this script': + 'obre una nova finestra\namb la imatge del programa', // custom blocks: 'delete block definition...': @@ -1465,6 +1503,8 @@ SnapTranslator.dict.ca = { 'saturació', 'brightness': 'brillantor', + 'lightness': + 'lluminositat', 'ghost': 'fantasma', 'negative': @@ -1477,6 +1517,8 @@ SnapTranslator.dict.ca = { // keys 'space': 'espai', + 'enter': + 'retorn', 'any key': 'qualsevol tecla', 'up arrow': @@ -1875,6 +1917,36 @@ SnapTranslator.dict.ca = { 'Suport pel mapeig de codi', 'check for block\nto text mapping features': 'marqueu per habilitar les funcionalitats\nde mapeig de blocs en codi', + 'Single palette': + 'Paleta única', + 'check to show all blocks in a single palette': + 'marqueu per mostrar tots els blocs\nen una paleta única', + 'uncheck to show only the selected category\'s blocks': + 'demarqueu per mostrar només el blocs\nde la categoria seleccionada', + 'Show categories': + 'Mostra les categories', + 'uncheck to hide\ncategory names\nin the palette': + 'desmarqueu per amagar\nel nom de les categories\na la paleta', + 'check to show\ncategory names\nin the palette': + 'marqueu per mostrar\nel nom de les categories\na la paleta', + 'Show buttons': + 'Mostra els botons', + 'uncheck to hide buttons\nin the palette': + 'desmarqeu per amagar els botons\na la paleta', + 'check to show buttons\nin the palette': + 'marqueu per mostrar els botons\na la paleta', + 'HSL pen color model': + 'Model de color HSL', + 'uncheck to switch pen colors\nand graphic effects to HSV': + 'desmarqueu per canviar el model de color del llapis\ni dels efectes gràfics a HSV', + 'check to switch pen colors\nand graphic effects to HSL': + 'marqueu per canviar el model de color del llapis\ni dels efectes gràfics a HSL', + 'Disable click-to-run': + 'Deshabilita l\'execució directa', + 'uncheck to enable\ndirectly running blocks\nby clicking on them': + 'desmarqueu per habilitar\nl\'execució directa dels blocs\nen clicar-los', + 'check to disable\ndirectly running blocks\nby clicking on them': + 'marqueu per a deshabilitar\nl\'execució directa dels blocs\nen clicar-los', 'saved.': 'desat.', 'options...': @@ -2510,13 +2582,21 @@ SnapTranslator.dict.ca = { 'animation demo': 'exemple d\'animació', -//future JS options +//JS options + 'JavaScript extensions': + 'Extensions de Javascript', 'uncheck to disable support for\nnative JavaScript functions': 'desmarqueu per deshabilitar\nl\'execució de Javascript', 'check to support\nnative JavaScript functions': 'marqueu per habilitar\nl\'execució de Javascript', - 'JavaScript is not enabled': - 'l\'execució de Javascript està deshabilitada', + 'JavaScript extensions for Snap!\nare turned off': + 'Les extensions de JavaScript estan deshabilitades', + 'Extension blocks': + 'Blocs per Extensions', + 'uncheck to hide extension\nprimitives in the palette': + 'desmarqueu per amagar els blocs de primitives\nper a les extensions de la paleta', + 'check to show extension\nprimitives in the palette': + 'marqueu per mostrar els blocs de primitives\nper a les exensions a la paleta', //Libraries 'Loading': @@ -2536,6 +2616,10 @@ SnapTranslator.dict.ca = { 'Colors i Paletes', 'Incorporates the former crayon and set RGB libraries. Implements fair hues (more orange, less green, adds brown) and a linear color scale including grayscale and fair-hue-based shades.': 'Incorpora les llibreries inicials de Paletes de color i Colors RGB. Utilitza tonalitats més ajustades (més taronges, menys verds, afegeix marrons) i una escala de color lineal que inclou escala de grisos i més matisos de tonalitat.', + 'Crayons': + 'Llapis de colors', + 'Just the crayons, without the rest of the colors library. Fast and simple.': + 'Només els llapis de colors, sense la resta de la llibreria de colors. Més ràpida i simple.', 'Bignums, rationals, complex #s': 'Números sencers de precisió infinita, racionals exactes i complexos', 'The full Scheme numeric tower. "USE BIGNUMS " to enable.': @@ -2622,6 +2706,14 @@ SnapTranslator.dict.ca = { 'Crea variables', 'Create and manage global/sprite/script variables in a script': 'Crea i gestiona variables de tipus global/sprite/script dins els programes', + 'Serial Ports': + 'Ports sèrie', + 'Connect to hardware extensions through the Web Serial API (Chromium, Chrome or Edge required)': + 'Connexió a microcontroladors connectats al port sèrie utilitzant el Web Serial API (requereix de la utilització del navegador Chromium, Chrome o Edge)', + 'Signada (Network remote control)': + 'Signada (control remot per xarxa)', + 'Interact with MicroBlocks devices via WiFi. Requires the device to have a TFT display, two buttons and WiFi capability, as well as the Signada MicroBlocks project loaded. The Citilab ED1 and a bunch of the M5Stack boards are some of the devices that work with Signada.': + 'Interactua amb dispositius programats amb Microblocks per la WiFi. Els dispositius han de tenir una pantalla TFT, dos butons i connectivitat WiFi i tenir carregat el projecte Signada de MicroBlocks. Exemples compatibles són la placa ED1 del Citilab i múltiples dispositius tipus M5Stack.', 'Hummingbird robotics': 'Hummingbird robòtics', @@ -2745,6 +2837,12 @@ SnapTranslator.dict.ca = { // 'translations...': 'traduccions...', + 'in palette': + 'a la paleta', + 'check to\nshow in palette': + 'marqueu per mostrar-lo\na la paleta de blocs', + 'uncheck to\nhide in palette': + 'desmarqueu per ocultar-lo\na la paleta de blocs', 'width': 'amplada', 'height': diff --git a/locale/lang-ca_VA.js b/locale/lang-ca_VA.js index 00577dbb..06953f45 100644 --- a/locale/lang-ca_VA.js +++ b/locale/lang-ca_VA.js @@ -417,8 +417,8 @@ SnapTranslator.dict.ca_VA = { // control: 'when %greenflag clicked': 'Quan la %greenflag es prema', - 'when %keyHat key pressed': - 'Quan la tecla %keyHat es prema', + 'when %keyHat key pressed %keyName': + 'Quan la tecla %keyHat es prema %keyName', 'when I am %interaction': 'Quan %interaction aquest personatge', 'clicked': @@ -433,12 +433,12 @@ SnapTranslator.dict.ca_VA = { 'el ratolí isca d\'', 'when %b': 'quan %b', - 'when I receive %msgHat': - 'Quan reba %msgHat', - 'broadcast %msg': - 'Envia a tots %msg', - 'broadcast %msg and wait': - 'Envia a tots %msg i espera', + 'when I receive %msgHat %message': + 'Quan reba %msgHat %message', + 'broadcast %msg %receive': + 'Envia %msg %receive', + 'broadcast %msg %receive and wait': + 'Envia %msg %receive i espera', 'Message name': 'Nom del missatge', 'message': diff --git a/locale/lang-cs.js b/locale/lang-cs.js index 35d0245e..c5ec83c4 100755 --- a/locale/lang-cs.js +++ b/locale/lang-cs.js @@ -416,8 +416,8 @@ SnapTranslator.dict.cs = { // control: 'when %greenflag clicked': 'Po klepnutí na %greenflag', - 'when %keyHat key pressed': - 'po stisku klávesy %keyHat', + 'when %keyHat key pressed %keyName': + 'po stisku klávesy %keyHat %keyName', 'when I am %interaction': 'když %interaction', 'clicked': @@ -430,12 +430,12 @@ SnapTranslator.dict.cs = { 'na mě najede myš', 'mouse-departed': 'ze mě sjede myš', - 'when I receive %msgHat': - 'po přijetí zprávy %msgHat', - 'broadcast %msg': - 'poslat všem %msg', - 'broadcast %msg and wait': - 'poslat všem %msg a čekat', + 'when I receive %msgHat %message': + 'po přijetí zprávy %msgHat %message', + 'broadcast %msg %receive': + 'poslat %msg %receive', + 'broadcast %msg %receive and wait': + 'poslat %msg %receive a čekat', 'Message name': 'název zprávy', 'message': diff --git a/locale/lang-de.js b/locale/lang-de.js index d6436e2b..f6e00c64 100644 --- a/locale/lang-de.js +++ b/locale/lang-de.js @@ -6,7 +6,7 @@ written by Jens Mönig - Copyright (C) 2021 by Jens Mönig + Copyright (C) 2022 by Jens Mönig This file is part of Snap!. @@ -185,7 +185,7 @@ SnapTranslator.dict.de = { 'translator_e-mail': 'jens@moenig.org, jadga.huegle@sap.com', // optional 'last_changed': - '2021-06-11', // this, too, will appear in the Translators tab + '2022-01-31', // this, too, will appear in the Translators tab // GUI // control bar: @@ -469,14 +469,14 @@ SnapTranslator.dict.de = { 'setze Stiftfarbe auf %clr', 'set background color to %clr': 'setze Hintergrundfarbe auf %clr', - 'change pen %hsva by %n': - '\u00e4ndere Stift %hsva um %n', - 'change background %hsva by %n': - '\u00e4ndere Hintergrund %hsva um %n', - 'set pen %hsva to %n': - 'setze Stift %hsva auf %n', - 'set background %hsva to %n': - 'setze Hintergrund %hsva auf %n', + 'change pen %clrdim by %n': + '\u00e4ndere Stift %clrdim um %n', + 'change background %clrdim by %n': + '\u00e4ndere Hintergrund %clrdim um %n', + 'set pen %clrdim to %n': + 'setze Stift %clrdim auf %n', + 'set background %clrdim to %n': + 'setze Hintergrund %clrdim auf %n', 'pen %pen': 'Stift %pen', 'change pen size by %n': @@ -499,8 +499,10 @@ SnapTranslator.dict.de = { // control: 'when %greenflag clicked': 'Wenn %greenflag angeklickt', - 'when %keyHat key pressed': - 'Wenn Taste %keyHat gedr\u00fcckt', + 'when %keyHat key pressed %keyName': + 'Wenn Taste %keyHat gedr\u00fcckt %keyName', + 'key': + 'Taste', 'when I am %interaction': 'Wenn ich %interaction werde', 'clicked': @@ -521,14 +523,14 @@ SnapTranslator.dict.de = { 'gestoppt', 'when %b': 'Wenn %b', - 'when I receive %msgHat': - 'Wenn ich %msgHat empfange', - 'broadcast %msg': - 'sende %msg an alle', - 'broadcast %msg and wait': - 'sende %msg an alle und warte', - 'send %msg to %spr': - 'sende %msg an %spr', + 'when I receive %msgHat %message': + 'Wenn ich %msgHat empfange %message', + 'broadcast %msg %receive': + 'sende %msg %receive', + 'broadcast %msg %receive and wait': + 'sende %msg %receive und warte', + 'to': + 'an', 'Message name': 'Nachricht', 'message': @@ -558,7 +560,7 @@ SnapTranslator.dict.de = { 'stop %stopChoices': 'stoppe %stopChoices', 'all': - 'alles', + 'alle', 'this script': 'dieses Skript', 'this block': @@ -593,6 +595,14 @@ SnapTranslator.dict.de = { 'selbst', 'delete this clone': 'entferne diesen Klon', + 'switch to scene %scn %send': + 'wechsle zur Szene %scn %send', + 'and send': + 'und sende', + 'next': + 'nächste', + 'previous': + 'vorherige', 'tell %spr to %cmdRing %inputs': 'lasse %spr %cmdRing tun %inputs', 'ask %spr for %repRing %inputs': @@ -715,6 +725,14 @@ SnapTranslator.dict.de = { 'Rahmenz\u00e4hler', 'log pen vectors': 'Vektoraufzeichnung', + '%block of block %repRing': + '%block von Block %repRing', + 'definition': + 'Definition', + 'custom?': + 'benutzerdefiniert?', + 'global?': + 'global?', // operators: '%n mod %n': @@ -914,7 +932,7 @@ SnapTranslator.dict.de = { 'save global custom block\ndefinitions as XML': 'globale Benutzerblockdefinitionen\nals XML-Datei speichern', 'Unused blocks...': - 'nicht verwendete Bl\u00f6cke...', + 'Nicht verwendete Bl\u00f6cke...', 'find unused global custom blocks\nand remove their definitions': 'nicht verwendete Bl\u00f6cke finden\nund entfernen', 'Remove unused blocks': @@ -923,6 +941,18 @@ SnapTranslator.dict.de = { 'momentan keine nicht verwendeten\nBl\u00f6cke in diesem Projekt', 'unused block(s) removed': 'nicht verwendete Bl\u00f6cke entfernt', + 'Hide blocks...': + 'Blöcke verbergen...', + 'New category...': + 'Neue Kategorie...', + 'Remove a category...': + 'Kategorie löschen...', + 'Scenes...': + 'Szenen...', + 'New scene': + 'Neue Szene', + 'Add scene...': + 'Szene hinzufügen...', 'Export summary...': 'Zusammenfassung exportieren...', 'save a summary\nof this project': @@ -1067,14 +1097,6 @@ SnapTranslator.dict.de = { 'einschalten, um immer die Datentypen\nim Input-Dialog zu sehen', 'uncheck to use the input\ndialog in short form': 'ausschalten f\u00fcr kurzen\nInput-Dialog', - 'Virtual keyboard': - 'Virtuelle Tastatur', - 'uncheck to disable\nvirtual keyboard support\nfor mobile devices': - 'ausschalten um die virtuelle\nTastatur auf mobilen Ger\u00e4ten\n' - + 'zu sperren', - 'check to enable\nvirtual keyboard support\nfor mobile devices': - 'einschalten um die virtuelle\nTastatur auf mobilen Ger\u00e4ten\n' - + 'zu erm\u00f6glichen', 'JavaScript extensions': 'JavaScript Erweiterungen', 'check to support\nnative JavaScript functions': @@ -1083,6 +1105,12 @@ SnapTranslator.dict.de = { 'ausschalten, um potentiell gefährliche\nJavaScript-Funktionen zu verhindern', 'JavaScript extensions for Snap!\nare turned off': 'JavaScript Erweiterungen für Snap!\nsind ausgeschaltet', + 'Extension blocks': + 'Erweiterungsblöcke', + 'uncheck to hide extension\nprimitives in the palette': + 'ausschalten um Blöcke für Erweiterungen\nin der Palette zu verbergen', + 'check to show extension\nprimitives in the palette': + 'einschalten um Blöcke für Erweiterungen\nin der Palette anzuzeigen', 'Input sliders': 'Eingabeschieber', 'uncheck to disable\ninput sliders for\nentry fields': @@ -1137,12 +1165,6 @@ SnapTranslator.dict.de = { 'verhindert, dass unvollendete\nSkripte erneut gestartet werden', 'check to disallow\nscript reentrance': 'verhindert, dass unvollendete\nSkripte erneut gestartet werden', - 'Prefer smooth animations': - 'Fixe Framerate', - 'uncheck for greater speed\nat variable frame rates': - 'ausschalten, um Animationen \ndynamischer auszuf\u00fchren', - 'check for smooth, predictable\nanimations across computers': - 'einschalten, damit Animationen\n\u00fcberall gleich laufen', 'Flat line ends': 'Flache Pinselstriche', 'check for flat ends of lines': @@ -1165,7 +1187,36 @@ SnapTranslator.dict.de = { 'ausschalten, um Malstiftbewegungen\nnicht mehr aufzuzeichnen', 'check to turn on\nlogging pen vectors': 'einschalten, um Malstiftbewegungen\nals Vektor aufzuzeichnen', - + 'Single palette': + 'Einheitliche Palette', + 'check to show all blocks in a single palette': + 'einschalten, um alle Blöcke in\neiner einzigen Palette zu sehen', + 'uncheck to show only the selected category\'s blocks': + 'ausschalten, um nur die Blöcke der ausgewählten Kategorie zu sehen', + 'Show categories': + 'Kategorien anzeigen', + 'uncheck to hide\ncategory names\nin the palette': + 'ausschalten, um die\nNamen der Kategorien\nin der Palette zu verbergen', + 'check to show\ncategory names\nin the palette': + 'einschalten, umd die\nNamen der Kategorien\nin der Palette anzuzeigen', + 'Show buttons': + 'Knöpfe anzeigen', + 'uncheck to hide buttons\nin the palette': + 'ausschalten, um Knöpfe in\nder Palette zu verbergen', + 'check to show buttons\nin the palette': + 'einschalten, um Knöpfe in\nder Palette anzuzeigen', + 'HSL pen color model': + 'HSL Farbmodell', + 'uncheck to switch pen colors\nand graphic effects to HSV': + 'ausschalten, um das Farbmodell\nfür den Malstift und die Grafikeffekte\nauf HSV zurückzusetzen', + 'check to switch pen colors\nand graphic effects to HSL': + 'einschalten, um das Farbmodell\nfür den Malstift und die Grafikeffekte\nauf HSL zu setzen', + 'Disable click-to-run': + 'Block-Klicks deaktivieren', + 'uncheck to enable\ndirectly running blocks\nby clicking on them': + 'ausschhalten, um direktes Ausführen\nvon Blöcken durch Anklicken\nzu ermöglichen', + 'check to disable\ndirectly running blocks\nby clicking on them': + 'einschhalten, um direktes Ausführen\nvon Blöcken durch Anklicken\nzu verhindern', // inputs 'with inputs': @@ -1184,10 +1235,28 @@ SnapTranslator.dict.de = { // palette: 'find blocks': 'Blöcke finden', - 'hide primitives': - 'Basisbl\u00f6cke ausblenden', - 'show primitives': - 'Basisbl\u00f6cke anzeigen', + 'hide blocks...': + 'Blöcke verbergen...', + 'Hide blocks in palette': + 'Blöcke verbergen', + 'unused': + 'nicht verwendete', + 'make a category...': + 'Neue Kategorie...', + 'New Category': + 'Neue Kategorie', + 'Blocks category name:': + 'Name der neuen Block-Gruppe:', + 'Category color': + 'Kategoriefarbe', + 'red': + 'rot', + 'green': + 'grün', + 'blue': + 'blau', + 'delete a category...': + 'Kategorie löschen...', // blocks: 'help...': @@ -1246,6 +1315,12 @@ SnapTranslator.dict.de = { 'mit allen verwendeten Blöcken', 'edit...': 'Bearbeiten...', + 'translations...': + 'Übersetzungen...', + 'block variables...': + 'Blockvariablen...', + 'in palette': + 'In der Palette', // sprites: 'edit': @@ -1755,6 +1830,8 @@ SnapTranslator.dict.de = { 'Sättigung', 'brightness': 'Helligkeit', + 'lightness': + 'Helligkeit', 'transparency': 'Transparenz', 'ghost': @@ -1769,6 +1846,8 @@ SnapTranslator.dict.de = { // keys 'space': 'Leertaste', + 'enter': + 'Eingabetaste', 'up arrow': 'Pfeil nach oben', 'down arrow': @@ -1919,6 +1998,10 @@ SnapTranslator.dict.de = { 'Pr\u00e4dikat', 'sprite': 'Objekt', + 'ring': + 'Ring', + 'nothing': + 'nichts', // list indices 'last': @@ -2014,5 +2097,79 @@ SnapTranslator.dict.de = { 'check to inherit\nfrom': 'einschalten, um zu erben\nvon', 'uncheck to\ndisinherit': - 'ausschalten, um \nnicht mehr zu erben' + 'ausschalten, um \nnicht mehr zu erben', + + // editing slots inside variadic inputs + 'insert a slot': + 'Ein Feld einfügen', + 'delete slot': + 'Feld löschen', + 'insert a variable': + 'Eine Variable einfügen', + 'delete variable': + 'Variable löschen', + 'variable': + 'Variable', + + // error messages + 'Error': + 'Fehler', + 'a variable of name \'': + 'Eine Variable mit dem Namen \'', + '\'\ndoes not exist in this context': + '\'\ngibt es an dieser Stelle nicht', + 'expecting a': + 'Erwarte', + 'but getting a': + 'bekomme aber', + 'expecting': + 'Erwarte', + 'input(s), but getting': + 'Input(s), bekomme aber', + 'Inside a custom block': + 'In einem benutzerdefinierten Block', + 'The question came up at': + 'Die Frage stellte sich bei', + 'continuations cannot be forked': + 'Continuations können nicht separat gestartet werden', + 'unable to convert to': + 'Kann die Liste nicht umwandeln in', + 'Request blocked': + 'Die Anfrage wurde blockiert', + 'cannot operate on a deleted sprite': + 'kann nicht mit einem gelöschten Objekt arbeiten', + 'cannot send media,\nsprites or procedures\nto another scene': + 'Kann keine Medien, Objekte oder Programme\nan eine andere Szene senden', + 'unsupported attribute': + 'Attribut wird nicht unterstützt', + 'unable to nest\n(disabled or circular?)': + 'Kann nicht verschachteln\n(ausgeschaltet oder zirkulär?)', + 'unable to inherit\n(disabled or circular?)': + 'Kann nicht erben\n(ausgeschaltet oder zirkulär?)', + 'is read-only': + 'kann nur gelesen werden', + 'is not a valid option': + 'ist keine erlaubte Auswahl', + 'unsupported data type': + 'Nicht unterstützter Datentyp', + 'expecting a finite number\nbut getting Infinity or NaN': + 'Erwarte eine endliche Zahl\nbekomme aber Unendlich oder eine Nicht-Zahl', + 'the predicate takes\ntoo long for a\ncustom hat block': + 'Das Prädikat dauert zu lang für einen\nbenutzerdefinierten Ereignisblock', + 'missing / unspecified extension': + 'Fehlende / undefinierte Erweiterung', + 'reporter didn\'t report': + 'Der Rückgabewert fehlt bei einer Funktion', + 'a custom block definition is missing': + 'Ein Block ist undefiniert', + 'exceeding maximum number of clones': + 'Die maximale Anzahl von Klonen wird überschritten', + 'can only write text or numbers, not a': + 'Kann nur Text oder Zahlen schreiben, kein', + 'unsupported graphic effect': + 'Nicht unterstützter Grafikeffekt', + 'setting the rotation center requires a costume': + 'Der Drehpunkt kann nur zusammen\nmit einem Kostüm gesetzt werden', + 'Web Audio API is not supported\nin this browser': + 'Das Web Audio API wird von\ndiesem Browser nicht unterstützt' }; diff --git a/locale/lang-dk.js b/locale/lang-dk.js index ba2b11c2..8a154c0c 100644 --- a/locale/lang-dk.js +++ b/locale/lang-dk.js @@ -420,16 +420,16 @@ SnapTranslator.dict.dk = { // control: 'when %greenflag clicked': 'n\u00E5r %greenflag klikkes', - 'when %keyHat key pressed': - 'n\u00E5r %keyHat trykkes', - 'when I am clicked': - 'n\u00E5r jeg klikkes', - 'when I receive %msgHat': - 'n\u00E5r jeg modtager %msgHat', - 'broadcast %msg': - 'send %msg', - 'broadcast %msg and wait': - 'send %msg og vent', + 'when %keyHat key pressed %keyName': + 'n\u00E5r %keyHat trykkes %keyName', + 'when I am %interaction': + 'n\u00E5r jeg %interaction', + 'when I receive %msgHat %message': + 'n\u00E5r jeg modtager %msgHat %message', + 'broadcast %msg %receive': + 'send %msg %receive', + 'broadcast %msg %receive and wait': + 'send %msg %receive og vent', 'Message name': 'Beskednavn', 'wait %n secs': diff --git a/locale/lang-el.js b/locale/lang-el.js index 43de2e38..3357cbec 100644 --- a/locale/lang-el.js +++ b/locale/lang-el.js @@ -464,10 +464,10 @@ SnapTranslator.dict.el = { 'θέσε το χρώμα του στυλού να είναι %clr', 'set background color to %clr': 'θέσε το χρώμα του υπόβαθρου να έιναι %clr', - 'change pen %hsva by %n': - 'άλλαξε %hsva του στυλού κατά %n', - 'change background %hsva by %n': - 'άλλαξε υπόβαθρο %hsva κατά %n', + 'change pen %clrdim by %n': + 'άλλαξε %clrdim του στυλού κατά %n', + 'change background %clrdim by %n': + 'άλλαξε υπόβαθρο %clrdim κατά %n', 'hue': 'απόχρωση', 'saturation': @@ -476,14 +476,14 @@ SnapTranslator.dict.el = { 'φωτεινότητα' , 'transparency': 'διαφάνεια', - 'set pen %hsva to %n': - 'θέσε %hsva του στυλού να είναι %n', + 'set pen %clrdim to %n': + 'θέσε %clrdim του στυλού να είναι %n', 'change pen shade by %n': 'άλλαξε την σκιά του στυλού κατά %n', 'set pen shade to %n': 'θέσε την σκιά του στυλού να είναι %n', - 'set background %hsva to %n': - 'θέσε υπόβαθρο %hsva να είναι %n', + 'set background %clrdim to %n': + 'θέσε υπόβαθρο %clrdim να είναι %n', 'pen %pen': 'στυλό %pen', 'change pen size by %n': @@ -504,8 +504,8 @@ SnapTranslator.dict.el = { // control: 'when %greenflag clicked': 'όταν το %greenflag πατηθεί', - 'when %keyHat key pressed': - 'όταν το %keyHat πλήκτρο πατηθεί', + 'when %keyHat key pressed %keyName': + 'όταν το %keyHat πλήκτρο πατηθεί %keyName', 'when I am %interaction': 'όταν μου συμβεί %interaction', 'clicked': @@ -526,12 +526,14 @@ SnapTranslator.dict.el = { 'σταματημένο', 'when %b': 'όταν %b', - 'when I receive %msgHat': - 'όταν δεχτώ %msgHat', - 'broadcast %msg': - 'στείλε το %msg', - 'broadcast %msg and wait': - 'στείλε το %msg και περίμενε', + 'when I receive %msgHat %message': + 'όταν δεχτώ %msgHat %message', + 'broadcast %msg %receive': + 'στείλε το %msg %receive', + 'broadcast %msg %receive and wait': + 'στείλε το %msg %receive και περίμενε', + 'to': + 'στο', 'send %msg to %spr': 'αποστολή του %msg στο %spr', 'Message name': diff --git a/locale/lang-eo.js b/locale/lang-eo.js index cec9eaab..141e38cd 100644 --- a/locale/lang-eo.js +++ b/locale/lang-eo.js @@ -419,8 +419,8 @@ SnapTranslator.dict.eo = { // control: 'when %greenflag clicked': 'Kiam %greenflag estas alklakita', - 'when %keyHat key pressed': - 'se %keyHat klavo estas premita', + 'when %keyHat key pressed %keyName': + 'se %keyHat klavo estas premita %keyName', 'when I am %interaction': 'Dum mi estas %interaction', 'clicked': @@ -435,12 +435,12 @@ SnapTranslator.dict.eo = { 'lasita de musa montrilo', 'when %b': 'kiam %b', - 'when I receive %msgHat': - 'Kiam mi ricevas %msgHat', - 'broadcast %msg': - 'elsendi %msg al \u0109iuj', - 'broadcast %msg and wait': - 'elsendi %msg al \u0109iuj kaj atendi', + 'when I receive %msgHat %message': + 'Kiam mi ricevas %msgHat %message', + 'broadcast %msg %receive': + 'elsendi %msg %receive', + 'broadcast %msg %receive and wait': + 'elsendi %msg %receive kaj atendi', 'Message name': 'Mesa\u011donomo', 'message': diff --git a/locale/lang-es.js b/locale/lang-es.js index 896d46ad..7496a3a2 100755 --- a/locale/lang-es.js +++ b/locale/lang-es.js @@ -576,18 +576,20 @@ SnapTranslator.dict.es = { // control: 'when %greenflag clicked': 'cuando se pulse %greenflag', - 'when %keyHat key pressed': - 'cuando se pulse la tecla %keyHat', + 'when %keyHat key pressed %keyName': + 'cuando se pulse la tecla %keyHat %keyName', 'when I am %interaction': 'cuando me %interaction', 'when %b': 'cuando %b', - 'when I receive %msgHat': - 'cuando me llegue %msgHat', - 'broadcast %msg': - 'enviar mensaje %msg', - 'broadcast %msg and wait': - 'enviar mensaje %msg y esperar', + 'when I receive %msgHat %message': + 'cuando me llegue %msgHat %message', + 'broadcast %msg %receive': + 'enviar mensaje %msg %receive', + 'broadcast %msg %receive and wait': + 'enviar mensaje %msg %receive y esperar', + 'to': + 'a', 'message': 'mensaje', 'warp %c': @@ -2779,10 +2781,10 @@ SnapTranslator.dict.es = { '¿lápiz bajado?', 'hue': 'tonalidad', - 'change pen %hsva by %n': - 'cambiar %hsva del lápiz en %n', - 'set pen %hsva to %n': - 'fijar %hsva del lápiz a %n', + 'change pen %clrdim by %n': + 'cambiar %clrdim del lápiz en %n', + 'set pen %clrdim to %n': + 'fijar %clrdim del lápiz a %n', 'write %s size %n': 'escribir %s con tamaño %n', 'paste on %spr': diff --git a/locale/lang-et.js b/locale/lang-et.js index 1bea4e81..7f4e22f5 100644 --- a/locale/lang-et.js +++ b/locale/lang-et.js @@ -239,8 +239,8 @@ SnapTranslator.dict.et = { // control: 'when %greenflag clicked': 'kui vajutatakse %greenflag', - 'when %keyHat key pressed': - 'kui vajutatakse klahvi %keyHat', + 'when %keyHat key pressed %keyName': + 'kui vajutatakse klahvi %keyHat %keyName', 'when I am %interaction': 'kui minul %interaction', 'clicked': @@ -255,12 +255,12 @@ SnapTranslator.dict.et = { 'hiirekursor lahkub', 'when %b': 'kui %b', - 'when I receive %msgHat': - 'kui saan teate %msgHat', - 'broadcast %msg': - 'saada teade %msg', - 'broadcast %msg and wait': - 'saada teade %msg ja oota', + 'when I receive %msgHat %message': + 'kui saan teate %msgHat %message', + 'broadcast %msg %receive': + 'saada teade %msg %receive', + 'broadcast %msg %receive and wait': + 'saada teade %msg %receive ja oota', 'Message name': 'Teate nimi', 'message': diff --git a/locale/lang-eu.js b/locale/lang-eu.js index db1a4662..c20b0249 100644 --- a/locale/lang-eu.js +++ b/locale/lang-eu.js @@ -538,8 +538,8 @@ SnapTranslator.dict.eu = { // control: 'when %greenflag clicked': '%greenflag klik egitean', - 'when %keyHat key pressed': - '%keyHat tekla sakatzean', + 'when %keyHat key pressed %keyName': + '%keyHat tekla sakatzean %keyName', 'when I am %interaction': 'niri %interaction', 'clicked': @@ -558,12 +558,12 @@ SnapTranslator.dict.eu = { 'gorantz korritzean', 'when %b': '%b denean', - 'when I receive %msgHat': - '%msgHat jasotzen dudanean', - 'broadcast %msg': - 'igorri %msg', - 'broadcast %msg and wait': - 'igorri %msg eta itxaron', + 'when I receive %msgHat %message': + '%msgHat jasotzen dudanean %message', + 'broadcast %msg %receive': + 'igorri %msg %receive', + 'broadcast %msg %receive and wait': + 'igorri %msg %receive eta itxaron', 'Message name': 'Mezuaren izena', 'message': diff --git a/locale/lang-fi.js b/locale/lang-fi.js index 44d8978e..6082a55d 100644 --- a/locale/lang-fi.js +++ b/locale/lang-fi.js @@ -417,16 +417,18 @@ SnapTranslator.dict.fi = { // control: 'when %greenflag clicked': 'kun klikataan %greenflag', - 'when %keyHat key pressed': - 'kun painetaan %keyHat', - 'when I am clicked': - 'kun minua klikataan', - 'when I receive %msgHat': - 'kun vastaanotan sanoman %msgHat', - 'broadcast %msg': - 'l\u00e4het\u00e4 sanoma %msg', - 'broadcast %msg and wait': - 'l\u00e4het\u00e4 sanoma %msg ja odota', + 'when %keyHat key pressed %keyName': + 'kun painetaan %keyHat %keyName', + 'when I am %interaction': + 'kun minua %interaction', + 'clicked': + 'klikataan', + 'when I receive %msgHat %message': + 'kun vastaanotan sanoman %msgHat %message', + 'broadcast %msg %receive': + 'l\u00e4het\u00e4 sanoma %msg %receive', + 'broadcast %msg %receive and wait': + 'l\u00e4het\u00e4 sanoma %msg %receive ja odota', 'Message name': 'Sanoma', 'message': diff --git a/locale/lang-fr.js b/locale/lang-fr.js index 58ae0856..3a3e8aa2 100644 --- a/locale/lang-fr.js +++ b/locale/lang-fr.js @@ -417,14 +417,14 @@ SnapTranslator.dict.fr = { 'mettre la couleur %clr pour le stylo', 'change pen color by %n': 'ajouter %n \u00E0 la couleur du stylo', - 'set pen %hsva to %n': - 'mettre la %hsva du stylo à %n', + 'set pen %clrdim to %n': + 'mettre la %clrdim du stylo à %n', 'hue': 'teinte', 'transparency': 'transparence', - 'change pen %hsva by %n': - 'ajouter à la %hsva du stylo %n', + 'change pen %clrdim by %n': + 'ajouter à la %clrdim du stylo %n', 'change pen shade by %n': 'ajouter %n \u00E0 l\u0027intensit\u00E9 du stylo ', @@ -442,18 +442,20 @@ SnapTranslator.dict.fr = { // control: 'when %greenflag clicked': 'Quand %greenflag est press\u00E9', - 'when %keyHat key pressed': - 'Quand %keyHat est press\u00E9', + 'when %keyHat key pressed %keyName': + 'Quand %keyHat est press\u00E9 %keyName', 'when I am clicked': 'Quand je suis press\u00E9 ', 'when I am %interaction': 'Quand je suis %interaction', - 'when I receive %msgHat': - 'Quand je re\u00E7ois %msgHat', - 'broadcast %msg': - 'envoyer \u00E0 tous %msg', - 'broadcast %msg and wait': - 'envoyer \u00E0 tous %msg et attendre', + 'when I receive %msgHat %message': + 'Quand je re\u00E7ois %msgHat %message', + 'broadcast %msg %receive': + 'envoyer %msg %receive', + 'broadcast %msg %receive and wait': + 'envoyer %msg %receive et attendre', + 'to': + '\u00E0', 'Message name': 'Nom du message', 'wait %n secs': @@ -1045,7 +1047,7 @@ SnapTranslator.dict.fr = { 'select': 's\u00E9lectionner', 'all': - 'tout', + 'tous', 'none': 'aucun', diff --git a/locale/lang-gl.js b/locale/lang-gl.js index 18b882f6..49b8514d 100644 --- a/locale/lang-gl.js +++ b/locale/lang-gl.js @@ -422,10 +422,10 @@ SnapTranslator.dict.gl = { 'cambiar á cor do lapis a %n', 'set pen color to %n': 'fixar a cor do lapis a %n', - 'change pen %hsva by %n': - 'cambiar %hsva do lapis a %n', - 'set pen %hsva to %n': - 'fixar %hsva do lapis a %n', + 'change pen %clrdim by %n': + 'cambiar %clrdim do lapis a %n', + 'set pen %clrdim to %n': + 'fixar %clrdim do lapis a %n', 'change pen shade by %n': 'cambiar á intensidade do lapis en %n', 'set pen shade to %n': @@ -436,10 +436,10 @@ SnapTranslator.dict.gl = { 'fixar o tamaño do lapis en %n', 'set background color to %clr': 'fixar a cor do fondo a %clr', - 'change background %hsva by %n': - 'cambiar %hsva do fondo en %n', - 'set background %hsva to %n': - 'fixar %hsva do fondo a %n', + 'change background %clrdim by %n': + 'cambiar %clrdim do fondo en %n', + 'set background %clrdim to %n': + 'fixar %clrdim do fondo a %n', 'stamp': 'selar', 'fill': @@ -448,8 +448,8 @@ SnapTranslator.dict.gl = { // control: 'when %greenflag clicked': 'ao facer clic en %greenflag', - 'when %keyHat key pressed': - 'ao premer a tecla %keyHat', + 'when %keyHat key pressed %keyName': + 'ao premer a tecla %keyHat %keyName', 'when I am %interaction': 'ao %interaction nesta personaxe', 'clicked': @@ -464,12 +464,14 @@ SnapTranslator.dict.gl = { 'separar o rato', 'when %b': 'cando %b', - 'when I receive %msgHat': - 'ao recibir %msgHat', - 'broadcast %msg': - 'enviar a todos %msg', - 'broadcast %msg and wait': - 'enviar a todos %msg e agardar', + 'when I receive %msgHat %message': + 'ao recibir %msgHat %message', + 'broadcast %msg %receive': + 'enviar %msg %receive', + 'broadcast %msg %receive and wait': + 'enviar %msg %receive e agardar', + 'to': + 'a', 'Message name': 'Nome da mensaxe', 'message': diff --git a/locale/lang-he.js b/locale/lang-he.js index abdc2d4b..27e59f55 100644 --- a/locale/lang-he.js +++ b/locale/lang-he.js @@ -494,14 +494,14 @@ SnapTranslator.dict.he = { 'עט_למטה?', 'set background color to %clr': 'קבע_צבע_רקע %clr', - 'change pen %hsva by %n': - 'שנה_עט_ב %hsva %n', - 'change background %hsva by %n': - 'שנה_רקע_ב %hsva %n', - 'set pen %hsva to %n': - 'קבע_עט_ל %hsva %n', - 'set background %hsva to %n': - 'קבע_רקע_ל %hsva %n', + 'change pen %clrdim by %n': + 'שנה_עט_ב %clrdim %n', + 'change background %clrdim by %n': + 'שנה_רקע_ב %clrdim %n', + 'set pen %clrdim to %n': + 'קבע_עט_ל %clrdim %n', + 'set background %clrdim to %n': + 'קבע_רקע_ל %clrdim %n', 'pen %pen': 'עט %pen', 'fill': @@ -517,8 +517,8 @@ SnapTranslator.dict.he = { // control: 'when %greenflag clicked': 'נלחץ %greenflag כאשר_כפתור', - 'when %keyHat key pressed': - 'נלחץ %keyHat כאשר_כפתור', + 'when %keyHat key pressed %keyName': + 'נלחץ %keyHat כאשר_כפתור %keyName', 'when I am %interaction': 'כאשר_אני %interaction', 'clicked': @@ -533,12 +533,12 @@ SnapTranslator.dict.he = { 'עכבר-יוצא', 'when %b': '%b כאשר', - 'when I receive %msgHat': - '%msgHat כאשר_אני_מקבל', - 'broadcast %msg': - 'שדר_הודעה %msg', - 'broadcast %msg and wait': - 'והמתן %msg שדר_הודעה', + 'when I receive %msgHat %message': + '%message %msgHat כאשר_אני_מקבל', + 'broadcast %msg %receive': + 'שדר_הודעה %msg %receive', + 'broadcast %msg %receive and wait': + 'והמתן %msg %receive שדר_הודעה', 'Message name': 'שם ההודעה', 'message': diff --git a/locale/lang-hi.js b/locale/lang-hi.js index fb0401a2..7fb677bd 100644 --- a/locale/lang-hi.js +++ b/locale/lang-hi.js @@ -466,14 +466,14 @@ SnapTranslator.dict.hi = { 'पेन रंग सेट करें %clr', 'set background color to %clr': 'पकरने के लिए पृष्ठभूमि रंग सेट %clr', - 'change pen %hsva by %n': - 'कलम बदल दो %hsva से %n', - 'change background %hsva by %n': - 'पृष्ठभूमि का रंग बदलें %hsva से %n', - 'set pen %hsva to %n': - ' पेन सेट %hsva सेवा मेरे %n', - 'set background %hsva to %n': - 'पृष्ठभूमि सेट %hsva सेवा मेरे %n', + 'change pen %clrdim by %n': + 'कलम बदल दो %clrdim से %n', + 'change background %clrdim by %n': + 'पृष्ठभूमि का रंग बदलें %clrdim से %n', + 'set pen %clrdim to %n': + ' पेन सेट %clrdim सेवा मेरे %n', + 'set background %clrdim to %n': + 'पृष्ठभूमि सेट %clrdim सेवा मेरे %n', 'pen %pen': 'कलम %pen', 'change pen size by %n': @@ -496,8 +496,8 @@ SnapTranslator.dict.hi = { // control: 'when %greenflag clicked': 'जब %greenflag क्लिक किया', - 'when %keyHat key pressed': - 'जब %keyHat दबाई जाती है', + 'when %keyHat key pressed %keyName': + 'जब %keyHat दबाई जाती है %keyName', 'when I am %interaction': 'जब मैं %interaction werde', 'clicked': @@ -518,12 +518,12 @@ SnapTranslator.dict.hi = { 'रोका हुआ', 'when %b': 'जब %b', - 'when I receive %msgHat': - 'जब मैं प्राप्त करता हूँ %msgHat ', - 'broadcast %msg': - 'प्रसारण %msg', - 'broadcast %msg and wait': - 'प्रसारण %msg और रुको', + 'when I receive %msgHat %message': + 'जब मैं प्राप्त करता हूँ %msgHat %message', + 'broadcast %msg %receive': + 'प्रसारण %msg %receive', + 'broadcast %msg %receive and wait': + 'प्रसारण %msg %receive और रुको', 'send %msg to %spr': 'भेजने %msg को %spr', 'Message name': diff --git a/locale/lang-hr.js b/locale/lang-hr.js index 568da5fe..dd39f55d 100755 --- a/locale/lang-hr.js +++ b/locale/lang-hr.js @@ -417,8 +417,8 @@ SnapTranslator.dict.hr = { // control: 'when %greenflag clicked': 'kad kliknem na %greenflag', - 'when %keyHat key pressed': - 'kad pritisnem tipku %keyHat', + 'when %keyHat key pressed %keyName': + 'kad pritisnem tipku %keyHat %keyName', 'when I am %interaction': 'kad me %interaction', 'clicked': @@ -431,12 +431,12 @@ SnapTranslator.dict.hr = { 'mi\u0161 posjeti', 'mouse-departed': 'mi\u0161 napusti', - 'when I receive %msgHat': - 'kad spazim doga\u0111aj %msgHat', - 'broadcast %msg': - 'objavljujem doga\u0111aj %msg', - 'broadcast %msg and wait': - 'objavljujem doga\u0111aj %msg i \u010Dekam', + 'when I receive %msgHat %message': + 'kad spazim doga\u0111aj %msgHat %message', + 'broadcast %msg %receive': + 'objavljujem doga\u0111aj %msg %receive', + 'broadcast %msg %receive and wait': + 'objavljujem doga\u0111aj %msg %receive i \u010Dekam', 'Message name': 'Ime doga\u0111aja', 'message': diff --git a/locale/lang-hu.js b/locale/lang-hu.js index eb4bf417..eed7838b 100644 --- a/locale/lang-hu.js +++ b/locale/lang-hu.js @@ -4,9 +4,9 @@ A SNAP! magyar fordítása - written by Makány György + written by Makány György, Faragó Attila - Copyright (C) 2015 by Makány György + Copyright (C) 2015-2022 by Makány György, Faragó Attila This file is part of Snap!. @@ -181,11 +181,11 @@ SnapTranslator.dict.hu = { 'language_name': 'Magyar', // the name as it should appear in the language menu 'language_translator': - 'Makány György', // your name for the Translators tab + 'Makány György, Faragó Attila', // your name for the Translators tab 'translator_e-mail': - 'makany.gyorgy@gmail.com', // optional + 'makany.gyorgy@gmail.com, attila.farago@sap.com', // optional 'last_changed': - '2015-07-26', // this, too, will appear in the Translators tab + '2022-01-25', // this, too, will appear in the Translators tab // GUI // control bar: @@ -218,13 +218,15 @@ SnapTranslator.dict.hu = { // editor: 'draggable': - 'vonszolható', + 'húzható', // tabs: 'Scripts': 'Feladatok', 'Costumes': 'Jelmezek', + 'Backgrounds': + 'Hátterek', 'Sounds': 'Hangok', @@ -246,6 +248,14 @@ SnapTranslator.dict.hu = { 'add a new sprite': 'Új szereplő', + 'add a new Turtle sprite': + 'új teknőc rajzának hozzáadása', + 'paint a new sprite': + 'új alakzat rajzolása', + 'take a camera snapshot and\nimport it as a new sprite': + 'készíts fotót a webkamerával és\nimportáld új szereplőként', + + // tab help 'costumes tab help': 'Kép importálása egy webhelyről vagy a számítógépről', @@ -313,7 +323,7 @@ SnapTranslator.dict.hu = { 'set y to %n': 'y legyen %n', 'if on edge, bounce': - 'ha szélen vagy, pattanj vissza', + 'ha szélén vagy, pattanj vissza', 'x position': 'x hely', 'y position': @@ -340,12 +350,20 @@ SnapTranslator.dict.hu = { 'Szia!', 'Hmm...': 'Hmm...', + '%img of costume %cst': + '%img jelmez %cst', + 'new costume %l width %dim height %dim': + 'új jelmez %l szélesség %dim magasság %dim', + 'stretch %cst x: %n y: %n %': + 'nyújtsd %cst x: %n y: %n %', 'change %eff effect by %n': '%eff hatás változzon %n', 'set %eff effect to %n': '%eff hatás legyen %n', 'clear graphic effects': 'töröld a grafikus hatásokat', + '%eff effect': + '%eff hatás', 'change size by %n': 'a méret változzon %n', 'set size to %n %': @@ -356,17 +374,28 @@ SnapTranslator.dict.hu = { 'jelenj meg', 'hide': 'tűnj el', - 'go to front': - 'kerülj legelőre', + 'shown?': + 'látható?', + 'go to %layer layer': + 'kerülj %layer', + 'front': + 'előre', + 'back': + 'hátulra', 'go back %n layers': 'kerülj %n szinttel hátrébb', 'development mode \ndebugging primitives:': - 'Fejlesztő mód \nblokkok hibakeresése', + 'fejlesztő mód \nblokkok hibakeresése', 'console log %mult%s': 'konzolra írás: %mult%', 'alert %mult%s': - 'Felbukkanó: %mult%', + 'felbukkanó: %mult%', + + 'pixels': + 'pixelek', + 'current': + 'jelenlegi', // sound: 'play sound %snd': @@ -377,8 +406,22 @@ SnapTranslator.dict.hu = { 'minden hangot állíts le', 'rest for %n beats': 'szünetelj %n ütemet', - 'play note %n for %n beats': - 'szóljon %n %n ütemig', + 'play sound %snd at %rate Hz': + 'játszd le %snd hangot %rate Hz mintavételezéssel', + '%aa of sound %snd': + 'hangminta %aa %snd', + 'duration': + 'hossz', + 'length': + 'elemek száma', + 'number of channels': + 'csatornák száma', + 'new sound %l rate %rate Hz': + 'új hang %l mintavételezéssel %rate Hz', + 'play note %note for %n beats': + 'játszd le a %note hangot %n ütemig', + 'set instrument to %inst': + 'hangeszközt állítsd: %inst', 'change tempo by %n': 'a tempó változzon: %n', 'set tempo to %n bpm': @@ -386,6 +429,33 @@ SnapTranslator.dict.hu = { 'tempo': 'tempó', + 'change volume by %n': + 'hangerő változzon: %n', + 'set volume to %n %': + 'hangerő legyen %n %', + 'change balance by %n': + 'hangmérleg változzon: %n', + 'set balance to %n': + 'hangmérleg legyen %n', + 'balance': + 'hangmérleg', + 'play frequency %n Hz': + 'játszt le frekvenciát %n Hz', + 'stop frequency': + 'állítsd le a frekvenciát', + 'play %n Hz for %n secs': + 'játssz %n Hz %n mp hosszan', + + // "instruments", i.e. wave forms + '(1) sine': + '(1) szinusz', + '(2) square': + '(2) négyzetes', + '(3) sawtooth': + '(3) fűrészfog', + '(4) triangle': + '(4) háromszög', + // pen: 'clear': 'töröld a rajzokat', @@ -393,46 +463,73 @@ SnapTranslator.dict.hu = { 'tollat le', 'pen up': 'tollat fel', + 'pen down?': + 'toll lent?', 'set pen color to %clr': - 'a tollszín legyen %clr', - 'change pen color by %n': - 'a tollszín változzon %n', - 'set pen color to %n': - 'a tollszín legyen %n', - 'change pen shade by %n': - 'a tollárnyalat változzon %n', - 'set pen shade to %n': - 'a tollárnyalat legyen %n', + 'tollszín legyen %clr', + 'set background color to %clr': + 'hátteret állítsd %clr', + 'change pen %clrdim by %n': + 'toll %clrdim változzon %n', + 'change background %clrdim by %n': + 'háttér %clrdim változzon %n', + 'set pen %clrdim to %n': + 'toll %clrdim legyen a %n', + 'set background %clrdim to %n': + 'háttér %clrdim legyen a %n', + 'pen %pen': + 'toll %pen', 'change pen size by %n': - 'a tollméret változzon %n', + 'tollméret változzon %n', 'set pen size to %n': - 'a tollméret legyen %n', + 'tollméret legyen %n', 'stamp': 'készíts lenyomatot', + 'fill': + 'kitöltés', + 'write %s size %n': + 'írd %s mérettel %n', + 'paste on %spr': + 'nyomtasd erre %spr', + 'cut from %spr': + 'vágd ki innen %spr', + 'pen vectors': + 'toll vektor', + // control: 'when %greenflag clicked': '%greenflag -ra kattintáskor', - 'when %keyHat key pressed': - '%keyHat lenyomásakor', + 'when %keyHat key pressed %keyName': + '%keyHat lenyomásakor %keyName', 'when I am %interaction': 'amikor %interaction ', 'clicked': 'rám kattintanak', 'pressed': - 'gombnyomás történik', + 'gombnyomásra', 'dropped': 'leejtenek', 'mouse-entered': 'az egér fölém kerül', 'mouse-departed': 'az egér lemegy rólam', - 'when I receive %msgHat': - '%msgHat üzenet érkezésekor', - 'broadcast %msg': - 'küldj mindenkinek %msg üzenetet', - 'broadcast %msg and wait': - 'küldj mindenkinek %msg üzenetet és várj', + 'scrolled-down': + 'lefelé görgetnek', + 'scrolled-up': + 'felfelé görgetnek', + 'stopped': + 'megállítottak', + 'when %b': + 'amikor %b', + 'when I receive %msgHat %message': + '%msgHat üzenet érkezésekor %message', + 'broadcast %msg %receive': + 'küldj mindenkinek %msg %receive üzenetet', + 'broadcast %msg %receive and wait': + 'küldj mindenkinek %msg %receive üzenetet és várj', + 'send %msg to %spr': + 'küldd %msg a szereplőnek %spr', 'Message name': 'Az üzenet neve', 'message': @@ -449,10 +546,14 @@ SnapTranslator.dict.hu = { 'ismételd %n -szer %loop', 'repeat until %b %loop': 'ismételd amíg %b %loop', + 'for %upvar = %n to %n %cla': + 'ciklus %upvar = %n tól %n ig %cla', 'if %b %c': 'ha %b %c', 'if %b %c else %c': 'ha %b %c különben %c', + 'if %b then %s else %s': + 'ha %b %s különben %s', 'report %s': 'jelents %s', 'stop %stopChoices': @@ -470,70 +571,168 @@ SnapTranslator.dict.hu = { 'other scripts in sprite': 'ennek a szereplőnek minden más feladata', 'pause all %pause': - 'Várakozzon minden %pause', + 'várakozz %pause', 'run %cmdRing %inputs': 'futtasd %cmdRing %inputs értékkel', 'launch %cmdRing %inputs': 'induljon %cmdRing %inputs', 'call %repRing %inputs': - 'hívd %repRing auf %inputs', + 'hívd %repRing %inputs', 'run %cmdRing w/continuation': - 'futtatás %cmdRing folytatásával', + 'futtasd %cmdRing folytatással', 'call %cmdRing w/continuation': - 'hívd meg %cmdRing folytatásával', + 'hívd meg %cmdRing folytatással', 'warp %c': - 'Warp %c', + 'gyorsítva %c', 'when I start as a clone': 'másolatként indítva', 'create a clone of %cln': 'készíts másolatot %cln', + 'a new clone of %cln': + 'új másolat %cln', 'myself': - 'magadról', + 'magam', 'delete this clone': 'töröld ezt a másolatot', + 'switch to scene %scn %send': + 'válts jelenetet %scn %send', + 'and send': + 'és küldd', + 'next': + 'következő', + 'previous': + 'előző', + + 'tell %spr to %cmdRing %inputs': + 'hajtsd végre %spr %cmdRing %inputs', + 'ask %spr for %repRing %inputs': + 'kérdezd le %spr %repRing %inputs', // sensing: 'touching %col ?': - 'érint %col színt?', + 'érint %col ?', 'touching %clr ?': 'érint %clr színt?', 'color %clr is touching %clr ?': '%clr szín érint %clr színt?', 'ask %s and wait': - 'Kérdezd meg %s és várj', + 'kérdezd meg %s és várj', 'what\'s your name?': 'Mi a neved?', 'answer': - 'Válasz', + 'válasz', 'mouse x': 'egér x', 'mouse y': 'egér y', 'mouse down?': - 'Egér lenyomva?', + 'egér lenyomva?', 'key %key pressed?': '%key gomb lenyomva?', - 'distance to %dst': - 'távolság: %dst', + '%rel to %dst': + '%rel ehhez %dst', + 'distance': + 'távolság', + 'ray length': + 'távolság a széléig', + '%asp at %loc' : + '%asp itt %loc', + 'r-g-b-a': + 'r-g-b-a szín', + 'sprites' : + 'Objekte', 'reset timer': - 'Nullázd az órát', + 'nullázd az órát', 'timer': - 'Stopper', + 'stopper', '%att of %spr': - '%att %spr objektumérték', + '%att itt %spr', + 'my %get': + 'saját %get', + 'object %self': + 'objektum %self', 'http:// %s': 'http:// %s', - 'turbo mode?': - 'Turbó mód?', - 'set turbo mode to %b': - '%b turbó módjának bekapcsolása', - + 'turbo mode': + 'turbo mód', + 'flat line ends': + 'egyszerű vonalvégződés', + 'is %setting on?': + '%setting bállítás bekapcsolva?', + 'set %setting to %b': + 'legyen %setting beállítás %b', + 'current %dates': + 'aktuális %dates', + 'year': + 'év', + 'month': + 'hónap', + 'date': + 'nap', + 'day of week': + 'a hét napja', + 'hour': + 'óra', + 'minute': + 'perc', + 'second': + 'másodperc', + 'time in milliseconds': + 'idő (ezredmásodpercben)', + 'microphone %audio': + 'mikrofon %audio', + 'volume': + 'hangerő', + 'note': + 'hangjegy', + 'frequency': + 'frekvencia', + 'samples': + 'hangminta', + 'sample rate': + 'mintavétel', + 'spectrum': + 'frekvenciaspektrum', + 'resolution': + 'felbontás', + 'Microphone resolution...': + 'Mikrofon felbontás...', + 'Microphone': + 'Mikrofon', + 'low': + 'alacsony', + 'high': + 'magas', + 'max': + 'max', + 'video %vid on %self': + 'video %vid ezen %self', + 'motion': + 'mozgás', + 'snap': + 'pillanatfelvétel', + 'set video transparency to %n': + 'legyen video átlátszósága %n', + 'video capture': + 'video felvétel', + 'mirror video': + 'video tükrözése', 'filtered for %clr': '%clr szín szűrése', 'stack size': - 'Veremméret', + 'veremméret', 'frames': - 'Keretek', + 'keretek', + 'log pen vectors': + 'toll vektorok mentése', + '%block of block %repRing': + 'blokk %block %repRing', + 'definition': + 'definíció', + 'custom?': + 'egyedi?', + 'global?': + 'globális?', // operators: '%n mod %n': @@ -545,11 +744,11 @@ SnapTranslator.dict.hu = { 'pick random %n to %n': 'véletlen %n és %n között', '%b and %b': - '%b ÉS %b', + '%b és %b', '%b or %b': - '%b VAGY %b', + '%b vagy %b', 'not %b': - 'NEM %b', + 'nem %b', 'true': 'igaz', 'false': @@ -559,7 +758,7 @@ SnapTranslator.dict.hu = { 'split %s by %delim': '%s szétvágása %delim jeleknél', 'hello': - 'szia', + 'hello', 'world': 'világ', 'letter %idx of %s': @@ -569,12 +768,17 @@ SnapTranslator.dict.hu = { 'unicode of %s': '%s Unicode-ra alakítva', 'unicode %n as letter': - 'Unicode %n betűként', + 'unicode %n betűként', 'is %s a %typ ?': '%s egy %typ ?', 'is %s identical to %s ?': '%s ugyanaz, mint %s ?', + 'JavaScript function ( %mult%s ) { %code }': + 'JavaScript függvény ( %mult%s ) { %code }', + 'compile %repRing': + 'fordítsd %repRing', + 'type of %s': 'típus: %s', @@ -585,6 +789,8 @@ SnapTranslator.dict.hu = { 'Változónév', 'Script variable name': 'Feladatváltozó név', + 'inherit %shd': + 'örököld %shd', 'Delete a variable': 'Változó törlése', @@ -602,18 +808,64 @@ SnapTranslator.dict.hu = { // lists: 'list %exp': 'lista %exp', + 'numbers from %n to %n': + 'számok ettől %n eddig %n', '%s in front of %l': '%s megelőzi %l', 'item %idx of %l': '%idx eleme a %l listának', 'all but first of %l': '%l elsőnkívüli elemei', - 'length of %l': - '%l hossza', + '%la of %l': + '%la itt %l', + 'rank': + 'rang', + 'dimensions': + 'dimenziók', + 'flatten': + 'laposít', + 'columns': + 'oszlopok', + 'reverse': + 'visszafelé', + 'lines': + 'sorok', '%l contains %s': - '%l tartalmazza %s -t', + '%l tartalmazza %s', 'thing': 'dolog', + 'is %l empty?': + 'üres %l ?', + 'index of %s in %l': + 'index %s itt %l', + 'map %repRing over %l': + 'képezd le %repRing erre %l', + 'keep items %predRing from %l': + 'válogasd ki az ilyen %predRing elemeket ebből %l', + 'find first item %predRing in %l': + 'keresd ki az első %predRing elemet ebből %l', + 'combine %l using %repRing': + 'kombináld %l így %repRing', + '%blitz map %repRing over %l': + '%blitz képezd le %repRing erre %l', + '%blitz keep items %predRing from %l': + '%blitz válogasd ki az ilyen %predRing elemeket ebből %l', + '%blitz find first item %predRing in %l': + '%blitz keresd ki az első %predRing elemet ebből %l', + '%blitz combine %l using %repRing': + '%blitz kombináld %l így %repRing', + 'for each %upvar in %l %cla': + 'minden elemre %upvar ebből %l %cla', + 'item': + 'elem', + 'value': + 'érték', + 'index': + 'index', + 'append %lists': + 'fűzd hozzá %lists', + 'reshape %l to %nums': + 'formáld át %l így %nums', 'add %s to %l': '%s hozzáadása %l listához', 'delete %ida of %l': @@ -669,46 +921,143 @@ SnapTranslator.dict.hu = { 'Projekt exportálása egyszerű szövegként...', 'Export project...': 'Projekt exportálása...', + 'save project data as XML\nto your downloads folder': + 'mentsd le a projektet XML formátumban\na letöltés mappába', 'show project data as XML\nin a new browser window': 'a projekt adatainak megtekintése\negy új böngészőablakban', 'Export blocks...': 'Blokk exportálása...', - 'show global custom block definitions as XML\nin a new browser window': - 'globális felhasználói blokk definíciók\nmegtekintése egy új böngészőablakban', - 'Import tools': - 'Eszközök importálása', - 'load the official library of\npowerful blocks': - 'a hivatalos könyvtári\nblokkok betöltése', + 'save global custom block\ndefinitions as XML': + 'mentsd el a saját blokkokat\nXML formátumban', + 'Unused blocks...': + 'Nem használt blokkok...', + 'find unused global custom blocks\nand remove their definitions': + 'keresd meg a nem használt blokkokat\nés töröld a definícióikat', + 'Remove unused blocks': + 'Töröld a nem használt blokkokat', + 'there are currently no unused\nglobal custom blocks in this project': + 'nem találtam nem használt saját blokkot a projektben', + 'unused block(s) removed': + 'nem használt blokkok törölve', + 'Hide blocks...': + 'Blokkok elrejtése...', + 'New category...': + 'Új kategória...', + 'Remove a category...': + 'Kategória törlése...', + 'Scenes...': + 'Jelenetek...', + 'New scene': + 'Új jelenet', + 'Add scene...': + 'Jelenet hozzáadása...', + 'Export summary...': + 'Összefoglaló exportálása...', + 'save a summary\nof this project': + 'mentsd el a projekt összefoglalóját', + 'Contents': + 'Tartalom', + 'Kind of': + 'Típus', + 'Part of': + 'Része', + 'Parts': + 'Részei', + 'Blocks': + 'Blokkok', + 'For all Sprites': + 'Minden szereplőre', 'Libraries...': 'Modulkönyvtárak...', + 'Select categories of additional blocks to add to this project.': + 'Válassza ki a projekthez adandó blokkok kategóriáit.', + 'Select a costume from the media library': + 'Válasszon ki egy jelmezt a médiakönyvtárból.', + 'Select a sound from the media library': + 'Válasszon ki egy hangot a médiakönyvtárból.', + 'Undelete sprites...': + 'Szereplők visszaállítása...', + 'Bring back deleted sprites': + 'Állítsd vissza a törölt szereplőket', + 'trash is empty': + 'üres a kuka', + 'Import library': 'Modulkönyvtár importálása', + 'Loading': + 'Betöltés', + 'Imported': + 'Importálva', + 'Iteration, composition': + 'Ismétlés, Kompozíció', + 'List utilities': + 'Lista eszközök', + 'Variadic reporters': + 'Változó függvények', + 'Web services access (https)': + 'Web service hozzáférés (https)', + 'Multi-branched conditional (switch)': + 'Több-ágú feltételes blokk (elágazás)', + 'LEAP Motion controller': + 'LEAP mozgásvezérlő', + 'Words, sentences': + 'Szavak, mondatok', + 'Catch errors in a script': + 'Programban hibák elkapása', + 'Set RGB or HSV pen color': + 'Toll RGB vagy HSV szín szerint', + 'Text to speech': + 'Szöveg beszéddé', + 'Provide 100 selected colors': + '100 kiválasztott szín', + 'Infinite precision integers, exact rationals, complex': + 'Végtelen pontosság a számokban', + 'Provide getters and setters for all GUI-controlled global settings': + 'Érték-olvasó és -író minden felületen megjelenő beállításhoz', + 'Allow multi-line text input to a block': + 'Többsoros szövegbevitel megengedése', + 'Create variables in program': + 'Programban változók létrehozása', + // cloud menu 'Login...': 'Belépés...', 'Signup...': 'Feliratkozás...', + 'Logout': + 'Kijelentkezés', + 'Change Password...': + 'Jelszó megváltoztatása...', + 'Reset Password...': + 'A jelszó alaphelyzetre állítása...', + 'Resend Verification Email...': + 'Ellenörző e-mail újraküldése...', + 'Open in Community Site': + 'Projektoldalon megnyítás', + // settings menu 'Language...': 'Nyelv...', 'Zoom blocks...': - 'Blokkok bővítése...', + 'Blokkok nagyítása...', + 'Fade blocks...': + 'Blokkok átlátszósága...', 'Stage size...': - 'A játéktér mérete...', + 'Játéktér mérete...', 'Stage size': - 'A játéktér mérete', + 'Játéktér mérete', 'Stage width': - 'A játéktér szélessége', + 'Játéktér szélessége', 'Stage height': - 'A játéktér magassága', + 'Játéktér magassága', 'Default': 'Alapérték', 'Blurred shadows': 'Elmosódó árnyékok', 'uncheck to use solid drop\nshadows and highlights': - 'vegye ki a jelölést, ha éles árnyékokat\nés kiemeléseket kíván használni', + 'vedd ki a jelölést, ha éles árnyékokat\nés kiemeléseket kíván használni', 'check to use blurred drop\nshadows and highlights': 'jelölje be, ha elmosódó árnyékokat\nés kiemeléseket kíván használni', 'Zebra coloring': @@ -724,13 +1073,15 @@ SnapTranslator.dict.hu = { 'check to enable dynamic\nlabels for variadic inputs': 'bejelölve engedélyezi a többszörös\nbeviteli mezők dinamikus feliratait', 'Prefer empty slot drops': - 'Szóköz használata üres karakterként', + 'Üres helyre ejt először', 'settings menu prefer empty slots hint': - 'einschalten um leere Platzhalter\nbeim Platzieren von Bl\u00f6cken' - + 'zu bevorzugen', + 'bekapcsolva az üres helyre ejti\nelőször a behúzott blokkot', 'uncheck to allow dropped\nreporters to kick out others': - 'ausschalten um das "Rauskicken"\nvon platzierten Bl\u00f6cken\n' - + 'zu erm\u00f6glichen', + 'kikapcsolva engedélyezed,\nhogy a behúzott blokk kirúgjon más blokkokat', + 'check to turn on\n visible stepping (slow)': + 'bekapcsolva lassítva láthatod a program lépéseit', + 'uncheck to turn off\nvisible stepping': + 'kikapcsolva nem látod már\nlassítva láthatod a program lépéseit', 'Long form input dialog': 'Hosszú formátumú beviteli párbeszéd', 'Plain prototype labels': @@ -743,18 +1094,34 @@ SnapTranslator.dict.hu = { 'bejelölve mindig látszik a csatlakozás típusa a beviteli párbeszédablakban', 'uncheck to use the input\ndialog in short form': 'kapcsolja ki, ha rövidített\npárbeszédablakot akar használni', - 'Virtual keyboard': - 'Virtuális billentyűzet', - 'uncheck to disable\nvirtual keyboard support\nfor mobile devices': - 'kikapcsolva letiltja a virtuális\nbillentyűzetet a mobil eszközökön', - 'check to enable\nvirtual keyboard support\nfor mobile devices': - 'bejelölve engedélyezi a virtuális\nbillentyűzetet a mobil eszközökön', + 'JavaScript extensions': + 'JavaScript kiegészítők', + 'check to support\nnative JavaScript functions': + 'bekapcsolva a natív\nJavaScript függvények elérhetőek', + 'uncheck to disable support for\nnative JavaScript functions': + 'kikapcsolva a natív\nJavaScript függvények nem elérhetőek', + 'JavaScript extensions for Snap!\nare turned off': + 'JavaScript natív függvények\nkikapcsolva', + 'Extension blocks': + 'Kiegészítő blokkok', + 'uncheck to hide extension\nprimitives in the palette': + 'kikapcsolva a kiegészítő blokkokat\nelrejti a palettáról', + 'check to show extension\nprimitives in the palette': + 'bekapcsolva a kiegészítő blokkokat\nmegjeleníti a palettán', 'Input sliders': 'Beviteli csúszkák', 'uncheck to disable\ninput sliders for\nentry fields': 'kikapcsolva letiltja a csúszkákat\na beviteli mezőknél', 'check to enable\ninput sliders for\nentry fields': 'bekapcsolva engedélyezi a csúszkákat\na beviteli mezőknél', + 'Retina display support': + 'Retina felbontás támogatása', + 'uncheck for lower resolution,\nsaves computing resources': + 'kikapcsolva alacsonyabb felbontást mutat\nés kíméli az erőforrásokat', + 'check for higher resolution,\nuses more computing resources': + 'bekapcsolva magasabb felbontást mutat\nés több erőforrást használ', + 'Codification support': + 'A kodifikáció támogatása', 'Clicking sound': 'A kattintás hangja', 'uncheck to turn\nblock clicking\nsound off': @@ -773,18 +1140,28 @@ SnapTranslator.dict.hu = { 'kikapcsolva normál sebességen\nfutnak a programok', 'check to enable\nIDE animations': 'bekapcsolva engedélyezi\naz IDE animációit', + 'Flat design': + 'Flat design', + 'check for alternative\nGUI design': + 'bekapcsolva más kinézetű grafikus felületet látsz', + 'uncheck for default\nGUI design': + 'kikapcsolva a normál grafikus felületet látod', + 'Nested auto-wrapping': + 'Automatikus beágyazás', + 'Keyboard Editing': + 'Billentyűzet Szerkesztés', + 'Table support': + 'Táblázat támogatás', + 'Table lines': + 'Táblázat sorok', + 'Visible stepping': + 'Léptetés látható', 'Thread safe scripts': 'Biztonságos programszálak', 'uncheck to allow\nscript reentrance': 'kikapcsolva engedélyezi a programok\n többszörös végrehajtását', 'check to disallow\nscript reentrance': 'bekapcsolva engedélyezi a programok\n többszörös végrehajtását', - 'Prefer smooth animations': - 'Finom animációk', - 'uncheck for greater speed\nat variable frame rates': - 'kapcsolja ki, ha nagyobb sebességet\nakar változtatható képfrissítéseknél', - 'check for smooth, predictable\nanimations across computers': - 'kapcsolja be, ha finomabb, kiszámíthatóbb\nanimációkat akar minden számítógépen', 'Flat line ends': 'Egyszerű vonalvégződés', 'check for flat ends of lines': @@ -792,6 +1169,53 @@ SnapTranslator.dict.hu = { 'uncheck for round ends of lines': 'kapcsolja ki a\nlekerekített vonalvégződésekhez', + 'Ternary Boolean slots': + 'Ternary boolean támogatás', + 'Inheritance support': + 'Öröklődés támogatás', + 'Hyper blocks support': + 'Hyper blokk támogatás', + 'uncheck to disable\nusing operators on lists and tables': + 'kapcsold ki, hogy letiltsd\na műveleteket listákon és táblázatokon', + 'check to enable\nusing operators on lists and tables': + 'jelöld be, hogy engedélyezd\na műveleteket listákon és táblázatokon', + 'Log pen vectors': + 'Toll vektorok mentése', + 'uncheck to turn off\nlogging pen vectors': + 'kapcsold ki, hogy a\ntoll vektorok mentését leáálítsd', + 'check to turn on\nlogging pen vectors': + 'kapcsold be, hogy a\ntoll vektorok mentését elindítsd', + 'Single palette': + 'Egyesített paletta', + 'check to show all blocks in a single palette': + 'bekapcsolva minden blokkot egy palettán mutat', + 'uncheck to show only the selected category\'s blocks': + 'kikapcsolva csak a kiválasztott kategóriához tartozó blokkokat mutatja', + 'Show categories': + 'Kategóriák kijelzése', + 'uncheck to hide\ncategory names\nin the palette': + 'kikacsolva elrejti\na kategóriák neveit a palettáról', + 'check to show\ncategory names\nin the palette': + 'bekapcsolva megjeleníti\na kategóriák neveit a palettán', + 'Show buttons': + 'Gombok megjelenítése', + 'uncheck to hide buttons\nin the palette': + 'kikapcsolva elrejti\na gombokat a palettáról', + 'check to show buttons\nin the palette': + 'bekapcsolva megjeleníti\na gombokat a palettán', + 'HSL pen color model': + 'HSL színmodell', + 'uncheck to switch pen colors\nand graphic effects to HSV': + 'kikapcsolva a toll színekhez\nés a grafikai hatásokhoz a HSV színmodellt használja', + 'check to switch pen colors\nand graphic effects to HSL': + 'bekapcsolva a toll színekhez\nés a grafikai hatásokhoz a HSL színmodellt használja', + 'Disable click-to-run': + 'Blokkon-kattintáskor-futtatás tiltása', + 'uncheck to enable\ndirectly running blocks\nby clicking on them': + 'kikapcsolva a blokkon kattintva\na hozzá tartozó kód futtatása', + 'check to disable\ndirectly running blocks\nby clicking on them': + 'bekapcsolva a blokkon kattintva\na hozzá tartozó kód futtatása nem indul el', + // inputs 'with inputs': 'bevitelekkel', @@ -807,44 +1231,119 @@ SnapTranslator.dict.hu = { 'Súgó', // palette: - 'hide primitives': - 'az alapvetők elrejtése', - 'show primitives': - 'az alapvetők megjelentése', + 'find blocks': + 'blokk keresése', + 'hide blocks...': + 'blokkok elrejtése...', + 'Hide blocks in palette': + 'Blokkok elrejtése a palettáról', + 'unused': + 'nem használt', + 'make a category...': + 'új kategória...', + 'New Category': + 'Új kategória', + 'Blocks category name:': + 'Új kategória neve:', + 'Category color': + 'Kategória színe', + 'red': + 'piros', + 'green': + 'zöld', + 'blue': + 'kék', + 'delete a category...': + 'kategória törlése...', // blocks: 'help...': 'Súgó...', 'relabel...': 'átcimkézés...', + 'compile': + 'fordítás', + 'uncompile': + 'fordítás visszavonása', 'duplicate': 'megkettőzés', 'make a copy\nand pick it up': 'másolat felvétele', 'only duplicate this block': 'csak készítsen egy másolatot\nerről a blokkról', + 'extract': + 'emeld ki', + 'only grab this block': + 'csak ezt a blokkot fogd meg', 'delete': 'törlés', + 'senders...': + 'küldők...', + 'receivers...': + 'fogadók...', 'script pic...': - 'Program képe...', - 'open a new window\nwith a picture of this script': - 'új böngészőablak megnyitása\nennek a programnak a képével', + 'program képe...', + 'save a picture\nof this script': + 'mentsd le a képét\nennek a programnak', + 'result pic...': + 'kép...', + 'save a picture of both\nthis script and its result': + 'mentsd le a képét ennek a programnak\naz eredményével együtt', 'ringify': - 'körülvesz', + 'körülfog', 'unringify': 'körülfogás megszüntetése', + 'transient': + 'átmeneti', + 'uncheck to save contents\nin the project': + 'kikapcsolva elmenti\na változó értékét a projekttel', + 'check to prevent contents\nfrom being saved': + 'bekapcsolva nem menti el\na változó értékét a projekttel', + 'new line': + 'új sor', + // custom blocks: 'delete block definition...': 'blokkdefiníció törlése', + 'duplicate block definition...': + 'blokk definíció másolása...', + 'export block definition...': + 'blokk definíció exportálása...', + 'including dependencies': + 'függőségekkel együtt', 'edit...': 'szerkesztés...', + 'translations...': + 'fordítások...', + 'block variables...': + 'blokk változók...', + 'in palette': + 'a palettán', + + /* additional, missing from lang-de */ + 'block variables': + 'blokk változók', + 'Block variable name': + 'Blokk változó neve', + 'remove block variables...': + 'blokk változók törlése...', // sprites: 'edit': 'szerkesztés', + 'clone': + 'másolás', 'move': 'mozgatás', + 'pivot': + 'forgatás', + 'edit the costume\'s\nrotation center': + 'szerkezd a jelmez\nforgatási középpontját', + 'rotate': + 'forgatás', + 'stick to': + 'tapadjon', 'detach from': 'leválasztás erről', 'detach all parts': @@ -852,14 +1351,32 @@ SnapTranslator.dict.hu = { 'export...': 'exportálás...', + 'parent...': + 'szülő...', + 'current parent': + 'aktuális szülő', + 'release': + 'engedd el', + 'make temporary and\nhide in the sprite corral': + 'tedd ideiglenessé\nés rejtsd el a szereplők közül', + // stage: 'show all': 'mindent mutat', 'pic...': 'kép exportálása...', - 'open a new window\nwith a picture of the stage': - 'új ablak nyitása a színpad képével', - + 'save a picture\nof the stage': + 'mentsd el a játéktér képét', + 'svg...': + 'svg...', + 'export pen trails\nline segments as SVG': + 'toll vonalak exportálása\nSVG forámumba', + 'there are currently no\nvectorizable pen trail segments': + 'jelenleg nincs vektoros toll vonal', + 'turn all pen trails and stamps\ninto a new background for the stage': + 'játéktér háttérképévé változtasd\naz összes tollvonás és békyegzőt', + 'turn all pen trails and stamps\ninto a new costume for the\ncurrently selected sprite': + 'minden tollbeállítás átállítása\nés átvitele az aktuális\nalak egy új jelmezébe', // scripting area 'clean up': 'törlés', @@ -871,10 +1388,14 @@ SnapTranslator.dict.hu = { 'visszavétel', 'undo the last\nblock drop\nin this pane': 'az utolsó blokk visszavétele erről a lapról', + 'redrop': + 'újra', + 'use the keyboard\nto enter blocks': + 'a billenytűzet segítségével\nhozz létre blokkokat', 'scripts pic...': 'minden feladat képpé...', - 'open a new window\nwith a picture of all scripts': - 'új ablak nyitása\naz összes program képével', + 'save a picture\nof all scripts': + 'mentsd el minden program képét', 'make a block...': 'blokk létrehozása...', @@ -884,9 +1405,9 @@ SnapTranslator.dict.hu = { 'export': 'exportálás', 'rename costume': - 'a jelmez átnevezése', - 'Paint a new costume': - 'Új jelmez rajzolása', + 'jelmez átnevezése', + 'rename background': + 'háttér átnevezése', // sounds 'Play sound': @@ -900,6 +1421,22 @@ SnapTranslator.dict.hu = { 'rename sound': 'A hang átnevezése', + // lists and tables + 'list view...': + 'lista nézet...', + 'table view...': + 'tábla nézet...', + 'Table view': + 'Tábla nézet', + 'open in dialog...': + 'nyisd meg párbeszédablakban...', + 'blockify': + 'blokkosdítsd', + 'reset columns': + 'oszlopok visszaállítása', + 'items': + 'elemek', + // dialogs // buttons 'OK': @@ -941,11 +1478,31 @@ SnapTranslator.dict.hu = { 'monstrous (10x)': 'szörnyeteg (10x)', + // fade blocks + 'Fade blocks': + 'Blokkok átlátszósága', + 'block-solid (0)': + 'normál (0)', + 'medium (50)': + 'közepes (50)', + 'light (70)': + 'halvány (70)', + 'shimmering (80)': + 'csillámló (80)', + 'elegant (90)': + 'elegáns (90)', + 'subtle (95)': + 'kifinomult (95)', + 'text-only (100)': + 'csak szöveg (100)', + // Project Manager 'Untitled': 'Névtelen', 'Open Project': 'Projekt megnyitása', + 'Open': + 'Megnyitás', '(empty)': '(üres)', 'Saved!': @@ -957,26 +1514,115 @@ SnapTranslator.dict.hu = { 'rename...': 'átnevezés...', + 'Examples': + 'Példák', + 'Share': + 'Megosztás', + 'Unshare': + 'Nincs megosztás', + 'Publish': + 'Publikálás', + 'Unpublish': + 'Publikálás visszavonása', + 'Updating\nproject list...': + 'A projeklista frissítése...', + 'Recover': + 'Visszaállítás', + 'Today': + 'Ma', + 'Yesterday': + 'Tegnap', + // costume editor 'Costume Editor': 'Jelmezszerkesztő', + 'Paint Editor': + 'Képszerkesztő', 'click or drag crosshairs to move the rotation center': 'kattints oda vagy vidd a szálkeresztet a forgás középpontjába', + 'undo': + 'visszavon', + 'Vector': + 'Vektor', + 'Paintbrush tool\n(free draw)': + 'Festőecset eszköz\n(szabadkézi rajz)', + 'Stroked Rectangle\n(shift: square)': + 'Téglalap\n(shift: négyzet)', + 'Stroked Ellipse\n(shift: circle)': + 'Ellipszis\n(shift: kör)', + 'Eraser tool': + 'Törlő eszköz', + 'Set the rotation center': + 'A forgatás középpontjának beállítása', + 'Line tool\n(shift: vertical/horizontal)': + 'Vonalrajzoló eszköz\n(shift: függőleges/vízszintes)', + 'Filled Rectangle\n(shift: square)': + 'Kitöltött téglalap\n(shift: négyzet)', + 'Filled Ellipse\n(shift: circle)': + 'Kitöltött ellipszis\n(shift: kör)', + 'Fill a region': + 'Terület kitöltése', + 'Pipette tool\n(pick a color anywhere)': + 'Pipetta\n(szín felvétele bárhonnan)', + 'Brush size': + 'Ecsetméret', + 'Constrain proportions of shapes?\n(you can also hold shift)': + 'Megmaradjanak az alakzat arányai?\n(ehhez használhatja a SHIFT billentyűt is)', + 'Vector Paint Editor': + 'Vektor Szerkesztő', + 'Rectangle\n(shift: square)': + 'Négyszög\n(Shift: négyzet)', + 'Ellipse\n(shift: circle)': + 'Ellipszis\n(Shift: kör)', + 'Selection tool': + 'Kijelölő', + 'Line tool\n(shift: constrain to 45º)': + 'Vonal\n(Shift: korlátozza 45°)', + 'Closed brush\n(free draw)': + 'Kitöltött ecset\n(szabad rajz)', + 'Paint a shape\n(shift: secondary color)': + 'Minta kitöltése\n(Shift: másodlagos színnel)', + 'Pipette tool\n(pick a color from anywhere\nshift: secondary color)': + 'Pipetta eszköz\n(Tetszőleges hlyről szín felszedése\nshift: másodlagos színnel)', + 'Edge color\n(left click)': + 'Vonal színe\n(bal gomb)', + 'Fill color\n(right click)': + 'Kitöltő szín\n(jobb klikk)', + // 'Top': + // 'oben', + // 'Bottom': + // 'unten', + // 'Up': + // 'nach oben', + // 'Down': + // 'nach unten', + + // project notes 'Project Notes': - 'A projekt tudnivalói', + 'A projekt jegyzetei', + /* additional, missing from lang-de */ + 'Notes...': + 'A projekt jegyzetei', // new project 'New Project': 'Új projekt', + 'Unsaved Changes!': + 'Nem mentett változások!', 'Replace the current project with a new one?': 'Felülírja az aktuális projektet egy újjal?', + 'Backup failed.\nThis cannot be undone, proceed anyway?': + 'Sikertelen biztonsági mentés.\nNem visszavonható, folytatod?', + // save project 'Save Project As...': 'Projekt mentése másként...', + 'Save Project': + 'A projekt mentése', // export blocks 'Export blocks': 'Blokkok exportja', @@ -995,6 +1641,15 @@ SnapTranslator.dict.hu = { 'for this sprite only': 'csak erre az alakzatra', + // variables refactoring + 'rename only\nthis reporter': + 'nevezd át \ncsak ezt a függvényt', + 'rename all...': + 'mindegyik átnevezése...', + 'rename all blocks that\naccess this variable': + 'minden blokk átnevezése\namely ezt a változót használja', + + // block dialog 'Change block': 'Blokk változtatása', @@ -1007,9 +1662,11 @@ SnapTranslator.dict.hu = { // block editor 'Block Editor': - 'Blokk szerkesztő', + 'Blokk Szerkesztő', + 'Method Editor': + 'Függvény Szekesztő', 'Apply': - 'Alkalmazás', + 'Alkalmaz', // block deletion dialog 'Delete Custom Block': @@ -1036,6 +1693,8 @@ SnapTranslator.dict.hu = { 'Szám', 'Text': 'Szöveg', + 'String': + 'Szöveg', 'List': 'Lista', 'Any type': @@ -1043,13 +1702,13 @@ SnapTranslator.dict.hu = { 'Boolean (T/F)': 'Logikai (I/H)', 'Command\n(inline)': - 'Parancs\n(inline)', + 'Parancs\n(egysoros)', 'Command\n(C-shape)': - 'Parancs\n(C-Form)', + 'Parancs\n(C-forma)', 'Any\n(unevaluated)': 'Bármilyen\n(nem kiértékelt)', 'Boolean\n(unevaluated)': - 'Logikai(nem kiértékelt)', + 'Logikai\n(nem kiértékelt)', 'Single input.': 'Egyszerű bevitel.', 'Default Value:': @@ -1094,19 +1753,28 @@ SnapTranslator.dict.hu = { 'a csúszka maximuma...', 'import...': 'importálás...', + 'raw data...': + 'nyers adat...', + 'import without attempting to\nparse or format data': + 'importálj anélkül, hogy megpróbálnád\értelmezni vagy formázni az adatot', 'Slider minimum value': - 'A csúszka minimális értéke', + 'Csúszka minimális értéke', 'Slider maximum value': - 'A csúszka maximális értéke', + 'Csúszka maximális értéke', // list watchers 'length: ': - 'Hossz: ', + 'hossz: ', // coments 'add comment here...': 'tegye ide a megjegyzést', + 'comment pic...': + 'megjegyzés képe...', + 'save a picture\nof this comment': + 'kép erről a megjegyzésről', + // drow downs // directions '(90) right': @@ -1118,13 +1786,21 @@ SnapTranslator.dict.hu = { '(180) down': '(180) le', + 'random': + 'véletlen', + 'random position': + 'véletlenszerű hely', + // collision detection 'mouse-pointer': 'egérmutató', 'edge': - 'csúcs', + 'játéktér széle', 'pen trails': - 'ceruza nyomvonalak', + 'ceruza nyomvonala', + + 'center': + 'közép', // costumes 'Turtle': @@ -1132,9 +1808,40 @@ SnapTranslator.dict.hu = { 'Empty': 'Üres', + 'Paint a new costume': + 'Új jelmez rajzolása', + 'Import a new costume from your webcam': + 'Új jelmez importálása a webkamerával', + 'Please make sure your web browser is up to date\nand your camera is properly configured. \n\nSome browsers also require you to access Snap!\nthrough HTTPS to use the camera.\n\nPlase replace the "http://" part of the address\nin your browser by "https://" and try again.': + 'Győződj meg arról, hogy a böngésződ naprakész\nés a kamerát is megfelelően beállítottad. \n\nPár böngésző megköveteli, hogy HTTPS kapcsolaton\nkeresztül nyisd meg a Snap oldalát\n\nPróbáld meg kicserélni a cím "http://" részét\n"https://" előtagra és próbáld meg újra!', + 'Camera': + 'Kamera', + + // sounds + 'Record a new sound': + 'Új hang felvétele', + + + // graphical effects, pen color + 'color': + 'szín', + 'hue': + 'árnyalat', + 'fisheye': + 'halszem', + 'whirl': + 'örvény', + 'pixelate': + 'pixeles', + 'mosaic': + 'mozaik', + 'saturation': + 'színtelítettség', // graphical effects 'brightness': 'világosság', + 'transparency': + 'áttetszőség', 'ghost': 'átlátszóság', 'negative': @@ -1155,6 +1862,8 @@ SnapTranslator.dict.hu = { 'jobbra nyíl', 'left arrow': 'balra nyíl', + 'any key': + 'bármelyik gomb', 'a': 'a', 'b': @@ -1232,11 +1941,16 @@ SnapTranslator.dict.hu = { 'new...': 'új...', + '__shout__go__': + '__zöld__zászló__', + // math functions 'abs': 'abszolútérték', + 'ceiling': + 'felső egészrész', 'floor': - 'egészrész', + 'alsó egészrész', 'sqrt': 'négyzetgyök', 'sin': @@ -1256,9 +1970,15 @@ SnapTranslator.dict.hu = { 'e^': 'e^', + // Boolean expressions keyboard entry + 'not': + 'nem', + // delimiters 'letter': 'betű', + 'word': + 'szó', 'whitespace': 'szóköz', 'line': @@ -1284,12 +2004,180 @@ SnapTranslator.dict.hu = { 'predicate': 'kijelentés', + 'sprite': + 'szereplő', + 'ring': + 'gyűrű', + 'nothing': + 'semmi', + // list indices 'last': 'utolsó', 'any': - 'bármilyen', - // Ez kimaradt a német nyelvi fájlból + 'valamelyik', + // attributes + 'my': + 'saját', + 'neighbors': + 'szomszéd', + 'self': + 'saját', + 'other sprites': + 'más szereplők', + 'parts': + 'részek', + 'anchor': + 'horgony', + 'parent': + 'szülő', + 'temporary?': + 'ideiglenes?', + 'children': + 'gyermek', + 'clones': + 'másolat', + 'other clones': + 'többi másolat', + 'dangling?': + 'külön forgó?', + 'draggable?': + 'húzható?', + 'rotation style': + 'forgási stílus', + 'rotation x': + 'forgatás x', + 'rotation y': + 'forgatás y', + 'center x': + 'középpont x', + 'center y': + 'középpont y', + 'name': + 'név', + 'costume': + 'jelmez', + 'stage': + 'játéktér', + 'costumes': + 'jelmezek', + 'sounds': + 'hangok', + 'scripts': + 'programok', + 'width': + 'szélesség', + 'height': + 'magasság', + 'left': + 'bal', + 'right': + 'jobb', + 'top': + 'teteje', + 'bottom': + 'alja', + + // attributes in the SET block's dropdown + 'my anchor': + 'horgonyom', + 'my parent': + 'szülőm', + 'my name': + 'nevem', + 'my temporary?': + 'ideiglenes vagyok?', + 'my dangling?': + 'külön forgok?', + 'my draggable?': + 'húzható vagyok?', + 'my rotation style': + 'forgatási stílusom', + 'my rotation x': + 'forgatás x attribútumom', + 'my rotation y': + 'forgatás y attribútumom', + + // inheritance + 'inherited': + 'örökölt', + 'check to inherit\nfrom': + 'bekapcsolva öröklődik\ninnen', + 'uncheck to\ndisinherit': + 'kikapcsolva nem öröklődik tovább', + + // error messages + 'Error': + 'Hiba', + 'a variable of name \'': + 'a változó \'', + '\'\ndoes not exist in this context': + '\'\nnem található ebben környzetben', + 'expecting a': + 'Számítunk egy', + 'but getting a': + 'helyette találtunk egy', + 'expecting': + 'számítunk', + 'input(s), but getting': + 'bevitel(ek)re, de helyette', + 'Inside a custom block': + 'Egy egyedi blokkban', + 'The error occured at': + 'Hiba történt ezen a', + 'continuations cannot be forked': + 'Folytatásokat nem tudom indítani', + 'unable to convert to': + 'nem tudom konvertálni', + 'Request blocked': + 'Kérés blokkolva', + 'cannot operate on a deleted sprite': + 'nem tudok törölt szereplővel dolgozni', + 'cannot send media,\nsprites or procedures\nto another scene': + 'nem lehetséges média,\n szerepl[ vagy eljárás küldése\nmásik jelenetbe', + 'unsupported attribute': + 'nem támogatott tulajdonság', + 'unable to nest\n(disabled or circular?)': + 'nem lehet beágyazni\n(inaktív vagy körkörös hivatkozás?)', + 'unable to inherit\n(disabled or circular?)': + 'nem örökölhető\n(inaktív vagy körkörös hivatkozás?)', + 'is read-only': + 'csak olvasható', + 'is not a valid option': + 'nem választható', + 'unsupported data type': + 'nem támogatott adattípus', + 'expecting a finite number\nbut getting Infinity or NaN': + 'véges számot várunk\nhelyette végtelen vagy NaN érkezett', + 'the predicate takes\ntoo long for a\ncustom hat block': + 'az előzmény túl hosszú ideig fut\negy egyedi kalap blokkhoz', + 'missing / unspecified extension': + 'Hiányzó vagy nem specifikált kiegészítő', + 'reporter didn\'t report': + 'a függvény érték nélkül tért vissza', + 'a custom block definition is missing': + 'hiányzó egyedi blokk definíció', + 'exceeding maximum number of clones': + 'meghaladta a maximális másolatok számát', + 'can only write text or numbers, not a': + 'csak szöveget vagy számot adhatsz meg, ezt nem érvényes', + 'unsupported graphic effect': + 'nem támogatott grafikai hatás', + 'setting the rotation center requires a costume': + 'a forgáspont beállításához szükség van egy jelmezre', + 'Web Audio API is not supported\nin this browser': + 'a Web Audio API nem\ntámogatott ezen a böngészőn', + + + /* ::DELETED, BUT TO BE KEPT */ + 'costume name': + 'a jelmez neve', + 'read-only': + 'csak olvasható', + 'variables': + 'változók', + + /* additional, missing from lang-de */ 'grow': 'növekedés', 'shrink': @@ -1299,35 +2187,11 @@ SnapTranslator.dict.hu = { 'flip ↕': 'tükrözés ↕', 'Export all scripts as pic...': - 'Minden feladat exportálása képként…', + 'Minden feladat exportálása képként...', 'show a picture of all scripts\nand block definitions': 'minden feladat és blokk\ndefinícióról készült kép mutatása', - 'current %dates': - 'aktuális %dates', - 'year': - 'év', - 'month': - 'hónap', - 'date': - 'nap', - 'day of week': - 'a hét napja', - 'hour': - 'óra', - 'minute': - 'perc', - 'second': - 'másodperc', - 'time in milliseconds': - 'idő (ezredmásodpercben)', 'find blocks...': - 'blokkok keresése…', - 'costume name': - 'a jelmez neve', - 'Open': - 'Megnyitás', - 'Share': - 'Megosztás', + 'blokkok keresése...', 'Snap!Cloud': 'Snap!Felhő', 'Cloud': @@ -1348,10 +2212,6 @@ SnapTranslator.dict.hu = { 'Új regisztráció', 'Sign in': 'Regisztráció', - 'Logout': - 'Kijelentkezés', - 'Change Password...': - 'Jelszó megváltoztatása…', 'Change Password': 'Jelszó megváltoztatása', 'Account created.': @@ -1364,8 +2224,6 @@ SnapTranslator.dict.hu = { 'leválasztva.', 'Reset password': 'A jelszó alaphelyzetre állítása', - 'Reset Password...': - 'A jelszó alaphelyzetre állítása…', 'User name:': 'Felhasználói név:', 'Password:': @@ -1411,9 +2269,9 @@ SnapTranslator.dict.hu = { 'E-mail address of parent or guardian:': 'A szülő vagy gondozó email címe:', 'Terms of Service...': - 'Felhasználási feltételek…', + 'Felhasználási feltételek...', 'Privacy...': - 'Jogvédelem…', + 'Jogvédelem...', 'I have read and agree\nto the Terms of Service': 'Elolvastam és egyetértek\na felhasználási feltételekkel', 'stay signed in on this computer\nuntil logging out': @@ -1430,82 +2288,32 @@ SnapTranslator.dict.hu = { 'A jelszavak nem egyeznek.', 'please agree to\nthe TOS': 'fogadja el a felhasználási feltételeket.', - 'Examples': - 'Példák', 'You are not logged in': 'Még nem lépett be', - 'Updating\nproject list...': - 'A projeklista frissítése…', 'Opening project...': - 'Projekt megnyitása…', + 'Projekt megnyitása...', 'Fetching project\nfrom the cloud...': - 'Projekt letöltése\na felhőből…', + 'Projekt letöltése\na felhőből...', 'Saving project\nto the cloud...': - 'Projekt mentése\na felhőbe…', + 'Projekt mentése\na felhőbe...', 'Sprite Nesting': 'Szereplők összefűzése', 'uncheck to disable\nsprite composition': 'kapcsolja ki a szereplők összefűzésének megakadályozásához.', - 'Codification support': - 'A kodifikáció támogatása', 'check for block\nto text mapping features': 'Assinalar para funcionalidades\nde mapeamento entre blocos e texto.', 'saved.': 'mentve.', - 'options...': - 'beállítások…', - 'read-only': - 'csak olvasható', 'Input Slot Options': 'Bemenő adat csatlakozási lehetőségek', 'Enter one option per line.Optionally use "=" as key/value delimiter\ne.g.\n the answer=42': 'Soronként egy lehetőséget írjon be.\nSzükség esetén használhatja az "=" jelet\nkulcs/érték pár elválasztására, pl.\na válasz=42', - 'paint a new sprite': - 'új alakzat rajzolása', - 'Paint a new costume': - 'Új jelmez rajzolása', - 'add a new Turtle sprite': - 'új teknőc rajzának hozzáadása', - 'Flat design': - 'Síkbeli tervezés', - 'check for alternative\nGUI design': - 'más grafikus felület ellenőrzése', 'Rasterize SVGs': 'SVG átalakítása bittérképbe', 'check to rasterize\nSVGs on import': 'SVG bittérképpé alakíthatóságának\nellenőrzése az importálás során', - 'comment pic...': - 'megjegyzés képe…', 'open a new window\nwith a picture of this comment': 'új ablak megnyitása\nennek a megjegyzésnek a képével', - 'undo': - 'visszavon', - 'Brush size': - 'Ecsetméret', - 'Constrain proportions of shapes?\n(you can also hold shift)': - 'Megmaradjanak az alakzat arányai?\n(ehhez használhatja a SHIFT billentyűt is)', - 'Eraser tool': - 'Törlő eszköz', - 'Paintbrush tool\n(free draw)': - 'Festőecset eszköz\n(szabadkézi rajz)', - 'Line tool\n(shift: vertical/horizontal)': - 'Vonalrajzoló eszköz\n(shift: függőleges/vízszintes)', - 'Stroked Rectangle\n(shift: square)': - 'Téglalap\n(shift: négyzet)', - 'Filled Rectangle\n(shift: square)': - 'Kitöltött téglalap\n(shift: négyzet)', - 'Stroked Ellipse\n(shift: circle)': - 'Ellipszis\n(shift: kör)', - 'Filled Ellipse\n(shift: circle)': - 'Kitöltött ellipszis\n(shift: kör)', - 'Fill a region': - 'Terület kitöltése', - 'Set the rotation center': - 'A forgatás középpontjának beállítása', - 'Pipette tool\n(pick a color anywhere)': - 'Pipetta\n(szín felvétele bárhonnan)', - 'Paint Editor': - 'Képszerkesztő', 'square': 'négyzet', 'pointRight': @@ -1519,13 +2327,11 @@ SnapTranslator.dict.hu = { 'normalScreen': 'normál képernyő', 'smallStage': - 'kis színpad', + 'kis játéktér', 'normalStage': - 'normál színpad', + 'normál játéktér', 'turtle': 'teknős', - 'stage': - 'színpad', 'turtleOutline': 'a teknős körvonala', 'pause': @@ -1591,9 +2397,7 @@ SnapTranslator.dict.hu = { 'robot': 'robot', 'turn pen trails into new costume...': - 'a toll beállításainak alkalmazása egy új jelmezre…', - 'turn all pen trails and stamps\ninto a new costume for the\ncurrently selected sprite': - 'minden tollbeállítás átállítása\nés átvitele az aktuális\nalak egy új jelmezébe', + 'a toll beállításainak alkalmazása egy új jelmezre...', 'pen': 'toll', 'tip': @@ -1611,41 +2415,29 @@ SnapTranslator.dict.hu = { 'Unshare Project': 'A projekt megosztásának megszüntetése', 'sharing\nproject...': - 'a projekt\nmegosztása…', + 'a projekt\nmegosztása...', 'unsharing\nproject...': - 'a projekt megosztásának\nmegszüntetése…', + 'a projekt megosztásának\nmegszüntetése...', 'shared.': 'megosztva.', 'unshared.': 'nincs megosztva.', - 'Unshare': - 'Nincs megosztás', 'password has been changed.': 'a jelszó megváltozott.', 'SVG costumes are\nnot yet fully supported\nin every browser': 'Az SVG ábrákat nem minden böngésző támogatja', - 'Save Project': - 'A projekt mentése', 'script pic with result...': - 'a program képe az eredménnyel…', + 'a program képe az eredménnyel...', 'open a new window\nwith a picture of both\nthis script and its result': 'Új böngészőablak megnyitása a programnak és eredményének képével.', - 'JavaScript function ( %mult%s ) { %code }': - 'JavaScript függvény ( %mult%s ) { %code }', - 'Select categories of additional blocks to add to this project.': - 'Válassza ki a projekthez adandó blokkok kategóriáit.', 'Import sound': 'Hang importálása', - 'Select a sound from the media library': - 'Válasszon ki egy hangot a médiakönyvtárból.', 'Import': 'Import', - 'Select a costume from the media library': - 'Válasszon ki egy jelmezt a médiakönyvtárból.', 'edit rotation point only...': - 'csak a forgáspont szerkesztése…', + 'csak a forgáspont szerkesztése...', 'Export Project As...': - 'Projekt exportálása mint…', + 'Projekt exportálása mint...', 'a variable of name \'': 'ilyen nevű változó «', '\'\ndoes not exist in this context': @@ -1657,21 +2449,19 @@ SnapTranslator.dict.hu = { 'input(s), but getting': 'adatbevitel, de ez érkezett', - // kódolás + // kódolás - "Codification” 'map %cmdRing to %codeKind %code': - 'mapear %cmdRing no %codeKind %code', - 'map String to code %code': - 'mapear texto no código %code', + 'képezd le %cmdRing erre %codeKind %code', + 'map %mapValue to code %code': + 'képezd le %mapValue kódra %code', 'map %codeListPart of %codeListKind to code %code': - 'mapear %codeListPart de %codeListKind no código %code', + 'képezd le %codeListPart ebben %codeListKind erre a kódre %code', 'code of %cmdRing': '%cmdRing kódja', 'delimiter': 'határoló', 'collection': 'gyűjtemény', - 'variables': - 'változók', 'parameters': 'paraméterek', 'code': @@ -1679,17 +2469,17 @@ SnapTranslator.dict.hu = { 'header': 'fejléc', 'header mapping...': - 'mapeamento para cabeçalho…', + 'fejléc leképezés...', 'code mapping...': - 'kód leképezés…', + 'kód leképezés...', 'Code mapping': 'Kód leképezés', 'Header mapping': 'A fejléc leképezése', 'Enter code that corresponds to the block\'s definition. Use the formal parameter\nnames as shown and to reference the definition body\'s generated text code.': - 'Gépelje be a blokk definíciójának megfelelő programkódot. Használja a látható formális paramétereket és a referenciát a törzs generált szövegkódjához.', + 'Gépeld be a blokk definíciójának megfelelő programkódot. Használd a látható formális paramétereket\nés a referenciát a törzs generált szövegkódodhoz.', 'Enter code that corresponds to the block\'s definition. Choose your own\nformal parameter names (ignoring the ones shown).': - 'Gépelje be a blokk definíciójának megfelelő programkódot. Használja a saját formális paramétereit (hagyja figyelmen kívül a láthatókat).', + 'Gépeld be a blokk definíciójának megfelelő programkódot. Használd a saját\nformális paramétereit (hagyd figyelmen kívül a példákat).', 'Enter code that corresponds to the block\'s operation (usually a single\nfunction invocation). Use <#n> to reference actual arguments as shown.': - 'Gépelje be a blokk működésének megfelelő programkódot (általában egy függvény bevezetésével). Használja a <#n> hivatkozási helyen látható aktuális argumentumokat.' + 'Gépeld be a blokk működésének megfelelő programkódot (általában egy függvény\nbevezetésével). Használd a <#n> hivatkozási helyen látható aktuális argumentumokat.' }; diff --git a/locale/lang-ia.js b/locale/lang-ia.js index f6e2bc78..c36f89a1 100644 --- a/locale/lang-ia.js +++ b/locale/lang-ia.js @@ -425,8 +425,8 @@ SnapTranslator.dict.ia = { // control: 'when %greenflag clicked': 'cuando %greenflag clic', - 'when %keyHat key pressed': - 'cuando %keyHat clave pressa', + 'when %keyHat key pressed %keyName': + 'cuando %keyHat clave pressa %keyName', 'when I am %interaction': 'cuando io es %interaction', 'clicked': @@ -439,12 +439,14 @@ SnapTranslator.dict.ia = { 'mure entra', 'mouse-departed': 'mure parti', // 'quita' - 'when I receive %msgHat': - 'cuando io recipe %msgHat', - 'broadcast %msg': - 'mitte %msg a omne', - 'broadcast %msg and wait': - 'mitte %msg a omni e attende', + 'when I receive %msgHat %message': + 'cuando io recipe %msgHat %message', + 'broadcast %msg %receive': + 'mitte %msg %receive', + 'broadcast %msg %receive and wait': + 'mitte %msg %receive e attende', + 'to': + 'a', 'Message name': 'Nomine de message', 'message': diff --git a/locale/lang-id.js b/locale/lang-id.js index a8591729..b76cb232 100644 --- a/locale/lang-id.js +++ b/locale/lang-id.js @@ -417,8 +417,8 @@ SnapTranslator.dict.id = { // control: 'when %greenflag clicked': 'ketika %greenflag diklik', - 'when %keyHat key pressed': - 'ketika %keyHat ditekan', + 'when %keyHat key pressed %keyName': + 'ketika %keyHat ditekan %keyName', 'when I am %interaction': 'ketika aku %interaction', 'clicked': @@ -433,12 +433,12 @@ SnapTranslator.dict.id = { 'ditinggalkan tetikus', 'when %b': 'ketika %b', - 'when I receive %msgHat': - 'ketika aku menerima %msgHat', - 'broadcast %msg': - 'beritakan %msg', - 'broadcast %msg and wait': - 'beritakan %msg dan tunggu', + 'when I receive %msgHat %message': + 'ketika aku menerima %msgHat %message', + 'broadcast %msg %receive': + 'beritakan %msg %receive', + 'broadcast %msg %receive and wait': + 'beritakan %msg %receive dan tunggu', 'Message name': 'Nama pesan', 'message': diff --git a/locale/lang-it.js b/locale/lang-it.js index cbef95f2..4eb56a7c 100644 --- a/locale/lang-it.js +++ b/locale/lang-it.js @@ -6,7 +6,7 @@ written by Jens Mönig - Copyright (C) 2012 by Jens Mönig + Copyright (C) 2021 by Jens Mönig This file is part of Snap!. @@ -185,7 +185,7 @@ SnapTranslator.dict.it = { 'translator_e-mail': 's_federici@yahoo.com, albertofirpo12@gmail.com, zairik@gmail.com', // optional 'last_changed': - '2020-11-19', // this, too, will appear in the Translators tab + '2021-12-26', // this, too, will appear in the Translators tab // GUI // control bar: @@ -468,14 +468,14 @@ SnapTranslator.dict.it = { 'usa penna di colore %clr', 'set background color to %clr': 'porta colore sfondo a %clr', - 'change pen %hsva by %n': - 'cambia %hsva della penna di %n', - 'change background %hsva by %n': - 'cambia %hsva sfondo di %n', - 'set pen %hsva to %n': - 'porta %hsva della penna a %n', - 'set background %hsva to %n': - 'porta %hsva sfondo a %n', + 'change pen %clrdim by %n': + 'cambia %clrdim della penna di %n', + 'change background %clrdim by %n': + 'cambia %clrdim sfondo di %n', + 'set pen %clrdim to %n': + 'porta %clrdim della penna a %n', + 'set background %clrdim to %n': + 'porta %clrdim sfondo a %n', 'pen %pen': '%pen della penna', 'change pen size by %n': @@ -498,8 +498,10 @@ SnapTranslator.dict.it = { // control: 'when %greenflag clicked': 'quando si clicca su %greenflag', - 'when %keyHat key pressed': - 'quando si preme il tasto %keyHat', + 'when %keyHat key pressed %keyName': + 'quando si preme il tasto %keyHat %keyName', + 'key': + 'tasto', 'when I am %interaction': 'quando sono %interaction', 'clicked': @@ -520,14 +522,14 @@ SnapTranslator.dict.it = { 'fermo', 'when %b': 'quando %b', - 'when I receive %msgHat': - 'quando ricevo %msgHat', - 'broadcast %msg': - 'invia a tutti %msg', - 'broadcast %msg and wait': - 'invia a tutti %msg e attendi', - 'send %msg to %spr': - 'invia %msg a %spr', + 'when I receive %msgHat %message': + 'quando ricevo %msgHat %message', + 'broadcast %msg %receive': + 'invia %msg %receive', + 'broadcast %msg %receive and wait': + 'invia %msg %receive e attendi', + 'to': + 'a', 'Message name': 'Nome messaggio', 'message': @@ -592,7 +594,15 @@ SnapTranslator.dict.it = { 'me stesso', 'delete this clone': 'elimina questo clone', - 'tell %spr to %cmdRing %inputs': + 'switch to scene %scn %send': + 'passa alla scena %scn %send', + 'and send': + 'e invia', + 'next': + 'successiva', + 'previous': + 'precedente', + 'tell %spr to %cmdRing %inputs': 'chiedi a %spr di eseguire %cmdRing %inputs', 'ask %spr for %repRing %inputs': 'chiedi a %spr il valore di %repRing %inputs', @@ -622,6 +632,8 @@ SnapTranslator.dict.it = { '%rel da %dst', 'distance': 'distanza', + 'ray length': + 'lunghezza raggio', '%asp at %loc' : 'valore di %asp alla posizione %loc', 'r-g-b-a': @@ -712,6 +724,14 @@ SnapTranslator.dict.it = { 'frame', 'log pen vectors': 'log vettori della penna', + '%block of block %repRing': + '%block blocco %repRing', + 'definition': + 'definizione', + 'custom?': + '\u00E8 personalizzato', + 'global?': + '\u00E8 globale', // operators: '%n mod %n': @@ -796,6 +816,20 @@ SnapTranslator.dict.it = { 'tutto meno il primo elemento di %l', 'length of %l': 'lunghezza di %l', + '%la of %l': + '%la di %l', + 'rank': + 'rango', + 'dimensions': + 'dimensione', + 'flatten': + 'appiattimento', + 'columns': + 'colonne', + 'reverse': + 'inversa', + 'lines': + 'linee', '%l contains %s': '%l contiene %s', 'thing': @@ -830,6 +864,8 @@ SnapTranslator.dict.it = { 'posizione', 'append %lists': 'unisci %lists', + 'reshape %l to %nums': + 'riorganizza %l su %nums', 'add %s to %l': 'aggiungi %s a %l', 'delete %ida of %l': @@ -897,7 +933,19 @@ SnapTranslator.dict.it = { 'save global custom block\ndefinitions as XML': 'salva le definizioni dei nuovi blocchi globali\nin formato XML', 'Unused blocks...': - 'Blocchi inutilizzati...', + 'Blocchi inutilizzati...', + 'Hide blocks...': + 'Nascondi blocchi...', + 'New category...': + 'Nuova categoria...', + 'Remove a category...': + 'Rimuovi una categoria...', + 'Scenes...': + 'Scene...', + 'New scene': + 'Nuova scena', + 'Add scene...': + 'Aggiungi scena...', 'find unused global custom blocks\nand remove their definitions': 'trova i nuobi blocchi inutilizzati\ne rimuove le loro definizioni', 'Remove unused blocks': @@ -930,6 +978,12 @@ SnapTranslator.dict.it = { 'Seleziona un costume dalla libreria dei media', 'Select a sound from the media library': 'Seleziona un suono dalla libreria dei media', + 'Undelete sprites...': + 'Ripristina sprite...', + 'Bring back deleted sprites': + 'Ripristina gli sprite rimossi', + 'trash is empty': + 'il cestino \u00E8 vuoto', //Libraries 'Import library': @@ -1044,14 +1098,20 @@ SnapTranslator.dict.it = { 'abilitare per mostrare sempre i tipi degli slot\nnella finestra di creazione degli input', 'uncheck to use the input\ndialog in short form': 'disabilitare per non mostrare automaticamente i tipi degli slot\nnella finestra di creazione degli input', - 'Virtual keyboard': - 'Tastiera virtuale', - 'uncheck to disable\nvirtual keyboard support\nfor mobile devices': - 'disabilitare per non usare il supporto\ndella tastiera virtuale con i dispositivi mobili', - - 'check to enable\nvirtual keyboard support\nfor mobile devices': - 'abilitare per usare il supporto della\ntastiera virtuale con i dispositivi mobili', - + 'JavaScript extensions': + 'Estensioni JavaScript', + 'check to support\nnative JavaScript functions': + 'abilitare per supportare\nfunzioni JavaScript native', + 'uncheck to disable support for\nnative JavaScript functions': + 'disabilitare per rimuovere il supporto\nalle funzioni JavaScript native', + 'JavaScript extensions for Snap!\nare turned off': + 'Le estensioni JavaScript per Snap!\nsono disabilitate', + 'Extension blocks': + 'Blocchi estensione', + 'uncheck to hide extension\nprimitives in the palette': + 'disabilitare per nascondere le primitive\ndelle estensioni nell\u0027elenco dei blocchi', + 'check to show extension\nprimitives in the palette': + 'abilitare per mostrare le primitive\ndelle estensioni nell\u0027elenco dei blocchi', 'Input sliders': 'Usa cursore per gli input', 'uncheck to disable\ninput sliders for\nentry fields': @@ -1106,12 +1166,6 @@ SnapTranslator.dict.it = { 'disabilitare per\npermettere di interrompere gli script', 'check to disallow\nscript reentrance': 'abilitare per\nimpedire di interrompere gli script', - 'Prefer smooth animations': - 'Animazioni a framerate fisso', - 'uncheck for greater speed\nat variable frame rates': - 'disabilitare per massima velocità\na framerate variabile', - 'check for smooth, predictable\nanimations across computers': - 'abilitare per avere animazioni\nfluide su tutti i computer', 'Flat line ends': 'Estremit\u00E0 delle linee squadrata', 'check for flat ends of lines': @@ -1131,10 +1185,39 @@ SnapTranslator.dict.it = { 'Log pen vectors': 'Log dei vettori della penna', 'uncheck to turn off\nlogging pen vectors': - 'disattiva per non loggare\ni vettori della penna', + 'disabilitare per non loggare\ni vettori della penna', 'check to turn on\nlogging pen vectors': - 'attiva per loggare\ni vettori della penna', - + 'abilitare per loggare\ni vettori della penna', + 'Single palette': + 'Elenco dei blocchi continuo', + 'check to show all blocks in a single palette': + 'abilitare per mostrare tutti\ni blocchi in un unico elenco', + 'uncheck to show only the selected category\'s blocks': + 'disabilitare per mostrare solo i blocchi\ndella categoria selezionata', + 'Show categories': + 'Mostra categorie', + 'uncheck to hide\ncategory names\nin the palette': + 'disabilitare per nascondere\ni nomi delle categorie\nnell\'elenco dei blocchi', + 'check to show\ncategory names\nin the palette': + 'abilitare per mostrare\ni nomi delle categorie\nnell\'elenco dei blocchi', + 'Show buttons': + 'Mostra pulsanti', + 'uncheck to hide buttons\nin the palette': + 'disabilitare per nascondere\ni pulsanti delle categorie', + 'check to show buttons\nin the palette': + 'abilitare per mostrare\ni pulsanti delle categorie', + 'HSL pen color model': + 'Modello HSL per i colori della penna', + 'uncheck to switch pen colors\nand graphic effects to HSV': + 'disabilitare per passare a colori della penna\ne effetti grafici HSV', + 'check to switch pen colors\nand graphic effects to HSL': + 'disabilitare per passare a colori della penna\ne effetti grafici HSL', + 'Disable click-to-run': + 'Disabilitare esecuzione con click', + 'enable\ndirectly running blocks\nby clicking on them': + 'abilitare per\neseguire direttamente i blocchi\ncliccandoli', + 'check to disable\ndirectly running blocks\nby clicking on them': + 'disabilitare per\nnon eseguire direttamente i blocchi\ncliccandoli', // inputs 'with inputs': @@ -1153,10 +1236,28 @@ SnapTranslator.dict.it = { // palette: 'find blocks': 'trova blocchi', - 'hide primitives': - 'nascondi primitive', - 'show primitives': - 'mostra primitive', + 'hide blocks...': + 'nascondi blocchi...', + 'Hide blocks in palette': + 'Nascondi i blocchi nell\'elenco dei blocchi', + 'unused': + 'non usati', + 'make a category...': + 'crea una categoria...', + 'New Category': + 'Nuova Categoria', + 'Blocks category name:': + 'Nome della nuova categoria di blocchi:', + 'Category color': + 'Colore della categoria', + 'red': + 'rosso', + 'green': + 'verde', + 'blue': + 'blu', + 'delete a category...': + 'rimuovi una categoria...', // blocks: 'help...': @@ -1215,6 +1316,12 @@ SnapTranslator.dict.it = { 'incluse le dipendenze', 'edit...': 'modifica...', + 'translations...': + 'traduzioni...', + 'block variables...': + 'variabili del blocco...', + 'in palette': + 'nell\'elenco dei blocchi', // sprites 'edit': @@ -1500,8 +1607,12 @@ SnapTranslator.dict.it = { // new project 'New Project': 'Nuovo Progetto', + 'Unsaved Changes!': + 'Ci sono modifiche non salvate!', 'Replace the current project with a new one?': 'Vuoi sostituire il progetto attuale con uno nuovo?', + 'Backup failed.\nThis cannot be undone, proceed anyway?': + 'Backup fallito.\nQuesta operazione non può essere annullata, vuoi procedere?', // save project 'Save Project As...': @@ -1720,6 +1831,8 @@ SnapTranslator.dict.it = { 'saturazione', 'brightness': 'luminosit\u00E0', + 'lightness': + 'luminosit\u00E0', 'transparency': 'trasparenza', 'ghost': @@ -1734,7 +1847,9 @@ SnapTranslator.dict.it = { // keys 'space': 'spazio', - 'up arrow': + 'enter': + 'invio', + 'up arrow': 'freccia su', 'down arrow': 'freccia gi\u00F9', @@ -1981,4 +2096,3 @@ SnapTranslator.dict.it = { 'uncheck to\ndisinherit': 'disabilita per non ereditare' }; - diff --git a/locale/lang-ja.js b/locale/lang-ja.js index a659e390..ce7ab08b 100755 --- a/locale/lang-ja.js +++ b/locale/lang-ja.js @@ -416,16 +416,16 @@ SnapTranslator.dict.ja = { // control: 'when %greenflag clicked': '%greenflag が押されたとき', - 'when %keyHat key pressed': - '%keyHat が押されたとき', - 'when I am clicked': - '自分がクリックされたとき', - 'when I receive %msgHat': - '%msgHat を受け取ったとき', - 'broadcast %msg': - '%msg を送る', - 'broadcast %msg and wait': - '%msg を送って待つ', + 'when %keyHat key pressed %keyName': + '%keyHat %keyName が押されたとき', + 'when I am %interaction': + '%interaction 自分がクリックされたとき', + 'when I receive %msgHat %message': + '%msgHat %message を受け取ったとき', + 'broadcast %msg %receive': + '%msg %receive を送る', + 'broadcast %msg %receive and wait': + '%msg %receive を送って待つ', 'Message name': 'メッセージ名', 'wait %n secs': diff --git a/locale/lang-ja_HIRA.js b/locale/lang-ja_HIRA.js index 1f7b1fc8..7d5d19f6 100755 --- a/locale/lang-ja_HIRA.js +++ b/locale/lang-ja_HIRA.js @@ -416,16 +416,16 @@ SnapTranslator.dict.ja_HIRA = { // control: 'when %greenflag clicked': '%greenflag がおされたとき', - 'when %keyHat key pressed': - '%keyHat がおされたとき', - 'when I am clicked': - 'じぶんがクリックされたとき', - 'when I receive %msgHat': - '%msgHat をうけとったとき', - 'broadcast %msg': - '%msg をおくる', - 'broadcast %msg and wait': - '%msg をおくってまつ', + 'when %keyHat key pressed %keyName': + '%keyHat %keyName がおされたとき', + 'when I am %interaction': + '%interaction じぶんがクリックされたとき', + 'when I receive %msgHat %message': + '%msgHat %message をうけとったとき', + 'broadcast %msg %receive': + '%msg %receive をおくる', + 'broadcast %msg %receive and wait': + '%msg %receive をおくってまつ', 'Message name': 'メッセージめい', 'wait %n secs': diff --git a/locale/lang-kn.js b/locale/lang-kn.js index 6501c5b2..615f0039 100644 --- a/locale/lang-kn.js +++ b/locale/lang-kn.js @@ -407,16 +407,16 @@ SnapTranslator.dict.kn = { // control: 'when %greenflag clicked': '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CBE\u0CA6\u0CB0\u0CC2 %greenflag \u0C92\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CBE\u0C97', - 'when %keyHat key pressed': - '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CBE\u0CA6\u0CB0\u0CC2 %keyHat \u0C95\u0CC0\u0020\u0C92\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CBE\u0C97', - 'when I am clicked': - '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CBE\u0CA6\u0CB0\u0CC2\u0020\u0CA8\u0CBE\u0CA8\u0CC1\u0020\u0C92\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CBE\u0C97', - 'when I receive %msgHat': - '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CBE\u0CA6\u0CB0\u0CC1 %msgHat \u0CB8\u0CCD\u0CB5\u0CC0\u0C95\u0CB0\u0CBF\u0CB8\u0CBF\u0CA6\u0CBE\u0C97', - 'broadcast %msg': - '\u0CAA\u0CCD\u0CB0\u0CB8\u0CB0\u0CBF\u0CB8\u0CC1 %msg', - 'broadcast %msg and wait': - '\u0CAA\u0CCD\u0CB0\u0CB8\u0CB0\u0CBF\u0CB8\u0CC1 %msg \u0CAE\u0CA4\u0CCD\u0CA4\u0CC1\u0020\u0C95\u0CBE\u0CAF\u0CAC\u0CC7\u0C95\u0CC1', + 'when %keyHat key pressed %keyName': + '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CBE\u0CA6\u0CB0\u0CC2 %keyHat %keyName \u0C95\u0CC0\u0020\u0C92\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CBE\u0C97', + 'when I am %interaction': + '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CBE\u0CA6\u0CB0\u0CC2\u0020\u0CA8\u0CBE\u0CA8\u0CC1\u0020\u0C92\u0CA4\u0CCD\u0CA4\u0CBF\u0CA6\u0CBE\u0C97 %interaction', + 'when I receive %msgHat %message': + '\u0CAF\u0CBE\u0CB5\u0CBE\u0C97\u0CB2\u0CBE\u0CA6\u0CB0\u0CC1 %msgHat %message \u0CB8\u0CCD\u0CB5\u0CC0\u0C95\u0CB0\u0CBF\u0CB8\u0CBF\u0CA6\u0CBE\u0C97', + 'broadcast %msg %receive': + '\u0CAA\u0CCD\u0CB0\u0CB8\u0CB0\u0CBF\u0CB8\u0CC1 %msg %receive', + 'broadcast %msg %receive and wait': + '\u0CAA\u0CCD\u0CB0\u0CB8\u0CB0\u0CBF\u0CB8\u0CC1 %msg %receive \u0CAE\u0CA4\u0CCD\u0CA4\u0CC1\u0020\u0C95\u0CBE\u0CAF\u0CAC\u0CC7\u0C95\u0CC1', 'Message name': '\u0CAE\u0CBE\u0CB9\u0CBF\u0CA4\u0CBF\u0CAF\u0020\u0CB9\u0CC6\u0CB8\u0CB0\u0CC1', 'message': diff --git a/locale/lang-ko.js b/locale/lang-ko.js index 1c8f70b4..82f45836 100755 --- a/locale/lang-ko.js +++ b/locale/lang-ko.js @@ -423,16 +423,16 @@ SnapTranslator.dict.ko = { // control: 'when %greenflag clicked': '%greenflag 클릭했을 때', - 'when %keyHat key pressed': - '%keyHat 키를 눌렀을 때', - 'when I am clicked': - '이 스프라이트를 클릭했을 때', - 'when I receive %msgHat': - '%msgHat 을(를) 받았을 때', - 'broadcast %msg': - '%msg 방송하기', - 'broadcast %msg and wait': - '%msg 방송하고 기다리기', + 'when %keyHat key pressed %keyName': + '%keyHat %keyName 키를 눌렀을 때', + 'when I am %interaction': + '이 스프라이트를 클릭했을 때 %interaction', + 'when I receive %msgHat %message': + '%msgHat %message 을(를) 받았을 때', + 'broadcast %msg %receive': + '%msg %receive 방송하기', + 'broadcast %msg %receive and wait': + '%msg %receive 방송하고 기다리기', 'Message name': '메시지 이름', 'message': diff --git a/locale/lang-ml.js b/locale/lang-ml.js index abfdb547..e499f798 100644 --- a/locale/lang-ml.js +++ b/locale/lang-ml.js @@ -414,16 +414,16 @@ SnapTranslator.dict.ml = { // control: 'when %greenflag clicked': '%greenflag ക്ലിക്ക് ചെയ്യുമ്പോള്‍', - 'when %keyHat key pressed': - '%keyHat കീ അമര്‍ത്തുമ്പോള്‍', - 'when I am clicked': - 'Wenn ich angeklickt werde', - 'when I receive %msgHat': - 'ഞാന്‍ %msgHat സ്വീകരിക്കുമ്പോള്‍', - 'broadcast %msg': - '%msg വിളംബരം ചെയ്യുക', - 'broadcast %msg and wait': - '%msg വിളംബരം ചെയ്തു കാത്തിരിക്കുക', + 'when %keyHat key pressed %keyName': + '%keyHat %keyName കീ അമര്‍ത്തുമ്പോള്‍', + 'when I am %interaction': + 'when I am %interaction', + 'when I receive %msgHat %message': + 'ഞാന്‍ %msgHat %message സ്വീകരിക്കുമ്പോള്‍', + 'broadcast %msg %receive': + '%msg %receive വിളംബരം ചെയ്യുക', + 'broadcast %msg %receive and wait': + '%msg %receive വിളംബരം ചെയ്തു കാത്തിരിക്കുക', 'Message name': 'സന്ദേശത്തിന്റെ പേര്', 'message': diff --git a/locale/lang-nl.js b/locale/lang-nl.js index dc9661c7..cb71ef4a 100644 --- a/locale/lang-nl.js +++ b/locale/lang-nl.js @@ -463,14 +463,14 @@ SnapTranslator.dict.nl = { 'maak penkleur %clr', 'set background color to %clr': 'maak achtergrondkleur %clr', - 'change pen %hsva by %n': - 'verander pen %hsva met %n', - 'set pen %hsva to %n': - 'maak pen %hsva %n', - 'change achtergrondkleur %hsva by %n': - 'verander pen %hsva met %n', - 'set achtergrondkleur %hsva to %n': - 'maak pen %hsva %n', + 'change pen %clrdim by %n': + 'verander pen %clrdim met %n', + 'set pen %clrdim to %n': + 'maak pen %clrdim %n', + 'change achtergrondkleur %clrdim by %n': + 'verander pen %clrdim met %n', + 'set achtergrondkleur %clrdim to %n': + 'maak pen %clrdim %n', 'pen %pen': 'pen %pen', 'change pen size by %n': @@ -493,8 +493,8 @@ SnapTranslator.dict.nl = { // control: 'when %greenflag clicked': 'wanneer %greenflag wordt aangeklikt', - 'when %keyHat key pressed': - 'wanneer %keyHat wordt ingedrukt', + 'when %keyHat key pressed %keyName': + 'wanneer %keyHat wordt ingedrukt %keyName', 'when I am %interaction': 'wanneer ik %interaction word', 'clicked': @@ -515,12 +515,14 @@ SnapTranslator.dict.nl = { 'gestopt', 'when %b': 'wanneer %b', - 'when I receive %msgHat': - 'wanneer ik %msgHat ontvang', - 'broadcast %msg': - 'zend signaal %msg', - 'broadcast %msg and wait': - 'zend signaal %msg en wacht', + 'when I receive %msgHat %message': + 'wanneer ik %msgHat ontvang %message', + 'broadcast %msg %receive': + 'zend signaal %msg %receive', + 'broadcast %msg %receive and wait': + 'zend signaal %msg %receive en wacht', + 'to': + 'naar', 'send %msg to %spr': 'zend %msg naar %spr', 'Message name': diff --git a/locale/lang-no.js b/locale/lang-no.js index ee6672c5..acd469ad 100644 --- a/locale/lang-no.js +++ b/locale/lang-no.js @@ -468,14 +468,14 @@ SnapTranslator.dict.no = { 'sett pennfarge til %clr', 'set background color to %clr': 'sett bakgrunnsfarge til %clr', - 'change pen %hsva by %n': - 'endre penn %hsva med %n', - 'change background %hsva by %n': - 'endre bakgrunn %hsva med %n', - 'set pen %hsva to %n': - 'sett penn %hsva til %n', - 'set background %hsva to %n': - 'sett bakgrunn %hsva til %n', + 'change pen %clrdim by %n': + 'endre penn %clrdim med %n', + 'change background %clrdim by %n': + 'endre bakgrunn %clrdim med %n', + 'set pen %clrdim to %n': + 'sett penn %clrdim til %n', + 'set background %clrdim to %n': + 'sett bakgrunn %clrdim til %n', 'pen %pen': 'penn %pen', 'change pen size by %n': @@ -496,8 +496,8 @@ SnapTranslator.dict.no = { // control: 'when %greenflag clicked': 'n\u00E5r %greenflag klikket', - 'when %keyHat key pressed': - 'n\u00E5r tast %keyHat trykket', + 'when %keyHat key pressed %keyName': + 'n\u00E5r tast %keyHat trykket %keyName', 'when I am %interaction': 'n\u00E5r jeg blir %interaction', 'clicked': @@ -518,12 +518,14 @@ SnapTranslator.dict.no = { 'stoppet', 'when %b': 'n\u00E5r %b', - 'when I receive %msgHat': - 'n\u00E5r jeg mottar %msgHat', - 'broadcast %msg': - 'kringkast %msg', - 'broadcast %msg and wait': - 'kringkast %msg og vent', + 'when I receive %msgHat %message': + 'n\u00E5r jeg mottar %msgHat %message', + 'broadcast %msg %receive': + 'kringkast %msg %receive', + 'broadcast %msg %receive and wait': + 'kringkast %msg %receive og vent', + 'to': + 'til', 'send %msg to %spr': 'send %msg til %spr', 'Message name': diff --git a/locale/lang-pl.js b/locale/lang-pl.js index d0a10410..4a175aad 100644 --- a/locale/lang-pl.js +++ b/locale/lang-pl.js @@ -472,14 +472,14 @@ SnapTranslator.dict.pl = { 'ustaw kolor pisaka %clr', 'set background color to %clr': 'ustaw kolor t\u0142a %clr', - 'change pen %hsva by %n': - 'zmie\u0144 pisak %hsva o %n', - 'change background %hsva by %n': - 'zmie\u0144 t\u0142o %hsva o %n', - 'set pen %hsva to %n': - 'ustaw pisak %hsva na %n', - 'set background %hsva to %n': - 'ustaw t\u0142o %hsva na %n', + 'change pen %clrdim by %n': + 'zmie\u0144 pisak %clrdim o %n', + 'change background %clrdim by %n': + 'zmie\u0144 t\u0142o %clrdim o %n', + 'set pen %clrdim to %n': + 'ustaw pisak %clrdim na %n', + 'set background %clrdim to %n': + 'ustaw t\u0142o %clrdim na %n', 'pen %pen': 'pisak %pen', 'change pen size by %n': @@ -502,8 +502,8 @@ SnapTranslator.dict.pl = { // control: 'when %greenflag clicked': 'kiedy klikni\u0119to %greenflag', - 'when %keyHat key pressed': - 'kiedy klawisz %keyHat naci\u015Bni\u0119ty', + 'when %keyHat key pressed %keyName': + 'kiedy klawisz %keyHat naci\u015Bni\u0119ty %keyName', 'when I am %interaction': 'kiedy zostan\u0119 %interaction', 'clicked': @@ -524,12 +524,14 @@ SnapTranslator.dict.pl = { 'zatrzymany', 'when %b': 'kiedy %b', - 'when I receive %msgHat': - 'kiedy otrzymam %msgHat', - 'broadcast %msg': - 'nadaj %msg do wszystkich', - 'broadcast %msg and wait': - 'nadaj %msg do wszystkich i czekaj', + 'when I receive %msgHat %message': + 'kiedy otrzymam %msgHat %message', + 'broadcast %msg %receive': + 'nadaj %msg %receive', + 'broadcast %msg %receive and wait': + 'nadaj %msg %receive i czekaj', + 'to': + 'do', 'send %msg to %spr': 'nadaj %msg do %spr', 'Message name': @@ -561,7 +563,7 @@ SnapTranslator.dict.pl = { 'stop %stopChoices': 'zatrzymaj %stopChoices', 'all': - 'wszystko', + 'wszystkich', 'this script': 'ten skrypt', 'this block': diff --git a/locale/lang-pt.js b/locale/lang-pt.js index 322c668d..6d555e8a 100755 --- a/locale/lang-pt.js +++ b/locale/lang-pt.js @@ -469,14 +469,14 @@ SnapTranslator.dict.pt = { 'altera a cor da tua caneta para %clr', 'set background color to %clr': 'altera a cor do fundo para %clr', - 'change pen %hsva by %n': - 'adiciona a %hsva da tua caneta o valor %n', - 'change background %hsva by %n': - 'adiciona a %hsva do fundo o valor %n', - 'set pen %hsva to %n': - 'altera %hsva da tua caneta para %n', - 'set background %hsva to %n': - 'altera %hsva do fundo para %n', + 'change pen %clrdim by %n': + 'adiciona a %clrdim da tua caneta o valor %n', + 'change background %clrdim by %n': + 'adiciona a %clrdim do fundo o valor %n', + 'set pen %clrdim to %n': + 'altera %clrdim da tua caneta para %n', + 'set background %clrdim to %n': + 'altera %clrdim do fundo para %n', 'pen %pen': '%pen da tua caneta', 'change pen size by %n': @@ -497,8 +497,8 @@ SnapTranslator.dict.pt = { // controlo: 'when %greenflag clicked': 'Quando alguém clicar em %greenflag', - 'when %keyHat key pressed': - 'Quando alguém pressionar a tecla %keyHat', + 'when %keyHat key pressed %keyName': + 'Quando alguém pressionar a tecla %keyHat %keyName', 'when I am %interaction': 'Quando o rato %interaction', 'clicked': @@ -519,12 +519,14 @@ SnapTranslator.dict.pt = { 'parar', 'when %b': 'Quando %b', - 'when I receive %msgHat': - 'Quando receberes a mensagem %msgHat', - 'broadcast %msg': - 'difunde a mensagem %msg', - 'broadcast %msg and wait': - 'difunde a mensagem %msg e espera', + 'when I receive %msgHat %message': + 'Quando receberes a mensagem %msgHat %message', + 'broadcast %msg %receive': + 'difunde a mensagem %msg %receive', + 'broadcast %msg %receive and wait': + 'difunde a mensagem %msg %receive e espera', + 'to': + 'a', 'send %msg to %spr': 'envia a mensagem %msg a %spr', 'Message name': diff --git a/locale/lang-pt_BR.js b/locale/lang-pt_BR.js index 9cd98234..c3e62cf0 100644 --- a/locale/lang-pt_BR.js +++ b/locale/lang-pt_BR.js @@ -4,7 +4,7 @@ Brazilian Portuguese translation for SNAP! - translated by Aldo von Wangenheim + translated by Aldo von Wangenheim, later updated by Cassiano D'Andrea Copyright (C) 2014 by Aldo von Wangenheim @@ -181,11 +181,11 @@ SnapTranslator.dict.pt_BR = { 'language_name': 'Português do Brasil', 'language_translator': - 'Aldo von Wangenheim', + "Aldo von Wangenheim, Cassiano D'Andrea", 'translator_e-mail': - 'awangenh@inf.ufsc.br', + 'awangenh@inf.ufsc.br, cassiano.dandrea@tagview.com.br', 'last_changed': - '2014-04-20', + '2021-11-11', // GUI // control bar: @@ -230,9 +230,9 @@ SnapTranslator.dict.pt_BR = { // nomes: 'Sprite': - 'Ator', + 'ator', 'Stage': - 'Palco', + 'palco', // estilos de rotação: 'don\'t rotate': @@ -301,11 +301,11 @@ SnapTranslator.dict.pt_BR = { 'point towards %dst': 'aponte para %dst', 'go to x: %n y: %n': - 'vá para x: %n , y: %n ', + 'vá para x: %n y: %n ', 'go to %dst': 'vá para %dst', 'glide %n secs to x: %n y: %n': - 'deslize por %n segundos ate x: %n , y: %n ', + 'deslize por %n segundos até x: %n y: %n ', 'change x by %n': 'adicione %n a x', 'set x to %n': @@ -377,22 +377,56 @@ SnapTranslator.dict.pt_BR = { 'toque o som %snd até o fim', 'stop all sounds': 'pare todos os sons', + 'play sound %snd at %rate Hz': + 'toque o som %snd em %rate Hz', + '%aa of sound %snd': + '%aa do som %snd', + 'new sound %l rate %rate Hz': + 'nova %l com taxa de som de %rate Hz', 'rest for %n beats': - 'silêncio por %n tempos', - 'play note %n for %n beats': - 'toque a nota %n durante %n tempos', + 'silêncio por %n batidas', + 'play note %note for %n beats': + 'toque a nota %note durante %n batidas', 'change tempo by %n': - 'adicione %n tempos ao andamento', + 'adicione %n tempos/bpm ao andamento', 'set tempo to %n bpm': - 'altere o andamento para %n tempos', + 'mude o andamento para %n tempos/bpm', 'tempo': 'andamento', + 'set instrument to %inst': + 'mude o instrumento para %inst', + 'change volume by %n': + 'adicione %n ao volume', + 'set volume to %n %': + 'mude o volume para %n %', + 'change balance by %n': + 'adicione %n ao balanço', + 'set balance to %n': + 'mude o balanço para %n', + 'balance': + 'balanço', + 'volume': + 'volume', + 'play frequency %n Hz': + 'reproduzir frequência de %n Hz', + 'stop frequency': + 'parar a frequência', + + // %inst values for (set instrument to %inst): + '(1) sine': + '(1) \u223F\u223F (onda senoidal)', + '(2) square': + '(2) \u238D\u238D (onda quadrada)', + '(3) sawtooth': + '(3) \u2A58\u2A58 (onda dentada)', + '(4) triangle': + '(4) \u22C0\u22C0 (onda triangular)', // Caneta: 'clear': 'apague tudo', 'pen down': - 'use a caneta', + 'abaixe a caneta', 'pen up': 'levante a caneta', 'set pen color to %clr': @@ -411,20 +445,40 @@ SnapTranslator.dict.pt_BR = { 'mude a espessura da caneta para %n', 'stamp': 'carimbe', + 'fill': + 'preencha', + 'pen down?': + 'caneta abaixada?', + 'change pen %clrdim by %n': + 'adicione ao/à %clrdim da caneta o valor %n', + 'set pen %clrdim to %n': + 'mude o/a %clrdim da caneta para %n', + 'write %s size %n': + 'escreva %s com tamanho %n', + 'pen %pen': + '%pen da caneta', + 'paste on %spr': + 'cole sobre %spr', + 'cut from %spr': + 'recorte de %spr', // Eventos e Controle: 'when %greenflag clicked': 'quando clicar em %greenflag', - 'when %keyHat key pressed': - 'quando a tecla %keyHat for pressionada', - 'when I am clicked': - 'quando este ator for clicado', - 'when I receive %msgHat': - 'quando receber %msgHat', - 'broadcast %msg': - 'envie %msg a todos', - 'broadcast %msg and wait': - 'envie %msg a todos e espere', + 'when %keyHat key pressed %keyName': + 'quando a tecla %keyHat for pressionada %keyName', + 'when I am %interaction': + 'quando eu for %interaction', + 'when %b': + 'quando %b', + 'when I receive %msgHat %message': + 'quando receber %msgHat %message', + 'broadcast %msg %receive': + 'envie %msg %receive', + 'broadcast %msg %receive and wait': + 'envie %msg %receive e aguarde', + 'to': + 'a', 'Message name': 'nome da mensagem', 'message': @@ -432,19 +486,23 @@ SnapTranslator.dict.pt_BR = { 'any message': 'qualquer mensagem', 'wait %n secs': - 'espere %n segundos', + 'aguarde %n segundos', 'wait until %b': - 'espere até que %b', + 'aguarde até que %b', 'forever %loop': 'sempre %loop', 'repeat %n %loop': 'repita %n vezes %loop', 'repeat until %b %loop': 'repita até que %b %loop', + 'for %upvar = %n to %n %cla': + 'repita de %upvar = %n a %n %cla', 'if %b %c': 'se %b então %c', 'if %b %c else %c': 'se %b então %c senão %c', + 'if %b then %s else %s': + 'se %b então %s senão %s', 'report %s': 'reporte %s', 'stop %stopChoices': @@ -469,6 +527,10 @@ SnapTranslator.dict.pt_BR = { 'inicie execução de %cmdRing %inputs', 'call %repRing %inputs': 'chame %repRing %inputs', + 'tell %spr to %cmdRing %inputs': + 'diga a %spr que %cmdRing %inputs', + 'ask %spr for %repRing %inputs': + 'pergunte a %spr por %repRing %inputs', 'run %cmdRing w/continuation': 'execute %cmdRing com continuação', 'call %cmdRing w/continuation': @@ -479,10 +541,14 @@ SnapTranslator.dict.pt_BR = { 'quando este ator começar como clone', 'create a clone of %cln': 'crie clone de %cln', + 'a new clone of %cln': + 'um novo clone de %cln', 'myself': 'este ator', 'delete this clone': 'apague este clone', + 'send %msg to %spr': + 'enviar %msg a %spr', // Sensores: 'touching %col ?': @@ -492,9 +558,9 @@ SnapTranslator.dict.pt_BR = { 'color %clr is touching %clr ?': 'a cor %clr está tocando na cor %clr', 'ask %s and wait': - 'pergunte %s e espere a resposta', + 'pergunte %s e aguarde a resposta', 'what\'s your name?': - 'qual o seu nome?', + 'qual é o seu nome?', 'answer': 'resposta', 'mouse x': @@ -508,9 +574,9 @@ SnapTranslator.dict.pt_BR = { 'distance to %dst': 'distância até %dst', 'reset timer': - 'zere o cronómetro', + 'zere o cronômetro', 'timer': - 'valor do cronómetro', + 'valor do cronômetro', '%att of %spr': '%att de %spr', 'http:// %s': @@ -535,7 +601,7 @@ SnapTranslator.dict.pt_BR = { '%fun of %n': '%fun de %n', 'pick random %n to %n': - 'escolha um valor ao acaso entre %n e %n', + 'escolha um valor aleatório entre %n e %n', '%b and %b': '%b e %b', '%b or %b': @@ -590,16 +656,20 @@ SnapTranslator.dict.pt_BR = { 'esconda variável %var', 'script variables %scriptVars': 'crie as variáveis de roteiro %scriptVars', + 'inherit %shd': + 'herde %shd', // listas: 'list %exp': - 'uma lista com %exp', + 'lista %exp', + 'numbers from %n to %n': + 'números entre %n e %n', '%s in front of %l': - '%s inicia %l', + '%s em frente a %l', 'item %idx of %l': - '%idx de %l', + 'item %idx de %l', 'all but first of %l': - 'todos elementos de %l menos o primeiro', + 'todos os itens de %l menos o primeiro', 'length of %l': 'tamanho de %l', '%l contains %s': @@ -614,6 +684,24 @@ SnapTranslator.dict.pt_BR = { 'insira %s na posição %idx em %l', 'replace item %idx of %l with %s': 'substitua o item %idx de %l por %s', + 'index of %s in %l': + 'índice do item %s em %l', + 'is %l empty?': + '%l vazia?', + 'map %repRing over %l': + 'mapear %repRing sobre %l', + 'keep items %predRing from %l': + 'manter/filtrar os itens que satisfaçam %predRing de %l', + 'find first item %predRing in %l': + 'encontrar primeiro item que satisfaça %predRing em %l', + 'combine %l using %repRing': + 'combinar/reduzir os itens de %l com %repRing', + 'for each %upvar in %l %cla': + 'repita para cada %upvar de %l %cla', + 'append %lists': + 'concatene %lists', + 'reshape %l to %nums': + 'altere as dimensões de %l para %nums', // Outros 'Make a block': @@ -659,6 +747,8 @@ SnapTranslator.dict.pt_BR = { 'Exportar este projeto em modo texto…', 'Export project...': 'Exportar este projeto…', + 'Export summary...': + 'Exportar resumo...', 'show project data as XML\nin a new browser window': 'Mostrar os dados no\nformato XML numa nova janela do navegador.', 'Export blocks...': @@ -679,12 +769,30 @@ SnapTranslator.dict.pt_BR = { 'Entrar na sua conta…', 'Signup...': 'Registar uma nova conta…', + 'Reset Password...': + 'Redefinir senha...', + 'Resend Verification Email...': + 'Reenviar e-mail de verificação...', + 'Logout': + 'Encerrar sessão', + 'Change Password...': + 'Alterar senha', + 'Open in Community Site': + 'Abrir no site da comunidade', // menu de preferências 'Language...': 'Língua…', 'Zoom blocks...': - 'Zoom dos blocos…', + 'Tamanho dos blocos…', + 'Fade blocks...': + 'Nível de transparência dos blocos...', + 'Stage size...': + 'Tamanho do palco...', + 'Microphone resolution...': + 'Resolução do microfone...', + 'JavaScript extensions': + 'Extensões do JavaScript', 'Blurred shadows': 'Sombras borradas', 'uncheck to use solid drop\nshadows and highlights': @@ -714,7 +822,7 @@ SnapTranslator.dict.pt_BR = { 'Long form input dialog': 'Forma longa da caixa de diálogo dos parâmetros', 'Plain prototype labels': - 'Use texto simples para protótipos', + 'Textos simples nos protótipos dos blocos', 'uncheck to always show (+) symbols\nin block prototype labels': 'Desmarque para mostrar sempre os símbolos (+)\nno texto dos protótipos dos blocos', 'check to hide (+) symbols\nin block prototype labels': @@ -756,17 +864,43 @@ SnapTranslator.dict.pt_BR = { 'check to enable\nIDE animations': 'Marque para ativar\nas animações da interface de usuário.', 'Thread safe scripts': - 'Roteiros seguros face a threads', + 'Roteiros seguros relativos a threads', 'uncheck to allow\nscript reentrance': 'Desmarque para permitir\nreentrância nos roteiros.', 'check to disallow\nscript reentrance': 'Marque para não permitir\nreentrância nos roteiros.', 'Prefer smooth animations': 'Prefira animações suaves', + 'Flat line ends': + 'Extremos de linhas retos', + 'uncheck for round ends of lines': + 'desmarque para desenhar\nlinhas com extremos arredondados', + 'check for flat ends of lines': + 'marque para desenhar\nlinhas com extremos retos', 'uncheck for greater speed\nat variable frame rates': 'Desmarque para aumentar a velocidade\npermitindo ritmos variáveis das tramas nas animações.', 'check for smooth, predictable\nanimations across computers': 'Marque para obter animações mais suaves\ne previsíveis de computador para computador.', + 'Visible stepping': + 'Depuração passo a passo', + 'uncheck to turn off\nvisible stepping': + 'desmarque para desativar\na depuração passo a passo', + 'check to turn on\n visible stepping (slow)': + 'marque para ativar\na depuração passo a passo (lento)', + 'Log pen vectors': + 'Registrar os vetores da caneta', + 'log pen vectors': + 'registro dos vetores da caneta', + 'Hyper blocks support': + 'Suporte a hiper-blocos', + 'uncheck to disable\nusing operators on lists and tables': + 'desmarque para desabilitar\no uso de operadores em listas e tabelas', + 'check to enable\nusing operators on lists and tables': + 'marque para habilitar\no uso de operadores em listas e tabelas', + 'Turbo mode': + 'Modo turbo', + 'turbo mode': + 'modo turbo', // Entradas 'with inputs': @@ -990,6 +1124,10 @@ SnapTranslator.dict.pt_BR = { 'Quer mesmo remover este bloco e ' + 'todas as suas aplicações?', + // export project as... dialog + 'Export Project As...': + 'Exportar projeto como...', + // Caixa de diálogo de parâmetros 'Create input name': 'Criar parâmetro', @@ -1026,7 +1164,7 @@ SnapTranslator.dict.pt_BR = { 'Single input.': 'Parâmetro único.', 'Default Value:': - 'Valor em caso de omissão:', + 'Valor em caso de omissão (default):', 'Multiple inputs (value is list of inputs)': 'Múltiplos argumentos (o valor do parâmetro é a lista dos argumentos).', 'Upvar - make internal variable visible to caller': @@ -1083,13 +1221,15 @@ SnapTranslator.dict.pt_BR = { // drop downs // direcções '(90) right': - '90° (direita)', + '90° (direita ou leste)', '(-90) left': - '-90° (esquerda)', + '-90° (esquerda ou oeste)', '(0) up': - '0° (acima)', + '0° (cima ou norte)', '(180) down': - '180° (abaixo)', + '180° (baixo ou sul)', + 'random': + 'aleatória', // detecção de colisões 'mouse-pointer': @@ -1120,6 +1260,8 @@ SnapTranslator.dict.pt_BR = { 'seta para a direita', 'left arrow': 'seta para a esquerda', + 'any key': + 'qualquer tecla', 'a': 'a', 'b': @@ -1193,6 +1335,25 @@ SnapTranslator.dict.pt_BR = { '9': '9', + // %interaction values for (when I am %interaction): + // In portuguese read as "quando eu for %interaction" + 'clicked': + 'clicado', + 'pressed': + 'pressionado', + 'dropped': + 'arrastado e solto', + 'mouse-entered': + 'tocado com o mouse', + 'mouse-departed': + 'deixado de ser tocado com o mouse', + 'scrolled-up': + 'girado com a roda do mouse para baixo', + 'scrolled-down': + 'girado com a roda do mouse para cima', + 'stopped': + 'parado', + // messagens 'new...': 'Nova…', @@ -1200,8 +1361,10 @@ SnapTranslator.dict.pt_BR = { // funções matemáticas 'abs': 'valor absoluto', + 'ceiling': + 'arredondamento para cima (teto)', 'floor': - 'arredondamento para baixo', + 'arredondamento para baixo (piso)', 'sqrt': 'raiz quadrada', 'sin': @@ -1246,12 +1409,16 @@ SnapTranslator.dict.pt_BR = { 'repórter', 'predicate': 'predicado', + 'costume': + 'fantasia', + 'sound': + 'som', // índices de listas 'last': 'último item', 'any': - 'um item ao acaso', + 'qualquer (aleatório)', // em falta no ficheiro lang-de.js 'costume name': @@ -1351,7 +1518,7 @@ SnapTranslator.dict.pt_BR = { 'uncheck to disable\nsprite composition': 'Desmarque para desativar\na composição de atores.', 'Codification support': - 'Suportar produção de código', + 'Suporte a produção de código', 'check for block\nto text mapping features': 'Assinalar para funcionalidades\nde mapeamento entre blocos e texto.', 'Save to disk': @@ -1375,15 +1542,203 @@ SnapTranslator.dict.pt_BR = { 'add a new Turtle sprite': 'Adicionar um novo ator.', 'Flat design': - 'Visual plano', + 'Visual achatado', 'check for alternative\nGUI design': 'Marque para um design alternativo\nda interface gráfica de usuário.', 'Rasterize SVGs': - 'Transformar desenhos vetorias (SVG) em mapas de bits', + 'Transformar desenhos vetoriais (SVG) em mapas de bits', 'check to rasterize\nSVGs on import': 'Marque para transformar os arquivos vetoriais SVG\nem mapas de bits durante a importação.', 'comment pic...': 'fotografia do comentário…', 'open a new window\nwith a picture of this comment': - 'Abrir uma nova janela com\numa fotografia deste comentário.' + 'Abrir uma nova janela com\numa foto deste comentário.', + + // %get values for (my %get): + 'neighbors': + 'vizinhos', + 'self': + 'eu mesmo', + 'other sprites': + 'outras sprites', + 'clones': + 'clones', + 'other clones': + 'outros clones', + 'parts': + 'partes', + 'anchor': + 'âncoras', + 'stage': + 'palco', + 'children': + 'filhos', + 'parent': + 'pai', + 'temporary?': + 'temporário?', + 'name': + 'nome', + 'costumes': + 'fantasias', + 'sounds': + 'sons', + 'dangling?': + 'penso?', + 'draggable?': + 'arrastável?', + 'rotation style': + 'estilo de rotação', + 'rotation x': + 'rotação x', + 'rotation y': + 'rotação y', + 'center x': + 'centro x', + 'center y': + 'centro y', + + // %dates values for (current %dates): + 'year': + 'ano', + 'month': + 'mês', + 'date': + 'dia', + 'day of week': + 'daa da semana', + 'hour': + 'hora', + 'minute': + 'minuto', + 'second': + 'segundo', + 'time in milliseconds': + 'tempo en milisegundos', + + // Traduções adicionais: + 'saturation': + 'saturação', + 'brightness': + 'brilho', + 'transparency': + 'transparência', + 'hue': + 'tonalidade', + 'random position': + 'posição aleatória', + 'center': + 'centro', + 'width': + 'largura', + 'height': + 'altura', + 'name': + 'nome', + '%img of costume %cst': + '%img da fantasia %cst', + 'current': + 'atual', + 'stretch %cst x: %n y: %n %': + 'estique a fantasia %cst em x: %n y: %n %', + 'new costume %l width %dim height %dim': + 'nova fantasia %l com largura %dim e altura %dim', + 'color': + 'cor', + 'fisheye': + 'olho de peixe', + 'whirl': + 'redemoinho', + 'pixelate': + 'pixelado', + 'mosaic': + 'mosaico', + 'negative': + 'negativo', + '%eff effect': + 'efeito %eff', + 'shown?': + 'visível?', + 'go to %layer layer': + 'vá para camada %layer', + 'back': + 'traseira', + 'front': + 'dianteira', + 'distance': + 'distância', + 'ray length': + 'comprimento do raio', + '%rel to %dst': + '%rel até %dst', + '%asp at %loc' : + '%asp em %loc', + 'top': + 'superior', + 'bottom': + 'inferior', + 'left': + 'esquerda', + 'right': + 'direita', + 'balance': + 'balanço', + 'volume': + 'volume', + 'my %get': + 'meu(s)/minha(s) %get', + 'object %self': + 'Objeto %self', + 'microphone %audio': + '%audio do microfone', + 'frequency': + 'frequência', + 'duration': + 'duração', + 'number of channels': + 'número de canais', + 'sample rate': + 'taxa de amostragem', + 'samples': + 'amostras', + 'spectrum': + 'espectro', + 'resolution': + 'resolução', + 'note': + 'nota', + 'video %vid on %self': + '%vid do vídeo do(e) %self', + 'motion': + 'movimento', + 'snap': + 'captura instantânea', + 'set video transparency to %n': + 'mude a transparência do vídeo para %n', + 'is %setting on?': + 'parâmetro %setting ativo?', + 'set %setting to %b': + 'mude o parâmetro %setting para %b', + 'flat line ends': + 'extremos de linhas retos', + 'current %dates': + '%dates atual', + 'length': + 'comprimento', + 'rank': + 'ranking', + 'dimensions': + 'dimensões', + 'flatten': + 'achatamento', + 'lines': + 'linhas', + 'columns': + 'colunas', + 'reverse': + 'reverso', + 'video capture': + 'captura de vídeo', + 'mirror video': + 'espelhamento de vídeo', }; diff --git a/locale/lang-ro.js b/locale/lang-ro.js index de5f9070..5ae983a5 100644 --- a/locale/lang-ro.js +++ b/locale/lang-ro.js @@ -413,8 +413,8 @@ SnapTranslator.dict.ro = { // control: 'when %greenflag clicked': 'cand se apasa %greenflag', - 'when %keyHat key pressed': - 'cand se apasa tasta %keyHat', + 'when %keyHat key pressed %keyName': + 'cand se apasa tasta %keyHat %keyName', 'when I am %interaction': 'cand sunt %interaction', 'clicked': @@ -427,12 +427,12 @@ SnapTranslator.dict.ro = { 'in contact cu mouse-ul', 'mouse-departed': 'indepratat de langa mouse', - 'when I receive %msgHat': - 'cand primesc %msgHat', - 'broadcast %msg': - 'trimite mesajul %msg tuturor', - 'broadcast %msg and wait': - 'trimite mesajul %msg tuturor si asteapta', + 'when I receive %msgHat %message': + 'cand primesc %msgHat %message', + 'broadcast %msg %receive': + 'trimite mesajul %msg %receive tuturor', + 'broadcast %msg %receive and wait': + 'trimite mesajul %msg %receive tuturor si asteapta', 'Message name': 'Mesaj', 'message': diff --git a/locale/lang-ru.js b/locale/lang-ru.js index 7bb323b8..ccd40ab1 100644 --- a/locale/lang-ru.js +++ b/locale/lang-ru.js @@ -469,14 +469,14 @@ SnapTranslator.dict.ru = { 'установить цвет пера %clr', 'set background color to %clr': 'установить фоновый цвет %clr', - 'change pen %hsva by %n': - 'изменить %hsva пера на %n', - 'change background %hsva by %n': - 'изменить %hsva фона на %n', - 'set pen %hsva to %n': - 'установить %hsva пера %n', - 'set background %hsva to %n': - 'установить %hsva фона %n', + 'change pen %clrdim by %n': + 'изменить %clrdim пера на %n', + 'change background %clrdim by %n': + 'изменить %clrdim фона на %n', + 'set pen %clrdim to %n': + 'установить %clrdim пера %n', + 'set background %clrdim to %n': + 'установить %clrdim фона %n', 'pen %pen': '%pen пера', 'change pen size by %n': @@ -499,8 +499,8 @@ SnapTranslator.dict.ru = { // control: 'when %greenflag clicked': 'при нажатии на %greenflag', - 'when %keyHat key pressed': - 'при нажатии клавиши %keyHat', + 'when %keyHat key pressed %keyName': + 'при нажатии клавиши %keyHat %keyName', 'when I am %interaction': 'когда меня %interaction', 'clicked': @@ -521,12 +521,14 @@ SnapTranslator.dict.ru = { 'остановят', 'when %b': 'когда %b', - 'when I receive %msgHat': - 'когда я получу %msgHat', - 'broadcast %msg': - 'разослать %msg всем', - 'broadcast %msg and wait': - 'разослать %msg всем и ждать', + 'when I receive %msgHat %message': + 'когда я получу %msgHat %message', + 'broadcast %msg %receive': + 'разослать %msg %receive', + 'broadcast %msg %receive and wait': + 'разослать %msg %receive и ждать', + 'to': + 'адресату', 'send %msg to %spr': 'отправить %msg адресату %spr', 'Message name': diff --git a/locale/lang-si.js b/locale/lang-si.js index 4ed41c71..9a79a435 100644 --- a/locale/lang-si.js +++ b/locale/lang-si.js @@ -416,8 +416,8 @@ SnapTranslator.dict.si = { // control: 'when %greenflag clicked': 'ko kliknemo na %greenflag', - 'when %keyHat key pressed': - 'ko pritisnemo na tipko %keyHat ', + 'when %keyHat key pressed %keyName': + 'ko pritisnemo na tipko %keyHat %keyName', 'when I am %interaction': 'Ko je %interaction', 'clicked': @@ -432,12 +432,12 @@ SnapTranslator.dict.si = { 'mi\u0161ka se ne dotika ve\u010D', 'when %b': 'Ko je %b', - 'when I receive %msgHat': - 'ko sprejmem %msgHat', - 'broadcast %msg': - 'po\u0161lji %msg vsem', - 'broadcast %msg and wait': - 'po\u0161lji vsem %msg in po\u010Dakaj', + 'when I receive %msgHat %message': + 'ko sprejmem %msgHat %message', + 'broadcast %msg %receive': + 'po\u0161lji %msg %receive vsem', + 'broadcast %msg %receive and wait': + 'po\u0161lji vsem %msg %receive in po\u010Dakaj', 'Message name': 'Obvestilo', 'message': diff --git a/locale/lang-sk.js b/locale/lang-sk.js index 2ae44638..ce6fc4dc 100644 --- a/locale/lang-sk.js +++ b/locale/lang-sk.js @@ -469,14 +469,14 @@ SnapTranslator.dict.sk = { 'nastavi\u0165 farbu pera na %clr', 'set background color to %clr': 'nastav pozadie na %clr', - 'change pen %hsva by %n': - 'zme\u0148 pero %hsva o %n', - 'change background %hsva by %n': - 'zme\u0148 pozadie %hsva o %n', - 'set pen %hsva to %n': - 'nastav pero %hsva na %n', - 'set background %hsva to %n': - 'nastav pozadie %hsva na %n', + 'change pen %clrdim by %n': + 'zme\u0148 pero %clrdim o %n', + 'change background %clrdim by %n': + 'zme\u0148 pozadie %clrdim o %n', + 'set pen %clrdim to %n': + 'nastav pero %clrdim na %n', + 'set background %clrdim to %n': + 'nastav pozadie %clrdim na %n', 'pen %pen': 'pero %pen', 'change pen size by %n': @@ -497,8 +497,8 @@ SnapTranslator.dict.sk = { // control: 'when %greenflag clicked': 'Po kliknut\u00ED na %greenflag', - 'when %keyHat key pressed': - 'po stla\u010Den\u00ED kl\u00E1vesy %keyHat', + 'when %keyHat key pressed %keyName': + 'po stla\u010Den\u00ED kl\u00E1vesy %keyHat %keyName', 'when I am %interaction': 'ke\u010F %interaction', 'clicked': @@ -519,12 +519,12 @@ SnapTranslator.dict.sk = { 'zastaven\u00FD', 'when %b': 'Ke\u010F %b', - 'when I receive %msgHat': - 'po prijat\u00ED spr\u00E1vy %msgHat', - 'broadcast %msg': - 'posla\u0165 v\u0161etk\u00FDm %msg', - 'broadcast %msg and wait': - 'posla\u0165 v\u0161etk\u00FDm %msg a \u010Daka\u0165', + 'when I receive %msgHat %message': + 'po prijat\u00ED spr\u00E1vy %msgHat %message', + 'broadcast %msg %receive': + 'posla\u0165 %msg %receive', + 'broadcast %msg %receive and wait': + 'posla\u0165 %msg %receive a \u010Daka\u0165', 'Message name': 'n\u00E1zov spr\u00E1vy', 'message': diff --git a/locale/lang-sv.js b/locale/lang-sv.js index 79605d97..9f483670 100644 --- a/locale/lang-sv.js +++ b/locale/lang-sv.js @@ -426,10 +426,10 @@ SnapTranslator.dict.sv = { 'n\u00E4r jag klickas p\u00E5', 'when I receive %msg': 'n\u00E4r jag tar emot meddelande %msg', - 'broadcast %msg': - 'skicka meddelande %msg', - 'broadcast %msg and wait': - 'skicka meddelande %msg och v\u00E4nta', + 'broadcast %msg %receive': + 'skicka meddelande %msg %receive', + 'broadcast %msg %receive and wait': + 'skicka meddelande %msg %receive och v\u00E4nta', 'Message name': 'Meddelandets namn', 'wait %n secs': @@ -1261,10 +1261,10 @@ SnapTranslator.dict.sv = { // missing labels from initial translation added below 'add a new sprite': 'ny sprite', - 'when %keyHat key pressed': - 'n\u00E4r tangent %keyHat trycks ned', - 'when I receive %msgHat': - 'n\u00E4r jag tar emot %msgHat', + 'when %keyHat key pressed %keyName': + 'n\u00E4r tangent %keyHat trycks ned %keyName', + 'when I receive %msgHat %message': + 'n\u00E4r jag tar emot %msgHat %message', 'message': 'meddelande', 'any message': diff --git a/locale/lang-ta.js b/locale/lang-ta.js index 6f92ecca..c0b1584b 100644 --- a/locale/lang-ta.js +++ b/locale/lang-ta.js @@ -414,16 +414,16 @@ SnapTranslator.dict.ta = { // control: 'when %greenflag clicked': '%greenflag அழுத்தும்பொழுது', - 'when %keyHat key pressed': - '%keyHat கீ அழுத்தும்பொழுது', - 'when I am clicked': - 'நான் சொடுக்கும் போது', - 'when I receive %msgHat': - '%msgHat பெறுகையில்', - 'broadcast %msg': - '%msg செலித்தி', - 'broadcast %msg and wait': - '%msg செலித்தி காத்திருக்கவும்', + 'when %keyHat key pressed %keyName': + '%keyHat %keyName கீ அழுத்தும்பொழுது', + 'when I am %interaction': + '%interaction நான் சொடுக்கும் போது', + 'when I receive %msgHat %message': + '%msgHat %message பெறுகையில்', + 'broadcast %msg %receive': + '%msg %receive செலித்தி', + 'broadcast %msg %receive and wait': + '%msg %receive செலித்தி காத்திருக்கவும்', 'Message name': 'செய்தி பெயர்', 'message': diff --git a/locale/lang-te.js b/locale/lang-te.js index 1ee396fc..9e297a81 100644 --- a/locale/lang-te.js +++ b/locale/lang-te.js @@ -415,16 +415,16 @@ SnapTranslator.dict.te = { // control: 'when %greenflag clicked': '%greenflag ఒత్తినప్పుడ', - 'when %keyHat key pressed': - '%keyHat కీ ఒత్తినప్పుడ', - 'when I am clicked': - 'Wenn ich angeklickt werde', - 'when I receive %msgHat': - '%msgHat నేను స్వీకరించినప్పుడు', - 'broadcast %msg': - 'ప్రసార %msg', - 'broadcast %msg and wait': - '%msg ని ప్రసారం చేసి, వేచివుండు', + 'when %keyHat key pressed %keyName': + '%keyHat %keyName కీ ఒత్తినప్పుడ', + 'when I am %interaction': + 'when I am %interaction', + 'when I receive %msgHat %message': + '%msgHat %message నేను స్వీకరించినప్పుడు', + 'broadcast %msg %receive': + 'ప్రసార %msg %receive', + 'broadcast %msg %receive and wait': + '%msg %receive ని ప్రసారం చేసి, వేచివుండు', 'Message name': 'సందేశం పేర', 'message': diff --git a/locale/lang-tr.js b/locale/lang-tr.js index 460fed51..eaf506e4 100644 --- a/locale/lang-tr.js +++ b/locale/lang-tr.js @@ -469,14 +469,14 @@ SnapTranslator.dict.tr = { 'kalemin rengini %clr yap', 'set background color to %clr': 'arka plan rengini %clr yap', - 'change pen %hsva by %n': - 'Kalemin %hsva %n değiştir', - 'change background %hsva by %n': - 'arka plan %hsva %n değiştir', - 'set pen %hsva to %n': - 'Kalemin %hsva %n yap', - 'set background %hsva to %n': - 'arka plan %hsva %n yap', + 'change pen %clrdim by %n': + 'Kalemin %clrdim %n değiştir', + 'change background %clrdim by %n': + 'arka plan %clrdim %n değiştir', + 'set pen %clrdim to %n': + 'Kalemin %clrdim %n yap', + 'set background %clrdim to %n': + 'arka plan %clrdim %n yap', 'pen %pen': 'kalemin %pen', 'change pen size by %n': @@ -496,8 +496,8 @@ SnapTranslator.dict.tr = { // control: 'when %greenflag clicked': '%greenflag tıklanınca', - 'when %keyHat key pressed': - '%keyHat tuşuna basılınca', + 'when %keyHat key pressed %keyName': + '%keyHat tuşuna basılınca %keyName', 'when I am %interaction': 'kukla %interaction zaman','clicked': 'tıklandığı', @@ -517,12 +517,12 @@ SnapTranslator.dict.tr = { 'durdurulduğu', 'when %b': '%b olunca', - 'when I receive %msgHat': - '%msgHat haberi gelince', - 'broadcast %msg': - '%msg yayımla', - 'broadcast %msg and wait': - '%msg yayımla ve bekle', + 'when I receive %msgHat %message': + '%msgHat haberi gelince %message', + 'broadcast %msg %receive': + '%msg %receive yayımla', + 'broadcast %msg %receive and wait': + '%msg %receive yayımla ve bekle', 'send %msg to %spr': '%msg mesajını %spr yolla', 'Message name': diff --git a/locale/lang-ua.js b/locale/lang-ua.js index 98ec3d39..37fa6439 100644 --- a/locale/lang-ua.js +++ b/locale/lang-ua.js @@ -482,10 +482,10 @@ SnapTranslator.dict.ua = { 'штамп', 'fill': 'заливка', - 'change pen %hsva by %n': - 'змінити властивість %hsva на %n', - 'set pen %hsva to %n': - 'встановити властивість %hsva як %n', + 'change pen %clrdim by %n': + 'змінити властивість %clrdim на %n', + 'set pen %clrdim to %n': + 'встановити властивість %clrdim як %n', 'pen %pen': 'олівець %pen', 'write %s size %n': @@ -496,8 +496,8 @@ SnapTranslator.dict.ua = { // control: 'when %greenflag clicked': 'коли натиснуто %greenflag', - 'when %keyHat key pressed': - 'коли натиснуто клавішу %keyHat', + 'when %keyHat key pressed %keyName': + 'коли натиснуто клавішу %keyHat %keyName', 'when I am %interaction': 'коли мене %interaction', 'clicked': @@ -518,12 +518,12 @@ SnapTranslator.dict.ua = { 'зупинка', 'when %b': 'коли %b', - 'when I receive %msgHat': - 'коли я отримаю %msgHat', - 'broadcast %msg': - 'надіслати %msg всім', - 'broadcast %msg and wait': - 'надіслати %msg всім і чекати', + 'when I receive %msgHat %message': + 'коли я отримаю %msgHat %message', + 'broadcast %msg %receive': + 'надіслати %msg %receive', + 'broadcast %msg %receive and wait': + 'надіслати %msg %receive і чекати', 'Message name': 'назва повідомлення', 'message': diff --git a/locale/lang-zh_CN.js b/locale/lang-zh_CN.js index ad55dc10..5e2f9c7b 100644 --- a/locale/lang-zh_CN.js +++ b/locale/lang-zh_CN.js @@ -121,11 +121,11 @@ SnapTranslator.dict.zh_CN = { 'language_name': '简体中文', 'language_translator': - '五百刀/邓江华/曹儒林', + '五百刀/邓江华/孟锡峰/曹儒林', 'translator_e-mail': - 'ubertao@qq.com/djh@rhjxx.cn', + 'ubertao@qq.com/djh@rhjxx.cn/simon@snapontop.org', 'last_changed': - '2020-05-13', + '2022-01-10', // GUI // control bar: @@ -192,7 +192,7 @@ SnapTranslator.dict.zh_CN = { 'paint a new sprite': '绘制一个新角色', 'take a camera snapshot and\nimport it as a new sprite': - '用摄像头拍摄一个新角色', + '用摄像头拍摄一个新角色', // tab help 'costumes tab help': @@ -281,15 +281,15 @@ SnapTranslator.dict.zh_CN = { 'Hello!': '你好!', 'Hmm...': - '嗯……', + '嗯......', '%img of costume %cst': - '取 %img 于 %cst', + '取 %img 于 %cst', 'pixels': '像素', 'current': - '当前造型', + '当前造型', 'stretch %cst x: %n y: %n %': - '拉伸 %cst 比例 x: %n y: %n %', + '拉伸 %cst 比例 x: %n y: %n %', 'change %eff effect by %n': '把 %eff 效果增加 %n', 'set %eff effect to %n': @@ -297,7 +297,7 @@ SnapTranslator.dict.zh_CN = { 'clear graphic effects': '清除所有图形效果', '%eff effect': - '%eff 效果', + '%eff 效果', 'change size by %n': '把角色的大小增加 %n', 'set size to %n %': @@ -315,7 +315,7 @@ SnapTranslator.dict.zh_CN = { 'front': '顶', 'back': - '底', + '底', 'go back %n layers': '下移 %n 层', @@ -353,17 +353,17 @@ SnapTranslator.dict.zh_CN = { // development mode: morph context menu 'user features...': - '用户菜单…', + '用户菜单...', 'color...': - '颜色…', + '颜色...', 'choose another color \nfor this morph': '指定morph的颜色', 'transparency...': - '透明度…', + '透明度...', 'set this morph\'s\nalpha value': '设置morph的alpha通道值', 'resize...': - '改变大小…', + '改变大小...', 'show a handle\nwhich can be dragged\nto change this morph\'s extent': '显示一个把手,\n拖动可改变morph大小', 'pick up': @@ -371,15 +371,15 @@ SnapTranslator.dict.zh_CN = { 'disattach and put \ninto the hand': '断开连接拿起morph', 'attach...': - '连接到…', + '连接到...', 'stick this morph\nto another one': '连接到另外一个morph', 'move...': - '移动…', + '移动...', 'show a handle\nwhich can be dragged\nto move this morph': '显示一个把手,\n拖动可移动这个morph', 'inspect...': - '查看…', + '查看...', 'open a window\non all properties': '打开新的窗口\n显示所有属性', 'open a new window\nwith a picture of this morph': // pick up @@ -393,11 +393,11 @@ SnapTranslator.dict.zh_CN = { 'make this morph\nmovable': '可以移动morph', 'World...': - 'World…', // don't translate "World" + 'World...', // don't translate "World" 'show the\nWorld\'s menu': '显示World菜单', 'font size...': - '字体大小…', + '字体大小...', 'set this String\'s\nfont point size': '设置字符串的字体点数', 'align left': @@ -429,19 +429,19 @@ SnapTranslator.dict.zh_CN = { 'delete block': '删除积木', 'spec...': - '描述…', + '描述...', 'spec': '描述', 'border width...': - '边框粗细…', + '边框粗细...', 'set the border\'s\nline size': '设置边框线条尺寸', 'border color...': - '边框颜色…', + '边框颜色...', 'set the border\'s\nline color': '设置边框线条颜色', 'corner size...': - '圆角大小…', + '圆角大小...', 'set the corner\'s\nradius': '设置圆角半径', 'alpha\nvalue:': @@ -451,7 +451,7 @@ SnapTranslator.dict.zh_CN = { // development mode: morph inspector 'show...': - '显示…', + '显示...', 'close': '关闭', 'attributes': @@ -465,29 +465,29 @@ SnapTranslator.dict.zh_CN = { 'save': '保存', 'add property...': - '增加属性…', + '增加属性...', 'remove...': - '删除…', + '删除...', 'new property name:': '新属性名:', 'property name:': '属性名:', 'in new inspector...': - '新窗口…', + '新窗口...', 'here...': - '此窗口…', + '此窗口...', // development mode: WorldMorph context menu 'demo...': - '演示…', + '演示...', 'sample morphs': '各种morph示例', 'hide all...': - '全部隐藏…', + '全部隐藏...', 'show all...': - '全部显示…', + '全部显示...', 'move all inside...': - '全部围住…', + '全部围住...', 'keep all submorphs\nwithin and visible': '围入所有子morph\n全部可见', 'auto line wrap on...': @@ -499,21 +499,21 @@ SnapTranslator.dict.zh_CN = { 'turn automatic\nline wrapping\noff': '关闭自动折行功能', 'screenshot...': - '屏幕截图…', + '屏幕截图...', 'restore display': '恢复显示', 'redraw the\nscreen once': '重画屏幕', 'fill page...': - '填满页面…', + '填满页面...', 'let the World automatically\nadjust to browser resizings': '让Wolrd随浏览器改变大小', 'sharp shadows...': - '锐利的阴影…', + '锐利的阴影...', 'sharp drop shadows\nuse for old browsers': '对老旧浏览器\n使用锐利的阴影', 'blurred shadows...': - '模糊的阴影…', + '模糊的阴影...', 'blurry shades,\n use for new browsers': '对新浏览器\n使用模糊的阴影', 'choose the World\'s\nbackground color': @@ -527,13 +527,13 @@ SnapTranslator.dict.zh_CN = { 'smaller menu fonts\nand sliders': '使用小号菜单字体和游标', 'user mode...': - '用户模式…', + '用户模式...', 'disable developers\'\ncontext menus': '禁用开发者快捷菜单', 'about morphic.js...': - '关于morphic.js…', + '关于morphic.js...', 'development mode...': - '开发者模式…', + '开发者模式...', // development mode: World's demo context menu 'make a morph': @@ -573,11 +573,11 @@ SnapTranslator.dict.zh_CN = { 'play sound %snd until done': '播放声音 %snd 直到播放完毕', 'stop all sounds': - '停止所有声音', + '停止所有声音', 'rest for %n beats': '停止 %n 拍', 'play sound %snd at %rate Hz': - '播放声音 %snd 于频率 %rate 赫兹', + '播放声音 %snd 于频率 %rate 赫兹', 'play note %note for %n beats': '弹奏音符 %note 持续 %n 拍', '%aa of sound %snd': @@ -589,15 +589,15 @@ SnapTranslator.dict.zh_CN = { 'number of channels': '通道数', 'new sound %l rate %rate Hz': - '创建声音 %l 频率 %rate Hz', + '创建声音 %l 频率 %rate Hz', 'sample rate': '样本频率', 'samples': - '样本数据', + '样本数据', 'change volume by %n': '把音量增加 %n', 'set volume to %n %': - '把音量设定为 %n %', + '把音量设定为 %n %', 'volume': '音量', 'change balance by %n': @@ -605,7 +605,7 @@ SnapTranslator.dict.zh_CN = { 'set balance to %n': '设置声音平衡为 %n', 'balance': - '声音平衡', + '声音平衡', 'set instrument to %inst': '将乐器设定为 %inst', 'change tempo by %n': @@ -617,7 +617,7 @@ SnapTranslator.dict.zh_CN = { 'play frequency %n Hz': '演奏频率 %n 赫兹', 'stop frequency': - '停止演奏频率', + '停止演奏频率', 'play %n Hz for %n secs': '演奏频率 %n 赫兹 %n 秒', @@ -627,21 +627,21 @@ SnapTranslator.dict.zh_CN = { 'pen down': '落笔', 'pen down?': - '画笔已落下?', + '画笔已落下?', 'pen up': '抬笔', 'set pen color to %clr': - '把画笔的颜色值设定为 %clr', - 'change pen %hsva by %n': - '把画笔的 %hsva 增加 %n', - 'set pen %hsva to %n': - '把画笔的 %hsva 设定为 %n', + '把画笔的颜色值设定为 %clr', + 'change pen %clrdim by %n': + '把画笔的 %clrdim 增加 %n', + 'set pen %clrdim to %n': + '把画笔的 %clrdim 设定为 %n', 'hue': '色调', 'transparency': '透明度', 'pen %pen': - '画笔的 %pen', + '画笔的 %pen', 'change pen color by %n': '把画笔的颜色值增加 %n', 'set pen color to %n': @@ -656,30 +656,32 @@ SnapTranslator.dict.zh_CN = { '把画笔的大小设定为 %n', 'set background color to %clr': '把背景色设置为 %clr', - 'change background %hsva by %n': - '把背景的 %hsva 增加 %n', - 'set background %hsva to %n': - '把背景的 %hsva 设定为 %n', + 'change background %clrdim by %n': + '把背景的 %clrdim 增加 %n', + 'set background %clrdim to %n': + '把背景的 %clrdim 设定为 %n', 'stamp': '图章', 'fill': '填充', 'write %s size %n': - '写字 %s 字号 %n', + '写字 %s 字号 %n', 'tip': '尖端', 'middle': '中间', 'paste on %spr': '拼贴在 %spr 上', + 'cut from %spr': + '从 %spr 剪切', 'pen vectors': - '画笔矢量', + '画笔矢量', // control: 'when %greenflag clicked': '当 %greenflag 被点击', - 'when %keyHat key pressed': - '当按下 %keyHat 键', + 'when %keyHat key pressed %keyName': + '当按下 %keyHat 键 %keyName', 'when I am %interaction': '当 %interaction 我', 'clicked': @@ -695,17 +697,17 @@ SnapTranslator.dict.zh_CN = { 'scrolled-up': '向上滚动滚轮', 'scrolled-down': - '向下滚动滚轮', + '向下滚动滚轮', 'stopped': - '停止', + '停止', 'when %b': '当 %b', - 'when I receive %msgHat': - '当接收到 %msgHat', - 'broadcast %msg': - '广播 %msg', - 'broadcast %msg and wait': - '广播 %msg 并等待', + 'when I receive %msgHat %message': + '当接收到 %msgHat %message', + 'broadcast %msg %receive': + '广播 %msg %receive', + 'broadcast %msg %receive and wait': + '广播 %msg %receive 并等待', 'send %msg to %spr': '发送消息 %msg 给 %spr', 'Message name': @@ -725,13 +727,13 @@ SnapTranslator.dict.zh_CN = { 'repeat until %b %loop': '重复执行直到 %b %loop', 'for %upvar = %n to %n %cla': - '重复执行 因子 %upvar 从 %n 到 %n %cla', + '重复执行 因子 %upvar 从 %n 到 %n %cla', 'if %b %c': '如果 %b %c', 'if %b %c else %c': '如果 %b %c 否则 %c', 'if %b then %s else %s': - '如果 %b 返回 %s 否则 %s', + '如果 %b 返回 %s 否则 %s', 'report %s': '报告 %s', 'stop %stopChoices': @@ -776,6 +778,14 @@ SnapTranslator.dict.zh_CN = { '自己', 'delete this clone': '删除这个克隆', + 'switch to scene %scn %send': + '切换至场景 %scn %send', + 'and send': + '并发送', + 'next': + '下一个', + 'previous': + '上一个', // sensing: 'touching %col ?': @@ -799,13 +809,13 @@ SnapTranslator.dict.zh_CN = { 'key %key pressed?': '按下了 %key 键?', '%rel to %dst': - '%rel 到 %dst', + '%rel 到 %dst', '%asp at %loc' : - '%asp 于 %loc', + '%asp 于 %loc', 'sprites': '角色', 'object %self': - '对象 %self', + '对象 %self', 'distance to %dst': '到 %dst 的距离', 'distance': @@ -855,7 +865,7 @@ SnapTranslator.dict.zh_CN = { 'at': '于', 'microphone %audio': - '麦克风 %audio', + '麦克风 %audio', 'Microphone resolution...': '麦克风分辨率...', 'Microphone': @@ -865,7 +875,7 @@ SnapTranslator.dict.zh_CN = { 'high': '高', 'max': - '最大', + '最大', 'note': '音符', 'frequency': @@ -881,23 +891,31 @@ SnapTranslator.dict.zh_CN = { 'motion': '动作', 'set video transparency to %n': - '把视频透明度设置为 %n', + '把视频透明度设置为 %n', 'is %setting on?': '%setting 已启用?', 'set %setting to %b': - '设置 %setting 为 %b', + '设置 %setting 为 %b', 'turbo mode': '加速模式', 'flat line ends': '平头线条', 'video capture': - '视频捕捉', + '视频捕捉', 'mirror video': - '视频镜像', + '视频镜像', 'frames': - '帧', + '帧', 'log pen vectors': - '记录画笔矢量', + '记录画笔矢量', + '%block of block %repRing': + '%block 自积木 %repRing', + 'definition': + '定义', + 'custom?': + '是自定义积木?', + 'global?': + '是全局积木?', // operators: '%n mod %n': @@ -993,17 +1011,39 @@ SnapTranslator.dict.zh_CN = { 'is %l empty?': '%l 为空?', 'map %repRing over %l': - '映射 %repRing ,来源 %l', + '映射 %repRing ,来源 %l', 'keep items %predRing from %l': - '保留满足条件 %predRing 的数据,来源 %l', + '保留满足条件 %predRing 的数据,来源 %l', 'find first item %predRing in %l': - '满足条件 %predRing 的第一个数据,来源 %l', + '满足条件 %predRing 的第一个数据,来源 %l', 'combine %l using %repRing': - '合并 %l 方法为 %repRing', + '合并 %l 方法为 %repRing', 'for each %upvar in %l %cla': '逐个执行 %upvar 来自 %l %cla', 'item': - '项', + '项', + '%la of %l': + '%la 自 %l', + 'rank': + '维数', + 'dimensions': + '维度', + 'flatten': + '一维化', + 'columns': + '行列转置', + 'reverse': + '倒序', + 'lines': + '行', + 'index': + '索引', + 'index of %s in %l': + '%s 在 %l 中的索引', + 'append %lists': + '追加合并 %lists', + 'reshape %l to %nums': + '重构列表 %l 为 %nums', // other 'Make a block': @@ -1012,7 +1052,7 @@ SnapTranslator.dict.zh_CN = { // menus // snap menu 'About...': - '关于Snap!…', + '关于Snap!...', 'Reference manual': '参考手册', 'Snap! website': @@ -1032,11 +1072,11 @@ SnapTranslator.dict.zh_CN = { // project menu 'Project notes...': - '项目备注…', + '项目备注...', 'New': '新建', 'Open...': - '打开…', + '打开...', 'Save': '保存', 'Save to disk': @@ -1045,17 +1085,17 @@ SnapTranslator.dict.zh_CN = { '保存到下载文件夹\n(部分浏览器支持)', 'Save As...': - '另存为…', + '另存为...', 'Import...': - '导入…', + '导入...', 'file menu import hint': '加载导出的项目、积木库、造型或声音', 'Export project as plain text...': - '用文字格式导出项目…', + '用文字格式导出项目...', 'Export project...': - '导出项目…', + '导出项目...', '(in a new window)': '(打开新窗口)', 'save project data as XML\nto your downloads folder': @@ -1063,15 +1103,27 @@ SnapTranslator.dict.zh_CN = { 'show project data as XML\nin a new browser window': '打开新窗口,展示项目的XML数据', 'Export Project As...': - '把项目导出到…', + '把项目导出到...', 'Exported!': '导出好了!', 'Export blocks...': - '导出积木…', + '导出积木...', 'show global custom block definitions as XML\nin a new browser window': '打开新窗口,以XML格式展示全局自制积木', 'Unused blocks...': - '没用到的积木…', + '没用到的积木...', + 'Hide blocks...': + '隐藏积木...', + 'New category...': + '新建积木类别...', + 'Remove a category...': + '删除积木类别...', + 'Scenes...': + '场景...', + 'New scene': + '新建场景', + 'Add scene...': + '添加场景...', 'find unused global custom blocks\nand remove their definitions': '查找没用到的全局自制积木,\n删除它们的定义', 'Remove unused blocks': @@ -1085,7 +1137,7 @@ SnapTranslator.dict.zh_CN = { 'open a new browser browser window\n with a summary of this project': '打开新窗口,展示这个项目', 'Export summary with drop-shadows...': - '以HTML格式导出项目(带阴影)…', + '以HTML格式导出项目(带阴影)...', 'open a new browser browser window\nwith a summary of this project\nwith drop-shadows on all pictures.\nnot supported by all browsers': '打开新窗口,使用带有阴影的图形\n展示这个项目\n(只有部分浏览器可以)', @@ -1106,7 +1158,7 @@ SnapTranslator.dict.zh_CN = { 'load the official library of\npowerful blocks': '载入强大的官方积木库', 'Libraries...': - '积木库…', + '积木库...', 'Select categories of additional blocks to add to this project.': '挑选更多积木,添加到项目中。', 'Select a costume from the media library': @@ -1122,25 +1174,25 @@ SnapTranslator.dict.zh_CN = { // cloud menu 'Login...': - '登录…', + '登录...', 'Signup...': - '注册…', + '注册...', 'Reset Password...': - '重设密码…', + '重设密码...', 'Logout': '登出', 'Change Password...': - '修改密码…', + '修改密码...', 'Change Password': '修改密码', 'password has been changed.': '密码改好了。', 'Export all scripts as pic...': - '把所有脚本导出为图片…', + '把所有脚本导出为图片...', 'show a picture of all scripts\nand block definitions': '把所有脚本展示成一张图片', 'url...': - '网址…', + '网址...', 'Service:': '服务:', 'Reset Password': @@ -1150,13 +1202,13 @@ SnapTranslator.dict.zh_CN = { 'Signup': '注册', 'export project media only...': - '仅导出项目中的媒体文件…', + '仅导出项目中的媒体文件...', 'export project without media...': - '导出项目,不含媒体…', + '导出项目,不含媒体...', 'export project as cloud data...': - '把项目以云端数据格式导出…', + '把项目以云端数据格式导出...', 'open shared project from cloud...': - '打开共享在云端的项目…', + '打开共享在云端的项目...', // Sign up dialog 'Sign up': @@ -1172,9 +1224,9 @@ SnapTranslator.dict.zh_CN = { 'E-mail address of parent or guardian:': '家长电子邮件:', 'Terms of Service...': - '服务条款…', + '服务条款...', 'Privacy...': - '隐私政策…', + '隐私政策...', 'I have read and agree\nto the Terms of Service': '我已阅读并同意《服务条款》', 'January': @@ -1238,11 +1290,13 @@ SnapTranslator.dict.zh_CN = { // settings menu 'Language...': - '语言…', + '语言...', 'Zoom blocks...': - '放大积木…', + '放大积木...', + 'Fade blocks...': + '积木边框隐身...', 'Stage size...': - '舞台大小…', + '舞台大小...', 'Stage size': '舞台大小', 'Stage width': @@ -1293,6 +1347,18 @@ SnapTranslator.dict.zh_CN = { '不使用移动设备的虚拟键盘', 'check to enable\nvirtual keyboard support\nfor mobile devices': '使用移动设备的虚拟键盘', + 'JavaScript extensions': + 'JavaScript扩展', + 'check to support\nnative JavaScript functions': + '勾选启用JS扩展函数', + 'uncheck to disable support for\nnative JavaScript functions': + '取消勾选以禁用JS扩展函数', + 'Extension blocks': + '第三方扩展块', + 'check to show extension\nprimitives in the palette': + '显示扩展块', + 'uncheck to hide extension\nprimitives in the palette': + '隐藏扩展块', 'Input sliders': '使用游标', 'uncheck to disable\ninput sliders for\nentry fields': @@ -1348,7 +1414,7 @@ SnapTranslator.dict.zh_CN = { 'check for higher contrast\ntable views': '深色表格线', 'Visible stepping': - '可视化单步运行', + '可视化单步运行', 'Thread safe scripts': '线程安全的脚本', 'uncheck to allow\nscript reentrance': @@ -1392,7 +1458,7 @@ SnapTranslator.dict.zh_CN = { 'check to enable support\n for first-class sprite': '使用高等角色', 'Dragging threshold...': - '拖放最小距离…', + '拖放最小距离...', 'specify the distance the hand has to move\nbefore it picks up an object': '要抓起东西\n鼠标需要移动的最小距离', 'Cache Inputs': @@ -1419,6 +1485,24 @@ SnapTranslator.dict.zh_CN = { '不保存子列表的ID', 'check to enable\nsaving linked sublist identities': '保存子列表的ID', + 'Disable click-to-run': + '禁止点击积木直接运行', + 'uncheck to enable\ndirectly running blocks\nby clicking on them': + '取消勾选后可以点击积木直接运行', + 'check to disable\ndirectly running blocks\nby clicking on them': + '勾选后禁止点击积木直接运行', + 'Single palette': + '单一积木面板', + 'check to show all blocks in a single palette': + '勾选之后所有的积木会在同一个积木面板(类别)里显示', + 'uncheck to show only the selected category\'s blocks': + '取消勾选后积木会分别显示在其归属的积木面板(类别)中', + 'HSL pen color model': + '画笔HSL颜色模式', + 'check to switch pen colors\nand graphic effects to HSL': + '勾选后更改画笔颜色为HSL模式', + 'uncheck to switch pen colors\nand graphic effects to HSV': + '取消勾选后更改画笔颜色为HSV模式', // inputs 'with inputs': '输入项', @@ -1429,7 +1513,7 @@ SnapTranslator.dict.zh_CN = { 'input list:': '输入列表:', 'options...': - '选项…', + '选项...', 'read-only': '只读', 'Input Slot Options': @@ -1439,6 +1523,18 @@ SnapTranslator.dict.zh_CN = { // context menus: 'help': '帮助', + 'Hyper blocks support': + '支持超级运算积木', + 'uncheck to disable\nusing operators on lists and tables': + '取消勾选以禁用作用于列表和表格的超级运算符', + 'check to enable\nusing operators on lists and tables': + '勾选以启用作用于列表和表格的超级运算符', + 'Log pen vectors': + '记录画笔矢量', + 'uncheck to turn off\nlogging pen vectors': + '取消勾选以停止记录画笔矢量', + 'check to turn on\nlogging pen vectors': + '勾选以开始记录画笔矢量', // palette: 'hide primitives': @@ -1446,15 +1542,15 @@ SnapTranslator.dict.zh_CN = { 'show primitives': '显示原始积木', 'header mapping...': - '对应的定义代码…', + '对应的定义代码...', 'code mapping...': - '对应的调用代码…', + '对应的调用代码...', 'code list mapping...': - '列表对应的代码…', + '列表对应的代码...', 'code item mapping...': - '列表项对应的代码…', + '列表项对应的代码...', 'code delimiter mapping...': - '列表项分隔符对应的代码…', + '列表项分隔符对应的代码...', // codification dialog: 'Header mapping': @@ -1502,20 +1598,20 @@ SnapTranslator.dict.zh_CN = { 'header': '定义代码', 'code string mapping...': - '字符串对应的代码…', + '字符串对应的代码...', // sprites: 'parent:': '母角色:', 'parent...': - '母角色…', + '母角色...', 'current parent': '目前的母角色', // blocks: 'help...': - '帮助…', + '帮助...', 'relabel...': - '更换…', + '更换...', 'duplicate': '复制', 'make a copy\nand pick it up': @@ -1525,11 +1621,11 @@ SnapTranslator.dict.zh_CN = { 'delete': '删除', 'script pic...': - '显示脚本图片…', + '显示脚本图片...', 'open a new window\nwith a picture of this script': '打开一个新窗口,\n显示这个脚本的图片', 'script pic with result...': - '带结果的脚本图片…', + '带结果的脚本图片...', 'open a new window\nwith a picture of both\nthis script and its result': '打开一个新窗口,\n显示这个脚本和运行结果的图片', 'ringify': @@ -1543,15 +1639,15 @@ SnapTranslator.dict.zh_CN = { 'check to prevent contents\nfrom being saved': '不保存变量内容', 'find blocks...': - '找积木…', + '找积木...', // custom blocks: 'delete block definition...': - '删除积木定义…', + '删除积木定义...', 'duplicate block definition...': - '复制积木定义…', + '复制积木定义...', 'edit...': - '编辑…', + '编辑...', // sprites: 'edit': @@ -1563,7 +1659,7 @@ SnapTranslator.dict.zh_CN = { 'detach all parts': '所有组件脱离', 'export...': - '导出…', + '导出...', 'paint a new sprite': '画一个新角色', @@ -1571,11 +1667,11 @@ SnapTranslator.dict.zh_CN = { 'show all': '显示所有', 'pic...': - '展示图片…', + '展示图片...', 'open a new window\nwith a picture of the stage': '打开一个新窗口,显示舞台的图片', 'turn pen trails into new costume...': - '把笔迹变成新造型…', + '把笔迹变成新造型...', 'turn all pen trails and stamps\ninto a new costume for the\ncurrently selected sprite': '把所有笔迹和图章变成当前选中角色的一个新造型', @@ -1591,11 +1687,11 @@ SnapTranslator.dict.zh_CN = { 'undo the last\nblock drop\nin this pane': '收回刚刚放下的积木', 'scripts pic...': - '脚本图片…', + '脚本图片...', 'open a new window\nwith a picture of all scripts': '打开一个新窗口,展示所有脚本的图片', 'make a block...': - '制作新积木…', + '制作新积木...', // costumes 'rename': @@ -1607,7 +1703,7 @@ SnapTranslator.dict.zh_CN = { 'Paint a new costume': '画一个新造型', 'edit rotation point only...': - '修改旋转中心点…', + '修改旋转中心点...', // sounds 'Play sound': @@ -1623,13 +1719,13 @@ SnapTranslator.dict.zh_CN = { // lists and tables 'list view...': - '展示为列表…', + '展示为列表...', 'table view...': - '展示为表格…', + '展示为表格...', 'open in dialog...': - '在对话框中查看…', + '在对话框中查看...', 'open in another dialog...': - '在另一个对话框中查看…', + '在另一个对话框中查看...', 'reset columns': '重置列', 'items': @@ -1692,7 +1788,7 @@ SnapTranslator.dict.zh_CN = { 'Are you sure you want to delete': '你确定要删除', 'rename...': - '改名为…', + '改名为...', 'Open': '打开', 'Cloud': @@ -1706,7 +1802,7 @@ SnapTranslator.dict.zh_CN = { 'You are not logged in': '你还没有登录', 'Updating\nproject list...': - '正在更新项目列表…', + '正在更新项目列表...', 'last changed': '最后修改', 'Share': @@ -1722,21 +1818,21 @@ SnapTranslator.dict.zh_CN = { 'Are you sure you want to unpublish': '确定不让其他人看到项目', 'sharing\nproject...': - '正在分享项目…', + '正在分享项目...', 'shared.': '项目已分享给其他人。', 'unsharing\nproject...': - '正在取消项目分享…', + '正在取消项目分享...', 'unshared.': '其他人已看不到项目。', 'Fetching project\nfrom the cloud...': - '从云端下载下项目…', + '从云端下载下项目...', 'Opening project...': - '正在打开项目…', + '正在打开项目...', 'Save Project': - '保存项目…', + '保存项目...', 'Saving project\nto the cloud...': - '把项目保存到云端…', + '把项目保存到云端...', 'saved.': '项目已保存。', @@ -1758,7 +1854,7 @@ SnapTranslator.dict.zh_CN = { // save project 'Save Project As...': - '项目另存为…', + '项目另存为...', // export blocks 'Export blocks': @@ -1800,13 +1896,13 @@ SnapTranslator.dict.zh_CN = { 'block deletion dialog text': '你确实要删除所有这种自制积木和它的定义吗?', 'block variables...': - '积木变量…', + '积木变量...', 'block variables': '积木变量', 'Block variable name': '积木变量名字', 'remove block variables...': - '删除积木变量…', + '删除积木变量...', '(temporary)': '(临时)', @@ -1856,15 +1952,15 @@ SnapTranslator.dict.zh_CN = { 'About Snap': '关于 Snap', 'Back...': - '返回…', + '返回...', 'License...': - '许可…', + '许可...', 'Modules...': - '模块…', + '模块...', 'Credits...': - '光荣榜…', + '光荣榜...', 'Translators...': - '翻译者…', + '翻译者...', 'License': '许可协议', 'current module versions:': @@ -1882,11 +1978,11 @@ SnapTranslator.dict.zh_CN = { 'slider': '游标', 'slider min...': - '游标最小值…', + '游标最小值...', 'slider max...': - '游标最大值…', + '游标最大值...', 'import...': - '导入…', + '导入...', 'Slider minimum value': '游标的最小值', 'Slider maximum value': @@ -1898,9 +1994,9 @@ SnapTranslator.dict.zh_CN = { // comments 'add comment here...': - '在这里添加说明…', + '在这里添加说明...', 'comment pic...': - '展示图片…', + '展示图片...', 'open a new window\nwith a picture of this comment': '打开新窗口,展示这条说明的图片', @@ -2049,7 +2145,7 @@ SnapTranslator.dict.zh_CN = { // messages 'new...': - '新建…', + '新建...', // math functions 'abs': @@ -2060,20 +2156,10 @@ SnapTranslator.dict.zh_CN = { '向下取整', 'sqrt': '平方根', - 'sin': - '正弦', - 'cos': - '余弦', - 'tan': - '正切', - 'asin': - '反正弦', - 'acos': - '反余弦', - 'atan': - '反正切', - 'ln': - '自然对数', + 'neg': + '取反', + 'sign': + '符号', 'e^': 'e^', @@ -2130,6 +2216,10 @@ SnapTranslator.dict.zh_CN = { '母角色', 'children': '子角色', + 'temporary?': + '属性为临时?', + 'draggable?': + '是否可拖动?', 'clones': '克隆', 'other clones': @@ -2147,7 +2237,7 @@ SnapTranslator.dict.zh_CN = { 'center x': '中心点x坐标', 'center y': - '中心店y坐标', + '中心点y坐标', 'pen is down?': '画笔已落下?', 'name': @@ -2158,7 +2248,7 @@ SnapTranslator.dict.zh_CN = { '宽度', 'height': '高度', - + // Paint.js 'Paint Editor': '画板', @@ -2205,10 +2295,10 @@ SnapTranslator.dict.zh_CN = { 'expecting': '此处要求填写', 'input(s), but getting': - '个输入项,但实际得到输入项个数是', + '个输入项,但实际得到输入项个数是', 'Vector': '矢量', 'Bitmap': - '位图' + '位图' }; diff --git a/locale/lang-zh_TW.js b/locale/lang-zh_TW.js index 0d818b5a..e6b23173 100644 --- a/locale/lang-zh_TW.js +++ b/locale/lang-zh_TW.js @@ -415,16 +415,16 @@ SnapTranslator.dict.zh_TW = { // control: 'when %greenflag clicked': '當 %greenflag 被點擊', - 'when %keyHat key pressed': - '當按下 %keyHat', - 'when I am clicked': - '當角色被點擊', - 'when I receive %msgHat': - '當接收到 %msgHat', - 'broadcast %msg': - '廣播 %msg ', - 'broadcast %msg and wait': - '廣播 %msg 並等待', + 'when %keyHat key pressed %keyName': + '當按下 %keyHat %keyName', + 'when I am %interaction': + '當角色被點擊 %interaction', + 'when I receive %msgHat %message': + '當接收到 %msgHat %message', + 'broadcast %msg %receive': + '廣播 %msg %receive', + 'broadcast %msg %receive and wait': + '廣播 %msg %receive 並等待', 'Message name': '資訊名稱', 'wait %n secs': diff --git a/manifest.json b/manifest.json new file mode 100644 index 00000000..a37185c4 --- /dev/null +++ b/manifest.json @@ -0,0 +1,51 @@ +{ + "name": "Snap!", + "short_name": "Snap!", + "icons": [{ + "src": "img/snap-icon-72.png", + "sizes": "72x72", + "type": "image/png" + }, { + "src": "img/snap-icon-96.png", + "sizes": "96x96", + "type": "image/png" + }, { + "src": "img/snap-icon-120.png", + "sizes": "120x120", + "type": "image/png" + }, { + "src": "img/snap-icon-128.png", + "sizes": "128x128", + "type": "image/png" + }, { + "src": "img/snap-icon-144.png", + "sizes": "144x144", + "type": "image/png" + }, { + "src": "img/snap-icon-152.png", + "sizes": "152x152", + "type": "image/png" + }, { + "src": "img/snap-icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, { + "src": "img/snap-icon-256.png", + "sizes": "256x256", + "type": "image/png" + }, { + "src": "img/snap-icon-384.png", + "sizes": "384x384", + "type": "image/png" + }, { + "src": "img/snap-icon-512.png", + "sizes": "512x512", + "type": "image/png" + }], + "lang": "en-US", + "start_url": "./snap.html", + "display": "standalone", + "background_color": "white", + "theme_color": "white" +} diff --git a/snap.html b/snap.html index adf29d4a..452921b9 100755 --- a/snap.html +++ b/snap.html @@ -1,34 +1,47 @@ + Snap! 7.1.3 - Build Your Own Blocks + + + - Snap! 6.9.0 Build Your Own Blocks - - + + + + + + + - - - - - - - - - - + + + + + + + + + + + - - - - + + + + + - +