nadesiko3 3.3.78 → 3.3.79

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.
@@ -1,8 +1,8 @@
1
1
  // 実際のバージョン定義 (自動生成されるので以下を編集しない)
2
2
  const coreVersion = {
3
- version: '3.3.77',
3
+ version: '3.3.79',
4
4
  major: 3,
5
5
  minor: 3,
6
- patch: 77
6
+ patch: 79
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.77',
14
+ version: '3.3.79',
15
15
  major: 3,
16
16
  minor: 3,
17
- patch: 77
17
+ patch: 79
18
18
  }
19
19
  export default coreVersion
@@ -900,6 +900,7 @@ export class NakoGen {
900
900
  // ループ条件を確認
901
901
  const kara = this._convGen(node.from, true);
902
902
  const made = this._convGen(node.to, true);
903
+ const flagDown = node.flagDown;
903
904
  let inc = '1';
904
905
  if (node.inc !== null || node.inc === undefined || node.inc === 'null') {
905
906
  inc = this._convGen(node.inc, true);
@@ -922,9 +923,11 @@ export class NakoGen {
922
923
  ` ${block}\n` +
923
924
  ' };\n' +
924
925
  '} else { // down\n' +
925
- ` for (let ${varI} = ${varFrom}; ${varI} >= ${varTo}; ${varI}-= ${inc}) {\n` +
926
- ` ${sorePrefex}${word} = ${varI};` + '\n' +
927
- ` ${block}\n` +
926
+ ` if (${flagDown}) {` +
927
+ ` for (let ${varI} = ${varFrom}; ${varI} >= ${varTo}; ${varI}-= ${inc}) {\n` +
928
+ ` ${sorePrefex}${word} = ${varI};` + '\n' +
929
+ ` ${block}\n` +
930
+ ' }\n' +
928
931
  ' };\n' +
929
932
  `};\n//[/FOR id=${idLoop}]\n`;
930
933
  return this.convLineno(node, false) + code;
@@ -961,6 +961,7 @@ export class NakoGen {
961
961
  // ループ条件を確認
962
962
  const kara = this._convGen(node.from as Ast, true)
963
963
  const made = this._convGen(node.to as Ast, true)
964
+ const flagDown = node.flagDown
964
965
  let inc = '1'
965
966
  if (node.inc !== null || node.inc === undefined || node.inc === 'null') {
966
967
  inc = this._convGen(node.inc as Ast, true)
@@ -984,9 +985,11 @@ export class NakoGen {
984
985
  ` ${block}\n` +
985
986
  ' };\n' +
986
987
  '} else { // down\n' +
987
- ` for (let ${varI} = ${varFrom}; ${varI} >= ${varTo}; ${varI}-= ${inc}) {\n` +
988
- ` ${sorePrefex}${word} = ${varI};` + '\n' +
989
- ` ${block}\n` +
988
+ ` if (${flagDown}) {` +
989
+ ` for (let ${varI} = ${varFrom}; ${varI} >= ${varTo}; ${varI}-= ${inc}) {\n` +
990
+ ` ${sorePrefex}${word} = ${varI};` + '\n' +
991
+ ` ${block}\n` +
992
+ ' }\n' +
990
993
  ' };\n' +
991
994
  `};\n//[/FOR id=${idLoop}]\n`
992
995
  return this.convLineno(node, false) + code
@@ -975,6 +975,7 @@ export class NakoParser extends NakoParserBase {
975
975
  }
976
976
  /** @returns {Ast | null} */
977
977
  yFor() {
978
+ let flagDown = true; // AからBまでの時、A>=Bを許容するかどうか
978
979
  const map = this.peekSourceMap();
979
980
  if (this.check('繰返') || this.check('増繰返') || this.check('減繰返')) {
980
981
  // pass
@@ -987,8 +988,10 @@ export class NakoParser extends NakoParserBase {
987
988
  const incdec = this.stack.pop();
988
989
  if (incdec) {
989
990
  if (incdec.type === 'word' && (incdec.value === '増' || incdec.value === '減')) {
990
- kurikaesu.type = incdec.value + kurikaesu.type;
991
- // typeを増繰返 | 減繰返 に変換
991
+ if (incdec.value === '増') {
992
+ flagDown = false;
993
+ }
994
+ kurikaesu.type = incdec.value + kurikaesu.type; // typeを増繰返 | 減繰返 に変換
992
995
  }
993
996
  else {
994
997
  // 普通の繰り返しの場合
@@ -998,6 +1001,9 @@ export class NakoParser extends NakoParserBase {
998
1001
  let vInc = null;
999
1002
  if (kurikaesu.type === '増繰返' || kurikaesu.type === '減繰返') {
1000
1003
  vInc = this.popStack(['ずつ']);
1004
+ if (kurikaesu.type === '増繰返') {
1005
+ flagDown = false;
1006
+ }
1001
1007
  }
1002
1008
  const vTo = this.popStack(['まで']);
1003
1009
  const vFrom = this.popStack(['から']);
@@ -1035,6 +1041,7 @@ export class NakoParser extends NakoParserBase {
1035
1041
  from: vFrom,
1036
1042
  to: vTo,
1037
1043
  inc: vInc,
1044
+ flagDown,
1038
1045
  word,
1039
1046
  block: block || [],
1040
1047
  josi: '',
@@ -847,6 +847,7 @@ export class NakoParser extends NakoParserBase {
847
847
 
848
848
  /** @returns {Ast | null} */
849
849
  yFor (): Ast|null {
850
+ let flagDown = true // AからBまでの時、A>=Bを許容するかどうか
850
851
  const map = this.peekSourceMap()
851
852
  if (this.check('繰返') || this.check('増繰返') || this.check('減繰返')) {
852
853
  // pass
@@ -858,8 +859,8 @@ export class NakoParser extends NakoParserBase {
858
859
  const incdec = this.stack.pop()
859
860
  if (incdec) {
860
861
  if (incdec.type === 'word' && (incdec.value === '増' || incdec.value === '減')) {
861
- kurikaesu.type = incdec.value + kurikaesu.type
862
- // typeを増繰返 | 減繰返 に変換
862
+ if (incdec.value === '増') { flagDown = false }
863
+ kurikaesu.type = incdec.value + kurikaesu.type // typeを増繰返 | 減繰返 に変換
863
864
  } else {
864
865
  // 普通の繰り返しの場合
865
866
  this.stack.push(incdec) // 違ったので改めて追加
@@ -868,6 +869,7 @@ export class NakoParser extends NakoParserBase {
868
869
  let vInc = null
869
870
  if (kurikaesu.type === '増繰返' || kurikaesu.type === '減繰返') {
870
871
  vInc = this.popStack(['ずつ'])
872
+ if (kurikaesu.type === '増繰返') { flagDown = false }
871
873
  }
872
874
  const vTo = this.popStack(['まで'])
873
875
  const vFrom = this.popStack(['から'])
@@ -899,6 +901,7 @@ export class NakoParser extends NakoParserBase {
899
901
  from: vFrom,
900
902
  to: vTo,
901
903
  inc: vInc,
904
+ flagDown,
902
905
  word,
903
906
  block: block || [],
904
907
  josi: '',
@@ -90,6 +90,7 @@ export interface Ast {
90
90
  to?: Ast[] | Ast; // for
91
91
  inc?: Ast[] | Ast | null; // for
92
92
  word?: Ast | null; // for
93
+ flagDown?: boolean; // for
93
94
  name?: Token | Ast | null | string;
94
95
  names?: Ast[];
95
96
  args?: Ast[]; // 関数の引数
@@ -143,7 +143,9 @@ export default {
143
143
  josi: [],
144
144
  pure: false,
145
145
  fn: function (sys) {
146
- sys.__exec('全タイマー停止', [sys]);
146
+ if (sys.__exec) {
147
+ sys.__exec('全タイマー停止', [sys]);
148
+ }
147
149
  if (sys.__genMode === '非同期モード') {
148
150
  sys.__stopAsync(sys);
149
151
  }
@@ -1734,6 +1736,14 @@ export default {
1734
1736
  throw new Error('『配列ポップ』で配列以外の処理。');
1735
1737
  }
1736
1738
  },
1739
+ '配列プッシュ': {
1740
+ type: 'func',
1741
+ josi: [['に', 'へ'], ['を']],
1742
+ pure: true,
1743
+ fn: function (a, b, sys) {
1744
+ return sys.__exec('配列追加', [a, b, sys]);
1745
+ }
1746
+ },
1737
1747
  '配列追加': {
1738
1748
  type: 'func',
1739
1749
  josi: [['に', 'へ'], ['を']],
@@ -1800,6 +1810,72 @@ export default {
1800
1810
  throw new Error('『配列合計』で配列変数以外の値が指定されました。');
1801
1811
  }
1802
1812
  },
1813
+ '配列連番作成': {
1814
+ type: 'func',
1815
+ josi: [['から'], ['まで', 'の']],
1816
+ pure: true,
1817
+ fn: function (a, b) {
1818
+ const result = [];
1819
+ for (let i = a; i <= b; i++) {
1820
+ result.push(i);
1821
+ }
1822
+ return result;
1823
+ }
1824
+ },
1825
+ '配列要素作成': {
1826
+ type: 'func',
1827
+ josi: [['を'], ['だけ']],
1828
+ pure: true,
1829
+ fn: function (a, b) {
1830
+ const result = [];
1831
+ for (let i = 0; i < b; i++) {
1832
+ result.push(a);
1833
+ }
1834
+ return result;
1835
+ }
1836
+ },
1837
+ '配列関数適用': {
1838
+ type: 'func',
1839
+ josi: [['を'], ['へ', 'に']],
1840
+ pure: true,
1841
+ fn: function (f, a, sys) {
1842
+ let ufunc = f;
1843
+ if (typeof f === 'string') {
1844
+ ufunc = sys.__findFunc(f, '配列関数適用');
1845
+ }
1846
+ const result = [];
1847
+ for (const e of a) {
1848
+ result.push(ufunc(e));
1849
+ }
1850
+ return result;
1851
+ }
1852
+ },
1853
+ '配列マップ': {
1854
+ type: 'func',
1855
+ josi: [['を'], ['へ', 'に']],
1856
+ pure: true,
1857
+ fn: function (f, a, sys) {
1858
+ return sys.__exec('配列関数適用', [f, a, sys]);
1859
+ }
1860
+ },
1861
+ '配列フィルタ': {
1862
+ type: 'func',
1863
+ josi: [['で', 'の'], ['を', 'について']],
1864
+ pure: true,
1865
+ fn: function (f, a, sys) {
1866
+ let ufunc = f;
1867
+ if (typeof f === 'string') {
1868
+ ufunc = sys.__findFunc(f, '配列フィルタ');
1869
+ }
1870
+ const result = [];
1871
+ for (const e of a) {
1872
+ if (ufunc(e)) {
1873
+ result.push(e);
1874
+ }
1875
+ }
1876
+ return result;
1877
+ }
1878
+ },
1803
1879
  // @二次元配列処理
1804
1880
  '表ソート': {
1805
1881
  type: 'func',
@@ -131,7 +131,7 @@ export default {
131
131
  josi: [],
132
132
  pure: false,
133
133
  fn: function (sys: any) {
134
- sys.__exec('全タイマー停止', [sys])
134
+ if (sys.__exec) { sys.__exec('全タイマー停止', [sys]) }
135
135
  if (sys.__genMode === '非同期モード') { sys.__stopAsync(sys) }
136
136
  sys.__v0['表示ログ'] = ''
137
137
  }
@@ -1664,6 +1664,14 @@ export default {
1664
1664
  throw new Error('『配列ポップ』で配列以外の処理。')
1665
1665
  }
1666
1666
  },
1667
+ '配列プッシュ': { // @配列Aの末尾にNを追加。Aの内容を書き換える。(『配列追加』と同じ) // @はいれつぷっしゅ
1668
+ type: 'func',
1669
+ josi: [['に', 'へ'], ['を']],
1670
+ pure: true,
1671
+ fn: function (a: any, b: any, sys: any) {
1672
+ return sys.__exec('配列追加', [a, b, sys])
1673
+ }
1674
+ },
1667
1675
  '配列追加': { // @配列Aの末尾にBを追加して返す。Aの内容を書き換える。 // @はいれつついか
1668
1676
  type: 'func',
1669
1677
  josi: [['に', 'へ'], ['を']],
@@ -1728,6 +1736,66 @@ export default {
1728
1736
  throw new Error('『配列合計』で配列変数以外の値が指定されました。')
1729
1737
  }
1730
1738
  },
1739
+ '配列連番作成': { // @AからBまでの連番配列を生成して返す。 // @はいれつれんばんさくせい
1740
+ type: 'func',
1741
+ josi: [['から'], ['まで', 'の']],
1742
+ pure: true,
1743
+ fn: function (a: number, b: number) {
1744
+ const result: number[] = []
1745
+ for (let i = a; i <= b; i++) {
1746
+ result.push(i)
1747
+ }
1748
+ return result
1749
+ }
1750
+ },
1751
+ '配列要素作成': { // @値AをB個持つ配列を生成して返す。 // @はいれつようそさくせい
1752
+ type: 'func',
1753
+ josi: [['を'], ['だけ']],
1754
+ pure: true,
1755
+ fn: function (a: number, b: number) {
1756
+ const result: number[] = []
1757
+ for (let i = 0; i < b; i++) {
1758
+ result.push(a)
1759
+ }
1760
+ return result
1761
+ }
1762
+ },
1763
+ '配列関数適用': { // @引数を1つ持つ関数Fを、配列Aの全要素に適用した、新しい配列を返す。 // @はいれつかんすうてきよう
1764
+ type: 'func',
1765
+ josi: [['を'], ['へ', 'に']],
1766
+ pure: true,
1767
+ fn: function (f: any, a: any, sys: any) {
1768
+ let ufunc: any = f
1769
+ if (typeof f === 'string') { ufunc = sys.__findFunc(f, '配列関数適用') }
1770
+ const result: any = []
1771
+ for (const e of a) {
1772
+ result.push(ufunc(e))
1773
+ }
1774
+ return result
1775
+ }
1776
+ },
1777
+ '配列マップ': { // @引数を1つ持つ関数Fを、配列Aの全要素に適用した、新しい配列を返す。(『配列関数適用』と同じ) // @はいれつまっぷ
1778
+ type: 'func',
1779
+ josi: [['を'], ['へ', 'に']],
1780
+ pure: true,
1781
+ fn: function (f: any, a: any, sys: any) {
1782
+ return sys.__exec('配列関数適用', [f, a, sys])
1783
+ }
1784
+ },
1785
+ '配列フィルタ': { // @引数を1つ持ち真偽を返す関数Fを利用して、配列Aの要素をフィルタして、新しい配列として返す。 // @はいれつふぃるた
1786
+ type: 'func',
1787
+ josi: [['で', 'の'], ['を', 'について']],
1788
+ pure: true,
1789
+ fn: function (f: any, a: any, sys: any) {
1790
+ let ufunc: any = f
1791
+ if (typeof f === 'string') { ufunc = sys.__findFunc(f, '配列フィルタ') }
1792
+ const result: any = []
1793
+ for (const e of a) {
1794
+ if (ufunc(e)) { result.push(e) }
1795
+ }
1796
+ return result
1797
+ }
1798
+ },
1731
1799
  // @二次元配列処理
1732
1800
  '表ソート': { // @二次元配列AでB列目(0起点)(あるいはキー名)をキーに文字列順にソートする。Aの内容を書き換える。 // @ひょうそーと
1733
1801
  type: 'func',
@@ -35,4 +35,26 @@ describe('array_test', async () => {
35
35
  it('配列を「代入」文するとエラーが出る問題 (nadesiko3 #1354)(core #75)', async () => {
36
36
  await cmp('Aは[];1に2を足して、A[0]に代入。A[0]を表示。', '3')
37
37
  })
38
+ it('配列連番作成 #1361 (core #78)', async () => {
39
+ await cmp('1から3まで配列連番作成してJSONエンコードして表示', '[1,2,3]')
40
+ await cmp('5から7まで配列連番作成してJSONエンコードして表示', '[5,6,7]')
41
+ })
42
+ it('配列関数適用 #1361 (core #78)', async () => {
43
+ await cmp('●(Nを)二倍処理とは;それはN*2;ここまで;A=[1,2,3];Aに「二倍処理」を配列関数適用してJSONエンコードして表示。', '[2,4,6]')
44
+ await cmp('A=[1,2,3];Aへ配列関数適用には(N)\nそれはN*2;ここまで;それをJSONエンコードして表示。', '[2,4,6]')
45
+ await cmp('●(Nを)二倍処理とは;それはN*2;ここまで;A=[1,2,3];Aに「二倍処理」を配列マップしてJSONエンコードして表示。', '[2,4,6]')
46
+ })
47
+ it('配列フィルタ #1361 (core #78)', async () => {
48
+ await cmp('●(Nを)偶数抽出とは;それは(N%2==0);ここまで;A=[1,2,3,4];Aを「偶数抽出」で配列フィルタしてJSONエンコードして表示。', '[2,4]')
49
+ await cmp('●(Nを)偶数抽出とは;それは(N%2==0);ここまで;A=[1,2,3,4];Aについて「偶数抽出」で配列フィルタしてJSONエンコードして表示。', '[2,4]')
50
+ await cmp('A=[1,2,3,4];Aについて配列フィルタには(N)\nそれは(N%2==0);ここまで;それをJSONエンコードして表示。', '[2,4]')
51
+ })
52
+ it('配列プッシュ #1361 (core #78)', async () => {
53
+ await cmp('Aは[];Aに3を配列プッシュ。AをJSONエンコードして表示。', '[3]')
54
+ await cmp('Aは[1];Aに3を配列プッシュ。AをJSONエンコードして表示。', '[1,3]')
55
+ })
56
+ it('配列要素作成 #1361 (core #78)', async () => {
57
+ await cmp('100を3だけ配列要素作成してAに代入。AをJSONエンコードして表示。', '[100,100,100]')
58
+ await cmp('1を5だけ配列要素作成してAに代入。AをJSONエンコードして表示。', '[1,1,1,1,1]')
59
+ })
38
60
  })
@@ -412,4 +412,22 @@ describe('flow_test', async () => {
412
412
  'ここまで\n' +
413
413
  '', 'あ')
414
414
  })
415
+ it('「AからBまでNずつ増やし繰り返す」文でBからAまでも実行してしまう問題 #79', async () => {
416
+ await cmp(
417
+ 'A="";Nを3から1まで繰り返す\n' +
418
+ '  A=A&N\n' +
419
+ 'ここまで\n' +
420
+ 'Aを表示;', '321')
421
+ // 増やすのに減らさない
422
+ await cmp(
423
+ 'A="";Nを3から1まで1ずつ増やし繰り返す\n' +
424
+ '  A=A&N\n' +
425
+ 'ここまで\n' +
426
+ 'Aを表示;', '')
427
+ await cmp(
428
+ 'A="";Nを3から1まで1ずつ減らし繰り返す\n' +
429
+ '  A=A&N\n' +
430
+ 'ここまで\n' +
431
+ 'Aを表示;', '321')
432
+ })
415
433
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nadesiko3",
3
- "version": "3.3.78",
3
+ "version": "3.3.79",
4
4
  "description": "Japanese Programming Language",
5
5
  "type": "module",
6
6
  "main": "src/index.mjs",
package/release/_hash.txt CHANGED
@@ -1,18 +1,18 @@
1
1
  command.json.js:
2
- md5(hex): 20c663129d0d0e7000122fa42e774729
3
- sha256(hex): a6dfcea2774670ac7ba3f3fc44290df771977929622efcf6495b2328add7626b
4
- sha256(base64): pt/OondGcKx7o/P8RCkN93GXeSliLvz2SVsjKK3XYms=
5
- sha512(base64): eRc1b2nQXqFgUvurwCQG+ZyglDftp/YIg8bok/STRkn/OGSaTpiy8y1MEC382ZvPafv0Jf/qa70T3nCQDnxB6w==
2
+ md5(hex): ea3d41e3d426bce7812640f15c6f9e0e
3
+ sha256(hex): 12c6fa9475b20e454b99728bf56afb584fdd05c9cbc359abbabd0ab7fdaf4a28
4
+ sha256(base64): Esb6lHWyDkVLmXKL9Wr7WE/dBcnLw1mrur0Kt/2vSig=
5
+ sha512(base64): x7YKQabM3SMJl4/TjTlSPVw4lbh+Yktf/bq+aBkfKm+cTyi36kxKRK3x3fG46IozKshOfNTGnqcLegshkIRxVw==
6
6
  editor.js:
7
- md5(hex): 0372dd3a0e3fdc3b377896827897ec22
8
- sha256(hex): 64d6fd24e35729ad796589b3bd3847165e6f0a0e7d4571f8938bf35495a4b063
9
- sha256(base64): ZNb9JONXKa15ZYmzvThHFl5vCg59RXH4k4vzVJWksGM=
10
- sha512(base64): rCqM2o4PmQk+Iis5RgUn4zIuSp84DsRKcr+cIFd8XOD8BGLMUoKOdigCX20l+/mOh20uPpgEHuCLqkG/wUv7Hw==
7
+ md5(hex): cc5673650b66fbb0358fdb79c6014dcf
8
+ sha256(hex): 9fca3ad1daf729d6a474563991d129f0e02eb576a1d414926ac2c2d0390dc047
9
+ sha256(base64): n8o60dr3KdakdFY5kdEp8OAutXah1BSSasLC0DkNwEc=
10
+ sha512(base64): FMJHzZDBeX6n6CQYRWH6d4OhxTCP48Tr3SAPdhZdNrr5ZwurJX2c4PJAboLBN5gYeYZ6WwdEl1+oCHa8xgS34Q==
11
11
  nako_gen_async.js:
12
- md5(hex): 3f69bbce3a562184da9ca56de5247ee6
13
- sha256(hex): 9aef2d09c48de79bf91ed82504208e232f65f7aec7fcd60a4b0ad843d7b0b5c8
14
- sha256(base64): mu8tCcSN55v5HtglBCCOIy9l967H/NYKSwrYQ9ewtcg=
15
- sha512(base64): /rlPkDABsQaz0xio0ybU1oUiYFe6TOw4a/lCScF72FK5JjwulvEfWuhNGTAHxyHfrrQPMOFnTf/XCR65PRb4iw==
12
+ md5(hex): 9dfd63d1f27a4038c1c6b4669702fb71
13
+ sha256(hex): 2124b78a833a8e0e5e657879adb81a954fc8873af2bb93e35fdf1860cb6693c1
14
+ sha256(base64): ISS3ioM6jg5eZXh5rbgalU/Ihzryu5PjX98YYMtmk8E=
15
+ sha512(base64): an36Im7NqvIBKAWnkkkOKWlWQck3jOTbz0IRU/BMtmS6nmRxlOad3bDE7DrS16roPSMuQV3BJbnlLMht2+iF2Q==
16
16
  plugin_caniuse.js:
17
17
  md5(hex): 95a7a5c98a92a46b6435e577daba3241
18
18
  sha256(hex): 57638b3979be70b45ab8085861f6b2ece43200bd6aa92765d73caf76b9e6fea9
@@ -39,10 +39,10 @@ plugin_markup.js:
39
39
  sha256(base64): lU+CykifGTgBN2y9Bqqnza/bZI8z4B+sC7vILOnkXo0=
40
40
  sha512(base64): pvb+QYO9LMUH055nPJJ5QaWyEYR3wDkHHilV5LLNyxObs7enlHGiF7Jt3Csd93JTdJ3n9hxFbTqWa1QuzVmTfQ==
41
41
  plugin_turtle.js:
42
- md5(hex): 8bf3b5e2b8796b41900b39f3eead9d2a
43
- sha256(hex): 2546eb4dcc6f47464ca7cd5682473e76bd2185607ecd6c06e1ce79b62e8fa930
44
- sha256(base64): JUbrTcxvR0ZMp81Wgkc+dr0hhWB+zWwG4c55ti6PqTA=
45
- sha512(base64): 3/BlAe3uVDBgJrgFWzLJa3bvNQVhAQuL343Icict5hI3LndcPjV6mAD8KoWRlxmF8A8S6n8eKnmrh6NFWTjyEw==
42
+ md5(hex): 87bff5e8ea06216e6a57aa7764074764
43
+ sha256(hex): 6edfa449343e0ffa78a3cc989943f0347b90aaddda4cf35aa423b5a635f103c1
44
+ sha256(base64): bt+kSTQ+D/p4o8yYmUPwNHuQqt3aTPNapCO1pjXxA8E=
45
+ sha512(base64): ADtegZGlBz0Uk7DKn2zzkVUaA7cdVCRbyc4iOGwEFmXdx0KtzYKumgKIHQiniH3AdGMBhgGf6WZI3y7xcLoFmw==
46
46
  plugin_webworker.js:
47
47
  md5(hex): 5acee287fd2253f301c3521f047d0355
48
48
  sha256(hex): 1a5bf85b7f2e1a2dcbf2d32182a60d5caf21938ba453beaf6c36798883bc8486
@@ -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): b895ce22534ca9ef77553c54721c3c48
58
- sha256(hex): bd5452ff1fb605a64ccb20ea3a1ec20bd2af00c7c3c042741755887902ba555b
59
- sha256(base64): vVRS/x+2BaZMyyDqOh7CC9KvAMfDwEJ0F1WIeQK6VVs=
60
- sha512(base64): F0HhBrE/P7ufHk0OpT27ij/PVbgPZJG1J8zhuhfj/Zf0H4hJIfRS2+qEFfSJN/vBJtv9cNVB+z/m4Yt2bTdxDg==
57
+ md5(hex): 48b3e3f69ece954d1ebfb055cb606f36
58
+ sha256(hex): f1022cc8a1fa595cae099f6ff6c3e9245375946e2ed99433c784e6518870040e
59
+ sha256(base64): 8QIsyKH6WVyuCZ9v9sPpJFN1lG4u2ZQzx4TmUYhwBA4=
60
+ sha512(base64): 6TpQlzOQLQ/PMhWPnlH9kzYiqesuv0xMI5TilQLwSQn5F/QXnh6ZkS2a8ZFN7EOXTK0jhj2/rzJcMfdKXDo+rg==
61
61
  wnako3.js:
62
- md5(hex): 089a2364b4bd9390d4d8175d0dd62ebd
63
- sha256(hex): 9efd7cc5fd5d9422b846f9109080ac1fae5cfbe5d397b277385dcd65bc3c6ba0
64
- sha256(base64): nv18xf1dlCK4RvkQkICsH65c++XTl7J3OF3NZbw8a6A=
65
- sha512(base64): DyiV/dV8MDGEBl0j28x6QmnhUrGoUheUUoEOBKN2uUSLvwp30iuVo0hQv7fKjL3xvw7kYB0sIf1qngxqlqo5Ww==
62
+ md5(hex): ed0a642fabb952f07c29610114e0cbab
63
+ sha256(hex): 5232eb878c1c45826ed149e00cc961fd51d95c43064b500c3a12b03055d565dc
64
+ sha256(base64): UjLrh4wcRYJu0UngDMlh/VHZXEMGS1AMOhKwMFXVZdw=
65
+ sha512(base64): zFwG7byvdg/qg4bejuQ9zWB6p3N7LfZhEW966oo21QQmeNDXy4a53ZY2AdximF3be2muKUFSxleseJyRx53T8A==
66
66
  wnako3webworker.js:
67
- md5(hex): 1af12755c353246d18ba3af4208e3b26
68
- sha256(hex): 50fef34edadfa813046e693b135f354d2cb524a30dc61d99011d93c972f9c59b
69
- sha256(base64): UP7zTtrfqBMEbmk7E181TSy1JKMNxh2ZAR2TyXL5xZs=
70
- sha512(base64): Yzo8f3byHfU6/h67u6wv9dhe+tTTg69hlTgZCgdBiolMa0uLs9UgFzhRIdD4QV7jDGQbUslonBqjUOmdsneZUQ==
67
+ md5(hex): 8728ae278d8b6212b653a4c621770697
68
+ sha256(hex): 9ba89f232705c4c45af345a33272b9ab2d356410fed5b05d1e00531f4fc17c40
69
+ sha256(base64): m6ifIycFxMRa80WjMnK5qy01ZBD+1bBdHgBTH0/BfEA=
70
+ sha512(base64): 5oyn6NH1TW/M3+MjWqCs/QQLYD9nVh5GNdy7rX0UVTrffgwJy8yAYjrRCERSa1/YsR55R/ZG1W2fX8nlydilVQ==
@@ -1,14 +1,14 @@
1
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.78&f=release/command.json.js" integrity="sha512-eRc1b2nQXqFgUvurwCQG+ZyglDftp/YIg8bok/STRkn/OGSaTpiy8y1MEC382ZvPafv0Jf/qa70T3nCQDnxB6w==" crossorigin="anonymous"></script>
2
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.78&f=release/editor.js" integrity="sha512-rCqM2o4PmQk+Iis5RgUn4zIuSp84DsRKcr+cIFd8XOD8BGLMUoKOdigCX20l+/mOh20uPpgEHuCLqkG/wUv7Hw==" crossorigin="anonymous"></script>
3
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.78&f=release/nako_gen_async.js" integrity="sha512-/rlPkDABsQaz0xio0ybU1oUiYFe6TOw4a/lCScF72FK5JjwulvEfWuhNGTAHxyHfrrQPMOFnTf/XCR65PRb4iw==" crossorigin="anonymous"></script>
4
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.78&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.78&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.78&f=release/plugin_datetime.js" integrity="sha512-1ADTZFkcfU6vpEEJZEYmIbqS6G2XViooDFD4198P61n7VKZ0PhEVj9l8ULFGrW7woSbDqfSPZmkZ7yvcRqPKYA==" crossorigin="anonymous"></script>
7
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.78&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.78&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.78&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.78&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.78&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.78&f=release/version.js" integrity="sha512-F0HhBrE/P7ufHk0OpT27ij/PVbgPZJG1J8zhuhfj/Zf0H4hJIfRS2+qEFfSJN/vBJtv9cNVB+z/m4Yt2bTdxDg==" crossorigin="anonymous"></script>
13
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.78&f=release/wnako3.js" integrity="sha512-DyiV/dV8MDGEBl0j28x6QmnhUrGoUheUUoEOBKN2uUSLvwp30iuVo0hQv7fKjL3xvw7kYB0sIf1qngxqlqo5Ww==" crossorigin="anonymous"></script>
14
- <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.78&f=release/wnako3webworker.js" integrity="sha512-Yzo8f3byHfU6/h67u6wv9dhe+tTTg69hlTgZCgdBiolMa0uLs9UgFzhRIdD4QV7jDGQbUslonBqjUOmdsneZUQ==" crossorigin="anonymous"></script>
1
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.79&f=release/command.json.js" integrity="sha512-x7YKQabM3SMJl4/TjTlSPVw4lbh+Yktf/bq+aBkfKm+cTyi36kxKRK3x3fG46IozKshOfNTGnqcLegshkIRxVw==" crossorigin="anonymous"></script>
2
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.79&f=release/editor.js" integrity="sha512-FMJHzZDBeX6n6CQYRWH6d4OhxTCP48Tr3SAPdhZdNrr5ZwurJX2c4PJAboLBN5gYeYZ6WwdEl1+oCHa8xgS34Q==" crossorigin="anonymous"></script>
3
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.79&f=release/nako_gen_async.js" integrity="sha512-an36Im7NqvIBKAWnkkkOKWlWQck3jOTbz0IRU/BMtmS6nmRxlOad3bDE7DrS16roPSMuQV3BJbnlLMht2+iF2Q==" crossorigin="anonymous"></script>
4
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.79&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.79&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.79&f=release/plugin_datetime.js" integrity="sha512-1ADTZFkcfU6vpEEJZEYmIbqS6G2XViooDFD4198P61n7VKZ0PhEVj9l8ULFGrW7woSbDqfSPZmkZ7yvcRqPKYA==" crossorigin="anonymous"></script>
7
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.79&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.79&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.79&f=release/plugin_turtle.js" integrity="sha512-ADtegZGlBz0Uk7DKn2zzkVUaA7cdVCRbyc4iOGwEFmXdx0KtzYKumgKIHQiniH3AdGMBhgGf6WZI3y7xcLoFmw==" crossorigin="anonymous"></script>
10
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.79&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.79&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.79&f=release/version.js" integrity="sha512-6TpQlzOQLQ/PMhWPnlH9kzYiqesuv0xMI5TilQLwSQn5F/QXnh6ZkS2a8ZFN7EOXTK0jhj2/rzJcMfdKXDo+rg==" crossorigin="anonymous"></script>
13
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.79&f=release/wnako3.js" integrity="sha512-zFwG7byvdg/qg4bejuQ9zWB6p3N7LfZhEW966oo21QQmeNDXy4a53ZY2AdximF3be2muKUFSxleseJyRx53T8A==" crossorigin="anonymous"></script>
14
+ <script defer src="https://nadesi.com/v3/cdn.php?v=3.3.79&f=release/wnako3webworker.js" integrity="sha512-5oyn6NH1TW/M3+MjWqCs/QQLYD9nVh5GNdy7rX0UVTrffgwJy8yAYjrRCERSa1/YsR55R/ZG1W2fX8nlydilVQ==" crossorigin="anonymous"></script>