nadesiko3 3.3.65 → 3.3.68

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.
@@ -27,13 +27,9 @@ jobs:
27
27
 
28
28
  steps:
29
29
  - name: Checkout
30
- uses: actions/checkout@v2
31
- with:
32
- fetch-depth: 0
33
- token: ${{ secrets.SUBMODULE_TOKEN }}
34
- submodules: recursive
30
+ uses: actions/checkout@v3
35
31
  - name: Use Node.js ${{ matrix.node-version }}
36
- uses: actions/setup-node@v1
32
+ uses: actions/setup-node@v3
37
33
  with:
38
34
  node-version: ${{ matrix.node-version }}
39
35
  # 各種ライブラリをインストール
@@ -5,7 +5,7 @@
5
5
  # ●説明
6
6
  # package.json の内容を読んで ./src/nako_core_version.mts を生成
7
7
  # -----------------------------------------------------
8
- 母艦パス取得してパス抽出して基本パスに代入。
8
+ 母艦パスからパス抽出して、基本パスに代入。
9
9
  「{基本パス}/package.json」を読んでJSONデコードして、Pに代入。
10
10
  VER=P@"version"
11
11
  定数[MAJOR,MINOR,PATCH]=(VERを「.」で区切る)
@@ -0,0 +1,102 @@
1
+ /**
2
+ * file: plugin_snako.js
3
+ * 簡単なファイル読み書きのプラグイン
4
+ */
5
+ import fs from 'fs';
6
+ import { execSync } from 'child_process';
7
+ import path from 'path';
8
+ export default {
9
+ '初期化': {
10
+ type: 'func',
11
+ josi: [],
12
+ pure: true,
13
+ fn: function (sys) {
14
+ sys.__getBokanPath = () => {
15
+ let nakofile;
16
+ const cmd = path.basename(process.argv[1]);
17
+ if (cmd.indexOf('snako') < 0) {
18
+ nakofile = process.argv[1];
19
+ }
20
+ else {
21
+ nakofile = process.argv[2];
22
+ }
23
+ return path.dirname(path.resolve(nakofile));
24
+ };
25
+ sys.__v0['コマンドライン'] = process.argv;
26
+ sys.__v0['ナデシコランタイムパス'] = process.argv[0];
27
+ sys.__v0['ナデシコランタイム'] = path.basename(process.argv[0]);
28
+ sys.__v0['母艦パス'] = sys.__getBokanPath();
29
+ }
30
+ },
31
+ // @SNAKO
32
+ 'コマンドライン': { type: 'const', value: '' },
33
+ 'ナデシコランタイムパス': { type: 'const', value: '' },
34
+ 'ナデシコランタイム': { type: 'const', value: '' },
35
+ '母艦パス': { type: 'const', value: '' },
36
+ '読': {
37
+ type: 'func',
38
+ josi: [['を', 'から']],
39
+ pure: true,
40
+ fn: function (f) {
41
+ return '' + fs.readFileSync(f);
42
+ }
43
+ },
44
+ '開': {
45
+ type: 'func',
46
+ josi: [['を', 'から']],
47
+ pure: true,
48
+ fn: function (f) {
49
+ return '' + fs.readFileSync(f);
50
+ }
51
+ },
52
+ '保存': {
53
+ type: 'func',
54
+ josi: [['を'], ['に', 'へ']],
55
+ pure: true,
56
+ fn: function (s, f) {
57
+ fs.writeFileSync(f, s, 'utf-8');
58
+ },
59
+ return_none: true
60
+ },
61
+ '起動待機': {
62
+ type: 'func',
63
+ josi: [['を']],
64
+ pure: true,
65
+ fn: function (s) {
66
+ const r = execSync(s);
67
+ return r.toString();
68
+ }
69
+ },
70
+ 'ファイル名抽出': {
71
+ type: 'func',
72
+ josi: [['から', 'の']],
73
+ pure: true,
74
+ fn: function (s) {
75
+ return path.basename(s);
76
+ }
77
+ },
78
+ 'パス抽出': {
79
+ type: 'func',
80
+ josi: [['から', 'の']],
81
+ pure: true,
82
+ fn: function (s) {
83
+ return path.dirname(s);
84
+ }
85
+ },
86
+ '絶対パス変換': {
87
+ type: 'func',
88
+ josi: [['を', 'の']],
89
+ pure: true,
90
+ fn: function (a) {
91
+ return path.resolve(a);
92
+ }
93
+ },
94
+ '相対パス展開': {
95
+ type: 'func',
96
+ josi: [['を'], ['で']],
97
+ pure: true,
98
+ fn: function (a, b) {
99
+ return path.resolve(path.join(a, b));
100
+ }
101
+ }
102
+ };
@@ -0,0 +1,98 @@
1
+ /**
2
+ * file: plugin_snako.js
3
+ * 簡単なファイル読み書きのプラグイン
4
+ */
5
+ import fs from 'fs'
6
+ import { execSync } from 'child_process'
7
+ import path from 'path'
8
+
9
+ export default {
10
+ '初期化': {
11
+ type: 'func',
12
+ josi: [],
13
+ pure: true,
14
+ fn: function (sys: any) {
15
+ sys.__getBokanPath = () => {
16
+ let nakofile
17
+ const cmd = path.basename(process.argv[1])
18
+ if (cmd.indexOf('snako') < 0) { nakofile = process.argv[1] } else { nakofile = process.argv[2] }
19
+ return path.dirname(path.resolve(nakofile))
20
+ }
21
+ sys.__v0['コマンドライン'] = process.argv
22
+ sys.__v0['ナデシコランタイムパス'] = process.argv[0]
23
+ sys.__v0['ナデシコランタイム'] = path.basename(process.argv[0])
24
+ sys.__v0['母艦パス'] = sys.__getBokanPath()
25
+ }
26
+ },
27
+ // @SNAKO
28
+ 'コマンドライン': { type: 'const', value: '' },
29
+ 'ナデシコランタイムパス': { type: 'const', value: '' },
30
+ 'ナデシコランタイム': { type: 'const', value: '' },
31
+ '母艦パス': { type: 'const', value: '' },
32
+ '読': { // @ ファイルFの内容を読む // @よむ
33
+ type: 'func',
34
+ josi: [['を', 'から']],
35
+ pure: true,
36
+ fn: function (f: string): string {
37
+ return '' + fs.readFileSync(f)
38
+ }
39
+ },
40
+ '開': { // @ ファイルFの内容を読む // @ひらく
41
+ type: 'func',
42
+ josi: [['を', 'から']],
43
+ pure: true,
44
+ fn: function (f: string): string {
45
+ return '' + fs.readFileSync(f)
46
+ }
47
+ },
48
+ '保存': { // @ 文字列SをファイルFに保存 // @ほぞん
49
+ type: 'func',
50
+ josi: [['を'], ['に', 'へ']],
51
+ pure: true,
52
+ fn: function (s: string, f: string): void {
53
+ fs.writeFileSync(f, s, 'utf-8')
54
+ },
55
+ return_none: true
56
+ },
57
+ '起動待機': { // @シェルコマンドSを起動し実行終了まで待機する // @きどうたいき
58
+ type: 'func',
59
+ josi: [['を']],
60
+ pure: true,
61
+ fn: function (s: string) {
62
+ const r = execSync(s)
63
+ return r.toString()
64
+ }
65
+ },
66
+ 'ファイル名抽出': { // @フルパスのファイル名Sからファイル名部分を抽出して返す // @ふぁいるめいちゅうしゅつ
67
+ type: 'func',
68
+ josi: [['から', 'の']],
69
+ pure: true,
70
+ fn: function (s: string) {
71
+ return path.basename(s)
72
+ }
73
+ },
74
+ 'パス抽出': { // @ファイル名Sからパス部分を抽出して返す // @ぱすちゅうしゅつ
75
+ type: 'func',
76
+ josi: [['から', 'の']],
77
+ pure: true,
78
+ fn: function (s: string) {
79
+ return path.dirname(s)
80
+ }
81
+ },
82
+ '絶対パス変換': { // @相対パスから絶対パスに変換して返す // @ぜったいぱすへんかん
83
+ type: 'func',
84
+ josi: [['を', 'の']],
85
+ pure: true,
86
+ fn: function (a: string) {
87
+ return path.resolve(a)
88
+ }
89
+ },
90
+ '相対パス展開': { // @ファイル名AからパスBを展開して返す // @そうたいぱすてんかい
91
+ type: 'func',
92
+ josi: [['を'], ['で']],
93
+ pure: true,
94
+ fn: function (a: string, b: string) {
95
+ return path.resolve(path.join(a, b))
96
+ }
97
+ }
98
+ }
@@ -4,6 +4,7 @@ import path from 'path';
4
4
  import com from '../index.mjs';
5
5
  import * as url from 'url';
6
6
  import { NakoGenOptions } from '../src/nako_gen.mjs';
7
+ import PluginSnako from './plugin_snako.mjs';
7
8
  const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
8
9
  /** コマンドラインオプション */
9
10
  class CommandOptions {
@@ -17,7 +18,7 @@ class CommandOptions {
17
18
  }
18
19
  }
19
20
  /** メイン処理 */
20
- function main(argvOrg) {
21
+ async function main(argvOrg) {
21
22
  // コマンドラインオプションを確認
22
23
  const argv = [...argvOrg];
23
24
  const opt = new CommandOptions();
@@ -43,6 +44,7 @@ function main(argvOrg) {
43
44
  }
44
45
  // なでしこのコンパイラを生成
45
46
  const nako = new com.NakoCompiler();
47
+ nako.addPluginObject('PluginSnako', PluginSnako);
46
48
  // 実行前にイベントを挟みたいとき
47
49
  nako.addListener('beforeRun', (g) => {
48
50
  g.__varslist[0]['ナデシコ種類'] = 'snako';
@@ -59,7 +61,7 @@ function main(argvOrg) {
59
61
  });
60
62
  // -e オプションを実行したとき
61
63
  if (opt.evalStr) {
62
- nako.run(opt.evalStr);
64
+ await nako.runAsync(opt.evalStr, 'main.nako3');
63
65
  return;
64
66
  }
65
67
  // パラメータが空だったとき
@@ -74,7 +76,7 @@ function main(argvOrg) {
74
76
  convert(nako, code, opt);
75
77
  }
76
78
  // 実行
77
- nako.run(code, opt.filename);
79
+ await nako.runAsync(code, opt.filename);
78
80
  }
79
81
  // -c オプションを指定したとき
80
82
  function convert(nako, code, opt) {
@@ -7,6 +7,7 @@ import { NakoGlobal } from '../src/nako_global.mjs'
7
7
  import * as url from 'url'
8
8
  import { NakoGenOptions } from '../src/nako_gen.mjs'
9
9
  import { NakoCompiler } from '../src/nako3.mjs'
10
+ import PluginSnako from './plugin_snako.mjs'
10
11
  const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
11
12
 
12
13
  /** コマンドラインオプション */
@@ -28,7 +29,7 @@ class CommandOptions {
28
29
  }
29
30
 
30
31
  /** メイン処理 */
31
- function main (argvOrg: string[]): void {
32
+ async function main (argvOrg: string[]) {
32
33
  // コマンドラインオプションを確認
33
34
  const argv: string[] = [...argvOrg]
34
35
  const opt: CommandOptions = new CommandOptions()
@@ -52,6 +53,7 @@ function main (argvOrg: string[]): void {
52
53
  }
53
54
  // なでしこのコンパイラを生成
54
55
  const nako = new com.NakoCompiler()
56
+ nako.addPluginObject('PluginSnako', PluginSnako)
55
57
  // 実行前にイベントを挟みたいとき
56
58
  nako.addListener('beforeRun', (g: NakoGlobal) => {
57
59
  g.__varslist[0]['ナデシコ種類'] = 'snako'
@@ -68,7 +70,7 @@ function main (argvOrg: string[]): void {
68
70
  })
69
71
  // -e オプションを実行したとき
70
72
  if (opt.evalStr) {
71
- nako.run(opt.evalStr)
73
+ await nako.runAsync(opt.evalStr, 'main.nako3')
72
74
  return
73
75
  }
74
76
  // パラメータが空だったとき
@@ -81,14 +83,14 @@ function main (argvOrg: string[]): void {
81
83
  // -c オプションが指定されたとき
82
84
  if (opt.flagConvert) { convert(nako, code, opt) }
83
85
  // 実行
84
- nako.run(code, opt.filename)
86
+ await nako.runAsync(code, opt.filename)
85
87
  }
86
88
 
87
89
  // -c オプションを指定したとき
88
90
  function convert (nako: NakoCompiler, code: string, opt: CommandOptions): void {
89
91
  // オプションを指定
90
92
  const genOpt = new NakoGenOptions(
91
- false,
93
+ false,
92
94
  ['nako_errors.mjs', 'nako_core_version.mjs', 'plugin_system.mjs'],
93
95
  'self.__varslist[0][\'ナデシコ種類\'] = \'snako\'')
94
96
  // スタンドアロンコードを生成
package/core/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nadesiko3core",
3
- "version": "3.3.65",
3
+ "version": "3.3.68",
4
4
  "description": "Japanese Programming Language Nadesiko v3 core",
5
5
  "main": "index.mjs",
6
6
  "type": "module",
@@ -10,9 +10,10 @@
10
10
  "test:indent": "mocha ./test/indent_test.mjs",
11
11
  "test:indent_inline": "mocha ./test/inline_indent_test.mjs",
12
12
  "tsc": "tsc --watch",
13
- "build": "cnako3 batch/build_nako_version.nako3 && tsc",
13
+ "build": "node command/snako.mjs batch/build_nako_version.nako3 && tsc",
14
14
  "eslint": "eslint ./src/*.mts",
15
- "eslint:fix": "eslint ./src/*.mts --fix"
15
+ "eslint:fix": "eslint ./src/*.mts --fix",
16
+ "hello": "node command/snako.mjs -e '「hello」を表示'"
16
17
  },
17
18
  "bin": {
18
19
  "snako": "command/snako.mjs"
@@ -46,5 +47,8 @@
46
47
  "eslint-plugin-promise": "^5.2.0",
47
48
  "mocha": "^10.0.0",
48
49
  "typescript": "^4.6.4"
50
+ },
51
+ "dependencies": {
52
+ "cross-env": "^7.0.3"
49
53
  }
50
54
  }
@@ -1,8 +1,8 @@
1
1
  // 実際のバージョン定義 (自動生成されるので以下を編集しない)
2
2
  const coreVersion = {
3
- version: '3.3.65',
3
+ version: '3.3.68',
4
4
  major: 3,
5
5
  minor: 3,
6
- patch: 65
6
+ patch: 68
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.65',
14
+ version: '3.3.68',
15
15
  major: 3,
16
16
  minor: 3,
17
- patch: 65
17
+ patch: 68
18
18
  }
19
19
  export default coreVersion
@@ -4,6 +4,9 @@
4
4
  export function isIndentChars(ch) {
5
5
  const code = ch.charCodeAt(0);
6
6
  // 特別なコード
7
+ if (ch === '\t') {
8
+ return 4;
9
+ }
7
10
  if (ch === ' ' || ch === '|') {
8
11
  return 1;
9
12
  }
@@ -4,6 +4,7 @@
4
4
  export function isIndentChars (ch: string): number {
5
5
  const code = ch.charCodeAt(0)
6
6
  // 特別なコード
7
+ if (ch === '\t') { return 4 }
7
8
  if (ch === ' ' || ch === '|') { return 1 }
8
9
  if (ch === '・' || ch === ' ') { return 2 }
9
10
  if (ch === '⏋' || ch === '⏌') { return 2 } // 0x23CB, 0x23CC
@@ -152,6 +152,11 @@ describe('inline_indent_test', async () => {
152
152
  '3回:\n' +
153
153
  ' ┗━「1」と表示。\n' +
154
154
  '', '1\n1\n1')
155
+ await cmp('' +
156
+ '3回:\n' +
157
+ ' 「1」と表示。\n' +
158
+ '\t「2」と表示。\n' +
159
+ '', '1\n2\n1\n2\n1\n2')
155
160
  await cmp('' +
156
161
  '3回:\n' +
157
162
  ' ┗━「1」と表示。\n' +
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nadesiko3",
3
- "version": "3.3.65",
3
+ "version": "3.3.68",
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): meY0nvrwNcht1QBIC5BP8hDvLnMGjZCTqklZ4O0ibeo=
10
10
  sha512(base64): IckQnpyhPJ4H5l2ID6ZePflH18kAmm8e/o/tlAbwAHwzhKWQMai+L1ThLPpuKHBP/LTqBOmW0UE5MeYUtnXg4Q==
11
11
  nako_gen_async.js:
12
- md5(hex): 92ef220e4059ed8e3eeb1416c8039d7a
13
- sha256(hex): f1be862c5d80cd56b5dbcf99fba4e47b91196483939aad85017159f0e12fbf99
14
- sha256(base64): 8b6GLF2AzVa128+Z+6Tke5EZZIOTmq2FAXFZ8OEvv5k=
15
- sha512(base64): UY1K78Tn5HPh4grrpGR4O8aaqc4nBuv6KBsaZBef1fnDjklfR3kocf9SZw/X521J33Pr1KJ+9pnFV8KgyROcxA==
12
+ md5(hex): eb6fe7f404690b75f964e17166fa2826
13
+ sha256(hex): ad5122b3f080030a42395b7a75bc04ae15082983831d55ca5d56760e3ca9bbb6
14
+ sha256(base64): rVEis/CAAwpCOVt6dbwErhUIKYODHVXKXVZ2Djypu7Y=
15
+ sha512(base64): mDRpRyIRS7v/AwZv9aR/4ANuty6RUIBzbLC0HTnsk5tBopoSavgCCTnpglFj+4x+eXe1+jGTyTuWucFZ4rUazg==
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): 636a795f62ad92ab0037331d93e45dd6
58
- sha256(hex): 8b83476dcf634649dc248345f797941df40d6d90d2e886d3053b3b692d6b6501
59
- sha256(base64): i4NHbc9jRkncJINF95eUHfQNbZDS6IbTBTs7aS1rZQE=
60
- sha512(base64): Zw1xzsAOiFhTxUU3ArQsyVlhUPRO+jKYaM7MV9RpIWlAEvyelB82O0PwI49d+B2AERrUAQbHB5dzi0Sgxi424g==
57
+ md5(hex): 2658a3c3e9fccfa3066b805e7283834f
58
+ sha256(hex): 5f4a2beee6c81fb8438c325e3f34b1a98cc5120faf7ae657a83af47e0bcd85cc
59
+ sha256(base64): X0or7ubIH7hDjDJePzSxqYzFEg+veuZXqDr0fgvNhcw=
60
+ sha512(base64): yt2JfcwCHs3XvDy2m3Sfjf0U8PHjxr6FZJ2bmilVE6hjvFjS9qto9nry3zUSNZYg5y4QRRjpvvN4h9dJZNJJ/g==
61
61
  wnako3.js:
62
- md5(hex): 1cb88129583bbd9917f21dddc5da0aab
63
- sha256(hex): 5f882b8e25840607698f959768b111eb7e300a8ae6380bac1619ac010964f16d
64
- sha256(base64): X4grjiWEBgdpj5WXaLER634wCormOAusFhmsAQlk8W0=
65
- sha512(base64): nCmzxaQyHAbpIWiYepIQZz9VWcm2NyeihP+rqwIL69v8H1rv25hobIKhsm1FTC14Nd4eW0gqCw9GIW3QqFwZvQ==
62
+ md5(hex): dc02a400479860ea18764facc2f3edc4
63
+ sha256(hex): 2a786bae1d0fb93be79dd748390dfc6c7d655030e4cff3c4d4ec87fa0cb95eae
64
+ sha256(base64): Knhrrh0PuTvnnddIOQ38bH1lUDDkz/PE1OyH+gy5Xq4=
65
+ sha512(base64): mtoApmdyCXEDZH147+pB6Kw5upNTzb+ve62Fp+eDcImGmYLnakV0XJpdgWMbSxJxnKVCUonhOsDDf+B0w/EN6g==
66
66
  wnako3webworker.js:
67
- md5(hex): a5a4eb73a91ca4135fcd6ad1a1999a05
68
- sha256(hex): 3cca7371991a6b441fb12658b40dedd0ebfdc12cdd265a4aed1436e389e000a0
69
- sha256(base64): PMpzcZkaa0QfsSZYtA3t0Ov9wSzdJlpK7RQ244ngAKA=
70
- sha512(base64): jDXiUy+4N0B+TSr09qEsLGfjotSiRcM3bANO4ORrPdwVU8udQzXD0xmRiX5d0YA8T0DT2z1kWetrdH5Zzl5r9Q==
67
+ md5(hex): 0bb4af9bfefa675dbd36d42bc1b45298
68
+ sha256(hex): 71096306e045b2a85ad734e83970758396983e336576799a490dc7cdba534e6d
69
+ sha256(base64): cQljBuBFsqha1zToOXB1g5aYPjNldnmaSQ3HzbpTTm0=
70
+ sha512(base64): xyntPtRYTnN5QxsVod99K+MQUSSdx7XTa3MdQoU1mZEKWfTSU9juFkn+JewIDRbRiIurqPp19wzt21t908chjg==
@@ -1,14 +1,14 @@
1
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.65&f=release/command.json.js" integrity="sha512-AivQgz9aYmlGgnj6n5APSr5a77xVlEZi8YVh8OTrLTDE57FRkKKeY9DHB0mkL4CoDPaBsXjuSFIzm7rko9cZTg==" crossorigin="anonymous"></script>
2
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.65&f=release/editor.js" integrity="sha512-IckQnpyhPJ4H5l2ID6ZePflH18kAmm8e/o/tlAbwAHwzhKWQMai+L1ThLPpuKHBP/LTqBOmW0UE5MeYUtnXg4Q==" crossorigin="anonymous"></script>
3
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.65&f=release/nako_gen_async.js" integrity="sha512-UY1K78Tn5HPh4grrpGR4O8aaqc4nBuv6KBsaZBef1fnDjklfR3kocf9SZw/X521J33Pr1KJ+9pnFV8KgyROcxA==" crossorigin="anonymous"></script>
4
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.65&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.65&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.65&f=release/plugin_datetime.js" integrity="sha512-1ADTZFkcfU6vpEEJZEYmIbqS6G2XViooDFD4198P61n7VKZ0PhEVj9l8ULFGrW7woSbDqfSPZmkZ7yvcRqPKYA==" crossorigin="anonymous"></script>
7
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.65&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.65&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.65&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.65&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.65&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.65&f=release/version.js" integrity="sha512-Zw1xzsAOiFhTxUU3ArQsyVlhUPRO+jKYaM7MV9RpIWlAEvyelB82O0PwI49d+B2AERrUAQbHB5dzi0Sgxi424g==" crossorigin="anonymous"></script>
13
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.65&f=release/wnako3.js" integrity="sha512-nCmzxaQyHAbpIWiYepIQZz9VWcm2NyeihP+rqwIL69v8H1rv25hobIKhsm1FTC14Nd4eW0gqCw9GIW3QqFwZvQ==" crossorigin="anonymous"></script>
14
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.65&f=release/wnako3webworker.js" integrity="sha512-jDXiUy+4N0B+TSr09qEsLGfjotSiRcM3bANO4ORrPdwVU8udQzXD0xmRiX5d0YA8T0DT2z1kWetrdH5Zzl5r9Q==" crossorigin="anonymous"></script>
1
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.68&f=release/command.json.js" integrity="sha512-AivQgz9aYmlGgnj6n5APSr5a77xVlEZi8YVh8OTrLTDE57FRkKKeY9DHB0mkL4CoDPaBsXjuSFIzm7rko9cZTg==" crossorigin="anonymous"></script>
2
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.68&f=release/editor.js" integrity="sha512-IckQnpyhPJ4H5l2ID6ZePflH18kAmm8e/o/tlAbwAHwzhKWQMai+L1ThLPpuKHBP/LTqBOmW0UE5MeYUtnXg4Q==" crossorigin="anonymous"></script>
3
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.68&f=release/nako_gen_async.js" integrity="sha512-mDRpRyIRS7v/AwZv9aR/4ANuty6RUIBzbLC0HTnsk5tBopoSavgCCTnpglFj+4x+eXe1+jGTyTuWucFZ4rUazg==" crossorigin="anonymous"></script>
4
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.68&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.68&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.68&f=release/plugin_datetime.js" integrity="sha512-1ADTZFkcfU6vpEEJZEYmIbqS6G2XViooDFD4198P61n7VKZ0PhEVj9l8ULFGrW7woSbDqfSPZmkZ7yvcRqPKYA==" crossorigin="anonymous"></script>
7
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.68&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.68&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.68&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.68&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.68&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.68&f=release/version.js" integrity="sha512-yt2JfcwCHs3XvDy2m3Sfjf0U8PHjxr6FZJ2bmilVE6hjvFjS9qto9nry3zUSNZYg5y4QRRjpvvN4h9dJZNJJ/g==" crossorigin="anonymous"></script>
13
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.68&f=release/wnako3.js" integrity="sha512-mtoApmdyCXEDZH147+pB6Kw5upNTzb+ve62Fp+eDcImGmYLnakV0XJpdgWMbSxJxnKVCUonhOsDDf+B0w/EN6g==" crossorigin="anonymous"></script>
14
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.68&f=release/wnako3webworker.js" integrity="sha512-xyntPtRYTnN5QxsVod99K+MQUSSdx7XTa3MdQoU1mZEKWfTSU9juFkn+JewIDRbRiIurqPp19wzt21t908chjg==" crossorigin="anonymous"></script>