nadesiko3 3.6.41 → 3.6.44

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.
Files changed (50) hide show
  1. package/batch/build_browsers.nako3 +1 -0
  2. package/batch/build_nako_version.nako3 +32 -8
  3. package/batch/command.txt +13 -12
  4. package/core/batch/build_nako_version.nako3 +1 -1
  5. package/core/package.json +2 -2
  6. package/core/src/nako_core_version.mjs +2 -2
  7. package/core/src/nako_core_version.mts +2 -2
  8. package/core/src/nako_csv.mjs +11 -4
  9. package/core/src/nako_csv.mts +15 -6
  10. package/core/src/nako_josi_list.mjs +1 -1
  11. package/core/src/nako_josi_list.mts +1 -1
  12. package/core/src/nako_lexer.mjs +1 -1
  13. package/core/src/nako_lexer.mts +1 -1
  14. package/core/src/plugin_csv.mjs +20 -0
  15. package/core/src/plugin_csv.mts +21 -3
  16. package/core/src/plugin_system.mjs +6 -6
  17. package/core/src/plugin_system.mts +7 -7
  18. package/core/test/func_test.mjs +0 -6
  19. package/core/test/plugin_csv_test.mjs +10 -0
  20. package/demo/browsers.html +13 -13
  21. package/doc/browsers.md +13 -13
  22. package/package.json +2 -2
  23. package/release/_hash.txt +32 -32
  24. package/release/_script-tags.txt +33 -33
  25. package/release/command.json +1 -1
  26. package/release/command.json.js +1 -1
  27. package/release/command_cnako3.json +1 -1
  28. package/release/command_list.json +1 -1
  29. package/release/edit_main.js +5 -5
  30. package/release/edit_main.js.map +2 -2
  31. package/release/editor.js +5 -5
  32. package/release/josi.json +0 -1
  33. package/release/plugin_caniuse.js +1 -1
  34. package/release/plugin_caniuse.js.map +2 -2
  35. package/release/plugin_kansuji.js.map +1 -1
  36. package/release/version.js +1 -1
  37. package/release/version_main.js +1 -1
  38. package/release/version_main.js.map +1 -1
  39. package/release/wnako3.js +39 -39
  40. package/release/wnako3.js.map +3 -3
  41. package/release/wnako3webworker.js +25 -25
  42. package/release/wnako3webworker.js.map +3 -3
  43. package/src/browsers.mjs +1 -1
  44. package/src/browsers.txt +25 -36
  45. package/src/cnako3mod.mjs +1 -1
  46. package/src/cnako3mod.mts +1 -1
  47. package/src/nako_version.mjs +2 -2
  48. package/src/nako_version.mts +2 -2
  49. package/src/plugin_browser_audio.mts +7 -7
  50. package/src/plugin_kansuji.mjs +1 -1
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env cnako3
1
2
  #-------------------------------------------------
2
3
  # ブラウザ対応表を作成
3
4
  #-------------------------------------------------
@@ -4,14 +4,23 @@
4
4
  # -----------------------------------------------------
5
5
  # ●説明
6
6
  # package.json の内容を読んで ./src/nako_version.mts を生成
7
+ # core/package.json の内容を元に、/core/src/nako_version.mts を生成
7
8
  # -----------------------------------------------------
9
+ # 定数の宣言
8
10
  母艦パス取得してパス抽出して基本パスに代入。
9
- 「{基本パス}/package.json」を読んでJSONデコードして、Pに代入。
10
- VER=P@"version"
11
- 定数[MAJOR,MINOR,PATCH]=(VERを「.」で区切る)
12
11
  QS=『{』
13
12
  QE=『}』
14
- VS=「/**
13
+ メインバージョン=「」
14
+ # --- メイン処理 ---
15
+ メインバージョン更新。# 必ず先に読む
16
+ コアバージョン更新
17
+
18
+ ●メインバージョン更新とは:
19
+   「{基本パス}/package.json」を読んでJSONデコードして、Pに代入。
20
+   VER=P@"version"
21
+   メインバージョン=VER
22
+   定数[MAJOR,MINOR,PATCH]=(VERを「.」で区切る)
23
+   VS=「/**
15
24
  * なでしこのバージョン情報
16
25
  * package.json から自動的に作成されます。このファイルを編集しないでください。
17
26
  */
@@ -31,12 +40,27 @@ const nakoVersion: NakoVersion = {QS}
31
40
  {QE}
32
41
  export default nakoVersion
33
42
 
34
- 保存先=「{基本パス}/src/nako_version.mts」
35
- VSを保存先へ保存。
36
-
43
+   保存先=「{基本パス}/src/nako_version.mts」
44
+   VSを保存先へ保存。
45
+   
37
46
  # ---------------------------------------------
38
- # ● なでしこのバージョン情報を更新しました。
47
+ # ● なでしこのバージョン情報(src/nako_version.mts)を更新しました。
39
48
  # version {VER}
40
49
  # file: {保存先}
41
50
  # ---------------------------------------------
42
51
  」を表示。
52
+
53
+ ●コアバージョン更新とは:
54
+   もし、メインバージョン=空ならば:
55
+     「!! [ERROR] メインバージョンが間違っています」と表示。終わる。
56
+   CORE_PACKAGE=「{基本パス}/core/package.json」
57
+   CORE_PACKAGEを読んでJSONデコードして、Pに代入。
58
+   VER=P@"version"
59
+   「★★コアバージョンを勝手に書き換えます!!」と表示。
60
+   P@"version" = メインバージョン
61
+   PをJSONエンコード整形してSに代入。
62
+   CORE_PACKAGEにSを保存。
63
+   RES=「cnako3 "{基本パス}/core/batch/build_nako_version.nako3"」を起動待機。
64
+   RESを表示。
65
+
66
+
package/batch/command.txt CHANGED
@@ -124,10 +124,10 @@
124
124
  | 関数 | OR | AとBの | (ビット演算で)AとBの論理和を返す。 | OR | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1019
125
125
  | 関数 | AND | AとBの | (ビット演算で)AとBの論理積を返す。日本語の「AかつB」に相当する | AND | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1027
126
126
  | 関数 | XOR | AとBの | (ビット演算で)AとBの排他的論理和を返す。 | XOR | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1035
127
- | 関数 | NOT | Vの | (ビット演算で)vの各ビットを反転して返す。 | NOT | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1043
128
- | 関数 | SHIFT_L | AをBで | VをAビット左へシフトして返す | SHIFT_L | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1051
129
- | 関数 | SHIFT_R | AをBで | VをAビット右へシフトして返す(符号を維持する) | SHIFT_R | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1059
130
- | 関数 | SHIFT_UR | AをBで | VをAビット右へシフトして返す(符号を維持しない、0で埋める) | SHIFT_UR | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1067
127
+ | 関数 | NOT | Vの | (ビット演算で)Vの各ビットを反転して返す。 | NOT | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1043
128
+ | 関数 | SHIFT_L | VをAで | VをAビット左へシフトして返す | SHIFT_L | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1051
129
+ | 関数 | SHIFT_R | VをAで | VをAビット右へシフトして返す(符号を維持する) | SHIFT_R | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1059
130
+ | 関数 | SHIFT_UR | VをAで | VをAビット右へシフトして返す(符号を維持しない、0で埋める) | SHIFT_UR | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1067
131
131
  ●文字列処理
132
132
  | 関数 | 文字数 | Vの | 文字列Vの文字数を返す | もじすう | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1077
133
133
  | 関数 | 何文字目 | SでAが/Sの | 文字列SでAが何文字目にあるか調べて返す。見つからなければ0を返す。 | なんもじめ | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_system.mts#L1086
@@ -336,6 +336,7 @@
336
336
  | 関数 | TSV取得 | STRを/STRの/STRで | TSV形式のデータstrを強制的に二次元配列に変換して返す | TSVしゅとく | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_csv.mts#L36
337
337
  | 関数 | 表CSV変換 | Aを | 二次元配列AをCSV形式に変換して返す | ひょうCSVへんかん | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_csv.mts#L45
338
338
  | 関数 | 表TSV変換 | Aを | 二次元配列AをTSV形式に変換して返す | ひょうTSVへんかん | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_csv.mts#L54
339
+ | 関数 | CSVオプション設定 | OBJ{ [KEY}を/OBJ{ [KEY}で | 「CSV取得」「表CSV変換」命令のオプションOBJ{delimiter,eol,auto_convert_number}をオブジェクトで指定 | CSVおぷしょんせってい | https://github.com/kujirahand/nadesiko3core/blob/main/src/plugin_csv.mts#L63
339
340
 
340
341
 
341
342
  ■plugin_math(基本プラグイン,wnako,cnako)
@@ -656,15 +657,15 @@
656
657
  | 関数 | WS切断 | | アクティブなWebSocketを閉じる | WSせつだん | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_websocket.mts#L68
657
658
  ●オーディオ
658
659
  | 関数 | オーディオ開 | URLを/URLの | オーディオファイルのURLを指定して、オーディオを読み込み、Audioオブジェクトを返す | おーでぃおひらく | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L8
659
- | 関数 | オーディオ再生 | OBJを | AudioオブジェクトOBJを指定してオーディを再生 | おーでぃおさいせい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L19
660
- | 関数 | オーディオループ再生 | OBJを | AudioオブジェクトOBJを指定してオーディをループ再生する | おーでぃおるーぷさいせい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L30
661
- | 関数 | オーディオ停止 | OBJを | AudioオブジェクトOBJを指定してオーディを停止 | おーでぃおていし | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L41
662
- | 関数 | オーディオ一時停止 | OBJを | AudioオブジェクトOBJを指定してオーディを一時停止 | おーでぃおいちじていし | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L56
660
+ | 関数 | オーディオ再生 | OBJを | AudioオブジェクトOBJを指定してオーディオを再生 | おーでぃおさいせい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L19
661
+ | 関数 | オーディオループ再生 | OBJを | AudioオブジェクトOBJを指定してオーディオをループ再生する | おーでぃおるーぷさいせい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L30
662
+ | 関数 | オーディオ停止 | OBJを | AudioオブジェクトOBJを指定してオーディオを停止 | おーでぃおていし | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L41
663
+ | 関数 | オーディオ一時停止 | OBJを | AudioオブジェクトOBJを指定してオーディオを一時停止 | おーでぃおいちじていし | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L56
663
664
  | 関数 | オーディオ音量取得 | OBJの/OBJから | AudioオブジェクトOBJの音量を取得して返す | おーでぃおおんりょうしゅとく | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L66
664
665
  | 関数 | オーディオ音量設定 | OBJをVに/Vへ | AudioオブジェクトOBJの音量をV(0-1)に設定する | おーでぃおおんりょうせってい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L75
665
- | 関数 | オーディオ長取得 | OBJの/OBJから | AudioオブジェクトOBJを指定してオーディの長さを取得して返す | おーでぃおながさしゅとく | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L85
666
- | 関数 | オーディオ再生位置取得 | OBJの/OBJから | AudioオブジェクトOBJを指定してオーディの再生位置を取得して返す | おーでぃおさいせいいちしゅとく | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L94
667
- | 関数 | オーディオ再生位置設定 | OBJをVに/Vへ | AudioオブジェクトOBJを指定してオーディの位置を数値Vで設定する | おーでぃおさいせい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L103
666
+ | 関数 | オーディオ長取得 | OBJの/OBJから | AudioオブジェクトOBJを指定してオーディオの長さを取得して返す | おーでぃおながさしゅとく | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L85
667
+ | 関数 | オーディオ再生位置取得 | OBJの/OBJから | AudioオブジェクトOBJを指定してオーディオの再生位置を取得して返す | おーでぃおさいせいいちしゅとく | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L94
668
+ | 関数 | オーディオ再生位置設定 | OBJをVに/Vへ | AudioオブジェクトOBJを指定してオーディオの位置を数値Vで設定する | おーでぃおさいせい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_audio.mts#L103
668
669
  ●ホットキー
669
670
  | 関数 | ホットキー登録 | KEYにFNAMEを/KEYで | ホットキーKEYにEVENTを登録する | ほっときーとうろく | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_hotkey.mts#L10
670
671
  | 関数 | ホットキー解除 | KEYを/KEYの | ホットキーKEYを解除する | ほっときーかいじょ | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_hotkey.mts#L22
@@ -894,7 +895,7 @@
894
895
  ■plugin_kansuji(基本プラグイン,wnako,cnako)
895
896
  ●漢数字関連
896
897
  | 関数 | 漢数字 | INPUTを/INPUTの | 引数を数字と解釈して漢数字の文字列を返す | かんすうじ | https://github.com/kujirahand/nadesiko3/tree/master/src/plugin_kansuji.mjs#L27
897
- | 関数 | 算用数字 | INPUTを/INPUTの | U引数を漢数字と解釈して数値を返す | さんようすうじ | https://github.com/kujirahand/nadesiko3/tree/master/src/plugin_kansuji.mjs#L136
898
+ | 関数 | 算用数字 | INPUTを/INPUTの | 引数を漢数字と解釈して数値を返す | さんようすうじ | https://github.com/kujirahand/nadesiko3/tree/master/src/plugin_kansuji.mjs#L136
898
899
 
899
900
 
900
901
  ■plugin_weykturtle3d(基本プラグイン,wnako)
@@ -35,7 +35,7 @@ export default coreVersion
35
35
  VSを保存先へ保存。
36
36
 
37
37
  # ---------------------------------------------
38
- # ● なでしこのバージョン情報を更新しました。
38
+ # ● なでしこのコアバージョン(core/src/nako_core_version.mts)情報を更新しました。
39
39
  # version {VER}
40
40
  # file: {保存先}
41
41
  # ---------------------------------------------
package/core/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nadesiko3core",
3
- "version": "3.6.41",
3
+ "version": "3.6.44",
4
4
  "description": "Japanese Programming Language Nadesiko v3 core",
5
5
  "main": "index.mjs",
6
6
  "type": "module",
@@ -53,4 +53,4 @@
53
53
  "dependencies": {
54
54
  "cross-env": "^7.0.3"
55
55
  }
56
- }
56
+ }
@@ -1,8 +1,8 @@
1
1
  // 実際のバージョン定義 (自動生成されるので以下を編集しない)
2
2
  const coreVersion = {
3
- version: '3.6.41',
3
+ version: '3.6.44',
4
4
  major: 3,
5
5
  minor: 6,
6
- patch: 41
6
+ patch: 44
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.6.41',
14
+ version: '3.6.44',
15
15
  major: 3,
16
16
  minor: 6,
17
- patch: 41
17
+ patch: 44
18
18
  }
19
19
  export default coreVersion
@@ -1,10 +1,16 @@
1
1
  export const options = {
2
2
  delimiter: ',',
3
- eol: '\r\n'
3
+ eol: '\r\n',
4
+ auto_convert_number: true
4
5
  };
5
6
  export function resetEnv() {
6
7
  options.delimiter = ',';
7
8
  options.eol = '\r\n';
9
+ options.auto_convert_number = true;
10
+ }
11
+ /// 文字列が数値化どうか判定する関数
12
+ function is_numeric(str) {
13
+ return /^-?\d+(\.\d+)?([eE][-+]?\d+)?$/.test(str);
8
14
  }
9
15
  export function parse(txt, delimiter = undefined) {
10
16
  // delimiter
@@ -22,12 +28,13 @@ export function parse(txt, delimiter = undefined) {
22
28
  const reToDelim = new RegExp(patToDelim);
23
29
  // if value is number then convert to float
24
30
  const convType = function (v) {
31
+ let result = v;
25
32
  if (typeof (v) === 'string') {
26
- if (v.search(/^[0-9.]+$/) >= 0) {
27
- v = parseFloat(v); // convert number
33
+ if (options.auto_convert_number && is_numeric(v)) {
34
+ result = parseFloat(v); // convert number
28
35
  }
29
36
  }
30
- return v;
37
+ return result;
31
38
  };
32
39
  // parse txt
33
40
  const res = [];
@@ -2,19 +2,27 @@
2
2
  export interface CSVOptions {
3
3
  delimiter: string;
4
4
  eol: string;
5
+ auto_convert_number: boolean;
5
6
  }
6
7
 
7
8
  export const options: CSVOptions = {
8
9
  delimiter: ',',
9
- eol: '\r\n'
10
+ eol: '\r\n',
11
+ auto_convert_number: true
10
12
  }
11
13
 
12
14
  export function resetEnv (): void {
13
15
  options.delimiter = ','
14
16
  options.eol = '\r\n'
17
+ options.auto_convert_number = true
15
18
  }
16
19
 
17
- export function parse (txt: string, delimiter: string|undefined = undefined): string[][] {
20
+ /// 文字列が数値化どうか判定する関数
21
+ function is_numeric(str: string): boolean {
22
+ return /^-?\d+(\.\d+)?([eE][-+]?\d+)?$/.test(str);
23
+ }
24
+
25
+ export function parse (txt: string, delimiter: string|undefined = undefined): (string|number)[][] {
18
26
  // delimiter
19
27
  if (delimiter === undefined) {
20
28
  delimiter = options.delimiter
@@ -29,13 +37,14 @@ export function parse (txt: string, delimiter: string|undefined = undefined): st
29
37
  const patToDelim = '^(.*?)([\\' + delimiter + '\\n])'
30
38
  const reToDelim = new RegExp(patToDelim)
31
39
  // if value is number then convert to float
32
- const convType = function (v: any) {
40
+ const convType = function (v: string) {
41
+ let result: string|number = v
33
42
  if (typeof (v) === 'string') {
34
- if (v.search(/^[0-9.]+$/) >= 0) {
35
- v = parseFloat(v) // convert number
43
+ if (options.auto_convert_number && is_numeric(v)) {
44
+ result = parseFloat(v) // convert number
36
45
  }
37
46
  }
38
- return v
47
+ return result
39
48
  }
40
49
  // parse txt
41
50
  const res = []; let cells = []; let c = ''
@@ -6,7 +6,7 @@ export const josiList = [
6
6
  'について', 'くらい', 'なのか', 'までを', 'までの', 'による',
7
7
  'とは', 'から', 'まで', 'だけ', 'より', 'ほど', 'など',
8
8
  'いて', 'えて', 'きて', 'けて', 'して', 'って', 'にて', 'みて',
9
- 'めて', 'ねて', 'では', 'には', 'は~', 'んで', 'ずつ',
9
+ 'めて', 'ねて', 'では', 'には', 'んで', 'ずつ',
10
10
  'は', 'を', 'に', 'へ', 'で', 'と', 'が', 'の'
11
11
  ];
12
12
  // 「もし」文で使う助詞
@@ -7,7 +7,7 @@ export const josiList: string[] = [
7
7
  'について', 'くらい', 'なのか', 'までを', 'までの', 'による',
8
8
  'とは', 'から', 'まで', 'だけ', 'より', 'ほど', 'など',
9
9
  'いて', 'えて', 'きて', 'けて', 'して', 'って', 'にて', 'みて',
10
- 'めて', 'ねて', 'では', 'には', 'は~', 'んで', 'ずつ',
10
+ 'めて', 'ねて', 'では', 'には', 'んで', 'ずつ',
11
11
  'は', 'を', 'に', 'へ', 'で', 'と', 'が', 'の'
12
12
  ]
13
13
 
@@ -188,7 +188,7 @@ export class NakoLexer {
188
188
  }
189
189
  }
190
190
  // 無名関数の定義:「xxには**」があった場合 ... 暗黙的な関数定義とする
191
- if ((t.type === 'word' && t.josi === 'には') || (t.type === 'word' && t.josi === 'は~')) {
191
+ if (t.type === 'word' && t.josi === 'には') {
192
192
  t.josi = 'には';
193
193
  tokens.splice(i + 1, 0, { type: 'def_func', value: '関数', indent: t.indent, line: t.line, column: t.column, file: t.file, josi: '', startOffset: t.endOffset, endOffset: t.endOffset, rawJosi: '', tag: '無名関数' });
194
194
  i++;
@@ -194,7 +194,7 @@ export class NakoLexer {
194
194
  }
195
195
  }
196
196
  // 無名関数の定義:「xxには**」があった場合 ... 暗黙的な関数定義とする
197
- if ((t.type === 'word' && t.josi === 'には') || (t.type === 'word' && t.josi === 'は~')) {
197
+ if (t.type === 'word' && t.josi === 'には') {
198
198
  t.josi = 'には'
199
199
  tokens.splice(i + 1, 0, { type: 'def_func', value: '関数', indent: t.indent, line: t.line, column: t.column, file: t.file, josi: '', startOffset: t.endOffset, endOffset: t.endOffset, rawJosi: '', tag: '無名関数' })
200
200
  i++
@@ -54,6 +54,26 @@ const PluginCSV = {
54
54
  options.delimiter = '\t';
55
55
  return stringify(a);
56
56
  }
57
+ },
58
+ 'CSVオプション設定': {
59
+ type: 'func',
60
+ josi: [['を', 'で']],
61
+ pure: true,
62
+ fn: function (obj) {
63
+ for (const key in obj) {
64
+ const value = obj[key];
65
+ if (key === 'delimiter' || key === '区切文字') {
66
+ options.delimiter = value;
67
+ }
68
+ else if (key === 'eol') {
69
+ options.eol = value;
70
+ }
71
+ else if (key === 'auto_convert_number') {
72
+ options.auto_convert_number = value;
73
+ }
74
+ }
75
+ },
76
+ return_none: true
57
77
  }
58
78
  };
59
79
  export default PluginCSV;
@@ -1,4 +1,4 @@
1
- import { options, parse, stringify } from './nako_csv.mjs'
1
+ import { CSVOptions, options, parse, stringify } from './nako_csv.mjs'
2
2
 
3
3
  const PluginCSV = {
4
4
  'meta': {
@@ -24,7 +24,7 @@ const PluginCSV = {
24
24
  type: 'func',
25
25
  josi: [['を', 'の', 'で']],
26
26
  pure: true,
27
- fn: function (str: string): string[][] {
27
+ fn: function (str: string): (string | number)[][] {
28
28
  options.delimiter = ','
29
29
  return parse(str)
30
30
  }
@@ -33,7 +33,7 @@ const PluginCSV = {
33
33
  type: 'func',
34
34
  josi: [['を', 'の', 'で']],
35
35
  pure: true,
36
- fn: function (str: string): string[][] {
36
+ fn: function (str: string): (string|number)[][] {
37
37
  options.delimiter = '\t'
38
38
  return parse(str)
39
39
  }
@@ -55,6 +55,24 @@ const PluginCSV = {
55
55
  options.delimiter = '\t'
56
56
  return stringify(a)
57
57
  }
58
+ },
59
+ 'CSVオプション設定': { // @「CSV取得」「表CSV変換」命令のオプションOBJ{delimiter,eol,auto_convert_number}をオブジェクトで指定 // @CSVおぷしょんせってい
60
+ type: 'func',
61
+ josi: [['を','で']],
62
+ pure: true,
63
+ fn: function (obj: { [key: string]: unknown }): void {
64
+ for (const key in obj) {
65
+ const value: unknown = obj[key]
66
+ if (key === 'delimiter' || key === '区切文字') {
67
+ options.delimiter = value as string
68
+ } else if (key === 'eol') {
69
+ options.eol = value as string
70
+ } else if (key === 'auto_convert_number') {
71
+ options.auto_convert_number = value as boolean
72
+ }
73
+ }
74
+ },
75
+ return_none: true
58
76
  }
59
77
  }
60
78
  export default PluginCSV
@@ -1088,24 +1088,24 @@ export default {
1088
1088
  type: 'func',
1089
1089
  josi: [['を'], ['で']],
1090
1090
  pure: true,
1091
- fn: function (a, b) {
1092
- return (a << b);
1091
+ fn: function (v, a) {
1092
+ return (v << a);
1093
1093
  }
1094
1094
  },
1095
1095
  'SHIFT_R': {
1096
1096
  type: 'func',
1097
1097
  josi: [['を'], ['で']],
1098
1098
  pure: true,
1099
- fn: function (a, b) {
1100
- return (a >> b);
1099
+ fn: function (v, a) {
1100
+ return (v >> a);
1101
1101
  }
1102
1102
  },
1103
1103
  'SHIFT_UR': {
1104
1104
  type: 'func',
1105
1105
  josi: [['を'], ['で']],
1106
1106
  pure: true,
1107
- fn: function (a, b) {
1108
- return (a >>> b);
1107
+ fn: function (v, a) {
1108
+ return (v >>> a);
1109
1109
  }
1110
1110
  },
1111
1111
  // @文字列処理
@@ -1036,7 +1036,7 @@ export default {
1036
1036
  return (a ^ b)
1037
1037
  }
1038
1038
  },
1039
- 'NOT': { // @(ビット演算で)vの各ビットを反転して返す。// @NOT
1039
+ 'NOT': { // @(ビット演算で)Vの各ビットを反転して返す。// @NOT
1040
1040
  type: 'func',
1041
1041
  josi: [['の']],
1042
1042
  pure: true,
@@ -1048,24 +1048,24 @@ export default {
1048
1048
  type: 'func',
1049
1049
  josi: [['を'], ['で']],
1050
1050
  pure: true,
1051
- fn: function (a: any, b: any) {
1052
- return (a << b)
1051
+ fn: function (v: any, a: any) {
1052
+ return (v << a)
1053
1053
  }
1054
1054
  },
1055
1055
  'SHIFT_R': { // @VをAビット右へシフトして返す(符号を維持する) // @SHIFT_R
1056
1056
  type: 'func',
1057
1057
  josi: [['を'], ['で']],
1058
1058
  pure: true,
1059
- fn: function (a: any, b: any) {
1060
- return (a >> b)
1059
+ fn: function (v: any, a: any) {
1060
+ return (v >> a)
1061
1061
  }
1062
1062
  },
1063
1063
  'SHIFT_UR': { // @VをAビット右へシフトして返す(符号を維持しない、0で埋める) // @SHIFT_UR
1064
1064
  type: 'func',
1065
1065
  josi: [['を'], ['で']],
1066
1066
  pure: true,
1067
- fn: function (a: any, b: any) {
1068
- return (a >>> b)
1067
+ fn: function (v: any, a: any) {
1068
+ return (v >>> a)
1069
1069
  }
1070
1070
  },
1071
1071
 
@@ -137,12 +137,6 @@ describe('func_test', async () => {
137
137
  await cmp('●(fでaを)演算処理とは\nf(a)を表示\nここまで\n' +
138
138
  '2を演算処理には(a)\nそれはa*2\nここまで\n', '4')
139
139
  })
140
- it('暗黙的な無名関数「は〜」', async () => {
141
- await cmp('●(Fを)処理した時\nF()を表示\nここまで\n' +
142
- '処理した時は〜\nそれは「OK」\nここまで。', 'OK')
143
- await cmp('●(fでaを)演算処理とは\nf(a)を表示\nここまで\n' +
144
- '2を演算処理は~(a)\nそれはa*2\nここまで\n', '4')
145
- })
146
140
  it('**すること #936', async () => {
147
141
  await cmp('●(AとBを)加算処理とは\nAとBを足すこと。。。3と5を加算処理して表示。', '8')
148
142
  await cmp('●(Nを)二乗処理とは;A=0;N回,AにNを足してAに代入すること。それはA。。。5を二乗処理して表示。', '25')
@@ -35,4 +35,14 @@ describe('plugin_csv_test', () => {
35
35
  await cmp('[[1,2,3],[4,5,6]]を表TSV変換して表示', '1\t2\t3\r\n4\t5\t6')
36
36
  await cmp('[[1,2,"3\r\n\t"],[4,5,6]]を表TSV変換して表示', '1\t2\t"3\r\n\t"\r\n4\t5\t6')
37
37
  })
38
+ it('「2024.01.01」のような日付形式が実数として誤判定する #1910', async () => {
39
+ await cmp('a=「2024.01.01,200,300\n4,5,6」のCSV取得。a[0][0]を表示', '2024.01.01')
40
+ await cmp('a=「3.14,200,300\n4,5,6」のCSV取得。a[0][0]を表示', '3.14')
41
+ await cmp('a=「3.14,200,300\n4,5,6」のCSV取得。TYPEOF(a[0][0])を表示', 'number')
42
+ await cmp('a=「2010.1.5,200,300\n4,5,6」のCSV取得。TYPEOF(a[0][0])を表示', 'string')
43
+ })
44
+ it('「2024.01.01」のような日付形式が実数として誤判定する #1910', async () => {
45
+ await cmp('{"auto_convert_number": FALSE}をCSVオプション設定;a=「2024.01,200,300\n4,5,6」のCSV取得。TYPEOF(a[0][0])を表示', 'string')
46
+ await cmp('{"auto_convert_number": FALSE}をCSVオプション設定;a=「2024.01,200,300\n4,5,6」のCSV取得。a[0][0]を表示', '2024.01')
47
+ })
38
48
  })
@@ -8,26 +8,26 @@
8
8
  <h2>デスクトップ</h2>
9
9
 
10
10
  <ul>
11
- <li>Edge (120/119/118以上)</li>
12
- <li>Firefox (121/120/119/115以上)</li>
13
- <li>Chrome (120/119/118/117/116/109以上)</li>
14
- <li>Safari (17.2/17.1/16.6/15.6以上)</li>
15
- <li>Opera (104/103/102以上)</li>
16
- <li>Node.js (21.3.0/20.10.0/18.19.0以上)</li>
11
+ <li>Edge (127/126以上)</li>
12
+ <li>Firefox (129/128/127/115以上)</li>
13
+ <li>Chrome (127/126/125/109以上)</li>
14
+ <li>Safari (17.5/17.4以上)</li>
15
+ <li>Opera (111/110以上)</li>
16
+ <li>Node.js (22.5.0/20.15.0/18.20.0以上)</li>
17
17
  </ul>
18
18
 
19
19
  <h2>モバイル</h2>
20
20
 
21
21
  <ul>
22
- <li>Safari on iOS (17.1/17.0/16.6-16.7/16.5/16.3/16.2/16.1/16.0/15.6-15.7以上)</li>
22
+ <li>Safari on iOS (17.5/17.4/16.6-16.7/15.6-15.8以上)</li>
23
23
  <li>Opera Mini (all以上)</li>
24
- <li>Android Browser (120以上)</li>
25
- <li>Opera Mobile (73以上)</li>
26
- <li>Chrome for Android (120以上)</li>
27
- <li>Firefox for Android (119以上)</li>
24
+ <li>Android Browser (127以上)</li>
25
+ <li>Opera Mobile (80以上)</li>
26
+ <li>Chrome for Android (127以上)</li>
27
+ <li>Firefox for Android (127以上)</li>
28
28
  <li>UC Browser for Android (15.5以上)</li>
29
- <li>Samsung Internet (23/22以上)</li>
30
- <li>QQ Browser (13.1以上)</li>
29
+ <li>Samsung Internet (25/24以上)</li>
30
+ <li>QQ Browser (14.9以上)</li>
31
31
  <li>KaiOS Browser (3.0-3.1/2.5以上)</li>
32
32
  </ul>
33
33
  </body></html>
package/doc/browsers.md CHANGED
@@ -4,22 +4,22 @@
4
4
 
5
5
  ## デスクトップ
6
6
 
7
- - Edge (120/119/118以上)
8
- - Firefox (121/120/119/115以上)
9
- - Chrome (120/119/118/117/116/109以上)
10
- - Safari (17.2/17.1/16.6/15.6以上)
11
- - Opera (104/103/102以上)
12
- - Node.js (21.3.0/20.10.0/18.19.0以上)
7
+ - Edge (127/126以上)
8
+ - Firefox (129/128/127/115以上)
9
+ - Chrome (127/126/125/109以上)
10
+ - Safari (17.5/17.4以上)
11
+ - Opera (111/110以上)
12
+ - Node.js (22.5.0/20.15.0/18.20.0以上)
13
13
 
14
14
  ## モバイル
15
15
 
16
- - Safari on iOS (17.1/17.0/16.6-16.7/16.5/16.3/16.2/16.1/16.0/15.6-15.7以上)
16
+ - Safari on iOS (17.5/17.4/16.6-16.7/15.6-15.8以上)
17
17
  - Opera Mini (all以上)
18
- - Android Browser (120以上)
19
- - Opera Mobile (73以上)
20
- - Chrome for Android (120以上)
21
- - Firefox for Android (119以上)
18
+ - Android Browser (127以上)
19
+ - Opera Mobile (80以上)
20
+ - Chrome for Android (127以上)
21
+ - Firefox for Android (127以上)
22
22
  - UC Browser for Android (15.5以上)
23
- - Samsung Internet (23/22以上)
24
- - QQ Browser (13.1以上)
23
+ - Samsung Internet (25/24以上)
24
+ - QQ Browser (14.9以上)
25
25
  - KaiOS Browser (3.0-3.1/2.5以上)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nadesiko3",
3
- "version": "3.6.41",
3
+ "version": "3.6.44",
4
4
  "description": "Japanese Programming Language",
5
5
  "type": "module",
6
6
  "main": "src/index.mjs",
@@ -121,7 +121,7 @@
121
121
  "globals": "^15.1.0",
122
122
  "hotkeys-js": "^3.13.7",
123
123
  "markdownlint": "^0.37.0",
124
- "markdownlint-cli": "^0.43.0",
124
+ "markdownlint-cli": "^0.44.0",
125
125
  "mocha": "^11.0.1",
126
126
  "mocha-css": "^1.0.1",
127
127
  "module-alias": "^2.2.3",