diff --git a/README.md b/README.md
index f017c36..d952696 100644
--- a/README.md
+++ b/README.md
@@ -1,76 +1,188 @@
# ティラノスクリプト用「CSV読込プラグイン」
+## 概要
+
csvファイルを任意のティラノ変数へ格納するプラグインです。
-テスト版
-
-※リリース時に色々変更の可能性があります。
-※もし要望などあればIssues等ででもおしらせください。
+CSVのデータを、配列または連想配列へ変更します。
+任意の f、sf、tf 変数を指定できます。
+
## 使い方
-1. `csv_test` フォルダを `data/other/pluin/` へ入れる。
-2. csvファイルは `data/other/pluin/csv_test/` へ入れる。
-3. first.ks 等でプラグインを読み込む。 `[plugin name="csv_test"]`
-4. `[mc_loadcsv]`タグでcsvファイルを読み込む。
-`[mc_loadcsv file=sample.csv varname="tf.s.test" format=ObjectO split="_EOF" br=""]`
+
+1. 「mc_loadcsv」フォルダを、「data/other/plugin/」へ入れてください。
+2. csvファイルは、「data/other/plugin/mc_loadcsv/」へ保存してください。
+3. first.ks 等に下記コードを記述しプラグインを読み込みます。※パラメータはありません。
+ ```
+ [plugin name="mc_loadcsv"]
+ ```
+4. `[mc_loadcsv]`タグでcsvファイルを読み込みます。
+ ```
+ [mc_loadcsv file=sample.csv var="f.test" format=ObjectO split="_EOF" br="\
"]
+ ```
## パラメーター
-| 属性名 | 必須 | 説明 |
-----|----|----
-| file | 〇 | csvファイル名(拡張子必要) |
-| varname | 〇 | 保存先変数名(f.hofe など) exp の方が解りやすいのかな? |
-| format | × | 配列パターンを指定します。(array/arrayA/arrayO/object/objectA/objectO)
※指定が無ければ arrayA(多次元配列)になります。 |
+|パラメータ | 必須 | 解説 |
+|----|:----:|----|
+| file | 〇 | csvファイル名(拡張子必要)
※csvファイルは「mc_loadcsv」フォルダ内に保存してください。
※http~のURLでも指定できます。 |
+| var | 〇 | 保存先変数名(f.hoge など) f、sf、tf 対応。|
+| format | × | 配列パターンを指定します(Array/ArrayA/ArrayO/Object/ObjectA/ObjectO)
※指定が無ければ ArrayA(多次元配列)になります。
※formatは自分で作る事も可能です(後述) |
| split | × | 分割用文字列を指定します(文字列: \_eof など)
※指定が無ければ改行コードで分割します |
-| br | × | 改行コードを変換する(文字列:\
など)
※split指定必須 |
-| join | × | csvを追記する場合は true。
※連想配列は同じkeyの値は上書きになります。 |
-| wait | × | 完了を待つ場合は true。デフォルトは false |
+| br | × | 改行コードを指定の文字列に置換します。(文字列:\
など)
※split指定必須 |
+| join | × | csvを追記する場合は true。デフォルトは false。
※連想配列は同じkeyの値は上書きになります。 |
+| wait | × | 完了を待つ場合は true。デフォルトは false。 |
+
+## format パラメータについて
-## 値について
-配列内の値は、全て「文字列」になります。
+プラグインで用意してあるパターンの場合は、大文字小文字は気にしなくても大丈夫です。
+ご自分で用意した関数の場合は、大文字小文字は区別します。
+
+
+折り畳み
-## format について
-※プラグインで用意してあるパターンの場合は、大文字小文字は気にしなくても大丈夫です。
-※自分で用意した関数の場合は、大文字小文字は区別します。
### Array
-配列
-行に関係なくだらだらと単純に配列にします。
-```[A1,A2,A3,B1,B2,B3,C1,C2,C3,...]```
+
+**配列**
+行に関係なくだらだらと単純に配列にします。
+```
+f.hoge = [A1,A2,A3,...,B1,B2,B3,...,C1,C2,C3,...]
+```
### ArrayA
-配列-配列(多次元配列)
-行ごとに配列になります。
-※format を指定しない場合はこれになります。
-```[[A1,B1,C1],[A2,B2,C3],...]```
+
+**配列-配列(多次元配列)**
+行ごとに配列になります。(デフォルト)
+```
+f.hoge = [
+ [A1,B1,C1],
+ [A2,B2,C3],
+ ...
+]
+```
### ArrayO
-配列-連想配列
+
+**配列-連想配列**
行ごとに、連想配列を入れて行きます。
-1行目がkeyになります(TIPプラグインと同じ)
-```[{A1:A2,B1:B2,C1:C2},{A1:A3,B1:B3,C1:C3},...]```
+1行目がkeyになります(TIPプラグインと同じ)
+```
+f.hoge = [
+ {A1:A2,B1:B2,C1:C2},
+ {A1:A3,B1:B3,C1:C3},
+ ...
+]
+```
### Object
-連想配列
-1行目に key と value が必須になります。
+
+**連想配列**
+1行目に key と value が必須になります。
その他の項目は、あっても無視されます。
-```{A2:B2,A3:B3,A4:B4,...}```
※A1=key、B1=value の場合
+```
+f.hoge = {
+ A2:B2,
+ A3:B3,
+ ...
+}
+```
### ObjectA
-連想配列-配列
-1行目に key 必須です。
-```{A2:[B2,C2,D2....],A3:[B3,C3,D3,...],...}```
-※A1=key の場合
-これ、どやって使うのかわからんです・・・
+
+**連想配列-配列**
+1行目に key 必須です。 ※A1=key の場合
+```
+f.hoge = {
+ A2:[B2,C2,D2....],
+ A3:[B3,C3,D3,...],
+ ...
+}
+```
+これ、どやって使うのかわからんです・・・
### ObjectO
-連想配列-連想配列
-1行目に key 必須です。
-```{A2:{B1:B2,C1:C2,D1:D2,...},A3:{B1:B3,C1:C3,D1:D3,...},...}```
-※A1=key の場合
-## セル内で改行コードを使いたい場合
-1. csvファイルの最後のセルに分割用のキー(何でもいいけど本文と被らないように)を入れる。
-2. [mc_loadcsv] タグに split属性で、分割用キーを指定する。
+**連想配列-連想配列**
+1行目に key 必須です。※A1=key の場合
+```
+f.hoge = {
+ A2:{B1:B2,C1:C2,D1:D2,...},
+ A3:{B1:B3,C1:C3,D1:D3,...},
+ ...
+}
+```
+
+
+## CSVファイルについて
+
+ - 文字コードは UTF-8 にしてください。
+ - csvの値は、全て「文字列」になります。
+ - ゲームに組み込む時は「mc_loadcsv」フォルダ内に保存してください。
+ フォルダ管理する場合は「file=フォルダ名/ファイル名」のように記述してください。
+
+## 改行コードについて
+
+### セル内で改行コードを使いたい場合
+1. csvファイルの最後のセルに分割用のキー(本文に含まない文字)を記入します。
+2. `[mc_loadcsv]` タグに `split` パラメータで分割用のキーを指定します。
+
+※`format=Object` 以外の場合、分割用キーの後にあるデータは次の最初のデータとして扱われますのでご注意ください。
+
+### 改行コードを一部置換、一部残したい場合
+1. 残したい改行の前に改行コード `\n` を記述してください。
+2. `[mc_loadcsv]` タグに `br` パラメータで置換文字を指定します。
+
+## format を自作する方法
+
+折り畳み
+
+1. 関数名を `mc_loadcsv.hoge` と連想配列関数にします。(`hoge` 部分は任意)
+引数1 は csvデータ、引数2 はjoin時の元データが入ります。
+2. 変換後のデータを `return` で返します。
+3. 適当な名前のjsファイルにして「data/others」に保存します。
+4. `[plugin name=mc_loadcsv]` の後に `[loadjs]`タグで呼び出します。
+5. `[mc_loadcsv]` タグの `format` パラメータに `hoge` を指定します。
+※大文字小文字は正確に指定してください。
+
+```js
+mc_loadcsv.hoge = function(data,oridata){
+ let newArray;
+ (何らかの処理)
+ return newArray;
+};
+```
+```
+[plugin name=mc_loadcsv]
+[loadjs file=hoge.js]
+[mc_loadcsv 略 format=hoge]
+```
+
+
+## 動作確認
+
+ティラノスクリプト v513c
+
+## 免責
+
+このプラグインを使用したことにより生じた損害・損失に対して制作者は一切責任を負いません。
+
+## 利用規約
+
+ - 改造・再配布は自由です。ただし、有償での再配布は禁止します。
+ 改造後データの配布も同様にお願いします。
+ - 利用報告・クレジット表記は任意です。
+ - このプラグインはドネーションウェア(カンパウェア)です。
+ もしよろしければ寄付をお願いいたします。(強制ではありません)
+
+## 制作者
+
+name : hororo
+site : めも調 [https://memocho.no-tenki.me/](https://memocho.no-tenki.me/)
+mail : ruru.amu@gmail.com
+twitter : @hororo_memocho
+
+## 更新履歴
-## 改行コードを一部変更、一部残したい場合
-残したい改行の前に改行コード `\n` を記述してください。
+|更新日|Ver| 詳細 |
+|--|--|-----|
+|2022/5/8|v1.00| 配布開始。 |
diff --git a/csv_test/init.ks b/csv_test/init.ks
deleted file mode 100644
index 9e75868..0000000
--- a/csv_test/init.ks
+++ /dev/null
@@ -1,10 +0,0 @@
-[loadjs storage="plugin/csv_test/main.js"]
-
-
-;[macro name="mc_loadcsv"]
-; [iscript]
-; mcLoadcsv(mp);
-; [endscript]
-;[endmacro]
-
-[return]
diff --git a/csv_test/main.js b/csv_test/main.js
deleted file mode 100644
index f4bf8b9..0000000
--- a/csv_test/main.js
+++ /dev/null
@@ -1,175 +0,0 @@
-(function(){
-
- tyrano.plugin.kag.tag.mc_loadcsv = {
- vital : ["file","varname"],
- pm : {
- format : 'ArrayA',
- wait : 'false'
- },
- start : function(pm) {
-
- //フォーマットの初期値と大文字小文字調整
- if(pm.format.match(/^(array(a|o|)|object(a|o|))$/i) != null){
- pm.format = 'csv'+pm.format.toLowerCase().replace(/^a|a$/gi,'A').replace(/^o|o$/gi,'O');
- }
-
- //ティラノ変数空チェック ※上書きしたい場合は変数を空欄にしてください。
- let check = TYRANO.kag.embScript(pm.varname);
- if($.isArray(check)) check = check.length;
-
- if(pm.join || !check ){
- //ファイル名
- const file_url = $.isHTTP(pm.file) ? pm.file : "./data/others/plugin/csv_test/"+pm.file;
-
- $.when(
- $.ajax({
- type: "GET",
- url: file_url,
- dataType: "text"
- })
- .done(function(data) {
- //関数チェック
- if (typeof mcfn[pm.format] == 'function') {
- if(pm.join) pm.oridata = TYRANO.kag.embScript(pm.varname); //joinの時は元データを一時保存
- if(!pm.split || data.search(pm.split)>0){
-
- //getData(data,pm); //データ変換実行
- const split = (!pm.split || pm.split == '\\n') ? '\n' : pm.split; //分割キー
-
- //データの下準備
- data = data.replace(/\r?\n/g,'\n').replace(/\\n\n/g,'\\n'); //改行を\nに統一
- if(pm.split){
- data = data.replace(new RegExp(','+pm.split+'\n','g'), pm.split); //分割キー前のコンマと後の改行はいらない
- if(pm.br) data = data.replace(/\n/g, pm.br); //改行置換
- }
- data = data.split(split); //分割して配列にする
- data = $.grep(data, function(e){return e;}); //空行削除
- //改行文字列を改行コードに戻す。
- data = data.map(elem => elem.replace(/\\n/g, '\n'));
-
- //データを変換
- const newData = mcfn[pm.format](data,pm);
-
- //ティラノの変数に格納
- const f = TYRANO.kag.stat.f;
- const sf = TYRANO.kag.variable.sf;
- const tf = TYRANO.kag.variable.tf;
- eval(pm.varname+'=newData');
-
- TYRANO.kag.saveSystemVariable(); //sf変数セーブ
- if(TYRANO.kag.is_studio) TYRANO.kag.studio.notifyChangeVariable(); //ティラノスタジオ対応
-
- console.log(TYRANO.kag.embScript(pm.varname));
-
- } else{
- alert('split 「 '+pm.split+' 」 がみつかりません。'); //csvに指定のsplitがなかったらアラート
- };
- } else {
- alert('フォーマット名 「 '+pm.format+' 」 がみつかりません。'); //format間違ってたらアラート
- }
- })
- .fail(function() {
- alert("ファイル 「 "+pm.file+" 」 の読込みに失敗しました。"); //失敗したらアラート
- })
- )
- .done(function(){
- if(pm.wait == "true") console.log("nextOrder:true",pm.file);
- if(pm.wait == "true") TYRANO.kag.ftag.nextOrder(); //wait=trueの時は処理を待つ
- });
-
- //後で削除
- }else{
- console.log("実行しません!!!");
- //後で削除
- };
-
- if(pm.wait == "false") console.log("nextOrder:false",pm.file);
- if(pm.wait == "false") TYRANO.kag.ftag.nextOrder(); //次のタグを実行
- }
- };
-
- //ティラノスクリプトにタグを定義
- TYRANO.kag.ftag.master_tag.mc_loadcsv = object(tyrano.plugin.kag.tag.mc_loadcsv);
- TYRANO.kag.ftag.master_tag.mc_loadcsv.kag = TYRANO.kag;
-
-
- //format
- var mcfn = [];
-
- //配列(Array)
- mcfn.csvArray = function(data,pm){
- let newArray = pm.oridata || [];
- data = data.join(","); //配列を文字列に戻す
- data = data.split(","); //再分割
- newArray = newArray.concat(data);
- return newArray;
- };
-
- //配列-配列(ArrayA)
- mcfn.csvArrayA = function(data,pm){
- let newArray = pm.oridata || [];
- for(let i=0; i
-「街」とか「428」とかのTIPみたいなプラグイン。,_EOF
-backlog,バックログプラグイン,
-バックログを整形するプラグイン。,_EOF
-menu_se,メニューSE追加プラグイン,
-メニューやセーブ・ロード画面にSEをするプラグイン。,_EOF
-glyph,glyphプラグイン,
-[glyph]タグ使用時もインライン表示ができるプラグイン。,_EOF
-message_edge,メッセージ縁取りプラグイン,
-全てのメッセージエリアで、縁取り・影設定を有効にするプラグインです。,_EOF
-message_frame,メッセージ枠調整プラグイン,
-メッセージ枠関係の強制的な指定を解消したりするプラグイン。,_EOF
-test,テスト,[iscript]\n
-$(function(){alert("テストです。");});\n
-[endscript],_EOF
diff --git a/loadcsv/init.ks b/mc_loadcsv/init.ks
similarity index 66%
rename from loadcsv/init.ks
rename to mc_loadcsv/init.ks
index be32eb5..cf97bd1 100644
--- a/loadcsv/init.ks
+++ b/mc_loadcsv/init.ks
@@ -1,7 +1,7 @@
-;【CSV読込プラグイン】
-; v1.00 2022/5/8
-; by hororo https://memocho.no-tenki.me/
-
-[loadjs storage="plugin/loadcsv/loadcsv.js"]
-
-[return]
+;【CSV読込プラグイン】
+; v1.00 2022/5/8
+; by hororo https://memocho.no-tenki.me/
+
+[loadjs storage="plugin/mc_loadcsv/mc_loadcsv.js"]
+
+[return]
diff --git a/loadcsv/loadcsv.js b/mc_loadcsv/mc_loadcsv.js
similarity index 89%
rename from loadcsv/loadcsv.js
rename to mc_loadcsv/mc_loadcsv.js
index 9b4d704..b765350 100644
--- a/loadcsv/loadcsv.js
+++ b/mc_loadcsv/mc_loadcsv.js
@@ -1,177 +1,173 @@
-//【CSV読込プラグイン】
-// v1.00 2022/5/8
-// by hororo https://memocho.no-tenki.me/
-
-const mc_loadcsv = {};
-mc_loadcsv.tag = {};
-
-mc_loadcsv.tag.mc_loadcsv = {
- vital : ["file","var"],
- pm : {
- format : 'ArrayA',
- wait : 'false'
- },
- start : function(pm) {
-
- //フォーマットの初期値と大文字小文字調整
- if(pm.format.match(/^(array(a|o|)|object(a|o|))$/i) != null){
- pm.format = 'format'+pm.format.toLowerCase().replace(/^a|a$/gi,'A').replace(/^o|o$/gi,'O');
- }
-
- //ティラノ変数空チェック ※上書きしたい場合は変数を空欄にしてください。
- let check = TYRANO.kag.embScript(pm.var);
- if($.isArray(check)) check = check.length;
-
- if(pm.join || !check ){
- //ファイル名
- const file_url = $.isHTTP(pm.file) ? pm.file : "./data/others/plugin/csv_test/"+pm.file;
-
- $.when(
- $.ajax({
- type: "GET",
- url: file_url,
- dataType: "text"
- })
- .done(function(data) {
- //関数チェック
- if (typeof mc_loadcsv[pm.format] == 'function') {
- if(pm.join) pm.oridata = TYRANO.kag.embScript(pm.var); //joinの時は元データを一時保存
- if(!pm.split || data.search(pm.split)>0){
-
- //getData(data,pm); //データ変換実行
- const split = (!pm.split || pm.split == '\\n') ? '\n' : pm.split; //分割キー
-
- //データの下準備
- data = data.replace(/\r\n|\r|\n/g,'\n').replace(/\\n\n/g,'\\n'); //改行を\nに統一
- if(pm.split){
- data = data.replace(new RegExp(','+pm.split+'\n','g'), pm.split); //分割キー前のコンマと後の改行はいらない
- if(pm.br) data = data.replace(/\n/g, pm.br); //改行置換
- }
- data = data.split(split); //分割して配列にする
- data = $.grep(data, function(e){return e;}); //空行削除
- //改行文字列を改行コードに戻す。
- data = data.map(elem => elem.replace(/\\n/g, '\n'));
-
- //データを変換
- const newData = mc_loadcsv[pm.format](data,pm.oridata);
-
- //ティラノの変数に格納
- const f = TYRANO.kag.stat.f;
- const sf = TYRANO.kag.variable.sf;
- const tf = TYRANO.kag.variable.tf;
- eval(pm.var+'=newData');
-
- TYRANO.kag.saveSystemVariable(); //sf変数セーブ
- if(TYRANO.kag.is_studio) TYRANO.kag.studio.notifyChangeVariable(); //ティラノスタジオ対応
-
- console.log(TYRANO.kag.embScript(pm.var));
-
- } else{
- alert('split 「 '+pm.split+' 」 がみつかりません。'); //csvに指定のsplitがなかったらアラート
- };
- } else {
- alert('フォーマット名 「 '+pm.format+' 」 がみつかりません。'); //format間違ってたらアラート
- }
- })
- .fail(function() {
- alert("ファイル 「 "+pm.file+" 」 の読込みに失敗しました。"); //失敗したらアラート
- })
- )
- .done(function(){
- if(pm.wait == "true") console.log("nextOrder:true",pm.file);//後で削除
- if(pm.wait == "true") TYRANO.kag.ftag.nextOrder(); //wait=trueの時は処理を待つ
- });
-
- //後で削除
- }else{
- console.log("実行しません!!!");
- //後で削除
- };
-
- if(pm.wait == "false") console.log("nextOrder:false",pm.file);//後で削除
- if(pm.wait == "false") TYRANO.kag.ftag.nextOrder(); //次のタグを実行
- }
-};
-
-//ティラノスクリプトにタグを定義
-TYRANO.kag.ftag.master_tag.mc_loadcsv = object(mc_loadcsv.tag.mc_loadcsv);
-TYRANO.kag.ftag.master_tag.mc_loadcsv.kag = TYRANO.kag;
-
-
-
-//format
-//配列(Array)
-mc_loadcsv.formatArray = function(data,oridata){
- let newArray = oridata || [];
- data = data.join(","); //配列を文字列に戻す
- data = data.split(","); //再分割
- newArray = newArray.concat(data);
- return newArray;
-};
-
-//配列-配列(ArrayA)
-mc_loadcsv.formatArrayA = function(data,oridata){
- let newArray = oridata || [];
- for(let i=0; i0){
+
+ const split = (!pm.split || pm.split == '\\n') ? '\n' : pm.split; //分割キー
+
+ //データの下準備
+ data = data.replace(/\r\n|\r|\n/g,'\n').replace(/\\n\n/g,'\\n'); //改行を\nに統一
+ if(pm.split){
+ data = data.replace(new RegExp(','+pm.split+'\n','g'), pm.split); //分割キー前のコンマと後の改行はいらない
+ if(pm.br) data = data.replace(/\n/g, pm.br); //改行置換
+ }
+ data = data.split(split); //分割して配列にする
+ data = $.grep(data, function(e){return e;}); //空行削除
+ data = data.map(elem => elem.replace(/\\n/g, '\n')); //改行文字列を改行コードに戻す。
+
+ //データを変換
+ const newData = mc_loadcsv[pm.format](data,pm.oridata);
+
+ //ティラノの変数に格納
+ const f = TYRANO.kag.stat.f;
+ const sf = TYRANO.kag.variable.sf;
+ const tf = TYRANO.kag.variable.tf;
+ eval(pm.var+'=newData');
+
+ TYRANO.kag.saveSystemVariable(); //sf変数セーブ
+ if(TYRANO.kag.is_studio) TYRANO.kag.studio.notifyChangeVariable(); //ティラノスタジオ対応
+
+ } else{
+ alert('split 「 '+pm.split+' 」 がみつかりません。'); //csvに指定のsplitがなかったらアラート
+ }
+ } else {
+ alert('フォーマット名 「 '+pm.format+' 」 がみつかりません。'); //format間違ってたらアラート
+ }
+ })
+ .fail(function() {
+ alert("ファイル 「 "+pm.file+" 」 の読込みに失敗しました。"); //失敗したらアラート
+ })
+ )
+ .done(function(){
+ //if(pm.wait == "true") console.log("nextOrder:true",pm.file);//後で削除
+ if(pm.wait == "true") TYRANO.kag.ftag.nextOrder(); //wait=trueの時は処理を待つ
+ });
+
+ //後で削除
+ //}else{
+ //console.log("実行しません!!!");
+ //後で削除
+ }
+
+ //if(pm.wait == "false") console.log("nextOrder:false",pm.file);//後で削除
+ if(pm.wait == "false") TYRANO.kag.ftag.nextOrder(); //次のタグを実行
+ }
+};
+
+//ティラノスクリプトにタグを定義
+TYRANO.kag.ftag.master_tag.mc_loadcsv = object(mc_loadcsv.tag.mc_loadcsv);
+TYRANO.kag.ftag.master_tag.mc_loadcsv.kag = TYRANO.kag;
+
+
+
+//format
+//配列(Array)
+mc_loadcsv.formatArray = function(data,oridata){
+ let newArray = oridata || [];
+ data = data.join(","); //配列を文字列に戻す
+ data = data.split(","); //再分割
+ newArray = newArray.concat(data);
+ return newArray;
+};
+
+//配列-配列(ArrayA)
+mc_loadcsv.formatArrayA = function(data,oridata){
+ let newArray = oridata || [];
+ for(let i=0; i