nadesiko3 3.7.13 → 3.7.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/batch/command.txt +473 -473
- package/batch/jsplugin2text.nako3 +2 -0
- package/core/package.json +1 -1
- package/core/src/nako3.mjs +0 -4
- package/core/src/nako3.mts +55 -55
- package/core/src/nako_ast.mjs +0 -1
- package/core/src/nako_ast.mts +1 -1
- package/core/src/nako_colors.mjs +0 -1
- package/core/src/nako_colors.mts +1 -1
- package/core/src/nako_core_version.mjs +2 -2
- package/core/src/nako_core_version.mts +2 -2
- package/core/src/nako_csv.mjs +0 -1
- package/core/src/nako_csv.mts +9 -9
- package/core/src/nako_errors.mts +8 -8
- package/core/src/nako_from_dncl.mts +5 -5
- package/core/src/nako_from_dncl2.mjs +0 -1
- package/core/src/nako_from_dncl2.mts +5 -5
- package/core/src/nako_gen.mjs +13 -15
- package/core/src/nako_gen.mts +224 -220
- package/core/src/nako_global.mts +11 -11
- package/core/src/nako_indent.mts +92 -92
- package/core/src/nako_indent_chars.mts +1 -1
- package/core/src/nako_indent_inline.mjs +11 -11
- package/core/src/nako_indent_inline.mts +20 -20
- package/core/src/nako_lex_rules.mjs +0 -1
- package/core/src/nako_lex_rules.mts +8 -8
- package/core/src/nako_lexer.mjs +0 -1
- package/core/src/nako_lexer.mts +23 -23
- package/core/src/nako_logger.mjs +1 -1
- package/core/src/nako_logger.mts +38 -38
- package/core/src/nako_parser3.mjs +4 -5
- package/core/src/nako_parser3.mts +79 -79
- package/core/src/nako_parser_base.mjs +1 -1
- package/core/src/nako_parser_base.mts +68 -68
- package/core/src/nako_parser_const.mjs +0 -1
- package/core/src/nako_parser_const.mts +1 -1
- package/core/src/nako_prepare.mts +12 -12
- package/core/src/nako_source_mapping.mts +9 -9
- package/core/src/nako_token.mjs +0 -1
- package/core/src/nako_token.mts +2 -2
- package/core/src/nako_tools.mjs +0 -1
- package/core/src/nako_tools.mts +4 -4
- package/core/src/nako_types.mjs +0 -1
- package/core/src/nako_types.mts +3 -3
- package/core/src/plugin_api.mjs +0 -1
- package/core/src/plugin_api.mts +1 -1
- package/core/src/plugin_csv.mjs +0 -1
- package/core/src/plugin_csv.mts +7 -7
- package/core/src/plugin_math.mjs +0 -1
- package/core/src/plugin_math.mts +39 -40
- package/core/src/plugin_promise.mjs +1 -1
- package/core/src/plugin_promise.mts +9 -9
- package/core/src/plugin_system.mjs +1 -10
- package/core/src/plugin_system.mts +319 -321
- package/core/src/plugin_test.mjs +0 -2
- package/core/src/plugin_test.mts +6 -6
- package/core/src/plugin_toml.mjs +1 -1
- package/core/src/plugin_toml.mts +4 -4
- package/core/test/flow_test.mjs +22 -0
- package/package.json +31 -34
- package/release/_hash.txt +24 -24
- package/release/_script-tags.txt +16 -16
- package/release/command_cnako3.json +1 -1
- package/release/edit_main.js +33 -21
- package/release/edit_main.js.map +4 -4
- package/release/editor.js +33 -21
- package/release/plugin_keigo.js.map +2 -2
- package/release/plugin_turtle.js.map +2 -2
- package/release/plugin_weykturtle3d.js.map +2 -2
- package/release/version.js +29 -17
- package/release/version_main.js +29 -17
- package/release/version_main.js.map +4 -4
- package/release/wnako3.js +51 -44
- package/release/wnako3.js.map +3 -3
- package/release/wnako3webworker.js +45 -38
- package/release/wnako3webworker.js.map +2 -2
- package/src/cnako3.mts +1 -1
- package/src/cnako3mod.mjs +4 -7
- package/src/cnako3mod.mts +24 -24
- package/src/commander_ja.mts +8 -8
- package/src/deno_wrapper.mjs +0 -1
- package/src/deno_wrapper.mts +5 -5
- package/src/nako_version.mjs +2 -2
- package/src/nako_version.mts +2 -2
- package/src/plugin_browser.mjs +21 -29
- package/src/plugin_browser.mts +30 -35
- package/src/plugin_browser_ajax.mts +27 -27
- package/src/plugin_browser_audio.mjs +0 -1
- package/src/plugin_browser_audio.mts +11 -11
- package/src/plugin_browser_camera.mts +8 -8
- package/src/plugin_browser_canvas.mjs +0 -2
- package/src/plugin_browser_canvas.mts +34 -34
- package/src/plugin_browser_chart.mjs +0 -1
- package/src/plugin_browser_chart.mts +13 -13
- package/src/plugin_browser_color.mts +2 -2
- package/src/plugin_browser_crypto.mts +5 -5
- package/src/plugin_browser_dialog.mts +4 -4
- package/src/plugin_browser_dom_basic.mts +42 -42
- package/src/plugin_browser_dom_event.mjs +0 -1
- package/src/plugin_browser_dom_event.mts +27 -28
- package/src/plugin_browser_dom_parts.mjs +0 -2
- package/src/plugin_browser_dom_parts.mts +31 -31
- package/src/plugin_browser_geolocation.mts +3 -3
- package/src/plugin_browser_hotkey.mts +3 -3
- package/src/plugin_browser_html.mts +4 -4
- package/src/plugin_browser_in_worker.mts +1 -1
- package/src/plugin_browser_location.mts +2 -2
- package/src/plugin_browser_speech.mts +7 -7
- package/src/plugin_browser_storage.mts +11 -11
- package/src/plugin_browser_system.mts +2 -2
- package/src/plugin_browser_websocket.mts +6 -6
- package/src/plugin_httpserver.mts +17 -17
- package/src/plugin_keigo.mts +5 -5
- package/src/plugin_node.mjs +7 -48
- package/src/plugin_node.mts +114 -145
- package/src/plugin_turtle.mts +143 -143
- package/src/plugin_weykturtle3d.mjs +0 -3
- package/src/plugin_weykturtle3d.mts +135 -135
- package/src/plugin_weykturtle3d_three.mjs +0 -1
- package/src/plugin_weykturtle3d_three.mts +1 -1
- package/src/plugin_weykturtle3d_threeutil.mts +3 -3
- package/src/wnako3.mjs +0 -1
- package/src/wnako3.mts +1 -1
- package/src/wnako3_editor.mjs +0 -2
- package/src/wnako3_editor.mts +132 -132
- package/src/wnako3mod.mjs +0 -5
- package/src/wnako3mod.mts +19 -19
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/plugin_keigo.mts"],
|
|
4
|
-
"sourcesContent": ["// \u656C\u8A9E\u3092\u4F7F\u3044\u305F\u3044\u4EBA\u306E\u305F\u3081\u306E\u30D7\u30E9\u30B0\u30A4\u30F3 (\u304A\u904A\u3073\u6A5F\u80FD)\nimport { NakoSystem } from '../core/src/plugin_api.mjs'\n\nconst PluginKeigo = {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_keigo', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: '\u656C\u8A9E\u3067\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u8A18\u8FF0\u3059\u308B\u305F\u3081\u306E\u547D\u4EE4\u3092\u63D0\u4F9B\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '3.6.0' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function
|
|
5
|
-
"mappings": "mBAGA,IAAMA,EAAc,CAClB,KAAQ,CACN,KAAM,QACN,MAAO,CACL,WAAY,eACZ,YAAa,2KACb,cAAe,QACf,YAAa,CAAC,QAAS,OAAO,EAC9B,YAAa,OACf,CACF,EACA,mBAAO,CACL,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,
|
|
4
|
+
"sourcesContent": ["// \u656C\u8A9E\u3092\u4F7F\u3044\u305F\u3044\u4EBA\u306E\u305F\u3081\u306E\u30D7\u30E9\u30B0\u30A4\u30F3 (\u304A\u904A\u3073\u6A5F\u80FD)\nimport { NakoSystem } from '../core/src/plugin_api.mjs'\n\nconst PluginKeigo = {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_keigo', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: '\u656C\u8A9E\u3067\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u8A18\u8FF0\u3059\u308B\u305F\u3081\u306E\u547D\u4EE4\u3092\u63D0\u4F9B\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '3.6.0' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n }\n },\n // @\u4E01\u5BE7\u8A9E\n '\u304A\u4E16\u8A71': { type: 'const', value: 1 }, // @\u304A\u305B\u308F\n '\u306A': { // @A\u306B\u306A\u308B // @\u306A\u308B\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function(a: any, sys: NakoSystem) {\n return a\n }\n },\n '\u304A\u308A\u307E\u3059': { // @\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u3092\u8AAD\u3080\u4EBA\u3092\u6C17\u6301\u3061\u3088\u304F\u3059\u308B // @\u304A\u308A\u307E\u3059\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n if (!sys.__reisetu) { sys.__reisetu = 0 }\n sys.__reisetu++\n },\n return_none: true\n },\n '\u3069\u3046\u305E': { // @\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u3092\u8AAD\u3080\u4EBA\u3092\u6C17\u6301\u3061\u3088\u304F\u3059\u308B // @\u3069\u3046\u305E\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n if (!sys.__reisetu) { sys.__reisetu = 0 }\n sys.__reisetu++\n },\n return_none: true\n },\n '\u3088\u308D\u3057\u304F\u304A\u9858': { // @\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u3092\u8AAD\u3080\u4EBA\u3092\u6C17\u6301\u3061\u3088\u304F\u3059\u308B // @\u3088\u308D\u3057\u304F\u304A\u306D\u304C\u3044\u3057\u307E\u3059\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n if (!sys.__reisetu) { sys.__reisetu = 0 }\n sys.__reisetu++\n },\n return_none: true\n }\n\n}\n\nexport default PluginKeigo\n"],
|
|
5
|
+
"mappings": "mBAGA,IAAMA,EAAc,CAClB,KAAQ,CACN,KAAM,QACN,MAAO,CACL,WAAY,eACZ,YAAa,2KACb,cAAe,QACf,YAAa,CAAC,QAAS,OAAO,EAC9B,YAAa,OACf,CACF,EACA,mBAAO,CACL,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAASC,EAAiB,CAC9B,CACF,EAEA,mBAAO,CAAE,KAAM,QAAS,MAAO,CAAE,EACjC,OAAK,CACH,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,QAAG,CAAC,EACjB,KAAM,GACN,GAAI,SAASC,EAAQD,EAAiB,CACpC,OAAOC,CACT,CACF,EACA,yBAAQ,CACN,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAASD,EAAiB,CACvBA,EAAI,YAAaA,EAAI,UAAY,GACtCA,EAAI,WACN,EACA,YAAa,EACf,EACA,mBAAO,CACL,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAASA,EAAiB,CACvBA,EAAI,YAAaA,EAAI,UAAY,GACtCA,EAAI,WACN,EACA,YAAa,EACf,EACA,qCAAU,CACR,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAASA,EAAiB,CACvBA,EAAI,YAAaA,EAAI,UAAY,GACtCA,EAAI,WACN,EACA,YAAa,EACf,CAEF,EAEOE,EAAQH",
|
|
6
6
|
"names": ["PluginKeigo", "sys", "a", "plugin_keigo_default"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/plugin_turtle_images.mjs", "../src/plugin_turtle.mts"],
|
|
4
|
-
"sourcesContent": ["/**\n * images\n */\nexport const turtleImage = 'data:image/png;base64,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';\nexport const elephantImage = 'data:image/png;base64,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';\nexport const pandaImage = 'data:image/png;base64,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';\n", "/**\n * Turtle Graphics for Web browser (nadesiko3)\n * plugin_turtle.mts\n */\n\nimport { NakoSystem, NakoCallback } from '../core/src/plugin_api.mjs'\nimport { turtleImage, elephantImage, pandaImage } from './plugin_turtle_images.mjs'\n\nclass NakoTurtle {\n id: number\n img: any\n canvas: any\n ctx: any\n dir: number\n cx: number\n cy: number\n x: number\n y: number\n color: string\n lineWidth: number\n flagDown: boolean\n flagBegeinPath: boolean\n f_update: boolean\n flagLoaded: boolean\n f_visible: boolean\n mlist: any[]\n sys: NakoSystem\n\n constructor (sys: NakoSystem, id: number) {\n this.sys = sys\n this.id = id\n this.img = null\n this.canvas = null\n this.ctx = null\n this.dir = 270 // \u4E0A\u5411\u304D\n this.cx = 32\n this.cy = 32\n this.x = 0\n this.y = 0\n this.color = 'black'\n this.lineWidth = 4\n this.flagDown = true\n this.flagBegeinPath = false\n this.f_update = true\n this.flagLoaded = false\n this.f_visible = true\n this.mlist = []\n }\n\n clear () {\n this.mlist = [] // \u30B8\u30E7\u30D6\u3092\u30AF\u30EA\u30A2\n document.body.removeChild(this.canvas)\n }\n\n loadImage (url: string, callback: any) {\n this.canvas = document.createElement('canvas')\n this.ctx = this.canvas.getContext('2d')\n this.canvas.id = this.id\n this.img = document.createElement('img')\n this.img.onload = () => {\n this.cx = this.img.width / 2\n this.cy = this.img.height / 2\n this.canvas.width = this.img.width\n this.canvas.height = this.img.height\n this.flagLoaded = true\n this.f_update = true\n this.canvas.style.position = 'absolute'\n document.body.appendChild(this.canvas)\n // console.log('createTurtle::this.turtles=', this)\n callback(this)\n }\n this.img.onerror = () => {\n console.log('\u30AB\u30E1\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557')\n this.flagLoaded = true\n this.f_visible = false\n this.f_update = true\n callback(this)\n }\n this.img.src = url\n }\n}\n\nclass NakoTurtleSystem {\n turtles: NakoTurtle[]\n target: number\n ctx: any\n canvas: any\n canvas_r: any\n flagSetTimer: boolean\n timerId: any\n sys: NakoSystem\n instanceCount: number\n // Singleton\n /* eslint-disable no-use-before-define */\n static instance: NakoTurtleSystem\n static getInstance (sys: NakoSystem) {\n if (NakoTurtleSystem.instance === undefined) {\n NakoTurtleSystem.instance = new NakoTurtleSystem(sys)\n }\n const i = NakoTurtleSystem.instance\n i.instanceCount += 1\n return NakoTurtleSystem.instance\n }\n\n constructor (sys: NakoSystem) {\n this.sys = sys\n this.turtles = [] // \u30AB\u30E1\u306E\u4E00\u89A7\n this.target = -1\n this.ctx = null\n this.canvas = null\n this.canvas_r = { left: 0, top: 0, width: 640, height: 400 }\n this.flagSetTimer = false\n this.instanceCount = 0\n this.timerId = null\n }\n\n clearAll () {\n // console.log('\u30AB\u30E1\u5168\u6D88\u53BB turtles=', this.turtles)\n for (let i = 0; i < this.turtles.length; i++) {\n const tt = this.turtles[i]\n tt.clear()\n }\n this.turtles = []\n if (this.canvas !== null) {\n this.ctx.clearRect(0, 0,\n this.canvas.width,\n this.canvas.height)\n }\n this.target = -1\n this.flagSetTimer = false\n }\n\n drawTurtle (id: number) {\n const tt = this.turtles[id]\n if (!tt) { return }\n const cr = this.canvas_r\n // \u30AB\u30E1\u306E\u4F4D\u7F6E\u3092\u79FB\u52D5\n tt.canvas.style.left = (cr.left + tt.x - tt.cx) + 'px'\n tt.canvas.style.top = (cr.top + tt.y - tt.cx) + 'px'\n if (!tt.f_update) { return }\n /* istanbul ignore if */\n if (!tt.flagLoaded) { return }\n tt.f_update = false\n tt.ctx.clearRect(0, 0,\n tt.canvas.width,\n tt.canvas.height)\n if (!tt.f_visible) { return }\n if (tt.dir !== 270) {\n const rad = (tt.dir + 90) * 0.017453292519943295\n tt.ctx.save()\n tt.ctx.translate(tt.cx, tt.cy)\n tt.ctx.rotate(rad)\n tt.ctx.translate(-tt.cx, -tt.cy)\n tt.ctx.drawImage(tt.img, 0, 0)\n tt.ctx.restore()\n } else { tt.ctx.drawImage(tt.img, 0, 0) }\n }\n\n getCur () {\n if (this.turtles.length === 0) { throw Error('\u6700\u521D\u306B\u300E\u30AB\u30E1\u4F5C\u6210\u300F\u547D\u4EE4\u3092\u547C\u3073\u51FA\u3057\u3066\u304F\u3060\u3055\u3044\u3002') }\n return this.turtles[this.target]\n }\n\n setTimer () {\n // \u30B3\u30DE\u30F3\u30C9\u8A2D\u5B9A\u5F8C\u30011\u5EA6\u3060\u3051\u3053\u306E\u95A2\u6570\u3092\u547C\u3073\u51FA\u3059\n if (this.flagSetTimer) { return }\n this.flagSetTimer = true\n // \u8A18\u9332\u3057\u305F\u30DE\u30AF\u30ED\u3092\u518D\u751F\u3059\u308B\n if (this.timerId) { clearTimeout(this.timerId) }\n this.timerId = setTimeout(() => {\n console.log('[TURTLE] Let\\'s go!')\n this.play()\n }, 1)\n }\n\n line (tt: NakoTurtle, x1: number, y1: number, x2: number, y2: number) {\n /* istanbul ignore else */\n if (tt) { if (!tt.flagDown) { return } }\n\n const ctx = this.ctx\n if (tt.flagBegeinPath) {\n ctx.lineTo(x2, y2)\n } else {\n ctx.beginPath()\n ctx.lineWidth = tt.lineWidth\n ctx.strokeStyle = tt.color\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n ctx.stroke()\n }\n }\n\n addMacro (args: Array<any>) {\n const tt: NakoTurtle = this.getCur()\n tt.mlist.push(args)\n this.setTimer()\n }\n\n doMacro (tt: NakoTurtle, wait: number) {\n if (!tt.flagLoaded && wait > 0) {\n // console.log('[TURTLE] waiting ...')\n return true\n }\n const m = tt.mlist.shift()\n const cmd = (m !== undefined) ? m[0] : ''\n // console.log('@@@doMacro', cmd, m, tt.x, tt.y, ': dir=', tt.dir)\n switch (cmd) {\n case 'xy':\n // \u8D77\u70B9\u3092\u79FB\u52D5\u3059\u308B\n tt.x = m[1]\n tt.y = m[2]\n break\n case 'begin':\n // \u63CF\u753B\u3092\u660E\u793A\u7684\u306B\u958B\u59CB\u3059\u308B\n this.ctx.beginPath()\n this.ctx.moveTo(tt.x, tt.y)\n tt.flagBegeinPath = true\n break\n case 'close':\n // \u30D1\u30B9\u3092\u9589\u3058\u308B\n this.ctx.closePath()\n tt.flagBegeinPath = false\n break\n case 'fill':\n if (tt.flagBegeinPath) {\n this.ctx.closePath()\n tt.flagBegeinPath = false\n }\n this.ctx.fill()\n break\n case 'stroke':\n if (tt.flagBegeinPath) {\n this.ctx.closePath()\n tt.flagBegeinPath = false\n }\n this.ctx.stroke()\n break\n case 'text':\n this.ctx.fillText(m[1], tt.x, tt.y)\n break\n case 'textset':\n this.ctx.font = m[1]\n break\n case 'fillStyle':\n this.ctx.fillStyle = m[1]\n break\n case 'mv': {\n // \u7DDA\u3092\u5F15\u304F\n this.line(tt, tt.x, tt.y, m[1], m[2])\n // \u30AB\u30E1\u306E\u89D2\u5EA6\u3092\u5909\u66F4\n const mvRad = Math.atan2(m[2] - tt.y, m[1] - tt.x)\n tt.dir = mvRad * 57.29577951308232\n tt.f_update = true\n // \u5B9F\u969B\u306B\u4F4D\u7F6E\u3092\u79FB\u52D5\n tt.x = m[1]\n tt.y = m[2]\n break\n }\n case 'fd': {\n const fdv = m[1] * m[2]\n const rad = tt.dir * 0.017453292519943295\n const x2 = tt.x + Math.cos(rad) * fdv\n const y2 = tt.y + Math.sin(rad) * fdv\n this.line(tt, tt.x, tt.y, x2, y2)\n tt.x = x2\n tt.y = y2\n // console.log('@@@fd', m, tt.x, tt.y, ': dir=', tt.dir)\n break\n }\n case 'angle': {\n const angle = m[1]\n tt.dir = ((angle - 90 + 360) % 360)\n tt.f_update = true\n break\n }\n case 'rotr': {\n const rv = m[1]\n tt.dir = (tt.dir + rv) % 360\n tt.f_update = true\n break\n }\n case 'rotl': {\n const lv = m[1]\n tt.dir = (tt.dir - lv + 360) % 360\n tt.f_update = true\n break\n }\n case 'color':\n tt.color = m[1]\n this.ctx.strokeStyle = tt.color\n break\n case 'size':\n tt.lineWidth = m[1]\n this.ctx.lineWidth = tt.lineWidth\n break\n case 'penOn':\n tt.flagDown = m[1]\n break\n case 'visible':\n tt.f_visible = m[1]\n tt.f_update = true\n break\n case 'changeImage':\n tt.flagLoaded = false\n tt.img.src = m[1]\n break\n }\n if (tt.flagLoaded) { this.drawTurtle(tt.id) }\n return (tt.mlist.length > 0)\n }\n\n doMacroAll (wait: number) {\n let hasNext = false\n for (let i = 0; i < this.turtles.length; i++) {\n const tt = this.turtles[i]\n if (this.doMacro(tt, wait)) { hasNext = true }\n }\n return hasNext\n }\n\n play () {\n const wait = this.sys.__getSysVar('\u30AB\u30E1\u901F\u5EA6')\n let hasNext = this.doMacroAll(wait)\n if (wait <= 0) {\n // \u5F85\u3061\u6642\u9593\u306A\u3057\u3067\u5168\u90E8\u5B9F\u884C\n while (hasNext) { hasNext = this.doMacroAll(wait) }\n } else if (hasNext) {\n // \u4E00\u3064\u305A\u3064\u5B9F\u884C\n if (this.timerId) { clearTimeout(this.timerId) }\n this.timerId = setTimeout(() => this.play(), wait)\n return\n }\n console.log('[TURTLE] finished.')\n this.flagSetTimer = false\n }\n\n setupCanvas () {\n // \u63CF\u753B\u5148\u3092\u30BB\u30C3\u30C8\u3059\u308B\n let canvasId = this.sys.__getSysVar('\u30AB\u30E1\u63CF\u753B\u5148')\n if (typeof canvasId === 'string') {\n canvasId = document.getElementById(canvasId) || document.querySelector(canvasId)\n this.sys.__setSysVar('\u30AB\u30E1\u63CF\u753B\u5148', canvasId)\n }\n console.log('\u30AB\u30E1\u63CF\u753B\u5148=', canvasId)\n const cv = this.canvas = canvasId\n if (!cv) {\n console.log('[ERROR] \u30AB\u30E1\u63CF\u753B\u5148\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002' + canvasId)\n throw Error('\u30AB\u30E1\u63CF\u753B\u5148\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002')\n }\n const ctx = this.ctx = cv.getContext('2d')\n ctx.lineWidth = 4\n ctx.strokeStyle = 'black'\n ctx.lineCap = 'round'\n this.resizeCanvas()\n }\n\n resizeCanvas () {\n const cv = this.canvas\n const rect = cv.getBoundingClientRect()\n const rx = rect.left + window.scrollX\n const ry = rect.top + window.scrollY\n this.canvas_r = {\n 'left': rx,\n 'top': ry,\n width: rect.width,\n height: rect.height\n }\n }\n\n createTurtle (imageUrl: string) {\n // \u30AD\u30E3\u30F3\u30D0\u30B9\u60C5\u5831\u306F\u6BCE\u56DE\u53C2\u7167\u3059\u308B (#734)\n this.setupCanvas()\n // \u30AB\u30E1\u306E\u60C5\u5831\u3092\u30EA\u30B9\u30C8\u306B\u8FFD\u52A0\n const id = this.turtles.length\n const tt: NakoTurtle = new NakoTurtle(this.sys, id)\n this.turtles.push(tt)\n this.target = id\n // \u753B\u50CF\u3092\u8AAD\u307F\u8FBC\u3080\n tt.loadImage(imageUrl, (tt: NakoTurtle) => {\n this.drawTurtle(tt.id)\n console.log(`tutrle.onload(id=${tt.id})`)\n })\n // \u30C7\u30D5\u30A9\u30EB\u30C8\u4F4D\u7F6E(\u4E2D\u592E)\u306E\u8A2D\u5B9A\n tt.x = this.canvas_r.width / 2\n tt.y = this.canvas_r.height / 2\n return id\n }\n}\n\nconst PluginTurtle = {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_turtle', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: '\u30BF\u30FC\u30C8\u30EB\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF\u30B9\u7528\u306E\u30D7\u30E9\u30B0\u30A4\u30F3', // \u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '3.6.3' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys: NakoSystem) {\n const turtleSystem: NakoTurtleSystem = NakoTurtleSystem.getInstance(sys)\n sys.tags.turtles = turtleSystem\n }\n },\n\n '!\u30AF\u30EA\u30A2': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys: NakoSystem) {\n // console.log('tutle::!\u30AF\u30EA\u30A2')\n sys.tags.turtles.clearAll()\n }\n },\n\n // @\u30BF\u30FC\u30C8\u30EB\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF\u30B9\u30FB\u30AB\u30E1\u63CF\u753B\n '\u30AB\u30E1\u4F5C\u6210': { // @\u30BF\u30FC\u30C8\u30EB\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF\u30B9\u3092\u958B\u59CB\u3057\u3066\u30AB\u30E1\u306EID\u3092\u8FD4\u3059 // @\u304B\u3081\u3055\u304F\u305B\u3044\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys: NakoSystem) {\n const imageUrl = sys.__getSysVar('\u30AB\u30E1\u753B\u50CFURL')\n return sys.tags.turtles.createTurtle(imageUrl)\n }\n },\n '\u30BE\u30A6\u4F5C\u6210': { // @\u30BE\u30A6\u306E\u753B\u50CF\u3067\u30BF\u30FC\u30C8\u30EB\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF\u30B9\u3092\u958B\u59CB\u3057\u3066ID\u3092\u8FD4\u3059 // @\u305E\u3046\u3055\u304F\u305B\u3044\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys: NakoSystem) {\n const imageUrl = elephantImage\n return sys.tags.turtles.createTurtle(imageUrl)\n }\n },\n '\u30D1\u30F3\u30C0\u4F5C\u6210': { // @\u30D1\u30F3\u30C0\u306E\u753B\u50CF\u3067\u30BF\u30FC\u30C8\u30EB\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF\u30B9\u3092\u958B\u59CB\u3057\u3066ID\u3092\u8FD4\u3059 // @\u3071\u3093\u3060\u3055\u304F\u305B\u3044\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys: NakoSystem) {\n const imageUrl = pandaImage\n return sys.tags.turtles.createTurtle(imageUrl)\n }\n },\n '\u30AB\u30E1\u64CD\u4F5C\u5BFE\u8C61\u8A2D\u5B9A': { // @ID\u3092\u6307\u5B9A\u3057\u3066\u64CD\u4F5C\u5BFE\u8C61\u3068\u306A\u308B\u30AB\u30E1\u3092\u5909\u66F4\u3059\u308B // @\u304B\u3081\u305D\u3046\u3055\u305F\u3044\u3057\u3087\u3046\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078', '\u306E']],\n pure: true,\n fn: function (id: number, sys: NakoSystem) {\n sys.tags.turtles.target = id\n },\n return_none: true\n },\n '\u30AB\u30E1\u63CF\u753B\u5148': { type: 'var', value: '#turtle_cv' }, // @\u304B\u3081\u3073\u3087\u3046\u304C\u3055\u304D\n '\u30AB\u30E1\u753B\u50CFURL': { type: 'var', value: turtleImage }, // @\u304B\u3081\u304C\u305E\u3046URL\n '\u30AB\u30E1\u753B\u50CF\u5909\u66F4': { // @\u30AB\u30E1\u306E\u753B\u50CF\u3092URL\u306B\u5909\u66F4\u3059\u308B // @\u304B\u3081\u304C\u305E\u3046\u3078\u3093\u3053\u3046\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (url: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['changeImage', url])\n },\n return_none: true\n },\n '\u30AB\u30E1\u901F\u5EA6': { type: 'const', value: 100 }, // @\u304B\u3081\u305D\u304F\u3069\n '\u30AB\u30E1\u901F\u5EA6\u8A2D\u5B9A': { // @\u30AB\u30E1\u306E\u52D5\u4F5C\u901F\u5EA6v\u306B\u8A2D\u5B9A(\u5927\u304D\u3044\u307B\u3069\u9045\u3044) // @\u304B\u3081\u305D\u304F\u3069\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (v: number, sys: NakoSystem) {\n sys.__setSysVar('\u30AB\u30E1\u901F\u5EA6', v)\n }\n },\n '\u30AB\u30E1\u79FB\u52D5': { // @\u30AB\u30E1\u306E\u4F4D\u7F6E\u3092[x,y]\u3078\u79FB\u52D5\u3059\u308B // @\u304B\u3081\u3044\u3069\u3046\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (xy: number[], sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['mv', xy[0], xy[1]])\n },\n return_none: true\n },\n '\u30AB\u30E1\u8D77\u70B9\u79FB\u52D5': { // @\u30AB\u30E1\u306E\u63CF\u753B\u8D77\u70B9\u4F4D\u7F6E\u3092[x,y]\u3078\u79FB\u52D5\u3059\u308B // @\u304B\u3081\u304D\u3066\u3093\u3044\u3069\u3046\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (xy: number[], sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['xy', xy[0], xy[1]])\n },\n return_none: true\n },\n '\u30AB\u30E1\u9032': { // @\u30AB\u30E1\u306E\u4F4D\u7F6E\u3092V\u3060\u3051\u9032\u3081\u308B // @\u304B\u3081\u3059\u3059\u3080\n type: 'func',\n josi: [['\u3060\u3051']],\n pure: true,\n fn: function (v: number, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['fd', v, 1])\n },\n return_none: true\n },\n '\u30AB\u30E1\u623B': { // @\u30AB\u30E1\u306E\u4F4D\u7F6E\u3092V\u3060\u3051\u623B\u3059 // @\u304B\u3081\u3082\u3069\u308B\n type: 'func',\n josi: [['\u3060\u3051']],\n pure: true,\n fn: function (v: number, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['fd', v, -1])\n },\n return_none: true\n },\n '\u30AB\u30E1\u89D2\u5EA6\u8A2D\u5B9A': { // @\u30AB\u30E1\u306E\u5411\u304D\u3092DEG\u306B\u8A2D\u5B9A\u3059\u308B // @\u304B\u3081\u304B\u304F\u3069\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078', '\u306E']],\n pure: true,\n fn: function (v: number, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['angle', v])\n },\n return_none: true\n },\n '\u30AB\u30E1\u53F3\u56DE\u8EE2': { // @\u30AB\u30E1\u306E\u5411\u304D\u3092DEG\u3060\u3051\u53F3\u306B\u5411\u3051\u308B // @\u304B\u3081\u307F\u304E\u304B\u3044\u3066\u3093\n type: 'func',\n josi: [['\u3060\u3051']],\n pure: true,\n fn: function (v: number, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['rotr', v])\n },\n return_none: true\n },\n '\u30AB\u30E1\u5DE6\u56DE\u8EE2': { // @\u30AB\u30E1\u306E\u5411\u304D\u3092DEG\u3060\u3051\u5DE6\u306B\u5411\u3051\u308B // @\u304B\u3081\u3072\u3060\u308A\u304B\u3044\u3066\u3093\n type: 'func',\n josi: [['\u3060\u3051']],\n pure: true,\n fn: function (v: number, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['rotl', v])\n },\n return_none: true\n },\n '\u30AB\u30E1\u30DA\u30F3\u8272\u8A2D\u5B9A': { // @\u30AB\u30E1\u306E\u30DA\u30F3\u63CF\u753B\u8272\u3092C\u306B\u8A2D\u5B9A\u3059\u308B // @\u304B\u3081\u307A\u3093\u3044\u308D\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (c: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['color', c])\n },\n return_none: true\n },\n '\u30AB\u30E1\u30DA\u30F3\u30B5\u30A4\u30BA\u8A2D\u5B9A': { // @\u30AB\u30E1\u30DA\u30F3\u306E\u30B5\u30A4\u30BA\u3092W\u306B\u8A2D\u5B9A\u3059\u308B // @\u304B\u3081\u307A\u3093\u3055\u3044\u305A\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (w: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['size', w])\n }\n },\n '\u30AB\u30E1\u30DA\u30F3\u8A2D\u5B9A': { // @\u30AB\u30E1\u30DA\u30F3\u3092\u4F7F\u3046\u304B\u3069\u3046\u304B\u3092V(\u30AA\u30F3/\u30AA\u30D5)\u306B\u8A2D\u5B9A\u3059\u308B // @\u304B\u3081\u307A\u3093\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (w: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['penOn', w])\n }\n },\n '\u30AB\u30E1\u30D1\u30B9\u958B\u59CB': { // @\u30AB\u30E1\u3067\u660E\u793A\u7684\u306B\u30D1\u30B9\u306E\u63CF\u753B\u3092\u958B\u59CB\u3059\u308B // @\u304B\u3081\u3071\u3059\u304B\u3044\u3057\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['begin'])\n }\n },\n '\u30AB\u30E1\u30D1\u30B9\u9589': { // @\u30AB\u30E1\u3067\u30D1\u30B9\u3092\u660E\u793A\u7684\u306B\u9589\u3058\u308B(\u7701\u7565\u53EF\u80FD) // @\u304B\u3081\u3071\u3059\u3068\u3058\u308B\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['close'])\n }\n },\n '\u30AB\u30E1\u30D1\u30B9\u7DDA\u5F15': { // @\u30AB\u30E1\u3067\u30D1\u30B9\u3092\u9589\u3058\u3066\u3001\u30AB\u30E1\u30DA\u30F3\u8272\u8A2D\u5B9A\u3067\u6307\u5B9A\u3057\u305F\u8272\u3067\u67A0\u7DDA\u3092\u5F15\u304F // @\u304B\u3081\u3071\u3059\u305B\u3093\u3072\u304F\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['stroke'])\n }\n },\n '\u30AB\u30E1\u30D1\u30B9\u5857': { // @\u30AB\u30E1\u3067\u30D1\u30B9\u3092\u9589\u3058\u3066\u3001\u30AB\u30E1\u5857\u308A\u8272\u8A2D\u5B9A\u3067\u6307\u5B9A\u3057\u305F\u8272\u3067\u5857\u308A\u3064\u3076\u3059 // @\u304B\u3081\u3071\u3059\u306C\u308B\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['fill'])\n }\n },\n '\u30AB\u30E1\u6587\u5B57\u63CF\u753B': { // @\u30AB\u30E1\u306E\u4F4D\u7F6E\u306B\u6587\u5B57S\u3092\u63CF\u753B // @\u304B\u3081\u3082\u3058\u3073\u3087\u3046\u304C\n type: 'func',\n josi: [['\u3092', '\u3068', '\u306E']],\n pure: true,\n fn: function (s: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['text', s])\n }\n },\n '\u30AB\u30E1\u6587\u5B57\u8A2D\u5B9A': { // @\u30AB\u30E1\u6587\u5B57\u63CF\u753B\u3067\u63CF\u753B\u3059\u308B\u30C6\u30AD\u30B9\u30C8\u30B5\u30A4\u30BA\u3084\u30D5\u30A9\u30F3\u30C8(48px serif)\u306A\u3069\u3092\u8A2D\u5B9A // @\u304B\u3081\u3082\u3058\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078', '\u3067']],\n pure: true,\n fn: function (s: string, sys: NakoSystem) {\n s = '' + s // \u6587\u5B57\u5217\u306B\n if (s.match(/^\\d+$/)) {\n s = s + 'px serif'\n } else if (s.match(/^\\d+(px|em)$/)) {\n s = s + ' serif'\n }\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['textset', s])\n }\n },\n '\u30AB\u30E1\u5857\u8272\u8A2D\u5B9A': { // @\u30AB\u30E1\u30D1\u30B9\u306E\u5857\u308A\u8272\u3092C\u306B\u8A2D\u5B9A\u3059\u308B // @\u304B\u3081\u306C\u308A\u3044\u308D\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (c: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['fillStyle', c])\n },\n return_none: true\n },\n '\u30AB\u30E1\u5168\u6D88\u53BB': { // @\u8868\u793A\u3057\u3066\u3044\u308B\u30AB\u30E1\u3068\u63CF\u753B\u5185\u5BB9\u3092\u5168\u90E8\u6D88\u53BB\u3059\u308B // @\u304B\u3081\u305C\u3093\u3057\u3087\u3046\u304D\u3087\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys: NakoSystem) {\n sys.tags.turtles.clearAll()\n },\n return_none: true\n },\n '\u30AB\u30E1\u30B3\u30DE\u30F3\u30C9\u5B9F\u884C': { // @\u30AB\u30E1\u306B\u30B3\u30DE\u30F3\u30C9S\u3092\u5B9F\u884C\u3059\u308B\u3002\u30B3\u30DE\u30F3\u30C9\u306F\u6539\u884C\u304B\u300C;\u300D\u3067\u533A\u5207\u308B\u3002\u30B3\u30DE\u30F3\u30C9\u3068\u5F15\u6570\u306F\u300C=\u300D\u3067\u533A\u5207\u308A\u5F15\u6570\u306F\u304B\u30AB\u30F3\u30DE\u3067\u533A\u5207\u308B // @\u304B\u3081\u3053\u307E\u3093\u3069\u3058\u3063\u3053\u3046\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (cmd: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n const a = cmd.split(/(\\n|;)/)\n for (let i = 0; i < a.length; i++) {\n let c = a[i]\n c = c.replace(/^([a-zA-Z_]+)\\s*(\\d+)/, '$1,$2')\n c = c.replace(/^([a-zA-Z_]+)\\s*=/, '$1,')\n const ca = c.split(/\\s*,\\s*/)\n turtles.addMacro(ca)\n }\n },\n return_none: true\n },\n '\u30AB\u30E1\u975E\u8868\u793A': { // @\u30AB\u30E1\u306E\u753B\u50CF\u3092\u975E\u8868\u793A\u306B\u3059\u308B\u3002\u63CF\u753B\u306B\u5F71\u97FF\u3057\u306A\u3044\u3002 // @\u304B\u3081\u3072\u3072\u3087\u3046\u3058\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['visible', false])\n },\n return_none: true\n },\n '\u30AB\u30E1\u8868\u793A': { // @\u975E\u8868\u793A\u306B\u3057\u305F\u30AB\u30E1\u3092\u8868\u793A\u3059\u308B\u3002 // @\u304B\u3081\u3072\u3087\u3046\u3058\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['visible', true])\n },\n return_none: true\n },\n '\u30AB\u30E1\u30AF\u30EA\u30C3\u30AF\u6642': { // @ \u64CD\u4F5C\u5BFE\u8C61\u306E\u30AB\u30E1\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u305F\u6642\u306E\u30A4\u30D9\u30F3\u30C8\u3092\u8A2D\u5B9A\u3059\u308B // @\u304B\u3081\u304F\u308A\u3063\u304F\u3057\u305F\u3068\u304D\n type: 'func',\n josi: [['\u3092']],\n pure: false,\n fn: function (func: NakoCallback, sys: NakoSystem) {\n func = sys.__findVar(func, null) // \u6587\u5B57\u5217\u6307\u5B9A\u306A\u3089\u95A2\u6570\u306B\u5909\u63DB\n if (typeof func !== 'function') { return }\n const tid = sys.tags.turtles.target\n const tt = sys.tags.turtles.list[tid]\n tt.canvas.onclick = (e: Event) => {\n sys.__setSysVar('\u5BFE\u8C61', e.target)\n return func(e, sys)\n }\n },\n return_none: true\n }\n}\n\n// module.exports = PluginTurtle\nexport default PluginTurtle\n\n// script\u30BF\u30B0\u3067\u53D6\u308A\u8FBC\u3093\u3060\u6642\u3001\u81EA\u52D5\u3067\u767B\u9332\u3059\u308B\n// @ts-ignore TS2339\nif (typeof (navigator) === 'object' && typeof (navigator.nako3)) { navigator.nako3.addPluginObject('PluginTurtle', PluginTurtle) }\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * images\n */\nexport const turtleImage = 'data:image/png;base64,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';\nexport const elephantImage = 'data:image/png;base64,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';\nexport const pandaImage = 'data:image/png;base64,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';\n", "/**\n * Turtle Graphics for Web browser (nadesiko3)\n * plugin_turtle.mts\n */\n\nimport { NakoSystem, NakoCallback } from '../core/src/plugin_api.mjs'\nimport { turtleImage, elephantImage, pandaImage } from './plugin_turtle_images.mjs'\n\nclass NakoTurtle {\n id: number\n img: any\n canvas: any\n ctx: any\n dir: number\n cx: number\n cy: number\n x: number\n y: number\n color: string\n lineWidth: number\n flagDown: boolean\n flagBegeinPath: boolean\n f_update: boolean\n flagLoaded: boolean\n f_visible: boolean\n mlist: any[]\n sys: NakoSystem\n\n constructor(sys: NakoSystem, id: number) {\n this.sys = sys\n this.id = id\n this.img = null\n this.canvas = null\n this.ctx = null\n this.dir = 270 // \u4E0A\u5411\u304D\n this.cx = 32\n this.cy = 32\n this.x = 0\n this.y = 0\n this.color = 'black'\n this.lineWidth = 4\n this.flagDown = true\n this.flagBegeinPath = false\n this.f_update = true\n this.flagLoaded = false\n this.f_visible = true\n this.mlist = []\n }\n\n clear() {\n this.mlist = [] // \u30B8\u30E7\u30D6\u3092\u30AF\u30EA\u30A2\n document.body.removeChild(this.canvas)\n }\n\n loadImage(url: string, callback: any) {\n this.canvas = document.createElement('canvas')\n this.ctx = this.canvas.getContext('2d')\n this.canvas.id = this.id\n this.img = document.createElement('img')\n this.img.onload = () => {\n this.cx = this.img.width / 2\n this.cy = this.img.height / 2\n this.canvas.width = this.img.width\n this.canvas.height = this.img.height\n this.flagLoaded = true\n this.f_update = true\n this.canvas.style.position = 'absolute'\n document.body.appendChild(this.canvas)\n // console.log('createTurtle::this.turtles=', this)\n callback(this)\n }\n this.img.onerror = () => {\n console.log('\u30AB\u30E1\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557')\n this.flagLoaded = true\n this.f_visible = false\n this.f_update = true\n callback(this)\n }\n this.img.src = url\n }\n}\n\nclass NakoTurtleSystem {\n turtles: NakoTurtle[]\n target: number\n ctx: any\n canvas: any\n canvas_r: any\n flagSetTimer: boolean\n timerId: any\n sys: NakoSystem\n instanceCount: number\n // Singleton\n \n static instance: NakoTurtleSystem\n static getInstance(sys: NakoSystem) {\n if (NakoTurtleSystem.instance === undefined) {\n NakoTurtleSystem.instance = new NakoTurtleSystem(sys)\n }\n const i = NakoTurtleSystem.instance\n i.instanceCount += 1\n return NakoTurtleSystem.instance\n }\n\n constructor(sys: NakoSystem) {\n this.sys = sys\n this.turtles = [] // \u30AB\u30E1\u306E\u4E00\u89A7\n this.target = -1\n this.ctx = null\n this.canvas = null\n this.canvas_r = { left: 0, top: 0, width: 640, height: 400 }\n this.flagSetTimer = false\n this.instanceCount = 0\n this.timerId = null\n }\n\n clearAll() {\n // console.log('\u30AB\u30E1\u5168\u6D88\u53BB turtles=', this.turtles)\n for (let i = 0; i < this.turtles.length; i++) {\n const tt = this.turtles[i]\n tt.clear()\n }\n this.turtles = []\n if (this.canvas !== null) {\n this.ctx.clearRect(0, 0,\n this.canvas.width,\n this.canvas.height)\n }\n this.target = -1\n this.flagSetTimer = false\n }\n\n drawTurtle(id: number) {\n const tt = this.turtles[id]\n if (!tt) { return }\n const cr = this.canvas_r\n // \u30AB\u30E1\u306E\u4F4D\u7F6E\u3092\u79FB\u52D5\n tt.canvas.style.left = (cr.left + tt.x - tt.cx) + 'px'\n tt.canvas.style.top = (cr.top + tt.y - tt.cx) + 'px'\n if (!tt.f_update) { return }\n /* istanbul ignore if */\n if (!tt.flagLoaded) { return }\n tt.f_update = false\n tt.ctx.clearRect(0, 0,\n tt.canvas.width,\n tt.canvas.height)\n if (!tt.f_visible) { return }\n if (tt.dir !== 270) {\n const rad = (tt.dir + 90) * 0.017453292519943295\n tt.ctx.save()\n tt.ctx.translate(tt.cx, tt.cy)\n tt.ctx.rotate(rad)\n tt.ctx.translate(-tt.cx, -tt.cy)\n tt.ctx.drawImage(tt.img, 0, 0)\n tt.ctx.restore()\n } else { tt.ctx.drawImage(tt.img, 0, 0) }\n }\n\n getCur() {\n if (this.turtles.length === 0) { throw Error('\u6700\u521D\u306B\u300E\u30AB\u30E1\u4F5C\u6210\u300F\u547D\u4EE4\u3092\u547C\u3073\u51FA\u3057\u3066\u304F\u3060\u3055\u3044\u3002') }\n return this.turtles[this.target]\n }\n\n setTimer() {\n // \u30B3\u30DE\u30F3\u30C9\u8A2D\u5B9A\u5F8C\u30011\u5EA6\u3060\u3051\u3053\u306E\u95A2\u6570\u3092\u547C\u3073\u51FA\u3059\n if (this.flagSetTimer) { return }\n this.flagSetTimer = true\n // \u8A18\u9332\u3057\u305F\u30DE\u30AF\u30ED\u3092\u518D\u751F\u3059\u308B\n if (this.timerId) { clearTimeout(this.timerId) }\n this.timerId = setTimeout(() => {\n console.log('[TURTLE] Let\\'s go!')\n this.play()\n }, 1)\n }\n\n line(tt: NakoTurtle, x1: number, y1: number, x2: number, y2: number) {\n /* istanbul ignore else */\n if (tt) { if (!tt.flagDown) { return } }\n\n const ctx = this.ctx\n if (tt.flagBegeinPath) {\n ctx.lineTo(x2, y2)\n } else {\n ctx.beginPath()\n ctx.lineWidth = tt.lineWidth\n ctx.strokeStyle = tt.color\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n ctx.stroke()\n }\n }\n\n addMacro(args: Array<any>) {\n const tt: NakoTurtle = this.getCur()\n tt.mlist.push(args)\n this.setTimer()\n }\n\n doMacro(tt: NakoTurtle, wait: number) {\n if (!tt.flagLoaded && wait > 0) {\n // console.log('[TURTLE] waiting ...')\n return true\n }\n const m = tt.mlist.shift()\n const cmd = (m !== undefined) ? m[0] : ''\n // console.log('@@@doMacro', cmd, m, tt.x, tt.y, ': dir=', tt.dir)\n switch (cmd) {\n case 'xy':\n // \u8D77\u70B9\u3092\u79FB\u52D5\u3059\u308B\n tt.x = m[1]\n tt.y = m[2]\n break\n case 'begin':\n // \u63CF\u753B\u3092\u660E\u793A\u7684\u306B\u958B\u59CB\u3059\u308B\n this.ctx.beginPath()\n this.ctx.moveTo(tt.x, tt.y)\n tt.flagBegeinPath = true\n break\n case 'close':\n // \u30D1\u30B9\u3092\u9589\u3058\u308B\n this.ctx.closePath()\n tt.flagBegeinPath = false\n break\n case 'fill':\n if (tt.flagBegeinPath) {\n this.ctx.closePath()\n tt.flagBegeinPath = false\n }\n this.ctx.fill()\n break\n case 'stroke':\n if (tt.flagBegeinPath) {\n this.ctx.closePath()\n tt.flagBegeinPath = false\n }\n this.ctx.stroke()\n break\n case 'text':\n this.ctx.fillText(m[1], tt.x, tt.y)\n break\n case 'textset':\n this.ctx.font = m[1]\n break\n case 'fillStyle':\n this.ctx.fillStyle = m[1]\n break\n case 'mv': {\n // \u7DDA\u3092\u5F15\u304F\n this.line(tt, tt.x, tt.y, m[1], m[2])\n // \u30AB\u30E1\u306E\u89D2\u5EA6\u3092\u5909\u66F4\n const mvRad = Math.atan2(m[2] - tt.y, m[1] - tt.x)\n tt.dir = mvRad * 57.29577951308232\n tt.f_update = true\n // \u5B9F\u969B\u306B\u4F4D\u7F6E\u3092\u79FB\u52D5\n tt.x = m[1]\n tt.y = m[2]\n break\n }\n case 'fd': {\n const fdv = m[1] * m[2]\n const rad = tt.dir * 0.017453292519943295\n const x2 = tt.x + Math.cos(rad) * fdv\n const y2 = tt.y + Math.sin(rad) * fdv\n this.line(tt, tt.x, tt.y, x2, y2)\n tt.x = x2\n tt.y = y2\n // console.log('@@@fd', m, tt.x, tt.y, ': dir=', tt.dir)\n break\n }\n case 'angle': {\n const angle = m[1]\n tt.dir = ((angle - 90 + 360) % 360)\n tt.f_update = true\n break\n }\n case 'rotr': {\n const rv = m[1]\n tt.dir = (tt.dir + rv) % 360\n tt.f_update = true\n break\n }\n case 'rotl': {\n const lv = m[1]\n tt.dir = (tt.dir - lv + 360) % 360\n tt.f_update = true\n break\n }\n case 'color':\n tt.color = m[1]\n this.ctx.strokeStyle = tt.color\n break\n case 'size':\n tt.lineWidth = m[1]\n this.ctx.lineWidth = tt.lineWidth\n break\n case 'penOn':\n tt.flagDown = m[1]\n break\n case 'visible':\n tt.f_visible = m[1]\n tt.f_update = true\n break\n case 'changeImage':\n tt.flagLoaded = false\n tt.img.src = m[1]\n break\n }\n if (tt.flagLoaded) { this.drawTurtle(tt.id) }\n return (tt.mlist.length > 0)\n }\n\n doMacroAll(wait: number) {\n let hasNext = false\n for (let i = 0; i < this.turtles.length; i++) {\n const tt = this.turtles[i]\n if (this.doMacro(tt, wait)) { hasNext = true }\n }\n return hasNext\n }\n\n play() {\n const wait = this.sys.__getSysVar('\u30AB\u30E1\u901F\u5EA6')\n let hasNext = this.doMacroAll(wait)\n if (wait <= 0) {\n // \u5F85\u3061\u6642\u9593\u306A\u3057\u3067\u5168\u90E8\u5B9F\u884C\n while (hasNext) { hasNext = this.doMacroAll(wait) }\n } else if (hasNext) {\n // \u4E00\u3064\u305A\u3064\u5B9F\u884C\n if (this.timerId) { clearTimeout(this.timerId) }\n this.timerId = setTimeout(() => this.play(), wait)\n return\n }\n console.log('[TURTLE] finished.')\n this.flagSetTimer = false\n }\n\n setupCanvas() {\n // \u63CF\u753B\u5148\u3092\u30BB\u30C3\u30C8\u3059\u308B\n let canvasId = this.sys.__getSysVar('\u30AB\u30E1\u63CF\u753B\u5148')\n if (typeof canvasId === 'string') {\n canvasId = document.getElementById(canvasId) || document.querySelector(canvasId)\n this.sys.__setSysVar('\u30AB\u30E1\u63CF\u753B\u5148', canvasId)\n }\n console.log('\u30AB\u30E1\u63CF\u753B\u5148=', canvasId)\n const cv = this.canvas = canvasId\n if (!cv) {\n console.log('[ERROR] \u30AB\u30E1\u63CF\u753B\u5148\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002' + canvasId)\n throw Error('\u30AB\u30E1\u63CF\u753B\u5148\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002')\n }\n const ctx = this.ctx = cv.getContext('2d')\n ctx.lineWidth = 4\n ctx.strokeStyle = 'black'\n ctx.lineCap = 'round'\n this.resizeCanvas()\n }\n\n resizeCanvas() {\n const cv = this.canvas\n const rect = cv.getBoundingClientRect()\n const rx = rect.left + window.scrollX\n const ry = rect.top + window.scrollY\n this.canvas_r = {\n 'left': rx,\n 'top': ry,\n width: rect.width,\n height: rect.height\n }\n }\n\n createTurtle(imageUrl: string) {\n // \u30AD\u30E3\u30F3\u30D0\u30B9\u60C5\u5831\u306F\u6BCE\u56DE\u53C2\u7167\u3059\u308B (#734)\n this.setupCanvas()\n // \u30AB\u30E1\u306E\u60C5\u5831\u3092\u30EA\u30B9\u30C8\u306B\u8FFD\u52A0\n const id = this.turtles.length\n const tt: NakoTurtle = new NakoTurtle(this.sys, id)\n this.turtles.push(tt)\n this.target = id\n // \u753B\u50CF\u3092\u8AAD\u307F\u8FBC\u3080\n tt.loadImage(imageUrl, (tt: NakoTurtle) => {\n this.drawTurtle(tt.id)\n console.log(`tutrle.onload(id=${tt.id})`)\n })\n // \u30C7\u30D5\u30A9\u30EB\u30C8\u4F4D\u7F6E(\u4E2D\u592E)\u306E\u8A2D\u5B9A\n tt.x = this.canvas_r.width / 2\n tt.y = this.canvas_r.height / 2\n return id\n }\n}\n\nconst PluginTurtle = {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_turtle', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: '\u30BF\u30FC\u30C8\u30EB\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF\u30B9\u7528\u306E\u30D7\u30E9\u30B0\u30A4\u30F3', // \u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '3.6.3' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n const turtleSystem: NakoTurtleSystem = NakoTurtleSystem.getInstance(sys)\n sys.tags.turtles = turtleSystem\n }\n },\n\n '!\u30AF\u30EA\u30A2': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n // console.log('tutle::!\u30AF\u30EA\u30A2')\n sys.tags.turtles.clearAll()\n }\n },\n\n // @\u30BF\u30FC\u30C8\u30EB\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF\u30B9\u30FB\u30AB\u30E1\u63CF\u753B\n '\u30AB\u30E1\u4F5C\u6210': { // @\u30BF\u30FC\u30C8\u30EB\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF\u30B9\u3092\u958B\u59CB\u3057\u3066\u30AB\u30E1\u306EID\u3092\u8FD4\u3059 // @\u304B\u3081\u3055\u304F\u305B\u3044\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n const imageUrl = sys.__getSysVar('\u30AB\u30E1\u753B\u50CFURL')\n return sys.tags.turtles.createTurtle(imageUrl)\n }\n },\n '\u30BE\u30A6\u4F5C\u6210': { // @\u30BE\u30A6\u306E\u753B\u50CF\u3067\u30BF\u30FC\u30C8\u30EB\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF\u30B9\u3092\u958B\u59CB\u3057\u3066ID\u3092\u8FD4\u3059 // @\u305E\u3046\u3055\u304F\u305B\u3044\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n const imageUrl = elephantImage\n return sys.tags.turtles.createTurtle(imageUrl)\n }\n },\n '\u30D1\u30F3\u30C0\u4F5C\u6210': { // @\u30D1\u30F3\u30C0\u306E\u753B\u50CF\u3067\u30BF\u30FC\u30C8\u30EB\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF\u30B9\u3092\u958B\u59CB\u3057\u3066ID\u3092\u8FD4\u3059 // @\u3071\u3093\u3060\u3055\u304F\u305B\u3044\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n const imageUrl = pandaImage\n return sys.tags.turtles.createTurtle(imageUrl)\n }\n },\n '\u30AB\u30E1\u64CD\u4F5C\u5BFE\u8C61\u8A2D\u5B9A': { // @ID\u3092\u6307\u5B9A\u3057\u3066\u64CD\u4F5C\u5BFE\u8C61\u3068\u306A\u308B\u30AB\u30E1\u3092\u5909\u66F4\u3059\u308B // @\u304B\u3081\u305D\u3046\u3055\u305F\u3044\u3057\u3087\u3046\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078', '\u306E']],\n pure: true,\n fn: function(id: number, sys: NakoSystem) {\n sys.tags.turtles.target = id\n },\n return_none: true\n },\n '\u30AB\u30E1\u63CF\u753B\u5148': { type: 'var', value: '#turtle_cv' }, // @\u304B\u3081\u3073\u3087\u3046\u304C\u3055\u304D\n '\u30AB\u30E1\u753B\u50CFURL': { type: 'var', value: turtleImage }, // @\u304B\u3081\u304C\u305E\u3046URL\n '\u30AB\u30E1\u753B\u50CF\u5909\u66F4': { // @\u30AB\u30E1\u306E\u753B\u50CF\u3092URL\u306B\u5909\u66F4\u3059\u308B // @\u304B\u3081\u304C\u305E\u3046\u3078\u3093\u3053\u3046\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function(url: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['changeImage', url])\n },\n return_none: true\n },\n '\u30AB\u30E1\u901F\u5EA6': { type: 'const', value: 100 }, // @\u304B\u3081\u305D\u304F\u3069\n '\u30AB\u30E1\u901F\u5EA6\u8A2D\u5B9A': { // @\u30AB\u30E1\u306E\u52D5\u4F5C\u901F\u5EA6v\u306B\u8A2D\u5B9A(\u5927\u304D\u3044\u307B\u3069\u9045\u3044) // @\u304B\u3081\u305D\u304F\u3069\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function(v: number, sys: NakoSystem) {\n sys.__setSysVar('\u30AB\u30E1\u901F\u5EA6', v)\n }\n },\n '\u30AB\u30E1\u79FB\u52D5': { // @\u30AB\u30E1\u306E\u4F4D\u7F6E\u3092[x,y]\u3078\u79FB\u52D5\u3059\u308B // @\u304B\u3081\u3044\u3069\u3046\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function(xy: number[], sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['mv', xy[0], xy[1]])\n },\n return_none: true\n },\n '\u30AB\u30E1\u8D77\u70B9\u79FB\u52D5': { // @\u30AB\u30E1\u306E\u63CF\u753B\u8D77\u70B9\u4F4D\u7F6E\u3092[x,y]\u3078\u79FB\u52D5\u3059\u308B // @\u304B\u3081\u304D\u3066\u3093\u3044\u3069\u3046\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function(xy: number[], sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['xy', xy[0], xy[1]])\n },\n return_none: true\n },\n '\u30AB\u30E1\u9032': { // @\u30AB\u30E1\u306E\u4F4D\u7F6E\u3092V\u3060\u3051\u9032\u3081\u308B // @\u304B\u3081\u3059\u3059\u3080\n type: 'func',\n josi: [['\u3060\u3051']],\n pure: true,\n fn: function(v: number, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['fd', v, 1])\n },\n return_none: true\n },\n '\u30AB\u30E1\u623B': { // @\u30AB\u30E1\u306E\u4F4D\u7F6E\u3092V\u3060\u3051\u623B\u3059 // @\u304B\u3081\u3082\u3069\u308B\n type: 'func',\n josi: [['\u3060\u3051']],\n pure: true,\n fn: function(v: number, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['fd', v, -1])\n },\n return_none: true\n },\n '\u30AB\u30E1\u89D2\u5EA6\u8A2D\u5B9A': { // @\u30AB\u30E1\u306E\u5411\u304D\u3092DEG\u306B\u8A2D\u5B9A\u3059\u308B // @\u304B\u3081\u304B\u304F\u3069\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078', '\u306E']],\n pure: true,\n fn: function(v: number, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['angle', v])\n },\n return_none: true\n },\n '\u30AB\u30E1\u53F3\u56DE\u8EE2': { // @\u30AB\u30E1\u306E\u5411\u304D\u3092DEG\u3060\u3051\u53F3\u306B\u5411\u3051\u308B // @\u304B\u3081\u307F\u304E\u304B\u3044\u3066\u3093\n type: 'func',\n josi: [['\u3060\u3051']],\n pure: true,\n fn: function(v: number, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['rotr', v])\n },\n return_none: true\n },\n '\u30AB\u30E1\u5DE6\u56DE\u8EE2': { // @\u30AB\u30E1\u306E\u5411\u304D\u3092DEG\u3060\u3051\u5DE6\u306B\u5411\u3051\u308B // @\u304B\u3081\u3072\u3060\u308A\u304B\u3044\u3066\u3093\n type: 'func',\n josi: [['\u3060\u3051']],\n pure: true,\n fn: function(v: number, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['rotl', v])\n },\n return_none: true\n },\n '\u30AB\u30E1\u30DA\u30F3\u8272\u8A2D\u5B9A': { // @\u30AB\u30E1\u306E\u30DA\u30F3\u63CF\u753B\u8272\u3092C\u306B\u8A2D\u5B9A\u3059\u308B // @\u304B\u3081\u307A\u3093\u3044\u308D\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function(c: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['color', c])\n },\n return_none: true\n },\n '\u30AB\u30E1\u30DA\u30F3\u30B5\u30A4\u30BA\u8A2D\u5B9A': { // @\u30AB\u30E1\u30DA\u30F3\u306E\u30B5\u30A4\u30BA\u3092W\u306B\u8A2D\u5B9A\u3059\u308B // @\u304B\u3081\u307A\u3093\u3055\u3044\u305A\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function(w: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['size', w])\n }\n },\n '\u30AB\u30E1\u30DA\u30F3\u8A2D\u5B9A': { // @\u30AB\u30E1\u30DA\u30F3\u3092\u4F7F\u3046\u304B\u3069\u3046\u304B\u3092V(\u30AA\u30F3/\u30AA\u30D5)\u306B\u8A2D\u5B9A\u3059\u308B // @\u304B\u3081\u307A\u3093\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function(w: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['penOn', w])\n }\n },\n '\u30AB\u30E1\u30D1\u30B9\u958B\u59CB': { // @\u30AB\u30E1\u3067\u660E\u793A\u7684\u306B\u30D1\u30B9\u306E\u63CF\u753B\u3092\u958B\u59CB\u3059\u308B // @\u304B\u3081\u3071\u3059\u304B\u3044\u3057\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['begin'])\n }\n },\n '\u30AB\u30E1\u30D1\u30B9\u9589': { // @\u30AB\u30E1\u3067\u30D1\u30B9\u3092\u660E\u793A\u7684\u306B\u9589\u3058\u308B(\u7701\u7565\u53EF\u80FD) // @\u304B\u3081\u3071\u3059\u3068\u3058\u308B\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['close'])\n }\n },\n '\u30AB\u30E1\u30D1\u30B9\u7DDA\u5F15': { // @\u30AB\u30E1\u3067\u30D1\u30B9\u3092\u9589\u3058\u3066\u3001\u30AB\u30E1\u30DA\u30F3\u8272\u8A2D\u5B9A\u3067\u6307\u5B9A\u3057\u305F\u8272\u3067\u67A0\u7DDA\u3092\u5F15\u304F // @\u304B\u3081\u3071\u3059\u305B\u3093\u3072\u304F\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['stroke'])\n }\n },\n '\u30AB\u30E1\u30D1\u30B9\u5857': { // @\u30AB\u30E1\u3067\u30D1\u30B9\u3092\u9589\u3058\u3066\u3001\u30AB\u30E1\u5857\u308A\u8272\u8A2D\u5B9A\u3067\u6307\u5B9A\u3057\u305F\u8272\u3067\u5857\u308A\u3064\u3076\u3059 // @\u304B\u3081\u3071\u3059\u306C\u308B\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['fill'])\n }\n },\n '\u30AB\u30E1\u6587\u5B57\u63CF\u753B': { // @\u30AB\u30E1\u306E\u4F4D\u7F6E\u306B\u6587\u5B57S\u3092\u63CF\u753B // @\u304B\u3081\u3082\u3058\u3073\u3087\u3046\u304C\n type: 'func',\n josi: [['\u3092', '\u3068', '\u306E']],\n pure: true,\n fn: function(s: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['text', s])\n }\n },\n '\u30AB\u30E1\u6587\u5B57\u8A2D\u5B9A': { // @\u30AB\u30E1\u6587\u5B57\u63CF\u753B\u3067\u63CF\u753B\u3059\u308B\u30C6\u30AD\u30B9\u30C8\u30B5\u30A4\u30BA\u3084\u30D5\u30A9\u30F3\u30C8(48px serif)\u306A\u3069\u3092\u8A2D\u5B9A // @\u304B\u3081\u3082\u3058\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078', '\u3067']],\n pure: true,\n fn: function(s: string, sys: NakoSystem) {\n s = '' + s // \u6587\u5B57\u5217\u306B\n if (s.match(/^\\d+$/)) {\n s = s + 'px serif'\n } else if (s.match(/^\\d+(px|em)$/)) {\n s = s + ' serif'\n }\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['textset', s])\n }\n },\n '\u30AB\u30E1\u5857\u8272\u8A2D\u5B9A': { // @\u30AB\u30E1\u30D1\u30B9\u306E\u5857\u308A\u8272\u3092C\u306B\u8A2D\u5B9A\u3059\u308B // @\u304B\u3081\u306C\u308A\u3044\u308D\u305B\u3063\u3066\u3044\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function(c: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['fillStyle', c])\n },\n return_none: true\n },\n '\u30AB\u30E1\u5168\u6D88\u53BB': { // @\u8868\u793A\u3057\u3066\u3044\u308B\u30AB\u30E1\u3068\u63CF\u753B\u5185\u5BB9\u3092\u5168\u90E8\u6D88\u53BB\u3059\u308B // @\u304B\u3081\u305C\u3093\u3057\u3087\u3046\u304D\u3087\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n sys.tags.turtles.clearAll()\n },\n return_none: true\n },\n '\u30AB\u30E1\u30B3\u30DE\u30F3\u30C9\u5B9F\u884C': { // @\u30AB\u30E1\u306B\u30B3\u30DE\u30F3\u30C9S\u3092\u5B9F\u884C\u3059\u308B\u3002\u30B3\u30DE\u30F3\u30C9\u306F\u6539\u884C\u304B\u300C;\u300D\u3067\u533A\u5207\u308B\u3002\u30B3\u30DE\u30F3\u30C9\u3068\u5F15\u6570\u306F\u300C=\u300D\u3067\u533A\u5207\u308A\u5F15\u6570\u306F\u304B\u30AB\u30F3\u30DE\u3067\u533A\u5207\u308B // @\u304B\u3081\u3053\u307E\u3093\u3069\u3058\u3063\u3053\u3046\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function(cmd: string, sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n const a = cmd.split(/(\\n|;)/)\n for (let i = 0; i < a.length; i++) {\n let c = a[i]\n c = c.replace(/^([a-zA-Z_]+)\\s*(\\d+)/, '$1,$2')\n c = c.replace(/^([a-zA-Z_]+)\\s*=/, '$1,')\n const ca = c.split(/\\s*,\\s*/)\n turtles.addMacro(ca)\n }\n },\n return_none: true\n },\n '\u30AB\u30E1\u975E\u8868\u793A': { // @\u30AB\u30E1\u306E\u753B\u50CF\u3092\u975E\u8868\u793A\u306B\u3059\u308B\u3002\u63CF\u753B\u306B\u5F71\u97FF\u3057\u306A\u3044\u3002 // @\u304B\u3081\u3072\u3072\u3087\u3046\u3058\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['visible', false])\n },\n return_none: true\n },\n '\u30AB\u30E1\u8868\u793A': { // @\u975E\u8868\u793A\u306B\u3057\u305F\u30AB\u30E1\u3092\u8868\u793A\u3059\u308B\u3002 // @\u304B\u3081\u3072\u3087\u3046\u3058\n type: 'func',\n josi: [],\n pure: true,\n fn: function(sys: NakoSystem) {\n const turtles: NakoTurtleSystem = sys.tags.turtles\n turtles.addMacro(['visible', true])\n },\n return_none: true\n },\n '\u30AB\u30E1\u30AF\u30EA\u30C3\u30AF\u6642': { // @ \u64CD\u4F5C\u5BFE\u8C61\u306E\u30AB\u30E1\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u305F\u6642\u306E\u30A4\u30D9\u30F3\u30C8\u3092\u8A2D\u5B9A\u3059\u308B // @\u304B\u3081\u304F\u308A\u3063\u304F\u3057\u305F\u3068\u304D\n type: 'func',\n josi: [['\u3092']],\n pure: false,\n fn: function(func: NakoCallback, sys: NakoSystem) {\n func = sys.__findVar(func, null) // \u6587\u5B57\u5217\u6307\u5B9A\u306A\u3089\u95A2\u6570\u306B\u5909\u63DB\n if (typeof func !== 'function') { return }\n const tid = sys.tags.turtles.target\n const tt = sys.tags.turtles.list[tid]\n tt.canvas.onclick = (e: Event) => {\n sys.__setSysVar('\u5BFE\u8C61', e.target)\n return func(e, sys)\n }\n },\n return_none: true\n }\n}\n\n// module.exports = PluginTurtle\nexport default PluginTurtle\n\n// script\u30BF\u30B0\u3067\u53D6\u308A\u8FBC\u3093\u3060\u6642\u3001\u81EA\u52D5\u3067\u767B\u9332\u3059\u308B\n// @ts-ignore TS2339\nif (typeof (navigator) === 'object' && typeof (navigator.nako3)) { navigator.nako3.addPluginObject('PluginTurtle', PluginTurtle) }\n"],
|
|
5
|
+
"mappings": "mBAGO,IAAMA,EAAc,64GACdC,EAAgB,6uLAChBC,EAAa,6nMCG1B,IAAMC,EAAN,KAAiB,CAoBf,YAAYC,EAAiBC,EAAY,CACvC,KAAK,IAAMD,EACX,KAAK,GAAKC,EACV,KAAK,IAAM,KACX,KAAK,OAAS,KACd,KAAK,IAAM,KACX,KAAK,IAAM,IACX,KAAK,GAAK,GACV,KAAK,GAAK,GACV,KAAK,EAAI,EACT,KAAK,EAAI,EACT,KAAK,MAAQ,QACb,KAAK,UAAY,EACjB,KAAK,SAAW,GAChB,KAAK,eAAiB,GACtB,KAAK,SAAW,GAChB,KAAK,WAAa,GAClB,KAAK,UAAY,GACjB,KAAK,MAAQ,CAAC,CAChB,CAEA,OAAQ,CACN,KAAK,MAAQ,CAAC,EACd,SAAS,KAAK,YAAY,KAAK,MAAM,CACvC,CAEA,UAAUC,EAAaC,EAAe,CACpC,KAAK,OAAS,SAAS,cAAc,QAAQ,EAC7C,KAAK,IAAM,KAAK,OAAO,WAAW,IAAI,EACtC,KAAK,OAAO,GAAK,KAAK,GACtB,KAAK,IAAM,SAAS,cAAc,KAAK,EACvC,KAAK,IAAI,OAAS,IAAM,CACtB,KAAK,GAAK,KAAK,IAAI,MAAQ,EAC3B,KAAK,GAAK,KAAK,IAAI,OAAS,EAC5B,KAAK,OAAO,MAAQ,KAAK,IAAI,MAC7B,KAAK,OAAO,OAAS,KAAK,IAAI,OAC9B,KAAK,WAAa,GAClB,KAAK,SAAW,GAChB,KAAK,OAAO,MAAM,SAAW,WAC7B,SAAS,KAAK,YAAY,KAAK,MAAM,EAErCA,EAAS,IAAI,CACf,EACA,KAAK,IAAI,QAAU,IAAM,CACvB,QAAQ,IAAI,8DAAY,EACxB,KAAK,WAAa,GAClB,KAAK,UAAY,GACjB,KAAK,SAAW,GAChBA,EAAS,IAAI,CACf,EACA,KAAK,IAAI,IAAMD,CACjB,CACF,EAEME,EAAN,MAAMC,CAAiB,CAarB,OAAO,YAAYL,EAAiB,CAC9BK,EAAiB,WAAa,SAChCA,EAAiB,SAAW,IAAIA,EAAiBL,CAAG,GAEtD,IAAMM,EAAID,EAAiB,SAC3B,OAAAC,EAAE,eAAiB,EACZD,EAAiB,QAC1B,CAEA,YAAYL,EAAiB,CAC3B,KAAK,IAAMA,EACX,KAAK,QAAU,CAAC,EAChB,KAAK,OAAS,GACd,KAAK,IAAM,KACX,KAAK,OAAS,KACd,KAAK,SAAW,CAAE,KAAM,EAAG,IAAK,EAAG,MAAO,IAAK,OAAQ,GAAI,EAC3D,KAAK,aAAe,GACpB,KAAK,cAAgB,EACrB,KAAK,QAAU,IACjB,CAEA,UAAW,CAET,QAASM,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQA,IAC5B,KAAK,QAAQA,CAAC,EACtB,MAAM,EAEX,KAAK,QAAU,CAAC,EACZ,KAAK,SAAW,MAClB,KAAK,IAAI,UAAU,EAAG,EACpB,KAAK,OAAO,MACZ,KAAK,OAAO,MAAM,EAEtB,KAAK,OAAS,GACd,KAAK,aAAe,EACtB,CAEA,WAAWL,EAAY,CACrB,IAAMM,EAAK,KAAK,QAAQN,CAAE,EAC1B,GAAI,CAACM,EAAM,OACX,IAAMC,EAAK,KAAK,SAIhB,GAFAD,EAAG,OAAO,MAAM,KAAQC,EAAG,KAAOD,EAAG,EAAIA,EAAG,GAAM,KAClDA,EAAG,OAAO,MAAM,IAAOC,EAAG,IAAMD,EAAG,EAAIA,EAAG,GAAM,KAC5C,EAACA,EAAG,UAEHA,EAAG,aACRA,EAAG,SAAW,GACdA,EAAG,IAAI,UAAU,EAAG,EAClBA,EAAG,OAAO,MACVA,EAAG,OAAO,MAAM,EACd,EAACA,EAAG,WACR,GAAIA,EAAG,MAAQ,IAAK,CAClB,IAAME,GAAOF,EAAG,IAAM,IAAM,oBAC5BA,EAAG,IAAI,KAAK,EACZA,EAAG,IAAI,UAAUA,EAAG,GAAIA,EAAG,EAAE,EAC7BA,EAAG,IAAI,OAAOE,CAAG,EACjBF,EAAG,IAAI,UAAU,CAACA,EAAG,GAAI,CAACA,EAAG,EAAE,EAC/BA,EAAG,IAAI,UAAUA,EAAG,IAAK,EAAG,CAAC,EAC7BA,EAAG,IAAI,QAAQ,CACjB,MAASA,EAAG,IAAI,UAAUA,EAAG,IAAK,EAAG,CAAC,CACxC,CAEA,QAAS,CACP,GAAI,KAAK,QAAQ,SAAW,EAAK,MAAM,MAAM,sIAAwB,EACrE,OAAO,KAAK,QAAQ,KAAK,MAAM,CACjC,CAEA,UAAW,CAEL,KAAK,eACT,KAAK,aAAe,GAEhB,KAAK,SAAW,aAAa,KAAK,OAAO,EAC7C,KAAK,QAAU,WAAW,IAAM,CAC9B,QAAQ,IAAI,oBAAqB,EACjC,KAAK,KAAK,CACZ,EAAG,CAAC,EACN,CAEA,KAAKA,EAAgBG,EAAYC,EAAYC,EAAYC,EAAY,CAEnE,GAAIN,GAAU,CAACA,EAAG,SAAY,OAE9B,IAAMO,EAAM,KAAK,IACbP,EAAG,eACLO,EAAI,OAAOF,EAAIC,CAAE,GAEjBC,EAAI,UAAU,EACdA,EAAI,UAAYP,EAAG,UACnBO,EAAI,YAAcP,EAAG,MACrBO,EAAI,OAAOJ,EAAIC,CAAE,EACjBG,EAAI,OAAOF,EAAIC,CAAE,EACjBC,EAAI,OAAO,EAEf,CAEA,SAASC,EAAkB,CACF,KAAK,OAAO,EAChC,MAAM,KAAKA,CAAI,EAClB,KAAK,SAAS,CAChB,CAEA,QAAQR,EAAgBS,EAAc,CACpC,GAAI,CAACT,EAAG,YAAcS,EAAO,EAE3B,MAAO,GAET,IAAMC,EAAIV,EAAG,MAAM,MAAM,EAGzB,OAFaU,IAAM,OAAaA,EAAE,CAAC,EAAI,GAE1B,CACb,IAAK,KAEHV,EAAG,EAAIU,EAAE,CAAC,EACVV,EAAG,EAAIU,EAAE,CAAC,EACV,MACF,IAAK,QAEH,KAAK,IAAI,UAAU,EACnB,KAAK,IAAI,OAAOV,EAAG,EAAGA,EAAG,CAAC,EAC1BA,EAAG,eAAiB,GACpB,MACF,IAAK,QAEH,KAAK,IAAI,UAAU,EACnBA,EAAG,eAAiB,GACpB,MACF,IAAK,OACCA,EAAG,iBACL,KAAK,IAAI,UAAU,EACnBA,EAAG,eAAiB,IAEtB,KAAK,IAAI,KAAK,EACd,MACF,IAAK,SACCA,EAAG,iBACL,KAAK,IAAI,UAAU,EACnBA,EAAG,eAAiB,IAEtB,KAAK,IAAI,OAAO,EAChB,MACF,IAAK,OACH,KAAK,IAAI,SAASU,EAAE,CAAC,EAAGV,EAAG,EAAGA,EAAG,CAAC,EAClC,MACF,IAAK,UACH,KAAK,IAAI,KAAOU,EAAE,CAAC,EACnB,MACF,IAAK,YACH,KAAK,IAAI,UAAYA,EAAE,CAAC,EACxB,MACF,IAAK,KAAM,CAET,KAAK,KAAKV,EAAIA,EAAG,EAAGA,EAAG,EAAGU,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,EAEpC,IAAMC,EAAQ,KAAK,MAAMD,EAAE,CAAC,EAAIV,EAAG,EAAGU,EAAE,CAAC,EAAIV,EAAG,CAAC,EACjDA,EAAG,IAAMW,EAAQ,kBACjBX,EAAG,SAAW,GAEdA,EAAG,EAAIU,EAAE,CAAC,EACVV,EAAG,EAAIU,EAAE,CAAC,EACV,KACF,CACA,IAAK,KAAM,CACT,IAAME,EAAMF,EAAE,CAAC,EAAIA,EAAE,CAAC,EAChBR,EAAMF,EAAG,IAAM,oBACfK,EAAKL,EAAG,EAAI,KAAK,IAAIE,CAAG,EAAIU,EAC5BN,EAAKN,EAAG,EAAI,KAAK,IAAIE,CAAG,EAAIU,EAClC,KAAK,KAAKZ,EAAIA,EAAG,EAAGA,EAAG,EAAGK,EAAIC,CAAE,EAChCN,EAAG,EAAIK,EACPL,EAAG,EAAIM,EAEP,KACF,CACA,IAAK,QAAS,CACZ,IAAMO,EAAQH,EAAE,CAAC,EACjBV,EAAG,KAAQa,EAAQ,GAAK,KAAO,IAC/Bb,EAAG,SAAW,GACd,KACF,CACA,IAAK,OAAQ,CACX,IAAMc,EAAKJ,EAAE,CAAC,EACdV,EAAG,KAAOA,EAAG,IAAMc,GAAM,IACzBd,EAAG,SAAW,GACd,KACF,CACA,IAAK,OAAQ,CACX,IAAMe,EAAKL,EAAE,CAAC,EACdV,EAAG,KAAOA,EAAG,IAAMe,EAAK,KAAO,IAC/Bf,EAAG,SAAW,GACd,KACF,CACA,IAAK,QACHA,EAAG,MAAQU,EAAE,CAAC,EACd,KAAK,IAAI,YAAcV,EAAG,MAC1B,MACF,IAAK,OACHA,EAAG,UAAYU,EAAE,CAAC,EAClB,KAAK,IAAI,UAAYV,EAAG,UACxB,MACF,IAAK,QACHA,EAAG,SAAWU,EAAE,CAAC,EACjB,MACF,IAAK,UACHV,EAAG,UAAYU,EAAE,CAAC,EAClBV,EAAG,SAAW,GACd,MACF,IAAK,cACHA,EAAG,WAAa,GAChBA,EAAG,IAAI,IAAMU,EAAE,CAAC,EAChB,KACF,CACA,OAAIV,EAAG,YAAc,KAAK,WAAWA,EAAG,EAAE,EAClCA,EAAG,MAAM,OAAS,CAC5B,CAEA,WAAWS,EAAc,CACvB,IAAIO,EAAU,GACd,QAASjB,EAAI,EAAGA,EAAI,KAAK,QAAQ,OAAQA,IAAK,CAC5C,IAAMC,EAAK,KAAK,QAAQD,CAAC,EACrB,KAAK,QAAQC,EAAIS,CAAI,IAAKO,EAAU,GAC1C,CACA,OAAOA,CACT,CAEA,MAAO,CACL,IAAMP,EAAO,KAAK,IAAI,YAAY,0BAAM,EACpCO,EAAU,KAAK,WAAWP,CAAI,EAClC,GAAIA,GAAQ,EAEV,KAAOO,GAAWA,EAAU,KAAK,WAAWP,CAAI,UACvCO,EAAS,CAEd,KAAK,SAAW,aAAa,KAAK,OAAO,EAC7C,KAAK,QAAU,WAAW,IAAM,KAAK,KAAK,EAAGP,CAAI,EACjD,MACF,CACA,QAAQ,IAAI,oBAAoB,EAChC,KAAK,aAAe,EACtB,CAEA,aAAc,CAEZ,IAAIQ,EAAW,KAAK,IAAI,YAAY,gCAAO,EACvC,OAAOA,GAAa,WACtBA,EAAW,SAAS,eAAeA,CAAQ,GAAK,SAAS,cAAcA,CAAQ,EAC/E,KAAK,IAAI,YAAY,iCAASA,CAAQ,GAExC,QAAQ,IAAI,kCAAUA,CAAQ,EAC9B,IAAMC,EAAK,KAAK,OAASD,EACzB,GAAI,CAACC,EACH,cAAQ,IAAI,+FAA2BD,CAAQ,EACzC,MAAM,sFAAgB,EAE9B,IAAMV,EAAM,KAAK,IAAMW,EAAG,WAAW,IAAI,EACzCX,EAAI,UAAY,EAChBA,EAAI,YAAc,QAClBA,EAAI,QAAU,QACd,KAAK,aAAa,CACpB,CAEA,cAAe,CAEb,IAAMY,EADK,KAAK,OACA,sBAAsB,EAChCC,EAAKD,EAAK,KAAO,OAAO,QACxBE,EAAKF,EAAK,IAAM,OAAO,QAC7B,KAAK,SAAW,CACd,KAAQC,EACR,IAAOC,EACP,MAAOF,EAAK,MACZ,OAAQA,EAAK,MACf,CACF,CAEA,aAAaG,EAAkB,CAE7B,KAAK,YAAY,EAEjB,IAAM5B,EAAK,KAAK,QAAQ,OAClBM,EAAiB,IAAIR,EAAW,KAAK,IAAKE,CAAE,EAClD,YAAK,QAAQ,KAAKM,CAAE,EACpB,KAAK,OAASN,EAEdM,EAAG,UAAUsB,EAAWtB,GAAmB,CACzC,KAAK,WAAWA,EAAG,EAAE,EACrB,QAAQ,IAAI,oBAAoBA,EAAG,EAAE,GAAG,CAC1C,CAAC,EAEDA,EAAG,EAAI,KAAK,SAAS,MAAQ,EAC7BA,EAAG,EAAI,KAAK,SAAS,OAAS,EACvBN,CACT,CACF,EAEM6B,EAAe,CACnB,KAAQ,CACN,KAAM,QACN,MAAO,CACL,WAAY,gBACZ,YAAa,+GACb,cAAe,QACf,YAAa,CAAC,OAAO,EACrB,YAAa,OACf,CACF,EAEA,mBAAO,CACL,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAAS9B,EAAiB,CAC5B,IAAM+B,EAAiC3B,EAAiB,YAAYJ,CAAG,EACvEA,EAAI,KAAK,QAAU+B,CACrB,CACF,EAEA,sBAAQ,CACN,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAAS/B,EAAiB,CAE5BA,EAAI,KAAK,QAAQ,SAAS,CAC5B,CACF,EAGA,yBAAQ,CACN,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAASA,EAAiB,CAC5B,IAAM6B,EAAW7B,EAAI,YAAY,6BAAS,EAC1C,OAAOA,EAAI,KAAK,QAAQ,aAAa6B,CAAQ,CAC/C,CACF,EACA,yBAAQ,CACN,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAAS7B,EAAiB,CAC5B,IAAM6B,EAAWG,EACjB,OAAOhC,EAAI,KAAK,QAAQ,aAAa6B,CAAQ,CAC/C,CACF,EACA,+BAAS,CACP,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAAS7B,EAAiB,CAC5B,IAAM6B,EAAWI,EACjB,OAAOjC,EAAI,KAAK,QAAQ,aAAa6B,CAAQ,CAC/C,CACF,EACA,iDAAY,CACV,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,SAAK,QAAG,CAAC,EACtB,KAAM,GACN,GAAI,SAAS5B,EAAYD,EAAiB,CACxCA,EAAI,KAAK,QAAQ,OAASC,CAC5B,EACA,YAAa,EACf,EACA,+BAAS,CAAE,KAAM,MAAO,MAAO,YAAa,EAC5C,4BAAW,CAAE,KAAM,MAAO,MAAOiC,CAAY,EAC7C,qCAAU,CACR,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,QAAG,CAAC,EACjB,KAAM,GACN,GAAI,SAAShC,EAAaF,EAAiB,CACPA,EAAI,KAAK,QACnC,SAAS,CAAC,cAAeE,CAAG,CAAC,CACvC,EACA,YAAa,EACf,EACA,yBAAQ,CAAE,KAAM,QAAS,MAAO,GAAI,EACpC,qCAAU,CACR,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,QAAG,CAAC,EACjB,KAAM,GACN,GAAI,SAASiC,EAAWnC,EAAiB,CACvCA,EAAI,YAAY,2BAAQmC,CAAC,CAC3B,CACF,EACA,yBAAQ,CACN,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,QAAG,CAAC,EACjB,KAAM,GACN,GAAI,SAASC,EAAcpC,EAAiB,CACRA,EAAI,KAAK,QACnC,SAAS,CAAC,KAAMoC,EAAG,CAAC,EAAGA,EAAG,CAAC,CAAC,CAAC,CACvC,EACA,YAAa,EACf,EACA,qCAAU,CACR,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,QAAG,CAAC,EACjB,KAAM,GACN,GAAI,SAASA,EAAcpC,EAAiB,CACRA,EAAI,KAAK,QACnC,SAAS,CAAC,KAAMoC,EAAG,CAAC,EAAGA,EAAG,CAAC,CAAC,CAAC,CACvC,EACA,YAAa,EACf,EACA,mBAAO,CACL,KAAM,OACN,KAAM,CAAC,CAAC,cAAI,CAAC,EACb,KAAM,GACN,GAAI,SAASD,EAAWnC,EAAiB,CACLA,EAAI,KAAK,QACnC,SAAS,CAAC,KAAMmC,EAAG,CAAC,CAAC,CAC/B,EACA,YAAa,EACf,EACA,mBAAO,CACL,KAAM,OACN,KAAM,CAAC,CAAC,cAAI,CAAC,EACb,KAAM,GACN,GAAI,SAASA,EAAWnC,EAAiB,CACLA,EAAI,KAAK,QACnC,SAAS,CAAC,KAAMmC,EAAG,EAAE,CAAC,CAChC,EACA,YAAa,EACf,EACA,qCAAU,CACR,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,SAAK,QAAG,CAAC,EACtB,KAAM,GACN,GAAI,SAASA,EAAWnC,EAAiB,CACLA,EAAI,KAAK,QACnC,SAAS,CAAC,QAASmC,CAAC,CAAC,CAC/B,EACA,YAAa,EACf,EACA,+BAAS,CACP,KAAM,OACN,KAAM,CAAC,CAAC,cAAI,CAAC,EACb,KAAM,GACN,GAAI,SAASA,EAAWnC,EAAiB,CACLA,EAAI,KAAK,QACnC,SAAS,CAAC,OAAQmC,CAAC,CAAC,CAC9B,EACA,YAAa,EACf,EACA,+BAAS,CACP,KAAM,OACN,KAAM,CAAC,CAAC,cAAI,CAAC,EACb,KAAM,GACN,GAAI,SAASA,EAAWnC,EAAiB,CACLA,EAAI,KAAK,QACnC,SAAS,CAAC,OAAQmC,CAAC,CAAC,CAC9B,EACA,YAAa,EACf,EACA,2CAAW,CACT,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,QAAG,CAAC,EACjB,KAAM,GACN,GAAI,SAASE,EAAWrC,EAAiB,CACLA,EAAI,KAAK,QACnC,SAAS,CAAC,QAASqC,CAAC,CAAC,CAC/B,EACA,YAAa,EACf,EACA,uDAAa,CACX,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,QAAG,CAAC,EACjB,KAAM,GACN,GAAI,SAASC,EAAWtC,EAAiB,CACLA,EAAI,KAAK,QACnC,SAAS,CAAC,OAAQsC,CAAC,CAAC,CAC9B,CACF,EACA,qCAAU,CACR,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,QAAG,CAAC,EACjB,KAAM,GACN,GAAI,SAASA,EAAWtC,EAAiB,CACLA,EAAI,KAAK,QACnC,SAAS,CAAC,QAASsC,CAAC,CAAC,CAC/B,CACF,EACA,qCAAU,CACR,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAAStC,EAAiB,CACMA,EAAI,KAAK,QACnC,SAAS,CAAC,OAAO,CAAC,CAC5B,CACF,EACA,+BAAS,CACP,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAASA,EAAiB,CACMA,EAAI,KAAK,QACnC,SAAS,CAAC,OAAO,CAAC,CAC5B,CACF,EACA,qCAAU,CACR,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAASA,EAAiB,CACMA,EAAI,KAAK,QACnC,SAAS,CAAC,QAAQ,CAAC,CAC7B,CACF,EACA,+BAAS,CACP,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAASA,EAAiB,CACMA,EAAI,KAAK,QACnC,SAAS,CAAC,MAAM,CAAC,CAC3B,CACF,EACA,qCAAU,CACR,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,SAAK,QAAG,CAAC,EACtB,KAAM,GACN,GAAI,SAASuC,EAAWvC,EAAiB,CACLA,EAAI,KAAK,QACnC,SAAS,CAAC,OAAQuC,CAAC,CAAC,CAC9B,CACF,EACA,qCAAU,CACR,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,SAAK,QAAG,CAAC,EACtB,KAAM,GACN,GAAI,SAASA,EAAWvC,EAAiB,CACvCuC,EAAI,GAAKA,EACLA,EAAE,MAAM,OAAO,EACjBA,EAAIA,EAAI,WACCA,EAAE,MAAM,cAAc,IAC/BA,EAAIA,EAAI,UAEwBvC,EAAI,KAAK,QACnC,SAAS,CAAC,UAAWuC,CAAC,CAAC,CACjC,CACF,EACA,qCAAU,CACR,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,QAAG,CAAC,EACjB,KAAM,GACN,GAAI,SAASF,EAAWrC,EAAiB,CACLA,EAAI,KAAK,QACnC,SAAS,CAAC,YAAaqC,CAAC,CAAC,CACnC,EACA,YAAa,EACf,EACA,+BAAS,CACP,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAASrC,EAAiB,CAC5BA,EAAI,KAAK,QAAQ,SAAS,CAC5B,EACA,YAAa,EACf,EACA,iDAAY,CACV,KAAM,OACN,KAAM,CAAC,CAAC,SAAK,QAAG,CAAC,EACjB,KAAM,GACN,GAAI,SAASwC,EAAaxC,EAAiB,CACzC,IAAMyC,EAA4BzC,EAAI,KAAK,QACrC0C,EAAIF,EAAI,MAAM,QAAQ,EAC5B,QAASlC,EAAI,EAAGA,EAAIoC,EAAE,OAAQpC,IAAK,CACjC,IAAI+B,EAAIK,EAAEpC,CAAC,EACX+B,EAAIA,EAAE,QAAQ,wBAAyB,OAAO,EAC9CA,EAAIA,EAAE,QAAQ,oBAAqB,KAAK,EACxC,IAAMM,EAAKN,EAAE,MAAM,SAAS,EAC5BI,EAAQ,SAASE,CAAE,CACrB,CACF,EACA,YAAa,EACf,EACA,+BAAS,CACP,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAAS3C,EAAiB,CACMA,EAAI,KAAK,QACnC,SAAS,CAAC,UAAW,EAAK,CAAC,CACrC,EACA,YAAa,EACf,EACA,yBAAQ,CACN,KAAM,OACN,KAAM,CAAC,EACP,KAAM,GACN,GAAI,SAASA,EAAiB,CACMA,EAAI,KAAK,QACnC,SAAS,CAAC,UAAW,EAAI,CAAC,CACpC,EACA,YAAa,EACf,EACA,2CAAW,CACT,KAAM,OACN,KAAM,CAAC,CAAC,QAAG,CAAC,EACZ,KAAM,GACN,GAAI,SAAS4C,EAAoB5C,EAAiB,CAEhD,GADA4C,EAAO5C,EAAI,UAAU4C,EAAM,IAAI,EAC3B,OAAOA,GAAS,WAAc,OAClC,IAAMC,EAAM7C,EAAI,KAAK,QAAQ,OACvBO,EAAKP,EAAI,KAAK,QAAQ,KAAK6C,CAAG,EACpCtC,EAAG,OAAO,QAAWuC,IACnB9C,EAAI,YAAY,eAAM8C,EAAE,MAAM,EACvBF,EAAKE,EAAG9C,CAAG,EAEtB,EACA,YAAa,EACf,CACF,EAGO+C,EAAQjB,EAIX,OAAQ,WAAe,UAAY,OAAQ,UAAU,OAAU,UAAU,MAAM,gBAAgB,eAAgBA,CAAY",
|
|
6
6
|
"names": ["turtleImage", "elephantImage", "pandaImage", "NakoTurtle", "sys", "id", "url", "callback", "NakoTurtleSystem", "_NakoTurtleSystem", "i", "tt", "cr", "rad", "x1", "y1", "x2", "y2", "ctx", "args", "wait", "m", "mvRad", "fdv", "angle", "rv", "lv", "hasNext", "canvasId", "cv", "rect", "rx", "ry", "imageUrl", "PluginTurtle", "turtleSystem", "elephantImage", "pandaImage", "turtleImage", "v", "xy", "c", "w", "s", "cmd", "turtles", "a", "ca", "func", "tid", "e", "plugin_turtle_default"]
|
|
7
7
|
}
|