nadesiko3 3.3.59 → 3.3.60

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/core/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nadesiko3core",
3
- "version": "3.3.59",
3
+ "version": "3.3.60",
4
4
  "description": "Japanese Programming Language Nadesiko v3 core",
5
5
  "main": "index.mjs",
6
6
  "type": "module",
@@ -1,8 +1,8 @@
1
1
  // 実際のバージョン定義 (自動生成されるので以下を編集しない)
2
2
  const coreVersion = {
3
- version: '3.3.59',
3
+ version: '3.3.60',
4
4
  major: 3,
5
5
  minor: 3,
6
- patch: 59
6
+ patch: 60
7
7
  };
8
8
  export default coreVersion;
@@ -11,9 +11,9 @@ export interface NakoCoreVersion {
11
11
  }
12
12
  // 実際のバージョン定義 (自動生成されるので以下を編集しない)
13
13
  const coreVersion: NakoCoreVersion = {
14
- version: '3.3.59',
14
+ version: '3.3.60',
15
15
  major: 3,
16
16
  minor: 3,
17
- patch: 59
17
+ patch: 60
18
18
  }
19
19
  export default coreVersion
@@ -192,7 +192,6 @@ export function convertDNCL(tokens) {
192
192
  t.value = t.value.substring(0, t.value.length - 1);
193
193
  t.josi = 'だけ';
194
194
  line.splice(j + 1, 0, NewEmptyToken('word', c, t.indent, t.line, t.file));
195
- console.log(line);
196
195
  }
197
196
  j++;
198
197
  continue;
@@ -211,11 +210,13 @@ export function convertDNCL(tokens) {
211
210
  }
212
211
  // console.log(t)
213
212
  }
213
+ /*
214
214
  // 表示
215
215
  lines.map(line => {
216
- console.log(line.map(t => t.type + '_' + ('' + t.value).replace('\n', '') + t.josi).join(' | '));
217
- });
218
- console.log('===');
216
+ console.log(line.map(t => t.type + '_' + ('' + t.value).replace('\n', '') + t.josi).join(' | '))
217
+ })
218
+ console.log('===')
219
+ */
219
220
  tokens = joinTokenLines(lines);
220
221
  return tokens;
221
222
  }
@@ -171,7 +171,6 @@ export function convertDNCL (tokens: Token[]): Token[] {
171
171
  t.value = t.value.substring(0, t.value.length - 1)
172
172
  t.josi = 'だけ'
173
173
  line.splice(j + 1, 0, NewEmptyToken('word', c, t.indent, t.line, t.file))
174
- console.log(line)
175
174
  }
176
175
  j++
177
176
  continue
@@ -191,11 +190,13 @@ export function convertDNCL (tokens: Token[]): Token[] {
191
190
  }
192
191
  // console.log(t)
193
192
  }
193
+ /*
194
194
  // 表示
195
195
  lines.map(line => {
196
196
  console.log(line.map(t => t.type + '_' + ('' + t.value).replace('\n', '') + t.josi).join(' | '))
197
197
  })
198
198
  console.log('===')
199
+ */
199
200
  tokens = joinTokenLines(lines)
200
201
  return tokens
201
202
  }
@@ -20,6 +20,9 @@ export function convertInlineIndent(tokens) {
20
20
  if (line.length === 0) {
21
21
  continue;
22
22
  }
23
+ if (line[0].type === 'eol') {
24
+ continue;
25
+ }
23
26
  // インデントの終了を確認する必要があるか?
24
27
  if (checkICount >= 0) {
25
28
  const lineICount = lines[i][0].indent;
@@ -65,7 +68,7 @@ export function joinTokenLines(lines) {
65
68
  r.push(t);
66
69
  }
67
70
  // debug
68
- // console.log('@@join=', mkIndent(line[0] ? line[0].indent : 0), line.map(t => (t.type + '_' + t.value + ':' + t.indent)).join(' | '))
71
+ // console.log('@@join=', mkIndent(line[0] ? line[0].indent : 0), line.map(t => (t.type + '_' + t.value + t.josi + ':' + t.indent)).join(' | '))
69
72
  }
70
73
  // console.log('@@@-----')
71
74
  return r;
@@ -17,6 +17,7 @@ export function convertInlineIndent (tokens: Token[]): Token[] {
17
17
  for (let i = 0; i < lines.length; i++) {
18
18
  const line = lines[i]
19
19
  if (line.length === 0) { continue }
20
+ if (line[0].type === 'eol') { continue }
20
21
  // インデントの終了を確認する必要があるか?
21
22
  if (checkICount >= 0) {
22
23
  const lineICount: number = lines[i][0].indent
@@ -61,7 +62,7 @@ export function joinTokenLines (lines: Token[][]): Token[] {
61
62
  r.push(t)
62
63
  }
63
64
  // debug
64
- // console.log('@@join=', mkIndent(line[0] ? line[0].indent : 0), line.map(t => (t.type + '_' + t.value + ':' + t.indent)).join(' | '))
65
+ // console.log('@@join=', mkIndent(line[0] ? line[0].indent : 0), line.map(t => (t.type + '_' + t.value + t.josi + ':' + t.indent)).join(' | '))
65
66
  }
66
67
  // console.log('@@@-----')
67
68
  return r
@@ -370,40 +370,4 @@ describe('flow_test', async () => {
370
370
  it('ならばの直前に空白があるとエラー(#1141)', async () => {
371
371
  await cmp('A=30。もし、A>5 ならば、「OK」と表示。', 'OK')
372
372
  })
373
- // inline indent
374
- it('#1215 インラインインデント構文 - 回', async () => {
375
- await cmp(
376
- '3回:\n' +
377
- ' "a"と表示\n', 'a\na\na')
378
- })
379
- it('#1215 インラインインデント構文 - もし', async () => {
380
- await cmp(
381
- 'A=5;B=3;もし,A>Bならば:\n' +
382
- ' "ok"と表示\n' +
383
- '違えば:\n' +
384
- ' "ng"と表示\n', 'ok')
385
- })
386
- it('#1215 インラインインデント構文 - エラー監視', async () => {
387
- await cmp(
388
- 'エラー監視:\n' +
389
- ' "ok"と表示\n' +
390
- 'エラーならば:\n' +
391
- ' "err"と表示\n',
392
- 'ok')
393
- await cmp(
394
- 'エラー監視:\n' +
395
- ' "aaa"のエラー発生\n' +
396
- 'エラーならば:\n' +
397
- ' "err"と表示\n',
398
- 'err')
399
- })
400
- it('#1215 インラインインデント構文3 - ネスト', async () => {
401
- await cmp(
402
- '3回:\n' +
403
- ' もし、5>3ならば:\n' +
404
- ' 「a」と表示\n' +
405
- ' 違えば:\n' +
406
- ' 「b」と表示\n',
407
- 'a\na\na')
408
- })
409
373
  })
@@ -0,0 +1,103 @@
1
+ import assert from 'assert'
2
+ import { NakoCompiler } from '../src/nako3.mjs'
3
+
4
+ describe('inline_indent_test', async () => {
5
+ // nako.logger.addListener('trace', ({ browserConsole }) => { console.log(...browserConsole) })
6
+ const cmp = async (/** @type {string} */ code, /** @type {string} */ res) => {
7
+ const nako = new NakoCompiler()
8
+ nako.logger.debug('code=' + code)
9
+ assert.strictEqual((await nako.runAsync(code)).log, res)
10
+ }
11
+ it('繰り返す', async () => {
12
+ await cmp('Nを1から3まで繰り返す:\n Nを表示\n', '1\n2\n3')
13
+ await cmp('Nを1から3まで繰り返す:\n  Nを表示\n', '1\n2\n3')
14
+ })
15
+ it('繰り返す2', async () => {
16
+ await cmp('1から3まで繰り返す\nそれを表示\nここまで', '1\n2\n3')
17
+ })
18
+ it('もし-日本語による比較', async () => {
19
+ await cmp('もし3が3と等しいならば:\n  「OK」と表示。', 'OK')
20
+ await cmp('もし(3+2)が5と等しいならば:\n  「OK」と表示。', 'OK')
21
+ })
22
+ it('回-break', async () => {
23
+ await cmp('3回:\n' +
24
+ '  \'a\'と表示。\n' +
25
+ '  もし(回数=2)ならば、抜ける\n', 'a\na')
26
+ })
27
+ it('反復 - 配列', async () => {
28
+ await cmp('[1,2,3]を反復:\n 対象を表示\n', '1\n2\n3')
29
+ })
30
+ it('反復 - オブジェクト', async () => {
31
+ await cmp('{\'a\':1,\'b\':2,\'c\':3}を反復:\n 対象を表示\n', '1\n2\n3')
32
+ await cmp('{\'a\':1,\'b\':2,\'c\':3}を反復:\n 対象キーを表示\n', 'a\nb\nc')
33
+ })
34
+ it('反復 - 変数付き', async () => {
35
+ await cmp('A=[1,2,3];NでAを反復:\n Nを表示\n', '1\n2\n3')
36
+ await cmp('Nで[1,2,3]を反復:\n Nを表示\n', '1\n2\n3')
37
+ })
38
+ it('繰り返しのネスト', async () => {
39
+ await cmp('C=0;Iを0から3まで繰り返す:\n Jを0から3まで繰り返す:\n C=C+1;\nCを表示', '16')
40
+ })
41
+ it('もし、と戻るの組み合わせ', async () => {
42
+ await cmp('●テスト処理:\n' +
43
+ '  「あ」と表示\n' +
44
+ '  もし、3=3ならば、戻る。\n' +
45
+ '  「ここには来ない」と表示\n' +
46
+ '\n' +
47
+ 'テスト処理。', 'あ')
48
+ })
49
+ it('もし文のエラー(#378)', async () => {
50
+ await cmp('●AAAとは:\n' +
51
+ '  列を1から3まで繰り返す:\n' +
52
+ '    列を表示。' +
53
+ '    もし、列=2ならば、「*」と表示。\n' +
54
+ 'AAA', '1\n2\n*\n3')
55
+ })
56
+ it('「増繰り返す」「減繰り返す」を追加#1140', async () => {
57
+ await cmp('Nを0から4まで2ずつ増やし繰り返す:\n  Nを表示\n', '0\n2\n4')
58
+ })
59
+ // inline indent
60
+ it('#1215 インラインインデント構文 - 回', async () => {
61
+ await cmp('3回:\n' +
62
+ ' "a"と表示\n', 'a\na\na')
63
+ })
64
+ it('#1215 インラインインデント構文 - もし', async () => {
65
+ await cmp(
66
+ 'A=5;B=3;もし,A>Bならば:\n' +
67
+ ' "ok"と表示\n' +
68
+ '違えば:\n' +
69
+ ' "ng"と表示\n', 'ok')
70
+ })
71
+ it('#1215 インラインインデント構文 - エラー監視', async () => {
72
+ await cmp(
73
+ 'エラー監視:\n' +
74
+ ' "ok"と表示\n' +
75
+ 'エラーならば:\n' +
76
+ ' "err"と表示\n',
77
+ 'ok')
78
+ await cmp(
79
+ 'エラー監視:\n' +
80
+ ' "aaa"のエラー発生\n' +
81
+ 'エラーならば:\n' +
82
+ ' "err"と表示\n',
83
+ 'err')
84
+ })
85
+ it('#1215 インラインインデント構文3 - ネスト', async () => {
86
+ await cmp(
87
+ '3回:\n' +
88
+ ' もし、5>3ならば:\n' +
89
+ ' 「a」と表示\n' +
90
+ ' 違えば:\n' +
91
+ ' 「b」と表示\n',
92
+ 'a\na\na')
93
+ })
94
+ it('#1273 インラインインデントで無駄な区切り文字の問題', async () => {
95
+ await cmp(
96
+ '3回:\n' +
97
+ ' もし、5>3ならば:\n' +
98
+ ' 「a」と表示。\n' +
99
+ ' 違えば:\n' +
100
+ ' 「b」と表示。\n',
101
+ 'a\na\na')
102
+ })
103
+ })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nadesiko3",
3
- "version": "3.3.59",
3
+ "version": "3.3.60",
4
4
  "description": "Japanese Programming Language",
5
5
  "type": "module",
6
6
  "main": "src/index.mjs",
package/release/_hash.txt CHANGED
@@ -9,10 +9,10 @@ editor.js:
9
9
  sha256(base64): mWPVpxYoegeIn6u0PanyI4Z8eRx41UD/kBYns489U04=
10
10
  sha512(base64): q9aYWdo2RiNlmsa4gSoQL70F4RkvG/lAUxOYew1tXdyJre4KSm7EWQp9m9+CgexV+sLcOg3DJ3+0/FW8Uu2DIg==
11
11
  nako_gen_async.js:
12
- md5(hex): 2eb839a0130ac51ec248266f957f04bf
13
- sha256(hex): 13e2e4d27364257ad5392081874329f64e9bfd6714404b616ea07ae4370719fb
14
- sha256(base64): E+Lk0nNkJXrVOSCBh0Mp9k6b/WcUQEthbqB65DcHGfs=
15
- sha512(base64): ZI48k2q3EVpEI3+oLvARdQ/f6dBJDtyzl7muSK1HJukLAnm3G39mD8hVA0BfIoVdtbqGF3yM2wkC37+xKmXAuA==
12
+ md5(hex): e697ebeb4fa0a1fbc03ddb02b2b7fa33
13
+ sha256(hex): 7b54792b5817eeb8eacff63d47f25020d6f50cbc4942b9ceddb19f13ef201448
14
+ sha256(base64): e1R5K1gX7rjqz/Y9R/JQINb1DLxJQrnO3bGfE+8gFEg=
15
+ sha512(base64): iM3q843vry1CUZSb7xdaRDnbPr7uxBz8Iq9K1ABhMo65Oh4dyxkTVwsstovd2U7kHejOsm7F+fV9KeMfu26YLw==
16
16
  plugin_caniuse.js:
17
17
  md5(hex): 95a7a5c98a92a46b6435e577daba3241
18
18
  sha256(hex): 57638b3979be70b45ab8085861f6b2ece43200bd6aa92765d73caf76b9e6fea9
@@ -54,17 +54,17 @@ plugin_weykturtle3d.js:
54
54
  sha256(base64): ND/1JqYrFVGTIPYsbBk+tScnF8RVzgYPM0/E2aE8GRw=
55
55
  sha512(base64): T4B8Cvhn9j5YdMGk4rwPInfqmcXtGEjD2g6X6wSqXvYyIXuSy+t1RVf1viZ2zljHlk3wN6pwKvvg/NIJvfMAzw==
56
56
  version.js:
57
- md5(hex): 33c93e6441f46b0554e25751c0c5e463
58
- sha256(hex): c22bff9afabbecb11e2eb1935ed034450328c29f778c226f9c64a49d20eb5c60
59
- sha256(base64): wiv/mvq77LEeLrGTXtA0RQMowp93jCJvnGSknSDrXGA=
60
- sha512(base64): ggHpplQRbs2OLMAhu4vPOP84C9B1UD+I3lZte1nXDkLWyhX75ayYpREaHv7SVHd2zp5YtsiXJ7ExZB+Te6Iqrw==
57
+ md5(hex): 4079fe3144af4d2138e9f53bdd7b127c
58
+ sha256(hex): dba689c23545cb8ffe6329766fb5724a54abaf35999164df31755b41eeb989b7
59
+ sha256(base64): 26aJwjVFy4/+Yyl2b7VySlSrrzWZkWTfMXVbQe65ibc=
60
+ sha512(base64): 8l9z3XJGeKACofpa7/PKagMbYeX+uSx64KWRxzgCVMRRS+pVMWK6uYSo8GF3qGB9lNOx48JWdehkQ+CQqA0+/w==
61
61
  wnako3.js:
62
- md5(hex): 16a1442e8c2c999358fbcd7242df75a5
63
- sha256(hex): cea33f4d585acc8ac94c05d463686c1c146d0f473fa1dd18b4c4cfbf7b582c78
64
- sha256(base64): zqM/TVhazIrJTAXUY2hsHBRtD0c/od0YtMTPv3tYLHg=
65
- sha512(base64): niN5uq8TSfDxyBuRTneofo4VG6ny3WiqAnM2UtqDzm26WeMvpf9w7hqqqishSGWVa9KVqSbIgwUkg+NlypF9eA==
62
+ md5(hex): e65b17987be7b964cafc7f44e437fcb9
63
+ sha256(hex): 644c1c7d539253a0756ae45bbe0bce1dbdf67ea6b1a084e0f645ea51289486a3
64
+ sha256(base64): ZEwcfVOSU6B1auRbvgvOHb32fqaxoITg9kXqUSiUhqM=
65
+ sha512(base64): fjunKsOP4AkePxDKkrYqLKGbsTWCY/4xTkp+/7Ip20GdPQ75hYd3iKBiG1hZw1lGGBrGajTTrdpKGkBPFQEL9Q==
66
66
  wnako3webworker.js:
67
- md5(hex): 2387c08f3e6a38f3f05257765c6932c6
68
- sha256(hex): 1f31b5d00d6acd4f5a48b1a63bfa2293f3cdcef414df36ff5208f149de431c4e
69
- sha256(base64): HzG10A1qzU9aSLGmO/oik/PNzvQU3zb/UgjxSd5DHE4=
70
- sha512(base64): JXnei1cMOIFdIEznOYPFCKitBl/iiq6GpT4N77yvrOBOaj6G5tHnBjUeaXFzdExTx0lhRbOWiwu0ZDnY8TvuQA==
67
+ md5(hex): d2d3fe6f32deb89785585ed9b3b8a0bb
68
+ sha256(hex): 0730ff512a2fb3c44aa0225c28a83f45e44755d4b41999f5cc718e2e62017169
69
+ sha256(base64): BzD/USovs8RKoCJcKKg/ReRHVdS0GZn1zHGOLmIBcWk=
70
+ sha512(base64): 95QfPbuqhr9wwSKwInj4BsXYxjFfTf3AYICv3eODBDn6xGUDU05Z5bjqGIt7a+ju5wzF2jU/GC4c/TT7n1uFKg==
@@ -1,14 +1,14 @@
1
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/command.json.js" integrity="sha512-3PHGfRGcyV9VPBflXtm5cP2qT4kGyPgTpCyrFhjUXMHQKRf6+2yGK6VCcAV6KCOkjWIzKVCGeoDo4Pzp+YtckQ==" crossorigin="anonymous"></script>
2
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/editor.js" integrity="sha512-q9aYWdo2RiNlmsa4gSoQL70F4RkvG/lAUxOYew1tXdyJre4KSm7EWQp9m9+CgexV+sLcOg3DJ3+0/FW8Uu2DIg==" crossorigin="anonymous"></script>
3
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/nako_gen_async.js" integrity="sha512-ZI48k2q3EVpEI3+oLvARdQ/f6dBJDtyzl7muSK1HJukLAnm3G39mD8hVA0BfIoVdtbqGF3yM2wkC37+xKmXAuA==" crossorigin="anonymous"></script>
4
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/plugin_caniuse.js" integrity="sha512-NbX6BKUNq1J8xwtv5CThQC54Lb/KxaPlimRpsF745nxqjYeuGD7S70j4yOgNm4Uwd7AN5FgezS6NDyhlvoJF2w==" crossorigin="anonymous"></script>
5
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/plugin_csv.js" integrity="sha512-mQvmj25L2Nc2L7gN1rTjayHVMMPhc7TCSiBsuKS4JKOQqN+91uj9qpLAOejzR1ib5jIOBdtrhN+secNTU9BJtw==" crossorigin="anonymous"></script>
6
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/plugin_datetime.js" integrity="sha512-1ADTZFkcfU6vpEEJZEYmIbqS6G2XViooDFD4198P61n7VKZ0PhEVj9l8ULFGrW7woSbDqfSPZmkZ7yvcRqPKYA==" crossorigin="anonymous"></script>
7
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/plugin_kansuji.js" integrity="sha512-tXC9Q6LejwYG+HUbXcwBHFmhwTsqiMHOBohLNcSx8b02hxk3waPUEQRWeNP7QxAFMv5BOAY+Grruf+XKmmU26g==" crossorigin="anonymous"></script>
8
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/plugin_markup.js" integrity="sha512-pvb+QYO9LMUH055nPJJ5QaWyEYR3wDkHHilV5LLNyxObs7enlHGiF7Jt3Csd93JTdJ3n9hxFbTqWa1QuzVmTfQ==" crossorigin="anonymous"></script>
9
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/plugin_turtle.js" integrity="sha512-3/BlAe3uVDBgJrgFWzLJa3bvNQVhAQuL343Icict5hI3LndcPjV6mAD8KoWRlxmF8A8S6n8eKnmrh6NFWTjyEw==" crossorigin="anonymous"></script>
10
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/plugin_webworker.js" integrity="sha512-JLlIg9cW9UgM2AT+qMgEuKvea3t8R+1jihhlN/QGDQe7iCaGEfXfKG5gpvRb0IUyisNfzncUN8AfLn9wyxGGiw==" crossorigin="anonymous"></script>
11
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/plugin_weykturtle3d.js" integrity="sha512-T4B8Cvhn9j5YdMGk4rwPInfqmcXtGEjD2g6X6wSqXvYyIXuSy+t1RVf1viZ2zljHlk3wN6pwKvvg/NIJvfMAzw==" crossorigin="anonymous"></script>
12
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/version.js" integrity="sha512-ggHpplQRbs2OLMAhu4vPOP84C9B1UD+I3lZte1nXDkLWyhX75ayYpREaHv7SVHd2zp5YtsiXJ7ExZB+Te6Iqrw==" crossorigin="anonymous"></script>
13
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/wnako3.js" integrity="sha512-niN5uq8TSfDxyBuRTneofo4VG6ny3WiqAnM2UtqDzm26WeMvpf9w7hqqqishSGWVa9KVqSbIgwUkg+NlypF9eA==" crossorigin="anonymous"></script>
14
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.59&f=release/wnako3webworker.js" integrity="sha512-JXnei1cMOIFdIEznOYPFCKitBl/iiq6GpT4N77yvrOBOaj6G5tHnBjUeaXFzdExTx0lhRbOWiwu0ZDnY8TvuQA==" crossorigin="anonymous"></script>
1
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/command.json.js" integrity="sha512-3PHGfRGcyV9VPBflXtm5cP2qT4kGyPgTpCyrFhjUXMHQKRf6+2yGK6VCcAV6KCOkjWIzKVCGeoDo4Pzp+YtckQ==" crossorigin="anonymous"></script>
2
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/editor.js" integrity="sha512-q9aYWdo2RiNlmsa4gSoQL70F4RkvG/lAUxOYew1tXdyJre4KSm7EWQp9m9+CgexV+sLcOg3DJ3+0/FW8Uu2DIg==" crossorigin="anonymous"></script>
3
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/nako_gen_async.js" integrity="sha512-iM3q843vry1CUZSb7xdaRDnbPr7uxBz8Iq9K1ABhMo65Oh4dyxkTVwsstovd2U7kHejOsm7F+fV9KeMfu26YLw==" crossorigin="anonymous"></script>
4
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/plugin_caniuse.js" integrity="sha512-NbX6BKUNq1J8xwtv5CThQC54Lb/KxaPlimRpsF745nxqjYeuGD7S70j4yOgNm4Uwd7AN5FgezS6NDyhlvoJF2w==" crossorigin="anonymous"></script>
5
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/plugin_csv.js" integrity="sha512-mQvmj25L2Nc2L7gN1rTjayHVMMPhc7TCSiBsuKS4JKOQqN+91uj9qpLAOejzR1ib5jIOBdtrhN+secNTU9BJtw==" crossorigin="anonymous"></script>
6
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/plugin_datetime.js" integrity="sha512-1ADTZFkcfU6vpEEJZEYmIbqS6G2XViooDFD4198P61n7VKZ0PhEVj9l8ULFGrW7woSbDqfSPZmkZ7yvcRqPKYA==" crossorigin="anonymous"></script>
7
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/plugin_kansuji.js" integrity="sha512-tXC9Q6LejwYG+HUbXcwBHFmhwTsqiMHOBohLNcSx8b02hxk3waPUEQRWeNP7QxAFMv5BOAY+Grruf+XKmmU26g==" crossorigin="anonymous"></script>
8
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/plugin_markup.js" integrity="sha512-pvb+QYO9LMUH055nPJJ5QaWyEYR3wDkHHilV5LLNyxObs7enlHGiF7Jt3Csd93JTdJ3n9hxFbTqWa1QuzVmTfQ==" crossorigin="anonymous"></script>
9
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/plugin_turtle.js" integrity="sha512-3/BlAe3uVDBgJrgFWzLJa3bvNQVhAQuL343Icict5hI3LndcPjV6mAD8KoWRlxmF8A8S6n8eKnmrh6NFWTjyEw==" crossorigin="anonymous"></script>
10
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/plugin_webworker.js" integrity="sha512-JLlIg9cW9UgM2AT+qMgEuKvea3t8R+1jihhlN/QGDQe7iCaGEfXfKG5gpvRb0IUyisNfzncUN8AfLn9wyxGGiw==" crossorigin="anonymous"></script>
11
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/plugin_weykturtle3d.js" integrity="sha512-T4B8Cvhn9j5YdMGk4rwPInfqmcXtGEjD2g6X6wSqXvYyIXuSy+t1RVf1viZ2zljHlk3wN6pwKvvg/NIJvfMAzw==" crossorigin="anonymous"></script>
12
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/version.js" integrity="sha512-8l9z3XJGeKACofpa7/PKagMbYeX+uSx64KWRxzgCVMRRS+pVMWK6uYSo8GF3qGB9lNOx48JWdehkQ+CQqA0+/w==" crossorigin="anonymous"></script>
13
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/wnako3.js" integrity="sha512-fjunKsOP4AkePxDKkrYqLKGbsTWCY/4xTkp+/7Ip20GdPQ75hYd3iKBiG1hZw1lGGBrGajTTrdpKGkBPFQEL9Q==" crossorigin="anonymous"></script>
14
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.60&f=release/wnako3webworker.js" integrity="sha512-95QfPbuqhr9wwSKwInj4BsXYxjFfTf3AYICv3eODBDn6xGUDU05Z5bjqGIt7a+ju5wzF2jU/GC4c/TT7n1uFKg==" crossorigin="anonymous"></script>