1 #title = "挟"
  2 #tooltip = "記憶した文字列で挟み込み"
  3 #include "lib\sgc4jsee.jsee"
  4 
  5 /**
  6  * @fileOverview
  7  * 記憶したフォーマットで挟み込みます。<br />
  8  * 選択文字列がない状態でマクロを起動するとダイアログが立ち上がり、入力したフォーマットを記憶します。<br />
  9  * <br />
 10  * ダイアログに「【%s】」と入力すると、次回から「【選択文字列】」のように挟み込みを行うようになります。<br />
 11  * また、「(hoge)」をクリップボードにコピーしてからダイアログを立ち上げると、ダイアログの初期値は「(%s)」となります。
 12  * 
 13  * @author gecca from 雪月花 (http://setsugecca.org/)
 14  * @version 1.00 for EmEditor v10.0
 15  */
 16 
 17 (function() {
 18 	var tempFilePath = JseeUtil.getTempDirPath() + "EmEditorMacros_記憶したフォーマットで挟み込み.tmp";
 19 	
 20 	// 選択文字列がある場合は、記憶したフォーマットを元に挟み込み
 21 	if(document.selection.Text) {
 22 		// 記憶したフォーマットを取り出す
 23 		var format = JseeUtil.readFile(tempFilePath);
 24 		// フォーマットが記憶されていなければ処理中止
 25 		if(!format) {
 26 			return;
 27 		}
 28 		
 29 		// フォーマットから前後の文字列を取り出す
 30 		var splitted = format.split("%s");
 31 		var prev = splitted[0];
 32 		var next = splitted[1];
 33 		
 34 		// 挟み込み
 35 		document.selection.Text = prev + document.selection.Text + next;
 36 	
 37 	// 選択文字列がない場合は、クリップボード文字列をフォーマットとして記憶する
 38 	} else {
 39 		// クリップボード文字列を取得
 40 		var clip = clipboardData.getData("Text");
 41 		
 42 		// クリップボード文字列があれば、いい感じにする
 43 		var arrangedClip = "";
 44 		if(clip) {
 45 			var arrangeFormats = ["()", "[]", "\"\"", "\'\'", "{}", "<>", "()", "<>", "「」", "【】", "『』", "≪≫", "《》", "〈〉", "〔〕", "[]", "{}"];
 46 			for(var i=0;i<arrangeFormats.length;i++) {
 47 				var arrangeFormat = arrangeFormats[i];
 48 				if(new RegExp("(.*\\" + arrangeFormat.charAt(0) + ").*?(\\" + arrangeFormat.charAt(1) + ".*)").test(clip)) {
 49 					arrangedClip = RegExp.$1 + "%s" + RegExp.$2;
 50 				}
 51 			}
 52 		}
 53 		
 54 		// ダイアログ表示
 55 		var input = prompt("挟み込みのフォーマットを指定 (例:【%s】)", arrangedClip);
 56 		if(!input) {
 57 			return;
 58 		}
 59 		
 60 		// 入力文字列をフォーマットとして記憶
 61 		JseeUtil.writeFile(tempFilePath, input);
 62 	}
 63 	
 64 })();
 65