diff options
| -rw-r--r-- | blocks.js | 48 | ||||
| -rw-r--r-- | gui.js | 87 | ||||
| -rw-r--r-- | help/list$arrowRightsentence.png | bin | 0 -> 157221 bytes | |||
| -rw-r--r-- | help/sentence$arrowRightlist.png | bin | 0 -> 176476 bytes | |||
| -rwxr-xr-x | history.txt | 36 | ||||
| -rw-r--r-- | lang-bn.js | 1192 | ||||
| -rw-r--r-- | libraries/word-sentence.xml | 2 | ||||
| -rw-r--r-- | lists.js | 124 | ||||
| -rw-r--r-- | locale.js | 29 | ||||
| -rw-r--r-- | morphic.js | 115 | ||||
| -rw-r--r-- | objects.js | 14 | ||||
| -rw-r--r-- | threads.js | 17 | ||||
| -rw-r--r-- | tools.xml | 2 |
13 files changed, 1535 insertions, 131 deletions
@@ -155,7 +155,7 @@ DialogBoxMorph, BlockInputFragmentMorph, PrototypeHatBlockMorph, Costume*/ // Global stuff //////////////////////////////////////////////////////// -modules.blocks = '2014-June-06'; +modules.blocks = '2014-July-11'; var SyntaxElementMorph; @@ -1283,7 +1283,7 @@ SyntaxElementMorph.prototype.labelPart = function (spec) { case '%pause': part = new SymbolMorph('pause'); part.size = this.fontSize; - part.color = new Color(160, 80, 0); + part.color = new Color(255, 220, 0); part.isProtectedLabel = true; // doesn't participate in zebraing part.shadowColor = this.color.darker(this.labelContrast); part.shadowOffset = MorphicPreferences.isFlat ? @@ -2122,6 +2122,7 @@ BlockMorph.prototype.userMenu = function () { if (this.parentThatIsA(RingMorph)) { menu.addLine(); menu.addItem("unringify", 'unringify'); + menu.addItem("ringify", 'ringify'); return menu; } if (this.parent instanceof ReporterSlotMorph @@ -2168,16 +2169,18 @@ BlockMorph.prototype.developersMenu = function () { BlockMorph.prototype.hidePrimitive = function () { var ide = this.parentThatIsA(IDE_Morph), + dict, cat; if (!ide) {return; } StageMorph.prototype.hiddenPrimitives[this.selector] = true; - cat = { + dict = { doWarp: 'control', reifyScript: 'operators', reifyReporter: 'operators', reifyPredicate: 'operators', doDeclareVariables: 'variables' - }[this.selector] || this.category; + }; + cat = dict[this.selector] || this.category; if (cat === 'lists') {cat = 'variables'; } ide.flushBlocksCache(cat); ide.refreshPalette(); @@ -3356,6 +3359,10 @@ CommandBlockMorph.prototype.isStop = function () { // CommandBlockMorph deleting CommandBlockMorph.prototype.userDestroy = function () { + if (this.nextBlock()) { + this.userDestroyJustThis(); + return; + } var cslot = this.parentThatIsA(CSlotMorph); this.destroy(); if (cslot) { @@ -3363,6 +3370,37 @@ CommandBlockMorph.prototype.userDestroy = function () { } }; +CommandBlockMorph.prototype.userDestroyJustThis = function () { + // delete just this one block, reattach next block to the previous one, + var scripts = this.parentThatIsA(ScriptsMorph), + cs = this.parentThatIsA(CommandSlotMorph), + pb, + nb = this.nextBlock(), + above, + cslot = this.parentThatIsA(CSlotMorph); + + if (this.parent) { + pb = this.parent.parentThatIsA(CommandBlockMorph); + } + if (pb && (pb.nextBlock() === this)) { + above = pb; + } else if (cs && (cs.nestedBlock() === this)) { + above = cs; + } + this.destroy(); + if (nb) { + if (above instanceof CommandSlotMorph) { + above.nestedBlock(nb); + } else if (above instanceof CommandBlockMorph) { + above.nextBlock(nb); + } else { + scripts.add(nb); + } + } else if (cslot) { + cslot.fixLayout(); + } +}; + // CommandBlockMorph drawing: CommandBlockMorph.prototype.drawNew = function () { @@ -6478,7 +6516,7 @@ InputSlotMorph.prototype.collidablesMenu = function () { allNames = []; stage.children.forEach(function (morph) { - if (morph instanceof SpriteMorph) { + if (morph instanceof SpriteMorph && !morph.isClone) { if (morph.name !== rcvr.name) { allNames = allNames.concat(morph.name); } @@ -69,7 +69,7 @@ SpeechBubbleMorph*/ // Global stuff //////////////////////////////////////////////////////// -modules.gui = '2014-Jun-04'; +modules.gui = '2014-July-11'; // Declarations @@ -889,8 +889,6 @@ IDE_Morph.prototype.createPalette = function (forSearching) { this.palette.setWidth(this.logo.width()); this.add(this.palette); - this.palette.scrollX(this.palette.padding); - this.palette.scrollY(this.palette.padding); return this.palette; }; @@ -924,6 +922,8 @@ IDE_Morph.prototype.createSpriteBar = function () { tabColors = this.tabColors, tabBar = new AlignmentMorph('row', -tabCorner * 2), tab, + symbols = ['\u2192', '\u21BB', '\u2194'], + labels = ['don\'t rotate', 'can rotate', 'only face left/right'], myself = this; if (this.spriteBar) { @@ -952,17 +952,13 @@ IDE_Morph.prototype.createSpriteBar = function () { each.refresh(); }); }, - ['\u2192', '\u21BB', '\u2194'][rotationStyle], // label + symbols[rotationStyle], // label function () { // query return myself.currentSprite instanceof SpriteMorph && myself.currentSprite.rotationStyle === rotationStyle; }, null, // environment - localize( - [ - 'don\'t rotate', 'can rotate', 'only face left/right' - ][rotationStyle] - ) + localize(labels[rotationStyle]) ); button.corner = 8; @@ -1729,7 +1725,7 @@ IDE_Morph.prototype.applySavedSettings = function () { // blocks zoom if (zoom) { - SyntaxElementMorph.prototype.setScale(zoom); + SyntaxElementMorph.prototype.setScale(Math.min(zoom, 12)); CommentMorph.prototype.refreshScale(); SpriteMorph.prototype.initBlocks(); } @@ -1837,23 +1833,23 @@ IDE_Morph.prototype.duplicateSprite = function (sprite) { IDE_Morph.prototype.removeSprite = function (sprite) { var idx = this.sprites.asArray().indexOf(sprite) + 1; - + this.stage.threads.stopAllForReceiver(sprite); sprite.destroy(); this.stage.watchers().forEach(function (watcher) { if (watcher.object() === sprite) { watcher.destroy(); } }); - - if (idx < 1) {return; } - + if (idx > 0) { + this.sprites.remove(idx); + } + this.createCorral(); + this.fixLayout(); this.currentSprite = detect( this.stage.children, function (morph) {return morph instanceof SpriteMorph; } ) || this.stage; - this.sprites.remove(this.sprites.asArray().indexOf(sprite) + 1); - this.createCorral(); - this.fixLayout(); + this.selectSprite(this.currentSprite); }; @@ -1861,7 +1857,7 @@ IDE_Morph.prototype.removeSprite = function (sprite) { IDE_Morph.prototype.userMenu = function () { var menu = new MenuMorph(this); - menu.addItem('help', 'nop'); + // menu.addItem('help', 'nop'); return menu; }; @@ -1947,7 +1943,7 @@ IDE_Morph.prototype.cloudMenu = function () { ); } else { menu.addItem( - 'Logout', + localize('Logout') + ' ' + SnapCloud.username, 'logout' ); menu.addItem( @@ -2270,18 +2266,7 @@ IDE_Morph.prototype.projectMenu = function () { menu = new MenuMorph(this); menu.addItem('Project notes...', 'editProjectNotes'); menu.addLine(); - menu.addItem( - 'New', - function () { - myself.confirm( - 'Replace the current project with a new one?', - 'New Project', - function () { - myself.newProject(); - } - ); - } - ); + menu.addItem('New', 'createNewProject'); menu.addItem('Open...', 'openProjectsBrowser'); menu.addItem('Save', "save"); if (shiftClicked) { @@ -2364,8 +2349,8 @@ IDE_Morph.prototype.projectMenu = function () { 'Import tools', function () { myself.droppedText( - myself.getURL( - 'http://snap.berkeley.edu/snapsource/tools.xml' + myself.getURLsbeOrRelative( + 'tools.xml' ), 'tools' ); @@ -3364,6 +3349,15 @@ IDE_Morph.prototype.toggleStageSize = function (isSmall) { } }; +IDE_Morph.prototype.createNewProject = function () { + var myself = this; + this.confirm( + 'Replace the current project with a new one?', + 'New Project', + function () {myself.newProject(); } + ); +}; + IDE_Morph.prototype.openProjectsBrowser = function () { new ProjectDialogMorph(this, 'open').popUp(); }; @@ -3499,7 +3493,7 @@ IDE_Morph.prototype.userSetBlocksScale = function () { new DialogBoxMorph( null, function (num) { - myself.setBlocksScale(num); + myself.setBlocksScale(Math.min(num, 12)); } ).withKey('zoomBlocks').prompt( 'Zoom blocks', @@ -4041,6 +4035,23 @@ IDE_Morph.prototype.getURL = function (url) { } }; +IDE_Morph.prototype.getURLsbeOrRelative = function (url) { + var request = new XMLHttpRequest(), + myself = this; + try { + request.open('GET', 'http://snap.berkeley.edu/snapsource/' + + url, false); + request.send(); + if (request.status === 200) { + return request.responseText; + } + return myself.getURL(url); + } catch (err) { + myself.showMessage(err); + return; + } +}; + // IDE_Morph user dialog shortcuts IDE_Morph.prototype.showMessage = function (message, secs) { @@ -4836,9 +4847,13 @@ ProjectDialogMorph.prototype.shareProject = function () { function () { SnapCloud.disconnect(); proj.Public = 'true'; + myself.unshareButton.show(); + myself.shareButton.hide(); entry.label.isBold = true; entry.label.drawNew(); entry.label.changed(); + myself.buttons.fixLayout(); + myself.drawNew(); myself.ide.showMessage('shared.', 2); }, myself.ide.cloudError(), @@ -4873,9 +4888,13 @@ ProjectDialogMorph.prototype.unshareProject = function () { function () { SnapCloud.disconnect(); proj.Public = 'false'; + myself.shareButton.show(); + myself.unshareButton.hide(); entry.label.isBold = false; entry.label.drawNew(); entry.label.changed(); + myself.buttons.fixLayout(); + myself.drawNew(); myself.ide.showMessage('unshared.', 2); }, myself.ide.cloudError(), diff --git a/help/list$arrowRightsentence.png b/help/list$arrowRightsentence.png Binary files differnew file mode 100644 index 0000000..1383af6 --- /dev/null +++ b/help/list$arrowRightsentence.png diff --git a/help/sentence$arrowRightlist.png b/help/sentence$arrowRightlist.png Binary files differnew file mode 100644 index 0000000..731aab9 --- /dev/null +++ b/help/sentence$arrowRightlist.png diff --git a/history.txt b/history.txt index 02fc2a0..8cc4e23 100755 --- a/history.txt +++ b/history.txt @@ -2166,3 +2166,39 @@ ______ * Blocks: enable relabelling blocks across categories * Objects: more relabelling options for SAY, THINK, ASK * BYOB, Blocks: relabelling custom blocks (experimental) + +140623 +------ +* Morphic: Inspector enhancements (dynamic property update, keyboard shortcuts) +* GUI: update visibility of share/unshare buttons, Thanks, Kunal! + +140706 +------ +* Blocks: add “ringify” to every context menu that already has “unringify” + + +140708 +------ +* Threads: show error messages for custom blocks (propagating to the script’s top block) +* Threads: adjust to Doug Crockford’s latest infuriating nitpickings in JSLint +* GUI: show username in ‘logout’ entry of cloud menu +* GUI, Objects: fixed scrolling glitch in the palette, thanks, Kunal! +* GUI, Objects: add keyboard shortcut for “new project”: ctr-n +* revert changes made for JSLint’s sake after the issue was fixed in JSLint +* Blocks: change “delete” behavior in context menus to only delete this particular blocks (and reconnect the next block to the previous one) +* fixed #490 + +140711 +------ +* Morphic: keyboard shortcut ctrl/cmd-shift-a for ‘@‘ +* Morphic: allow directly editing properties in inspector widgets +* Blocks: change the color of the %pause symbol to be more yellowish +* Threads: fixed #506, thanks @haritop, for both the report and for providing the fix!! +* GUI: fixed #412 (incomplete sprite-removal) +* GUI: fixed #507 (limit persistent block zoom to 12x), thanks Michael! +* Morphic, GUI, Objects: fixed #508 (don’t popup empty menus), thanks Michael! + +140714 +------ +* new translation into Bangla (Bengali)!!! Yay, thanks, Mokter!! +* Lists: make internal list ops iterative (instead of recursive), thanks, Brian! diff --git a/lang-bn.js b/lang-bn.js new file mode 100644 index 0000000..2d734d2 --- /dev/null +++ b/lang-bn.js @@ -0,0 +1,1192 @@ +/*
+
+ lang-bn.js
+
+ বাংলা (Bangla) translation for SNAP!
+
+ written by Dr. Mokter Hossain
+
+ Copyright (C) 2014 by Dr. Mokter Hossain
+
+ This file is part of Snap!.
+
+ Snap! is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of
+ the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+
+ Note to Translators:
+ --------------------
+ At this stage of development, Snap! can be translated to any LTR language
+ maintaining the current order of inputs (formal parameters in blocks).
+
+ Translating Snap! is easy:
+
+
+ 1. Download
+
+ Download the sources and extract them into a local folder on your
+ computer:
+
+ <http://snap.berkeley.edu/snapsource/snap.zip>
+
+ Use the German translation file (named 'lang-de.js') as template for your
+ own translations. Start with editing the original file, because that way
+ you will be able to immediately check the results in your browsers while
+ you're working on your translation (keep the local copy of snap.html open
+ in your web browser, and refresh it as you progress with your
+ translation).
+
+
+ 2. Edit
+
+ Edit the translation file with a regular text editor, or with your
+ favorite JavaScript editor.
+
+ In the first non-commented line (the one right below this
+ note) replace "de" with the two-letter ISO 639-1 code for your language,
+ e.g.
+
+ fr - French => SnapTranslator.dict.fr = {
+ it - Italian => SnapTranslator.dict.it = {
+ pl - Polish => SnapTranslator.dict.pl = {
+ pt - Portuguese => SnapTranslator.dict.pt = {
+ es - Spanish => SnapTranslator.dict.es = {
+ el - Greek => => SnapTranslator.dict.el = {
+
+ etc. (see <http://en.wikipedia.org/wiki/ISO_639-1>)
+
+
+ 3. Translate
+
+ Then work through the dictionary, replacing the German strings against
+ your translations. The dictionary is a straight-forward JavaScript ad-hoc
+ object, for review purposes it should be formatted as follows:
+
+ {
+ 'English string':
+ 'Translation string',
+ 'last key':
+ } 'last value'
+
+ and you only edit the indented value strings. Note that each key-value
+ pair needs to be delimited by a comma, but that there shouldn't be a comma
+ after the last pair (again, just overwrite the template file and you'll be
+ fine).
+
+ If something doesn't work, or if you're unsure about the formalities you
+ should check your file with
+
+ <http://JSLint.com>
+
+ This will inform you about any missed commas etc.
+
+
+ 4. Accented characters
+
+ Depending on which text editor and which file encoding you use you can
+ directly enter special characters (e.g. Umlaut, accented characters) on
+ your keyboard. However, I've noticed that some browsers may not display
+ special characters correctly, even if other browsers do. So it's best to
+ check your results in several browsers. If you want to be on the safe
+ side, it's even better to escape these characters using Unicode.
+
+ see: <http://0xcc.net/jsescape/>
+
+
+ 5. Block specs:
+
+ At this time your translation of block specs will only work
+ correctly, if the order of formal parameters and their types
+ are unchanged. Placeholders for inputs (formal parameters) are
+ indicated by a preceding % prefix and followed by a type
+ abbreviation.
+
+ For example:
+
+ 'say %s for %n secs'
+
+ can currently not be changed into
+
+ 'say %n secs long %s'
+
+ and still work as intended.
+
+ Similarly
+
+ 'point towards %dst'
+
+ cannot be changed into
+
+ 'point towards %cst'
+
+ without breaking its functionality.
+
+
+ 6. Submit
+
+ When you're done, rename the edited file by replacing the "de" part of the
+ filename with the two-letter ISO 639-1 code for your language, e.g.
+ bn - Bengali(Bangla) => lang-bn.js
+ fr - French => lang-fr.js
+ it - Italian => lang-it.js
+ pl - Polish => lang-pl.js
+ pt - Portuguese => lang-pt.js
+ es - Spanish => lang-es.js
+ el - Greek => => lang-el.js
+
+ and send it to me for inclusion in the official Snap! distribution.
+ Once your translation has been included, Your name will the shown in the
+ "Translators" tab in the "About Snap!" dialog box, and you will be able to
+ directly launch a translated version of Snap! in your browser by appending
+
+ lang:xx
+
+ to the URL, xx representing your translations two-letter code.
+
+
+ 7. Known issues
+
+ In some browsers accents or ornaments located in typographic ascenders
+ above the cap height are currently (partially) cut-off.
+
+ Enjoy!
+ -Jens
+*/
+
+/*global SnapTranslator*/
+
+SnapTranslator.dict.bn = {
+
+/*
+ Special characters: (see <http://0xcc.net/jsescape/>)
+
+ Ä, ä \u00c4, \u00e4
+ Ö, ö \u00d6, \u00f6
+ Ü, ü \u00dc, \u00fc
+ ß \u00df
+*/
+ // translations meta information
+ 'language_name':
+ 'বাংলা', // the name as it should appear in the language menu
+ 'language_translator':
+ 'Dr. Mokter Hossain', // your name for the Translators tab
+ 'translator_e-mail':
+ 'mokter@gmail.com', // optional
+ 'last_changed':
+ '2014-07-02', // this, too, will appear in the Translators tab
+
+
+ // GUI
+ // control bar:
+ 'untitled':
+ 'শিরোনামহীন',
+ 'development mode':
+ 'উন্নয়ন মোড',
+
+ // categories:
+ 'Motion':
+ 'গতি (Motion)',
+ 'Looks':
+ 'সৌন্দর্য (Looks)',
+ 'Sound':
+ 'শব্দ (Sound)',
+ 'Pen':
+ 'লেখনী (Pen)',
+ 'Control':
+ 'নিয়ন্ত্রণ (Control)',
+ 'Sensing':
+ 'অনুভূতি (Sensing)',
+ 'Operators':
+ 'চালক (Operators)',
+ 'Variables':
+ 'চলক (Variables)',
+ 'Lists':
+ 'তালিকা (Lists)',
+ 'Other':
+ 'অন্যান্য',
+
+ // editor:
+ 'draggable':
+ 'টেনে আনার যোগ্য',
+
+ // tabs:
+ 'Scripts':
+ 'প্রোগ্রাম স্ক্রিপ্ট (Scripts)',
+ 'Costumes':
+ 'পরিচ্ছদ (Costumes)',
+ 'Sounds':
+ 'শব্দমালা (Sounds)',
+
+ // names:
+ 'Sprite':
+ 'স্পাইট',
+ 'Stage':
+ 'দৃশ্যস্থল',
+
+ // rotation styles:
+ 'don\'t rotate':
+ 'ঘোরতে পারে না',
+ 'can rotate':
+ 'ঘোরতে পারে',
+ 'only face left/right':
+ 'একমাত্র ডানে/বামে মুখ',
+
+ // new sprite button:
+ 'add a new sprite':
+ 'একটি নতুন স্পাইট যোগ কর',
+
+ // tab help
+ 'costumes tab help':
+ '\nনতুন/অতিরিক্ত পরিচ্ছদ ব্যবহারের জন্য প্রথমে ডান দিকের নিচের পরিচ্ছদ আইটেমে একটি ক্লিক কর, তারপর কম্পিউটার থেকে প্রত্যাশিত ছবির ফাইল নির্বাচন করে\nএখানে আনয়ন কর \n'
+ +'\n\n'+
+ 'নতুন/অতিরিক্ত স্পাইট ব্যবহারের জন্য প্রথমে ডান দিকের নিচের স্পাইট আইটেমে একটি ক্লিক কর, তারপর কম্পিউটার থেকে প্রত্যাশিত ছবির ফাইল নির্বাচন করে\nএখানে আনয়ন কর \n',
+ 'import a sound from your computer\nby dragging it into here':
+ '\nশব্দ ব্যবহারের জন্য কম্পিউটার থেকে প্রত্যাশিত শব্দের ফাইল নির্বাচন করে এখানে আনয়ন করতে পার',
+
+ // primitive blocks:
+
+ /*
+ Attention Translators:
+ ----------------------
+ At this time your translation of block specs will only work
+ correctly, if the order of formal parameters and their types
+ are unchanged. Placeholders for inputs (formal parameters) are
+ indicated by a preceding % prefix and followed by a type
+ abbreviation.
+
+ For example:
+
+ 'say %s for %n secs'
+
+ can currently not be changed into
+
+ 'say %n secs long %s'
+
+ and still work as intended.
+
+ Similarly
+
+ 'point towards %dst'
+
+ cannot be changed into
+
+ 'point towards %cst'
+
+ without breaking its functionality.
+ */
+
+ // motion:
+ 'Stage selected:\nno motion primitives':
+ 'স্টেজ নির্বাচিত হয়েছে:\n কোন গতিশীল প্রিমিটিভ নেই\n'
+ + 'disponibles',
+
+ 'move %n steps':
+ 'অগ্রসর হও %n ধাপ',
+ 'turn %clockwise %n degrees':
+ 'ডানদিকে %clockwise %n ডিগ্রীকোণে ঘোর',
+ 'turn %counterclockwise %n degrees':
+ 'বামদিকে %counterclockwise %n ডিগ্রীকোণে ঘোর',
+ 'point in direction %dir':
+ 'দিক নির্ধারণ কর %dir',
+ 'point towards %dst':
+ 'প্রতি নির্দেশ কর %dst',
+ 'go to x: %n y: %n':
+ 'x: %n y: %n অবস্থানে যাও',
+ 'go to %dst':
+ '%dst দুরত্বে যাও',
+ 'glide %n secs to x: %n y: %n':
+ 'গড়িয়ে চল x: %n y: %n অবস্থানে %n সেকেন্ড ',
+ 'change x by %n':
+ 'x পরিবর্তন কর %n দ্বারা',
+ 'set x to %n':
+ 'x নির্ধারণ কর %n',
+ 'change y by %n':
+ 'y পরিবর্তন কর %n দ্বারা',
+ 'set y to %n':
+ 'y নির্ধারণ কর %n',
+ 'if on edge, bounce':
+ 'প্রান্ত স্পর্শ করলে উল্টো ফিরে আস',
+ 'x position':
+ 'এর x অবস্থান',
+ 'y position':
+ 'এর y অবস্থান',
+ 'direction':
+ 'এর গতিপথ',
+
+ // looks:
+ 'switch to costume %cst':
+ 'পরিচ্ছদ বদল কর %cst',
+ 'next costume':
+ 'পরবর্তী পরিচ্ছদ',
+ 'costume #':
+ 'এর পরিচ্ছদ #',
+ 'say %s for %n secs':
+ 'বল %s %n সেকেন্ড পর্যন্ত',
+ 'say %s':
+ 'বল %s',
+ 'think %s for %n secs':
+ 'ভাব %s %n সেকেন্ড পর্যন্ত',
+ 'think %s':
+ 'ভাব %s',
+ 'Hello!':
+ 'হ্যালো!',
+ 'Hmm...':
+ 'হুম ...',
+ 'change %eff effect by %n':
+ 'প্রভাব %eff পরিবর্তন করো %n দ্বারা ',
+ 'set %eff effect to %n':
+ 'প্রভাব %eff %n গুণ নির্ধারণ কর',
+ 'clear graphic effects':
+ 'চিত্রলেখ প্রভাব পরিষ্কার কর',
+ 'change size by %n':
+ 'আকার %n গুণ পরিবর্তন কর',
+ 'set size to %n %':
+ 'আকার %n % নির্ধারণ কর',
+ 'size':
+ 'এর আকার',
+ 'show':
+ 'প্রদর্শন কর',
+ 'hide':
+ 'গোপন কর',
+ 'go to front':
+ 'সামনে যাও',
+ 'go back %n layers':
+ 'পশ্চাতে যাও %n স্তর',
+
+ 'development mode \ndebugging primitives:':
+ 'উন্নয়ন মোড \n ডিবাগিং প্রিমিটিভ',
+ 'console log %mult%s':
+ 'কনসোল লগ: %mult%s',
+ 'alert %mult%s':
+ 'সতর্ক: %mult%s',
+
+ // sound:
+ 'play sound %snd':
+ 'শব্দ বাজাও %snd',
+ 'play sound %snd until done':
+ '%snd শব্দ বাজাও যতক্ষণ না',
+ 'stop all sounds':
+ 'সকল শব্দ বন্ধ কর',
+ 'rest for %n beats':
+ 'নীরব থাক %n স্বরকম্প পর্যন্ত',
+ 'play note %n for %n beats':
+ 'মন্তব্য %n বাজাও %n স্বরকম্প',
+ 'change tempo by %n':
+ 'শব্দের কম্পনমাত্রা %n পরিবর্তন কর',
+ 'set tempo to %n bpm':
+ 'শব্দের কম্পনমাত্রা %n নির্ধারণ কর',
+ 'tempo':
+ 'শব্দের কম্পনমাত্রা',
+
+ // pen:
+ 'clear':
+ 'পরিচ্ছদ পরিষ্কার কর',
+ 'pen down':
+ 'লেখনী নিম্নগামী কর',
+ 'pen up':
+ 'লেখনী ঊর্ধ্বগামী কর',
+ 'set pen color to %clr':
+ 'লেখনীর রঙ %clr নির্ধারণ কর',
+ 'change pen color by %n':
+ 'লেখনীর রঙ %n পরিবর্তন কর',
+ 'set pen color to %n':
+ 'লেখনীর রঙ %n নির্ধারণ কর',
+ 'change pen shade by %n':
+ 'লেখনীর ছায়া %n পরিবর্তন কর',
+ 'set pen shade to %n':
+ 'লেখনীর ছায়া %n নির্ধারণ কর',
+ 'change pen size by %n':
+ 'লেখনীর আকার পরিবর্তন কর %n',
+ 'set pen size to %n':
+ 'লেখনীর আকার নির্ধারণ কর %n',
+ 'stamp':
+ 'সীলমোহর',
+
+ // 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 অপেক্ষা কর',
+ 'Message name':
+ 'বার্তা লিখ',
+ 'message':
+ 'বার্তা',
+ 'any message':
+ 'যে কোন বার্তা',
+ 'initialize':
+ 'আরম্ভ কর',
+ 'push':
+ 'পুশ',
+ 'pull':
+ 'পুল',
+
+ 'wait %n secs':
+ 'অপেক্ষা কর %n সেকেণড',
+ 'wait until %b':
+ 'অপেক্ষা কর %b যতক্ষণ না',
+ 'forever %c':
+ 'অনন্তকাল কর %c',
+ 'repeat %n %c':
+ 'পুনরাবৃত্তি কর %n বার %c ',
+ 'repeat until %b %c':
+ 'পুনরায় কর যতক্ষণ না %b %c',
+ 'if %b %c':
+ 'যদি হয় %b %c',
+ 'if %b %c else %c':
+ 'যদি হয় %b %c অন্যথায় %c',
+ 'report %s':
+ 'প্রতিবেদন %s',
+ 'stop block':
+ 'ব্লক বন্ধ কর',
+ 'stop script':
+ 'বর্ণনা বন্ধ কর',
+ 'stop all %stop':
+ 'সব বন্ধ কর %stop',
+ 'pause all %pause':
+ 'সব স্থগিত কর %pause',
+ 'run %cmdRing %inputs':
+ 'চালনা কর %cmdRing %inputs',
+ 'launch %cmdRing %inputs':
+ 'শুরু কর %cmdRing %inputs',
+ 'call %repRing %inputs':
+ 'আহ্বান কর %repRing %inputs',
+ 'run %cmdRing w/continuation':
+ 'চালনা কর %cmdRing ধারাবাহিকতার সঙ্গে',
+ 'call %cmdRing w/continuation':
+ 'আহ্বান কর %cmdRing ধারাবাহিকতার সঙ্গে',
+ 'warp %c':
+ 'একত্রিত কর %c',
+ 'when I start as a clone':
+ 'যখন আমি একটি ক্লোন হিসেবে শুরু করি',
+ 'create a clone of %cln':
+ '%cln একটি ক্লোন এর সৃষ্টি কর',
+ 'myself':
+ 'স্বীয়',
+ 'delete this clone':
+ 'এই ক্লোনটি মুছে ফেল',
+
+ // sensing:
+ 'touching %col ?':
+ 'স্পর্শ করেছে কিনা %col ?',
+ 'touching %clr ?':
+ 'স্পর্শ রঙ %clr কিনা?',
+ 'color %clr is touching %clr ?':
+ '%clr রঙ %clr রঙ গামী কিনা?',
+ 'ask %s and wait':
+ '%s জিজ্ঞাসা করে অপেক্ষা কর',
+ 'what\'s your name?':
+ 'তোমার নাম কি?',
+ 'answer':
+ 'জবাব',
+ 'mouse x':
+ 'মাউস x',
+ 'mouse y':
+ 'মাউস y',
+ 'mouse down?':
+ 'মাউস বোতাম চাপা কিনা?',
+ 'key %key pressed?':
+ 'কোন কী %key চাপা কিনা?',
+ 'distance to %dst':
+ 'পর্যন্ত দূরত্ব %dst',
+ 'reset timer':
+ 'সময় নির্ণায়ক পুন:স্থাপন কর',
+ 'timer':
+ 'সময় নির্ণায়ক',
+ '%att of %spr':
+ '%att লক্ষণ %spr এর',
+ 'http:// %s':
+ 'http:// %s',
+ 'turbo mode?':
+ 'টার্বো মোড কিনা?',
+ 'set turbo mode to %b':
+ 'টার্বো মোডকে %b নির্ধারণ কর',
+
+ 'filtered for %clr':
+ 'ফিল্টার করা হয়েছে %clr এর জন্য',
+ 'stack size':
+ 'স্ট্যাকের আকার',
+ 'frames':
+ 'ফ্রেমসমূহ',
+
+ // operators:
+ '%n mod %n':
+ '%n ভাগ %n এর অবশিষ্ট',
+ 'round %n':
+ '%n এর নিকটতম পূর্ণসংখ্যা',
+ '%fun of %n':
+ '%fun নির্ণয় কর %n',
+ 'pick random %n to %n':
+ 'যে কোনো একটি সংখ্যা %n থেকে %n পর্যন্ত',
+ '%b and %b':
+ '%b এবং %b',
+ '%b or %b':
+ '%b অথবা %b',
+ 'not %b':
+ 'না %b',
+ 'true':
+ 'সত্য',
+ 'false':
+ 'মিথ্যা',
+ 'join %words':
+ 'সংযুক্ত কর %words',
+ 'hello':
+ 'হ্যালো',
+ 'world':
+ 'পৃথিবী',
+ 'letter %n of %s':
+ '%n -তম বর্ণ %s এর',
+ 'length of %s':
+ '%s এর বর্ণদৈর্ঘ্য ',
+ 'unicode of %s':
+ '%s বর্ণের ইউনিকোড',
+ 'unicode %n as letter':
+ 'ইউনিকোড %n বর্ণ হিসেবে',
+ 'is %s a %typ ?':
+ '%s এই প্রকারের কিনা %typ ?',
+ 'is %s identical to %s ?':
+ '%s এর সমতুল্য %s কিনা?',
+
+ 'type of %s':
+ '%s এর প্রকারে',
+
+ // variables:
+ 'Make a variable':
+ 'একটি চলক তৈরী কর',
+ 'Variable name':
+ 'চলকের নাম',
+ 'Delete a variable':
+ 'চলকটি মুছে ফেল',
+ 'set %var to %s':
+ '%var চলকটি মান %s নির্ধারণ কর',
+ 'change %var by %n':
+ '%var চলকটি মান %n দ্বারা পরিবর্তন কর',
+ 'show variable %var':
+ '%var চলকটি প্রদর্শন কর',
+ 'hide variable %var':
+ '%var চলকটি গোপন কর',
+ 'script variables %scriptVars':
+ 'স্ক্রিপ্ট চলকসমূহ %scriptVars',
+
+ 'list %exp':
+ 'তালিকা %exp',
+ '%s in front of %l':
+ '%s %l তালিকার সামনে',
+ 'item %idx of %l':
+ '%idx উপাদানটি %l তালিকার',
+ 'all but first of %l':
+ '%l তালিকার সব কিন্তু প্রথমটি বাদে',
+ 'length of %l':
+ '%l তালিকার দৈর্ঘ্য',
+ '%l contains %s':
+ '%l তালিকা %s উপাদানটি ধারণ করে',
+ 'thing':
+ 'বিষয়',
+ 'add %s to %l':
+ '%s কে %l তে সংযুক্ত কর',
+ 'delete %ida of %l':
+ '%ida কে %l থেকে মুছে ফেল',
+ 'insert %s at %idx of %l':
+ '%s কে %idx স্থানে %l তালিকায় সন্নিবেশিত কর',
+ 'replace item %idx of %l with %s':
+ '%idx স্থানের %l তালিকার উপাদানটি %s দ্বারা প্রতিস্থাপন কর',
+
+ // other
+ 'Make a block':
+ 'একটি ব্লক তৈরী কর',
+
+ // menus
+ // snap menu
+ 'About...':
+ 'Snap! সম্পর্কিত তথ্য...',
+ 'Reference manual':
+ 'Snap! রেফারেন্স ম্যানুয়াল',
+ 'Snap! website':
+ 'Snap! ওয়েবসাইট',
+ 'Download source':
+ 'Snap! সোর্সকোড',
+ 'Switch back to user mode':
+ 'ইউজার মোডে ফিরে যাও',
+ 'disable deep-Morphic\ncontext menus\nand show user-friendly ones':
+ 'দীর্ঘ-মরফিক প্রসঙ্গ তালিকা এবংপরিদর্শক নিস্ক্রিয় করে একটি ব্যবহারকারী বান্ধব তালিকা দেখাও',
+ 'Switch to dev mode':
+ 'ডেভেলপার মোডে ফিরে যাও',
+ 'enable Morphic\ncontext menus\nand inspectors,\nnot user-friendly!':
+ 'মরফিক প্রসঙ্গ তালিকা এবংপরিদর্শক সক্রিয় কর,তবে এটি ব্যবহারকারী বান্ধব নহে!',
+
+ // project menu
+ 'Project notes...':
+ 'প্রকল্প সম্পর্কিত মন্তব্য...',
+ 'New':
+ 'নতুন প্রকল্প তৈরী কর',
+ 'Open...':
+ 'সংরক্ষিত প্রকল্প খোল...',
+ 'Save':
+ 'প্রকল্পটি সংরক্ষণ কর',
+ 'Save As...':
+ 'প্রকল্পটির নামান্তর কর...',
+ 'Import...':
+ 'প্রকল্প ইম্পোর্ট কর...',
+ 'file menu import hint':
+ 'XMLফাইল হিসেবে সংরক্ষিত কোন প্রকল্প ইম্পোর্ট কর',
+ 'Export project as plain text...':
+ 'প্রকল্পটি প্লেইন টেক্সট হিসাবে এক্সপোর্ট কর ...',
+ 'Export project...':
+ 'প্রকল্পটি এক্সপোর্ট কর...',
+ 'show project data as XML\nin a new browser window':
+ 'প্রকল্প উপাত্ত একটি নতুন ব্রাউজার উইন্ডোতে XMLফাইল হিসেবে প্রদর্শন কর',
+ 'Export blocks...':
+ 'ব্লকসমূহ এক্সপোর্ট কর...',
+ 'show global custom block definitions as XML\nin a new browser window':
+ 'সার্বজনীন কাস্টম ব্লক সংজ্ঞার্থ একটি নতুন ব্রাউজার উইন্ডোতে XMLফাইল হিসেবে প্রদর্শন কর',
+ 'Import tools':
+ 'যন্ত্রপাতি ইম্পোর্ট কর',
+ 'Libraries...':
+ 'লাইব্রেরি লোড কর',
+ 'Costumes...':
+ 'পরিচ্ছদ লোড কর',
+ 'Sounds...':
+ 'শব্দের ফাইল লোড কর',
+ 'load the official library of\npowerful blocks':
+ 'শক্তিশালী ব্লকের অফিসিয়াল লাইব্রেরি লোড কর',
+
+ // cloud menu
+ 'Login...':
+ 'ক্লাউড লগ ইন...',
+ 'Signup...':
+ 'ক্লাউড সাইন আপ...',
+ 'Reset Password...':
+ 'পাসওয়ার্ড পরিবর্তন কর...',
+
+
+ // settings menu
+ 'Language...':
+ 'ভাষা পরিবর্তন কর...',
+ 'Zoom blocks...':
+ 'ব্লকসমূহ জুম্ কর...',
+ 'Stage size...':
+ 'দৃশ্যস্থলের আকার পরিবর্তন কর...',
+ 'Blurred shadows':
+ 'ঝাপসা ছায়া',
+ 'uncheck to use solid drop\nshadows and highlights':
+ 'নিরেট ড্রপ ছায়া এবং হাইলাইট ব্যবহার আনচেক কর',
+ 'check to use blurred drop\nshadows and highlights':
+ 'ঝাপসা ছায়া এবং হাইলাইট ব্যবহার চেক কর',
+ 'Zebra coloring':
+ 'জেব্রা চেহারা',
+ 'check to enable alternating\ncolors for nested blocks':
+ 'নেস্টেড ব্লকের পরিবর্তিত রঙ সক্রিয় করার জন্য চেক কর',
+ 'uncheck to disable alternating\ncolors for nested block':
+ 'নেস্টেড ব্লকের পরিবর্তিত রঙ নিস্ক্রিয় করার জন্য আনচেক কর',
+ 'Dynamic input labels':
+ 'গতিশীল ইনপুট লেবেল',
+ 'uncheck to disable dynamic\nlabels for variadic inputs':
+ 'ভারিয়াদিক ইনপুট এর গতিশীল লেবেল নিস্ক্রিয় করার জন্য আনচেক কর',
+ 'check to enable dynamic\nlabels for variadic inputs':
+ 'ভারিয়াদিক ইনপুট এর গতিশীল লেবেল সক্রিয় করার জন্য চেক কর',
+ 'Prefer empty slot drops':
+ 'খালি স্লট ড্রপ পছন্দ কর',
+ 'settings menu prefer empty slots hint':
+ 'খালি স্লট মেনু স্থাপন করার সাহায্যপূর্ণ ইঙ্গিত',
+ 'uncheck to allow dropped\nreporters to kick out others':
+ 'ঝরে পরা রিপোর্টারসমূহ অন্যদের বের করে দেওয়ার জন্য আনচেক কর',
+ 'Long form input dialog':
+ 'দীর্ঘ আকারের ডায়লগ ইনপুট',
+ 'Plain prototype labels':
+ 'সাধারণ প্রোটোটাইপ লেবেল',
+
+ 'check to always show slot\ntypes in the input dialog':
+ 'সর্বদা ইনপুট ডায়লগে স্লট এর ধরন দেখানোর জন্য চেক কর',
+ 'uncheck to use the input\ndialog in short form':
+ 'সংক্ষিপ্ত আকারের ইনপুট ডায়লগ ব্যবহারের জন্য আনচেক কর',
+ 'Virtual keyboard':
+ 'ভার্চুয়াল কিবোর্ড',
+ 'uncheck to disable\nvirtual keyboard support\nfor mobile devices':
+ 'মোবাইল ডিভাইসে ভার্চুয়াল কিবোর্ড সহায়তা নিস্ক্রিয় করার জন্য চেক কর',
+ 'check to enable\nvirtual keyboard support\nfor mobile devices':
+ 'মোবাইল ডিভাইসে ভার্চুয়াল কিবোর্ড সহায়তা সক্রিয় করার জন্য চেক কর',
+ 'Input sliders':
+ 'ইনপুট স্লাইডার',
+ 'uncheck to disable\ninput sliders for\nentry fields':
+ 'এন্ট্রি ফিল্ডে ইনপুট স্লাইডার নিস্ক্রিয় করার জন্য আনচেক কর',
+ 'check to enable\ninput sliders for\nentry fields':
+ 'এন্ট্রি ফিল্ডে ইনপুট স্লাইডার সক্রিয় করার জন্য চেক কর',
+ 'Clicking sound':
+ 'ক্লিক শব্দ',
+ 'Turbo mode':
+ 'টার্বো মোড',
+ 'Flat design':
+ 'ফ্লাট ডিজাইন',
+ 'uncheck to turn\nblock clicking\nsound off':
+ 'ক্লিক শব্দ বন্ধ করার জন্য আনচেক কর',
+ 'check to turn\nblock clicking\nsound on':
+ 'ক্লিক শব্দ চালু করার জন্য চেক কর',
+ 'Animations':
+ 'প্রাণবন্ততা',
+ 'uncheck to disable\nIDE animations':
+ 'IDE প্রাণবন্ততা বন্ধ করার জন্য আনচেক কর',
+ 'check to enable\nIDE animations':
+ 'IDE প্রাণবন্ততা চালু করার জন্য চেক কর',
+ 'Thread safe scripts':
+ 'নির্বিঘ্ন বর্ণনা যোগসূত্র',
+ 'uncheck to allow\nscript reentrancy':
+ 'বর্ণনা পুনপ্রবেশ অনুমোদন করার জন্য আনচেক কর',
+ 'check to disallow\nscript reentrancy':
+ 'বর্ণনা পুনপ্রবেশ অনুমোদন না করার জন্য চেক কর',
+ 'Prefer smooth animations':
+ 'মসৃণ অ্যানিমেশন পছন্দ কর',
+ 'Flat line ends':
+ 'ফ্লাট লাইনের সমাপ্তি',
+ 'Codification support':
+ 'সারসংগ্রহ সমর্থন',
+
+ // inputs
+ 'with inputs':
+ 'ইনপুট দ্বারা',
+ 'input names:':
+ 'ইনপুট নাম:',
+ 'Input Names:':
+ 'ইনপুট নাম:',
+ 'input list:':
+ 'ইনপুট তালিকা:',
+
+ // context menus:
+ 'help':
+ 'সাহায্য কর',
+
+ // blocks:
+ 'help...':
+ 'সাহায্য কর...',
+ 'relabel...':
+ 'নামান্তর কর...',
+ 'duplicate':
+ 'এটির প্রতিলিপি তৈরী কর',
+ 'make a copy\nand pick it up':
+ 'এটি কপি কর এবং নির্বাচন কর',
+ 'only duplicate this block':
+ 'শুধুমাত্র এই ব্লকের প্রতিলিপি তৈরী কর',
+ 'delete':
+ 'এটি মুছে ফেল',
+ 'script pic...':
+ 'স্ক্রিপ্ট ছবি...',
+ 'open a new window\nwith a picture of this script':
+ 'এই স্ক্রিপ্টর ছবি দিয়ে একটা নতুন উইন্ডো খোল',
+ 'ringify':
+ 'পরিবেষ্টন কর',
+ 'unringify':
+ 'পরিবেষ্টনমুক্ত করা',
+
+ // custom blocks:
+ 'delete block definition...':
+ 'ব্লক সংজ্ঞা মুছে ফেল',
+ 'edit...':
+ 'সম্পাদন কর...',
+
+ // sprites:
+ 'edit':
+ 'সম্পাদন কর',
+ 'export...':
+ 'প্রেরণ কর...',
+
+ // stage:
+ 'show all':
+ 'সব প্রদর্শন কর',
+
+ // scripting area
+ 'clean up':
+ 'পরিষ্কার-পরিচ্ছন্ন কর',
+ 'arrange scripts\nvertically':
+ 'উল্লম্বভাবে \nস্ক্রিপ্টস সুবিন্যস্ত কর',
+ 'add comment':
+ 'মন্তব্য যোগ কর',
+ 'make a block...':
+ 'একটি ব্লক তৈরী কর...',
+
+ // costumes
+ 'rename':
+ 'নতুন নামকরণ কর',
+ 'export':
+ 'প্রেরণ কর',
+ 'rename costume':
+ 'পরিচ্ছদ নতুন নামকরণ কর',
+
+ // sounds
+ 'Play sound':
+ 'শব্দ বাজাও',
+ 'Stop sound':
+ 'শব্দ বন্ধ কর',
+ 'Stop':
+ 'বন্ধ কর',
+ 'Play':
+ 'বাজাও',
+ 'rename sound':
+ 'শব্দ নতুন নামকরণ কর',
+
+ // dialogs
+ // buttons
+ 'OK':
+ 'ঠিক আছে',
+ 'Ok':
+ 'ঠিক আছে',
+ 'Cancel':
+ 'বাতিল কর',
+ 'Yes':
+ 'হ্যাঁ',
+ 'No':
+ 'না',
+ 'Open':
+ 'খোল',
+ 'Cloud':
+ 'ক্লাউড',
+ 'Browser':
+ 'ব্রাউজার',
+ 'Examples':
+ 'নমুনা প্রকল্প',
+
+ // help
+ 'Help':
+ 'সাহায্য কর',
+
+ // Project Manager
+ 'Untitled':
+ 'শিরোনামহীন',
+ 'Open Project':
+ 'সংরক্ষিত কোন প্রকল্প নির্বাচন করে খোল',
+ '(empty)':
+ '(খালি)',
+ 'Saved!':
+ 'সংরক্ষিত হয়েছে!',
+ 'Delete Project':
+ 'প্রকল্প মুছে ফেল',
+ 'Are you sure you want to delete':
+ 'তুমি কি মুছে দেওয়ার বিষয়ে নিশ্চিত?',
+ 'rename...':
+ 'নতুন নামকরণ কর...',
+
+ // costume editor
+ 'Costume Editor':
+ 'পরিচ্ছদ সম্পাদনকারী',
+ 'click or drag crosshairs to move the rotation center':
+ 'ঘূর্ণন কেন্দ্র সরাতে crosshairs ক্লিক কর অথবা টেনে আন',
+
+ // project notes
+ 'Project Notes':
+ 'প্রকল্প সম্পর্কিযে কোনত মন্তব্য',
+
+ // new project
+ 'New Project':
+ 'নতুন প্রকল্প',
+ 'Replace the current project with a new one?':
+ 'বর্তমান প্রকল্পটি নতুন প্রকল্প দ্বারা প্রতিস্থাপন করতে চাও?',
+
+ // save project
+ 'Save Project As...':
+ 'প্রকল্পটি নামান্তর কর...',
+
+ // export blocks
+ 'Export blocks':
+ 'ব্লক এক্সপোর্ট কর',
+ 'Import blocks':
+ 'ব্লক ইম্পোর্ট কর',
+ 'this project doesn\'t have any\ncustom global blocks yet':
+ 'এই প্রকল্পের জন্য এখনো কোনো কাস্টম গ্লোবাল ব্লক নেই',
+ 'select':
+ 'নির্বাচন কর',
+ 'all':
+ 'সকল',
+ 'none':
+ 'কোনোটাই না',
+
+ // variable dialog
+ 'for all sprites':
+ 'সব স্পাইটের জন্য',
+ 'for this sprite only':
+ 'শুধুমাত্র এই স্পাইটের জন্য',
+
+ // block dialog
+ 'Change block':
+ 'ব্লক পরিবর্তন ব্লক',
+ 'Command':
+ 'আদেশ',
+ 'Reporter':
+ 'প্রতিবেদক',
+ 'Predicate':
+ 'সূত্রের বিধেয়',
+
+ // block editor
+ 'Block Editor':
+ 'ব্লক সম্পাদনকারী',
+ 'Apply':
+ 'প্রয়োগ কর',
+
+ // block deletion dialog
+ 'Delete Custom Block':
+ 'কাস্টম ব্লক মুছে দাও',
+ 'block deletion dialog text':
+ 'তুমি কি এই কাস্টম ব্লক এবং সংশ্লিষ্ট সকল উপাদান মুছে দেওয়ার জন্য নিশ্চিত?',
+
+ // input dialog
+ 'Create input name':
+ 'ইনপুট নাম তৈরি কর',
+ 'Edit input name':
+ 'ইনপুট নাম সম্পাদনা কর',
+ 'Edit label fragment':
+ 'লেবেল টুকরা সম্পাদনা কর',
+ 'Title text':
+ 'শিরোনাম পাঠ্য',
+ 'Input name':
+ 'ইনপুট নাম',
+ 'Delete':
+ 'মুছে ফেল',
+ 'Object':
+ 'লক্ষ্যবস্তু',
+ 'Number':
+ 'সংখ্যা',
+ 'Text':
+ 'বর্ণ',
+ 'List':
+ 'তালিকা',
+ 'Any type':
+ 'যেকোন প্রকার',
+ 'Boolean (T/F)':
+ 'বুলিয়ান (সত্য/মিথ্যা)',
+ 'Command\n(inline)':
+ 'আদেশ \n(ইনলাইন)',
+ 'Command\n(C-shape)':
+ 'আদেশ \n(C-আকৃতি)',
+ 'Any\n(unevaluated)':
+ 'যেকোন \n(সংখ্যা অনির্ণয় করা)',
+ 'Boolean\n(unevaluated)':
+ 'বুলিয়ান \n(সংখ্যা অনির্ণয় করা)',
+ 'Single input.':
+ 'একক ইনপুট',
+ 'Default Value:':
+ 'ডিফল্ট (অনুপস্থিত)মান:',
+ 'Multiple inputs (value is list of inputs)':
+ 'একাধিক ইনপুট (মান ইনপুট তালিকা)',
+ 'Upvar - make internal variable visible to caller':
+ 'অভ্যন্তরীণ চলক আহ্বানকারীকে দৃশ্যমান কর',
+
+ // About Snap
+ 'About Snap':
+ 'Snap! সম্পর্কিত তথ্য',
+ 'Back...':
+ 'প্রত্যাবর্তন কর...',
+ 'License...':
+ 'লাইসেন্স...',
+ 'Modules...':
+ 'মডিউল...',
+ 'Credits...':
+ 'স্বীকৃতি...',
+ 'Translators...':
+ 'ভাষান্তরিকবৃন্দ',
+ 'License':
+ 'লাইসেন্স',
+ 'current module versions:':
+ 'বর্তমান মডিউল সংস্করণ',
+ 'Contributors':
+ 'সাহায্যকারীবৃন্দ',
+ 'Translations':
+ 'ভাষান্তরসমূহ',
+
+ // variable watchers
+ 'normal':
+ 'স্বাভাবিক',
+ 'large':
+ 'বৃহৎ',
+ 'slider':
+ 'স্লাইডার',
+ 'slider min...':
+ 'স্লাইডার সর্বনিম্ন...',
+ 'slider max...':
+ 'স্লাইডার সর্বোচ্চ...',
+ 'Slider minimum value':
+ 'স্লাইডারের সর্বনিম্ন মান',
+ 'Slider maximum value':
+ 'স্লাইডারের সর্বোচ্চ মান',
+
+ // list watchers
+ 'length: ':
+ 'দৈর্ঘ্য: ',
+
+ // coments
+ 'add comment here...':
+ 'এখানে মন্তব্য যোগ কর',
+
+ // drow downs
+ // directions
+ '(90) right':
+ '(90) ডিগ্রী ডান',
+ '(-90) left':
+ '(-90) ডিগ্রী বামে',
+ '(0) up':
+ '(0) উপরে',
+ '(180) down':
+ '(180) নিচে',
+
+ // collision detection
+ 'mouse-pointer':
+ 'মাউস-পয়েন্টার',
+ 'edge':
+ 'প্রান্ত',
+ 'pen trails':
+ 'কলম ভ্রমণ',
+
+ // costumes
+ 'Turtle':
+ 'কচ্ছপ',
+
+ // graphical effects
+ 'ghost':
+ 'উপচ্ছায়া',
+
+ // keys
+ 'space':
+ 'স্পেসবার',
+ 'up arrow':
+ 'আপ অ্যারো',
+ 'down arrow':
+ 'ডাউন অ্যারো',
+ 'right arrow':
+ 'রাইট অ্যারো',
+ 'left arrow':
+ 'লেফট অ্যারো',
+ 'a':
+ 'a',
+ 'b':
+ 'b',
+ 'c':
+ 'c',
+ 'd':
+ 'd',
+ 'e':
+ 'e',
+ 'f':
+ 'f',
+ 'g':
+ 'g',
+ 'h':
+ 'h',
+ 'i':
+ 'i',
+ 'j':
+ 'j',
+ 'k':
+ 'k',
+ 'l':
+ 'l',
+ 'm':
+ 'm',
+ 'n':
+ 'n',
+ 'o':
+ 'o',
+ 'p':
+ 'p',
+ 'q':
+ 'q',
+ 'r':
+ 'r',
+ 's':
+ 's',
+ 't':
+ 't',
+ 'u':
+ 'u',
+ 'v':
+ 'v',
+ 'w':
+ 'w',
+ 'x':
+ 'x',
+ 'y':
+ 'y',
+ 'z':
+ 'z',
+ '0':
+ '0',
+ '1':
+ '1',
+ '2':
+ '2',
+ '3':
+ '3',
+ '4':
+ '4',
+ '5':
+ '5',
+ '6':
+ '6',
+ '7':
+ '7',
+ '8':
+ '8',
+ '9':
+ '9',
+
+ // messages
+ 'new...':
+ 'নতুন বার্তা লিখ...',
+
+ // math functions
+ 'পরমমান':
+ 'abs',
+ 'sqrt':
+ 'বর্গমূল',
+ 'sin':
+ 'sin',
+ 'cos':
+ 'cos',
+ 'tan':
+ 'tan',
+ 'asin':
+ 'asin',
+ 'acos':
+ 'acos',
+ 'atan':
+ 'atan',
+ 'ln':
+ 'ln',
+ 'e^':
+ 'e^',
+
+ // data types
+ 'number':
+ 'সংখ্যা',
+ 'text':
+ 'বর্ণ',
+ 'Boolean':
+ 'বুলিয়ান',
+ 'list':
+ 'তালিকা',
+ 'command':
+ 'নির্দেশ',
+ 'reporter':
+ 'রিপোর্টার',
+ 'predicate':
+ 'সূত্রের বিধেয়',
+
+ // list indices
+ 'last':
+ 'সর্বশেষ',
+ 'any':
+ 'যেকোনো'
+};
diff --git a/libraries/word-sentence.xml b/libraries/word-sentence.xml index ff2a1a7..050b417 100644 --- a/libraries/word-sentence.xml +++ b/libraries/word-sentence.xml @@ -1 +1 @@ -<blocks app="Snap! 4.0, http://snap.berkeley.edu" version="1"><block-definition s="all but first letter of %'string'" type="reporter" category="operators"><comment x="0" y="0" w="199" collapsed="false">Takes a text string as input, and reports a new text string containing all but the first character of the input.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doWarp"><script><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="string"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportSum"><l>0</l><l>0</l></block></block></block></script></block><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>2</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block s="reportStringSize"><block var="string"/></block></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block s="reportLetter"><block var="i"/><block var="string"/></block></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="all but first word of %'sentence'" type="reporter" category="operators"><comment x="0" y="0" w="223.000001" collapsed="false">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.)</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>bf</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>bf</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportGreaterThan"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><script><block s="doSetVar"><l>bf</l><block s="reportJoinWords"><list><block var="bf"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block var="bf"/></block></script></block></script></block-definition><block-definition s="all but last letter of %'string'" type="reporter" category="operators"><comment x="0" y="0" w="218" collapsed="false">Takes a text string as input, and reports a new text string containing all but the last letter of the input.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doWarp"><script><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="string"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportSum"><l>0</l><l>0</l></block></block></block></script></block><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>1</l></block><block s="doUntil"><block s="reportEquals"><block var="i"/><block s="reportStringSize"><block var="string"/></block></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block s="reportLetter"><block var="i"/><block var="string"/></block></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="all but last word of %'sentence'" type="reporter" category="operators"><comment x="0" y="0" w="212" collapsed="false">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.)</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>bl</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>bl</l><l></l></block><block s="doSetVar"><l>index</l><block s="reportStringSize"><block var="sentence"/></block></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="index"/><l>1</l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportLessThan"><block var="index"/><l>1</l></block><script><block s="doSetVar"><l>bl</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="bl"/></list></block></block><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doReport"><block var="bl"/></block></script></block></script></block-definition><block-definition s="first word of %'sentence'" type="reporter" category="operators"><comment x="0" y="0" w="236" collapsed="false">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.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>first</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>first</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block></script></block><block s="doReport"><block var="first"/></block></script></block></script></block-definition><block-definition s="last letter of %'word'" type="reporter" category="operators"><comment x="0" y="0" w="260" collapsed="false">Takes a text string as input, and reports the last character in the string.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportLetter"><block s="reportStringSize"><block var="word"/></block><block var="word"/></block></block></script></block-definition><block-definition s="last word of %'sentence'" type="reporter" category="operators"><comment x="0" y="0" w="262" collapsed="false">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.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>last</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>last</l><l></l></block><block s="doSetVar"><l>index</l><block s="reportStringSize"><block var="sentence"/></block></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>last</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="last"/></list></block></block><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>last</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="last"/></list></block></block></script></block><block s="doReport"><block var="last"/></block></script></block></script></block-definition><block-definition s="empty word? %'word'" type="predicate" category="operators"><comment x="0" y="0" w="208" collapsed="false">Takes a text string as input, and reports TRUE if the string has no characters in it of any kind, otherwise false.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportEquals"><block s="reportStringSize"><block var="word"/></block><l>0</l></block></block></script></block-definition><block-definition s="empty sentence? %'sentence'" type="predicate" category="operators"><comment x="0" y="0" w="221" collapsed="false">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.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l></list></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportTrue"></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></script></block-definition><block-definition s="word->list %'text'" type="reporter" category="operators"><comment w="160" collapsed="false">Takes a text string as input, and reports a list in which each item is a single character from the string.</comment><header></header><code></code><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>index</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="index"/><block s="reportStringSize"><block var="text"/></block></block><script><block s="doAddToList"><block s="reportLetter"><block var="index"/><block var="text"/></block><block var="result"/></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block-definition></blocks>
\ No newline at end of file +<blocks app="Snap! 4.0, http://snap.berkeley.edu" version="1"><block-definition s="all but first letter of %'string'" type="reporter" category="operators"><comment x="0" y="0" w="199" collapsed="false">Takes a text string as input, and reports a new text string containing all but the first character of the input.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doWarp"><script><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="string"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportSum"><l>0</l><l>0</l></block></block></block></script></block><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>2</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block s="reportStringSize"><block var="string"/></block></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block s="reportLetter"><block var="i"/><block var="string"/></block></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="all but first word of %'sentence'" type="reporter" category="operators"><comment x="0" y="0" w="223.000001" collapsed="false">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.)</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>bf</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>bf</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportGreaterThan"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><script><block s="doSetVar"><l>bf</l><block s="reportJoinWords"><list><block var="bf"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block var="bf"/></block></script></block></script></block-definition><block-definition s="all but last letter of %'string'" type="reporter" category="operators"><comment x="0" y="0" w="218" collapsed="false">Takes a text string as input, and reports a new text string containing all but the last letter of the input.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doWarp"><script><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="string"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportSum"><l>0</l><l>0</l></block></block></block></script></block><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>1</l></block><block s="doUntil"><block s="reportEquals"><block var="i"/><block s="reportStringSize"><block var="string"/></block></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block s="reportLetter"><block var="i"/><block var="string"/></block></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="all but last word of %'sentence'" type="reporter" category="operators"><comment x="0" y="0" w="212" collapsed="false">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.)</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>bl</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>bl</l><l></l></block><block s="doSetVar"><l>index</l><block s="reportStringSize"><block var="sentence"/></block></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="index"/><l>1</l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportLessThan"><block var="index"/><l>1</l></block><script><block s="doSetVar"><l>bl</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="bl"/></list></block></block><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doReport"><block var="bl"/></block></script></block></script></block-definition><block-definition s="first word of %'sentence'" type="reporter" category="operators"><comment x="0" y="0" w="236" collapsed="false">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.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>first</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>first</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block></script></block><block s="doReport"><block var="first"/></block></script></block></script></block-definition><block-definition s="last letter of %'word'" type="reporter" category="operators"><comment x="0" y="0" w="260" collapsed="false">Takes a text string as input, and reports the last character in the string.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportLetter"><block s="reportStringSize"><block var="word"/></block><block var="word"/></block></block></script></block-definition><block-definition s="last word of %'sentence'" type="reporter" category="operators"><comment x="0" y="0" w="262" collapsed="false">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.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>last</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>last</l><l></l></block><block s="doSetVar"><l>index</l><block s="reportStringSize"><block var="sentence"/></block></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>last</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="last"/></list></block></block><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>last</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="last"/></list></block></block></script></block><block s="doReport"><block var="last"/></block></script></block></script></block-definition><block-definition s="empty word? %'word'" type="predicate" category="operators"><comment x="0" y="0" w="208" collapsed="false">Takes a text string as input, and reports TRUE if the string has no characters in it of any kind, otherwise false.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportEquals"><block s="reportStringSize"><block var="word"/></block><l>0</l></block></block></script></block-definition><block-definition s="empty sentence? %'sentence'" type="predicate" category="operators"><comment x="0" y="0" w="221" collapsed="false">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.</comment><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l></list></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportTrue"></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></script></block-definition><block-definition s="word $arrowRight list %'text'" type="reporter" category="operators"><comment w="160" collapsed="false">Takes a text string as input, and reports a list in which each item is a single character from the string.</comment><header></header><code></code><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>index</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="index"/><block s="reportStringSize"><block var="text"/></block></block><script><block s="doAddToList"><block s="reportLetter"><block var="index"/><block var="text"/></block><block var="result"/></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block-definition></blocks>
\ No newline at end of file @@ -61,7 +61,7 @@ PushButtonMorph, SyntaxElementMorph, Color, Point, WatcherMorph, StringMorph, SpriteMorph, ScrollFrameMorph, CellMorph, ArrowMorph, MenuMorph, snapEquals, Morph, isNil, localize, MorphicPreferences*/ -modules.lists = '2014-Jun-04'; +modules.lists = '2014-July-14'; var List; var ListWatcherMorph; @@ -132,19 +132,19 @@ List.prototype.cons = function (car, cdr) { }; List.prototype.cdr = function () { - function helper(i) { - if (i > this.contents.length) { - return new List(); - } - return this.cons(this.at(i), helper.call(this, i + 1)); - } + var result, i; if (this.isLinked) { return this.rest || new List(); } if (this.contents.length < 2) { return new List(); } - return helper.call(this, 2); + + result = new List(); + for (i = this.contents.length; i > 1; i -= 1) { + result = this.cons(this.at(i), result); + } + return result; }; // List array setters: @@ -193,32 +193,41 @@ List.prototype.clear = function () { List.prototype.length = function () { if (this.isLinked) { - return (this.first === undefined ? 0 : 1) - + (this.rest ? this.rest.length() : 0); + var pair = this, + result = 0; + while (pair && pair.isLinked) { + result += 1; + pair = pair.rest; + } + return result + (pair ? pair.contents.length : 0); } return this.contents.length; }; List.prototype.at = function (index) { - var value, idx = +index; - if (this.isLinked) { - return idx === 1 ? this.first : this.rest.at(idx - 1); + var value, idx = +index, pair = this; + while (pair.isLinked) { + if (idx > 1) { + pair = pair.rest; + idx -= 1; + } else { + return pair.first; + } } - value = this.contents[idx - 1]; + value = pair.contents[idx - 1]; return isNil(value) ? '' : value; }; List.prototype.contains = function (element) { - if (this.isLinked) { + var pair = this; + while (pair.isLinked) { if (snapEquals(this.first, element)) { return true; } - if (this.rest instanceof List) { - return this.rest.contains(element); - } + pair = pair.rest; } // in case I'm arrayed - return this.contents.some(function (any) { + return pair.contents.some(function (any) { return snapEquals(any, element); }); }; @@ -233,11 +242,23 @@ List.prototype.asArray = function () { List.prototype.asText = function () { var result = '', - length = this.length(), + length, element, + pair = this, i; + while (pair.isLinked) { + element = this.first; + if (element instanceof List) { + result = result.concat(element.asText()); + } else { + element = isNil(element) ? '' : element.toString(); + result = result.concat(element); + } + pair = pair.rest; + } + length = pair.length(); for (i = 1; i <= length; i += 1) { - element = this.at(i); + element = pair.at(i); if (element instanceof List) { result = result.concat(element.asText()); } else { @@ -250,13 +271,18 @@ List.prototype.asText = function () { List.prototype.becomeArray = function () { if (this.isLinked) { - var next = this; + var next = this, i; this.contents = []; - while (next instanceof List && (next.length() > 0)) { - this.contents.push(next.at(1)); - next = next.cdr(); + while (next.isLinked) { + this.contents.push(next.first); + next = next.rest; + } + for (i = 1; i <= next.contents.length; i += 1) { + this.contents.push(next.at(i)); } this.isLinked = false; + this.first = null; + this.rest = null; } }; @@ -278,37 +304,47 @@ List.prototype.becomeLinked = function () { // List testing List.prototype.equalTo = function (other) { - var i; + var myself = this, it = other, i, j, loopcount; if (!(other instanceof List)) { return false; } - if ((!this.isLinked) && (!other.isLinked)) { - if (this.length() === 0 && (other.length() === 0)) { - return true; - } - if (this.length() !== other.length()) { + + while (myself.isLinked && it.isLinked) { + if (!snapEquals(myself.first, it.first)) { return false; } - for (i = 0; i < this.length(); i += 1) { - if (!snapEquals(this.contents[i], other.contents[i])) { - return false; - } - } - return true; + myself = myself.rest; + it = it.rest; } - if ((this.isLinked) && (other.isLinked)) { - if (snapEquals(this.at(1), other.at(1))) { - return this.cdr().equalTo(other.cdr()); + + if (it.isLinked) { + i = it; + it = myself; + myself = i; + } + + j = 0; + while (myself.isLinked) { + if (!snapEquals(myself.first, it.contents[j])) { + return false; } - return false; + myself = myself.rest; + j += 1; } - if (this.length() !== other.length()) { + + i = 0; + if (myself.contents.length !== (it.contents.length - j)) { return false; } - for (i = 1; i <= this.length(); i += 1) { - if (!snapEquals(this.at(i), other.at(i))) { + + loopcount = myself.contents.length; + while (loopcount > 0) { + loopcount -= 1; + if (!snapEquals(myself.contents[i], it.contents[j])) { return false; } + i += 1; + j += 1; } return true; }; @@ -42,7 +42,7 @@ /*global modules, contains*/ -modules.locale = '2014-Jun-04'; +modules.locale = '2014-July-14'; // Global stuff @@ -225,7 +225,7 @@ SnapTranslator.dict.cs = { }; SnapTranslator.dict.zh = { - // translations meta information + // meta information 'language_name': '简体中文', 'language_translator': @@ -237,7 +237,7 @@ SnapTranslator.dict.zh = { }; SnapTranslator.dict.eo = { - // translations meta information + // meta information 'language_name': 'Esperanto', 'language_translator': @@ -249,7 +249,7 @@ SnapTranslator.dict.eo = { }; SnapTranslator.dict.fr = { - // translations meta information + // meta information 'language_name': 'Fran\u00E7ais', 'language_translator': @@ -261,6 +261,7 @@ SnapTranslator.dict.fr = { }; SnapTranslator.dict.si = { + // meta information 'language_name': 'Sloven\u0161\u010Dina', 'language_translator': @@ -272,6 +273,7 @@ SnapTranslator.dict.si = { }; SnapTranslator.dict.ru = { + // meta information 'language_name': 'Русский', 'language_translator': @@ -283,6 +285,7 @@ SnapTranslator.dict.ru = { }; SnapTranslator.dict.es = { + // meta information 'language_name': 'Espa\u00F1ol', 'language_translator': @@ -294,6 +297,7 @@ SnapTranslator.dict.es = { }; SnapTranslator.dict.nl = { + // meta information 'language_name': 'Nederlands', 'language_translator': @@ -305,6 +309,7 @@ SnapTranslator.dict.nl = { }; SnapTranslator.dict.pl = { + // meta information 'language_name': 'Polski', 'language_translator': @@ -316,6 +321,7 @@ SnapTranslator.dict.pl = { }; SnapTranslator.dict.tw = { + // meta information 'language_name': '繁體中文', 'language_translator': @@ -327,6 +333,7 @@ SnapTranslator.dict.tw = { }; SnapTranslator.dict.no = { + // meta information 'language_name': 'Norsk', 'language_translator': @@ -338,6 +345,7 @@ SnapTranslator.dict.no = { }; SnapTranslator.dict.dk = { + // meta information 'language_name': 'Dansk', 'language_translator': @@ -349,6 +357,7 @@ SnapTranslator.dict.dk = { }; SnapTranslator.dict.el = { + // meta information 'language_name': 'Ελληνικά', 'language_translator': @@ -360,6 +369,7 @@ SnapTranslator.dict.el = { }; SnapTranslator.dict.ca = { + // meta information 'language_name': 'Català', 'language_translator': @@ -394,3 +404,14 @@ SnapTranslator.dict.pt_BR = { '2014-04-20' }; +SnapTranslator.dict.bn = { + // meta information + 'language_name': + 'বাংলা', + 'language_translator': + 'Dr. Mokter Hossain', + 'translator_e-mail': + 'mokter@gmail.com', + 'last_changed': + '2014-07-02' +}; @@ -1035,7 +1035,7 @@ /*global window, HTMLCanvasElement, getMinimumFontHeight, FileReader, Audio, FileList, getBlurredShadowSupport*/ -var morphicVersion = '2014-May-20'; +var morphicVersion = '2014-July-11'; var modules = {}; // keep track of additional loaded modules var useBlurredShadows = getBlurredShadowSupport(); // check for Chrome-bug @@ -4495,9 +4495,9 @@ CursorMorph.prototype.processKeyPress = function (event) { } if (event.keyCode) { // Opera doesn't support charCode if (event.ctrlKey) { - this.ctrl(event.keyCode); + this.ctrl(event.keyCode, event.shiftKey); } else if (event.metaKey) { - this.cmd(event.keyCode); + this.cmd(event.keyCode, event.shiftKey); } else { this.insert( String.fromCharCode(event.keyCode), @@ -4506,9 +4506,9 @@ CursorMorph.prototype.processKeyPress = function (event) { } } else if (event.charCode) { // all other browsers if (event.ctrlKey) { - this.ctrl(event.charCode); + this.ctrl(event.charCode, event.shiftKey); } else if (event.metaKey) { - this.cmd(event.keyCode); + this.cmd(event.charCode, event.shiftKey); } else { this.insert( String.fromCharCode(event.charCode), @@ -4525,13 +4525,13 @@ CursorMorph.prototype.processKeyDown = function (event) { var shift = event.shiftKey; this.keyDownEventUsed = false; if (event.ctrlKey) { - this.ctrl(event.keyCode); + this.ctrl(event.keyCode, event.shiftKey); // notify target's parent of key event this.target.escalateEvent('reactToKeystroke', event); return; } if (event.metaKey) { - this.cmd(event.keyCode); + this.cmd(event.keyCode, event.shiftKey); // notify target's parent of key event this.target.escalateEvent('reactToKeystroke', event); return; @@ -4746,8 +4746,10 @@ CursorMorph.prototype.insert = function (aChar, shiftKey) { } }; -CursorMorph.prototype.ctrl = function (aChar) { - if ((aChar === 97) || (aChar === 65)) { +CursorMorph.prototype.ctrl = function (aChar, shiftKey) { + if (aChar === 64 || (aChar === 65 && shiftKey)) { + this.insert('@'); + } else if (aChar === 65) { this.target.selectAll(); } else if (aChar === 90) { this.undo(); @@ -4759,17 +4761,34 @@ CursorMorph.prototype.ctrl = function (aChar) { this.insert('['); } else if (aChar === 93) { this.insert(']'); - } else if (aChar === 64) { - this.insert('@'); + } else if (!isNil(this.target.receiver)) { + if (aChar === 68) { + this.target.doIt(); + } else if (aChar === 73) { + this.target.inspectIt(); + } else if (aChar === 80) { + this.target.showIt(); + } } + }; -CursorMorph.prototype.cmd = function (aChar) { - if (aChar === 65) { +CursorMorph.prototype.cmd = function (aChar, shiftKey) { + if (aChar === 64 || (aChar === 65 && shiftKey)) { + this.insert('@'); + } else if (aChar === 65) { this.target.selectAll(); } else if (aChar === 90) { this.undo(); + } else if (!isNil(this.target.receiver)) { + if (aChar === 68) { + this.target.doIt(); + } else if (aChar === 73) { + this.target.inspectIt(); + } else if (aChar === 80) { + this.target.showIt(); + } } }; @@ -6141,6 +6160,7 @@ InspectorMorph.prototype.init = function (target) { this.currentProperty = null; this.showing = 'attributes'; this.markOwnProperties = false; + this.hasUserEditedDetails = false; // initialize inherited properties: InspectorMorph.uber.init.call(this); @@ -6157,6 +6177,7 @@ InspectorMorph.prototype.init = function (target) { this.edge = MorphicPreferences.isFlat ? 1 : 5; this.color = new Color(60, 60, 60); this.borderColor = new Color(95, 95, 95); + this.fps = 25; this.drawNew(); // panes: @@ -6181,6 +6202,36 @@ InspectorMorph.prototype.setTarget = function (target) { this.buildPanes(); }; +InspectorMorph.prototype.updateCurrentSelection = function () { + var val, txt, cnts, + sel = this.list.selected, + currentTxt = this.detail.contents.children[0], + root = this.root(); + + if (root && + (root.keyboardReceiver instanceof CursorMorph) && + (root.keyboardReceiver.target === currentTxt)) { + this.hasUserEditedDetails = true; + return; + } + if (isNil(sel) || this.hasUserEditedDetails) {return; } + val = this.target[sel]; + this.currentProperty = val; + if (isNil(val)) { + txt = 'NULL'; + } else if (isString(val)) { + txt = val; + } else { + txt = val.toString(); + } + if (currentTxt.text === txt) {return; } + cnts = new TextMorph(txt); + cnts.isEditable = true; + cnts.enableSelecting(); + cnts.setReceiver(this.target); + this.detail.setContents(cnts); +}; + InspectorMorph.prototype.buildPanes = function () { var attribs = [], property, myself = this, ctrl, ev, doubleClickAction; @@ -6248,23 +6299,9 @@ InspectorMorph.prototype.buildPanes = function () { doubleClickAction ); - this.list.action = function (selected) { - var val, txt, cnts; - if (selected === undefined) {return; } - val = myself.target[selected]; - myself.currentProperty = val; - if (val === null) { - txt = 'NULL'; - } else if (isString(val)) { - txt = val; - } else { - txt = val.toString(); - } - cnts = new TextMorph(txt); - cnts.isEditable = true; - cnts.enableSelecting(); - cnts.setReceiver(myself.target); - myself.detail.setContents(cnts); + this.list.action = function () { + myself.hasUserEditedDetails = false; + myself.updateCurrentSelection(); }; this.list.hBar.alpha = 0.6; @@ -6512,6 +6549,7 @@ InspectorMorph.prototype.save = function () { try { // this.target[prop] = evaluate(txt); this.target.evaluateString('this.' + prop + ' = ' + txt); + this.hasUserEditedDetails = false; if (this.target.drawNew) { this.target.changed(); this.target.drawNew(); @@ -6582,6 +6620,17 @@ InspectorMorph.prototype.removeProperty = function () { } }; +// InspectorMorph stepping + +InspectorMorph.prototype.step = function () { + this.updateCurrentSelection(); + var lbl = this.target.toString(); + if (this.label.text === lbl) {return; } + this.label.text = lbl; + this.label.drawNew(); + this.fixLayout(); +}; + // MenuMorph /////////////////////////////////////////////////////////// // MenuMorph: referenced constructors @@ -6844,6 +6893,9 @@ MenuMorph.prototype.popup = function (world, pos) { if (world.activeMenu) { world.activeMenu.destroy(); } + if (this.items.length < 1 && !this.title) { // don't show empty menus + return; + } world.add(this); world.activeMenu = this; this.fullChanged(); @@ -7924,7 +7976,7 @@ TextMorph.prototype.inspectIt = function () { var result = this.receiver.evaluateString(this.selection()), world = this.world(), inspector; - if (result !== null) { + if (isObject(result)) { inspector = new InspectorMorph(result); inspector.setPosition(world.hand.position()); inspector.keepWithin(world); @@ -9046,6 +9098,7 @@ ListMorph.prototype.buildListContents = function () { }; ListMorph.prototype.select = function (item, trigger) { + if (isNil(item)) {return; } this.selected = item; this.active = trigger; if (this.action) { @@ -125,7 +125,7 @@ PrototypeHatBlockMorph*/ // Global stuff //////////////////////////////////////////////////////// -modules.objects = '2014-Jun-06'; +modules.objects = '2014-July-11'; var SpriteMorph; var StageMorph; @@ -2280,6 +2280,11 @@ SpriteMorph.prototype.freshPalette = function (category) { } }); + //layout + + palette.scrollX(palette.padding); + palette.scrollY(palette.padding); + Morph.prototype.trackChanges = oldFlag; return palette; }; @@ -2582,7 +2587,7 @@ SpriteMorph.prototype.userMenu = function () { menu = new MenuMorph(this); if (ide && ide.isAppMode) { - menu.addItem('help', 'nop'); + // menu.addItem('help', 'nop'); return menu; } menu.addItem("duplicate", 'duplicate'); @@ -4638,6 +4643,9 @@ StageMorph.prototype.fireKeyEvent = function (key) { if (evt === 'ctrl f') { return this.parentThatIsA(IDE_Morph).currentSprite.searchBlocks(); } + if (evt === 'ctrl n') { + return this.parentThatIsA(IDE_Morph).createNewProject(); + } if (evt === 'ctrl o') { return this.parentThatIsA(IDE_Morph).openProjectsBrowser(); } @@ -5172,7 +5180,7 @@ StageMorph.prototype.userMenu = function () { myself = this; if (ide && ide.isAppMode) { - menu.addItem('help', 'nop'); + // menu.addItem('help', 'nop'); return menu; } menu.addItem("edit", 'edit'); @@ -83,7 +83,7 @@ ArgLabelMorph, localize, XML_Element, hex_sha512*/ // Global stuff //////////////////////////////////////////////////////// -modules.threads = '2014-Jun-05'; +modules.threads = '2014-July-11'; var ThreadManager; var Process; @@ -673,11 +673,13 @@ Process.prototype.doYield = function () { // Process Exception Handling Process.prototype.handleError = function (error, element) { + var m = element; this.stop(); this.errorFlag = true; this.topBlock.addErrorHighlight(); - (element || this.topBlock).showBubble( - (element ? '' : 'Inside: ') + if (isNil(m) || isNil(m.world())) {m = this.topBlock; } + m.showBubble( + (m === element ? '' : 'Inside: ') + error.name + '\n' + error.message @@ -1057,7 +1059,6 @@ Process.prototype.evaluateCustomBlock = function () { } }; - // Process variables primitives Process.prototype.doDeclareVariables = function (varNames) { @@ -2234,14 +2235,14 @@ Process.prototype.getObjectsNamed = function (name, thisObj, stageObj) { }; Process.prototype.doFaceTowards = function (name) { - var thisObj = this.homeContext.receiver, + var thisObj = this.blockReceiver(), thatObj; if (thisObj) { if (this.inputOption(name) === 'mouse-pointer') { thisObj.faceToXY(this.reportMouseX(), this.reportMouseY()); } else { - thatObj = this.getOtherObject(name, thisObj); + thatObj = this.getOtherObject(name, this.homeContext.receiver); if (thatObj) { thisObj.faceToXY( thatObj.xPosition(), @@ -2253,14 +2254,14 @@ Process.prototype.doFaceTowards = function (name) { }; Process.prototype.doGotoObject = function (name) { - var thisObj = this.homeContext.receiver, + var thisObj = this.blockReceiver(), thatObj; if (thisObj) { if (this.inputOption(name) === 'mouse-pointer') { thisObj.gotoXY(this.reportMouseX(), this.reportMouseY()); } else { - thatObj = this.getOtherObject(name, thisObj); + thatObj = this.getOtherObject(name, this.homeContext.receiver); if (thatObj) { thisObj.gotoXY( thatObj.xPosition(), @@ -1 +1 @@ -<blocks app="Snap! 4.0, http://snap.berkeley.edu" version="1"><block-definition s="map %'function' over %'lists'" type="reporter" category="lists"><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>mapone</l><l>mapmany</l></list></block><block s="doSetVar"><l>mapone</l><block s="reifyScript"><script><block s="doIf"><custom-block s="empty? %l"><block var="data"/></custom-block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block s="evaluate"><block var="mapone"/><list><block s="reportCDR"><block var="data"/></block></list></block></block></block></script><list><l>data</l></list></block></block><block s="doSetVar"><l>mapmany</l><block s="reifyScript"><script><block s="doIf"><custom-block s="empty? %l"><block s="reportListItem"><l>1</l><block var="data lists"/></block></custom-block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="function"/><custom-block s="map %repRing over %mult%l"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><list><block var="data lists"/></list></custom-block></block><block s="evaluate"><block var="mapmany"/><list><custom-block s="map %repRing over %mult%l"><block s="reifyReporter"><autolambda><block s="reportCDR"><l/></block></autolambda><list></list></block><list><block var="data lists"/></list></custom-block></list></block></block></block></script><list><l>data lists</l></list></block></block><block s="doIfElse"><custom-block s="empty? %l"><block s="reportCDR"><block var="lists"/></block></custom-block><script><block s="doReport"><block s="evaluate"><block var="mapone"/><list><block s="reportListItem"><l>1</l><block var="lists"/></block></list></block></block></script><script><block s="doReport"><block s="evaluate"><block var="mapmany"/><list><block var="lists"/></list></block></block></script></block></script></block></script></block-definition><block-definition s="empty? %'data'" type="predicate" category="lists"><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportEquals"><block var="data"/><block s="reportNewList"><list></list></block></block></block></script></block-definition><block-definition s="keep items such that %'pred' from %'data'" type="reporter" category="lists"><inputs><input type="%predRing"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><custom-block s="empty? %l"><block var="data"/></custom-block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIfElse"><block s="evaluate"><block var="pred"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="data"/></block><custom-block s="keep items such that %predRing from %l"><block var="pred"/><block s="reportCDR"><block var="data"/></block></custom-block></block></block></script><script><block s="doReport"><custom-block s="keep items such that %predRing from %l"><block var="pred"/><block s="reportCDR"><block var="data"/></block></custom-block></block></script></block></script></block></script></block-definition><block-definition s="combine with %'function' items of %'data'" type="reporter" category="lists"><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><custom-block s="empty? %l"><block s="reportCDR"><block var="data"/></block></custom-block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="data"/></block></block></script></block><block s="doReport"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><l>1</l><block var="data"/></block><custom-block s="combine with %repRing items of %l"><block var="function"/><block s="reportCDR"><block var="data"/></block></custom-block></list></block></block></script></block></script></block-definition><block-definition s="if %'test' then %'true' else %'false'" type="reporter" category="control"><inputs><input type="%b"></input><input type="%anyUE"></input><input type="%anyUE"></input></inputs><script><block s="doIfElse"><block var="test"/><script><block s="doReport"><block s="evaluate"><block var="true"/><list></list></block></block></script><script><block s="doReport"><block s="evaluate"><block var="false"/><list></list></block></block></script></block></script></block-definition><block-definition s="for %'i' = %'start' to %'end' %'action'" type="command" category="control"><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">10</input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>step</l><l>tester</l></list></block><block s="doIfElse"><block s="reportGreaterThan"><block var="start"/><block var="end"/></block><script><block s="doSetVar"><l>step</l><l>-1</l></block><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportLessThan"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block></script><script><block s="doSetVar"><l>step</l><l>1</l></block><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportGreaterThan"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block></script></block><block s="doSetVar"><l>i</l><block var="start"/></block><block s="doUntil"><block s="evaluate"><block var="tester"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block><block s="doChangeVar"><l>i</l><block var="step"/></block></script></block></script></block-definition><block-definition s="join words %'words'" type="reporter" category="operators"><inputs><input type="%mult%txt"></input></inputs><script><block s="doWarp"><script><block s="doIf"><custom-block s="empty? %l"><block s="reportCDR"><block var="words"/></block></custom-block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="words"/></block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportListItem"><l>1</l><block var="words"/></block><block s="reportJoinWords"><list><l> </l><block s="evaluate"><block s="reifyReporter"><autolambda><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></autolambda><list></list></block><list></list></block></list></block></list></block></block></script></block></script></block-definition><block-definition s="list->sentence %'data'" type="reporter" category="operators"><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doReport"><custom-block s="combine with %repRing items of %l"><block s="reifyReporter"><autolambda><custom-block s="join words %mult%txt"><list><l></l><l></l></list></custom-block></autolambda><list></list></block><block var="data"/></custom-block></block></script></block></script></block-definition><block-definition s="sentence->list %'text'" type="reporter" category="operators"><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l><l>thisword</l><l>emptyword</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>thisword</l><l></l></block><block s="doSetVar"><l>emptyword</l><l></l></block><custom-block s="for %upvar = %n to %n %cs"><l>i</l><l>1</l><block s="reportStringSize"><block var="text"/></block><script><block s="doIfElse"><block s="reportEquals"><block s="reportLetter"><block var="i"/><block var="text"/></block><l> </l></block><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="thisword"/><block var="emptyword"/></block></block><script><block s="doAddToList"><block var="thisword"/><block var="result"/></block><block s="doSetVar"><l>thisword</l><block var="emptyword"/></block></script></block></script><script><block s="doSetVar"><l>thisword</l><block s="reportJoinWords"><list><block var="thisword"/><block s="reportLetter"><block var="i"/><block var="text"/></block></list></block></block></script></block></script></custom-block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="thisword"/><block var="emptyword"/></block></block><script><block s="doAddToList"><block var="thisword"/><block var="result"/></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="catch %'tag' %'action'" type="command" category="control"><inputs><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doCallCC"><block s="reifyScript"><script><block s="doSetVar"><l>tag</l><block var="cont"/></block><block s="doRun"><block var="action"/><list></list></block></script><list><l>cont</l></list></block></block></script></block-definition><block-definition s="throw %'cont'" type="command" category="control"><inputs><input type="%s">catchtag</input></inputs><script><block s="doRun"><block var="cont"/><list></list></block></script></block-definition><block-definition s="catch %'tag' %'value'" type="reporter" category="control"><inputs><input type="%upvar"></input><input type="%anyUE"></input></inputs><script><block s="doCallCC"><block s="reifyScript"><script><block s="doSetVar"><l>tag</l><block var="cont"/></block><block s="doReport"><block s="evaluate"><block var="value"/><list></list></block></block></script><list><l>cont</l></list></block></block></script></block-definition><block-definition s="throw %'tag' %'value'" type="command" category="control"><inputs><input type="%s">catchtag</input><input type="%s"></input></inputs><script><block s="doRun"><block var="tag"/><list><block var="value"/></list></block></script></block-definition><block-definition s="for each %'item' of %'data' %'action'" type="command" category="lists"><inputs><input type="%upvar"></input><input type="%l"></input><input type="%cs"></input></inputs><script><block s="doUntil"><custom-block s="empty? %l"><block var="data"/></custom-block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><l>1</l><block var="data"/></block></block><block s="doRun"><block var="action"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block s="doSetVar"><l>data</l><block s="reportCDR"><block var="data"/></block></block></script></block></script></block-definition></blocks> +<blocks app="Snap! 4.0, http://snap.berkeley.edu" version="1"><block-definition s="map %'function' over %'lists'" type="reporter" category="lists"><header></header><code></code><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>mapone</l><l>mapmany</l></list></block><block s="doSetVar"><l>mapone</l><block s="reifyScript"><script><block s="doIf"><custom-block s="empty? %l"><block var="data"/></custom-block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block s="evaluate"><block var="mapone"/><list><block s="reportCDR"><block var="data"/></block></list></block></block></block></script><list><l>data</l></list></block></block><block s="doSetVar"><l>mapmany</l><block s="reifyScript"><script><block s="doIf"><custom-block s="empty? %l"><block s="reportListItem"><l>1</l><block var="data lists"/></block></custom-block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="function"/><custom-block s="map %repRing over %mult%l"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><list><block var="data lists"/></list></custom-block></block><block s="evaluate"><block var="mapmany"/><list><custom-block s="map %repRing over %mult%l"><block s="reifyReporter"><autolambda><block s="reportCDR"><l/></block></autolambda><list></list></block><list><block var="data lists"/></list></custom-block></list></block></block></block></script><list><l>data lists</l></list></block></block><block s="doIfElse"><custom-block s="empty? %l"><block s="reportCDR"><block var="lists"/></block></custom-block><script><block s="doReport"><block s="evaluate"><block var="mapone"/><list><block s="reportListItem"><l>1</l><block var="lists"/></block></list></block></block></script><script><block s="doReport"><block s="evaluate"><block var="mapmany"/><list><block var="lists"/></list></block></block></script></block></script></block></script></block-definition><block-definition s="empty? %'data'" type="predicate" category="lists"><header></header><code></code><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportEquals"><block var="data"/><block s="reportNewList"><list></list></block></block></block></script></block-definition><block-definition s="keep items such that %'pred' from %'data'" type="reporter" category="lists"><header></header><code></code><inputs><input type="%predRing"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><custom-block s="empty? %l"><block var="data"/></custom-block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIfElse"><block s="evaluate"><block var="pred"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="data"/></block><custom-block s="keep items such that %predRing from %l"><block var="pred"/><block s="reportCDR"><block var="data"/></block></custom-block></block></block></script><script><block s="doReport"><custom-block s="keep items such that %predRing from %l"><block var="pred"/><block s="reportCDR"><block var="data"/></block></custom-block></block></script></block></script></block></script></block-definition><block-definition s="combine with %'function' items of %'data'" type="reporter" category="lists"><header></header><code></code><inputs><input type="%repRing"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doIf"><custom-block s="empty? %l"><block s="reportCDR"><block var="data"/></block></custom-block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="data"/></block></block></script></block><block s="doReport"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><l>1</l><block var="data"/></block><custom-block s="combine with %repRing items of %l"><block var="function"/><block s="reportCDR"><block var="data"/></block></custom-block></list></block></block></script></block></script></block-definition><block-definition s="if %'test' then %'true' else %'false'" type="reporter" category="control"><header></header><code></code><inputs><input type="%b"></input><input type="%anyUE"></input><input type="%anyUE"></input></inputs><script><block s="doIfElse"><block var="test"/><script><block s="doReport"><block s="evaluate"><block var="true"/><list></list></block></block></script><script><block s="doReport"><block s="evaluate"><block var="false"/><list></list></block></block></script></block></script></block-definition><block-definition s="for %'i' = %'start' to %'end' %'action'" type="command" category="control"><header></header><code></code><inputs><input type="%upvar"></input><input type="%n">1</input><input type="%n">10</input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>step</l><l>tester</l></list></block><block s="doIfElse"><block s="reportGreaterThan"><block var="start"/><block var="end"/></block><script><block s="doSetVar"><l>step</l><l>-1</l></block><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportLessThan"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block></script><script><block s="doSetVar"><l>step</l><l>1</l></block><block s="doSetVar"><l>tester</l><block s="reifyReporter"><autolambda><block s="reportGreaterThan"><block var="i"/><block var="end"/></block></autolambda><list></list></block></block></script></block><block s="doSetVar"><l>i</l><block var="start"/></block><block s="doUntil"><block s="evaluate"><block var="tester"/><list></list></block><script><block s="doRun"><block var="action"/><list></list></block><block s="doChangeVar"><l>i</l><block var="step"/></block></script></block></script></block-definition><block-definition s="join words %'words'" type="reporter" category="operators"><header></header><code></code><inputs><input type="%mult%txt"></input></inputs><script><block s="doWarp"><script><block s="doIf"><custom-block s="empty? %l"><block s="reportCDR"><block var="words"/></block></custom-block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="words"/></block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportListItem"><l>1</l><block var="words"/></block><block s="reportJoinWords"><list><l> </l><block s="evaluate"><block s="reifyReporter"><autolambda><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></autolambda><list></list></block><list></list></block></list></block></list></block></block></script></block></script></block-definition><block-definition s="list $arrowRight sentence %'data'" type="reporter" category="operators"><header></header><code></code><inputs><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doReport"><custom-block s="combine with %repRing items of %l"><block s="reifyReporter"><autolambda><custom-block s="join words %mult%txt"><list><l></l><l></l></list></custom-block></autolambda><list></list></block><block var="data"/></custom-block></block></script></block></script></block-definition><block-definition s="sentence $arrowRight list %'text'" type="reporter" category="operators"><header></header><code></code><inputs><input type="%txt"></input></inputs><script><block s="doWarp"><script><block s="doDeclareVariables"><list><l>result</l><l>thisword</l><l>emptyword</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>thisword</l><l></l></block><block s="doSetVar"><l>emptyword</l><l></l></block><custom-block s="for %upvar = %n to %n %cs"><l>i</l><l>1</l><block s="reportStringSize"><block var="text"/></block><script><block s="doIfElse"><block s="reportEquals"><block s="reportLetter"><block var="i"/><block var="text"/></block><l> </l></block><script><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="thisword"/><block var="emptyword"/></block></block><script><block s="doAddToList"><block var="thisword"/><block var="result"/></block><block s="doSetVar"><l>thisword</l><block var="emptyword"/></block></script></block></script><script><block s="doSetVar"><l>thisword</l><block s="reportJoinWords"><list><block var="thisword"/><block s="reportLetter"><block var="i"/><block var="text"/></block></list></block></block></script></block></script></custom-block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block var="thisword"/><block var="emptyword"/></block></block><script><block s="doAddToList"><block var="thisword"/><block var="result"/></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="catch %'tag' %'action'" type="command" category="control"><header></header><code></code><inputs><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doCallCC"><block s="reifyScript"><script><block s="doSetVar"><l>tag</l><block var="cont"/></block><block s="doRun"><block var="action"/><list></list></block></script><list><l>cont</l></list></block></block></script></block-definition><block-definition s="throw %'cont'" type="command" category="control"><header></header><code></code><inputs><input type="%s">catchtag</input></inputs><script><block s="doRun"><block var="cont"/><list></list></block></script></block-definition><block-definition s="catch %'tag' %'value'" type="reporter" category="control"><header></header><code></code><inputs><input type="%upvar"></input><input type="%anyUE"></input></inputs><script><block s="doCallCC"><block s="reifyScript"><script><block s="doSetVar"><l>tag</l><block var="cont"/></block><block s="doReport"><block s="evaluate"><block var="value"/><list></list></block></block></script><list><l>cont</l></list></block></block></script></block-definition><block-definition s="throw %'tag' %'value'" type="command" category="control"><header></header><code></code><inputs><input type="%s">catchtag</input><input type="%s"></input></inputs><script><block s="doRun"><block var="tag"/><list><block var="value"/></list></block></script></block-definition><block-definition s="for each %'item' of %'data' %'action'" type="command" category="lists"><header></header><code></code><inputs><input type="%upvar"></input><input type="%l"></input><input type="%cs"></input></inputs><script><block s="doUntil"><custom-block s="empty? %l"><block var="data"/></custom-block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><l>1</l><block var="data"/></block></block><block s="doRun"><block var="action"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block s="doSetVar"><l>data</l><block s="reportCDR"><block var="data"/></block></block></script></block></script></block-definition><block-definition s="if %'test' do %'action' and pause all $pause-1-255-220-0" type="command" category="control"><header></header><code></code><inputs><input type="%boolUE"></input><input type="%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>breakpoint</l></list></block><block s="doIf"><block s="evaluate"><block var="test"/><list></list></block><script><block s="doSetVar"><l>breakpoint</l><block var="test"/></block><block s="doShowVar"><l>breakpoint</l></block><block s="doRun"><block var="action"/><list></list></block><block s="doPauseAll"></block><block s="doHideVar"><l></l></block></script></block></script></block-definition><block-definition s="word $arrowRight list %'word'" type="reporter" category="operators"><header></header><code></code><inputs><input type="%s"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>index</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>index</l><l>1</l></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doRepeat"><block s="reportStringSize"><block var="word"/></block><script><block s="doAddToList"><block s="reportLetter"><block var="index"/><block var="word"/></block><block var="result"/></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block-definition></blocks>
\ No newline at end of file |
