/** * [KAGシナリオ変換マクロ] * これは、サクラエディタのマクロです。 * サクラエディタ独自のオブジェクトや巻数を使用しているため、 * サクラエディタ以外では動きません。 * * 注意:タグについて * [lr]タグは、[l][r] * [pm]タグは[p][cm] * の動きをするように、予めマクロ登録をしておきます。 */ // StringオブジェクトにTrim関数を追加 String.prototype.trim = function() { return this.replace(/^[\s" "]+|[\s" "]+$/g, ""); } main(); /* くにのシナリオファイルをKAGシナリオに変換 */ function main() { // 編集後の内容をこの変数に格納 var resultText = ""; // 選択範囲を変換 var lineFrom = Editor.GetSelectLineFrom(); var lineEnd = Editor.GetSelectLineTo(); for(var n=lineFrom; n <= lineEnd; n++){ var line = Editor.GetLineStr(n); // 各行を編集 resultText += editLine(line) + "\r\n"; } /* ファイルに書き出し */ var outFile = "senario_temp.txt"; //ファイル名 var fso = new ActiveXObject('Scripting.FileSystemObject'); var fStream = fso.CreateTextFile(outFile, true, false); fStream.Write(resultText); fStream.Close(); /* 書き出したファイルをクリップボードにコピー */ var ws = new ActiveXObject('WScript.Shell'); var command = "cmd /k clip < " + outFile ws.Exec(command); } /** * 行を編集する関数 */ function editLine(str) { str = str.trim(); if(str == ""){ // 改行のみの場合、そのまま str = str; } else if(str.indexOf("\;\;\;")==0){ // 先頭が;;;(文章の初め)の場合、メッセージレイヤのクリアとセーブラベルの追加を行う。 str = "\*" + GetNewGUID() + "\|"; str += "\r\n"; str += "[cm]"; } else if( str.indexOf("##")==0 || str.indexOf("\u002a\u002a")==0 || str.indexOf("\u002d")==0 || str.indexOf("◆")==0 ) { // コメント行の場合、先頭に;を付加 str = "\;" + str; } else if((str.indexOf("@")==0) || (str.indexOf("\;")==0) || (str.indexOf("\*")==0)){ // 先頭が@か;か*の場合は、KAGスクリプトであるとみなして、変換は無視。 str = str; } else if(str.indexOf("\u002a")==0){ // ラベル行指定の場合、そのまま str = str; } else if(str.indexOf("\/") == 0){ // 明示的な改行指定の場合、行末に[r]タグを付加 str = str.replace("\/", "[r]"); } else { // それ以外の場合は、テキスト行。 // 各種タグの設定を行う // 行頭空白 if((str.indexOf("「") != 0) && (str.indexOf("『") != 0)){ str = " " + str; } if(str.indexOf("@") > -1){ // 改ページ str = str.replace("@", "[pm]"); } else { // 改行 str += "[lr]"; } // クリック待ち str = str.replace(/\\/g, "[l]"); } return str; } // 呼び出すたびに新しいGUIDを返す関数 // セーブポイントの埋込みに使用 function GetNewGUID() { var objTypeLib = new ActiveXObject("Scriptlet.TypeLib"); var sGUID = objTypeLib.GUID.substr(1, 36).replace(/-/g, "_"); return sGUID; }