1 #title = "@s"
  2 #tooltip = "IniMenuSnippets"
  3 #include "lib\sgc4jsee.jsee"
  4 
  5 /**
  6  * @fileOverview
  7  * ポップアップメニューから選択したスニペットを入力します。<br />
  8  * メニューの内容は全て、スニペット用のINIファイルに記述されています。
  9  * 
 10  * @author gecca from 雪月花 (http://setsugecca.org/)
 11  * @version 1.00 for EmEditor v10.0
 12  */
 13 
 14 (function() {
 15 	// 有効にすると、メニュー項目に指定されているJavaScriptを実行せず、OutputBarに表示します。
 16 	var logger = JseeUtil.getLogger(false, "IniMenuSnippets");
 17 	
 18 	var CARET_POINTER = "${0}";
 19 	var JS_PREFIX = "javascript:";
 20 	
 21 	var ini = JseeUtil.getSnipIniObj("IniMenuSnippets");
 22 	
 23 	// スニペットメニューを作成
 24 	var menuItems = [];
 25 	for(var key in ini) {
 26 		var value = ini[key];
 27 		
 28 		if(value.indexOf(JS_PREFIX) == 0) {
 29 			menuItems.push([key, evaluate, value.substring(JS_PREFIX.length)]);
 30 		} else {
 31 			menuItems.push([key, writeSnippet, value]);
 32 		}
 33 	}
 34 	
 35 	// メニューを表示
 36 	try {
 37 		JseeUtil.createPopupMenu(menuItems);
 38 	} catch(e) { alert("選択されたメニュー項目に指定されているJavaScriptでエラーが発生しました。\n\n" + e.message); }
 39 	
 40 	return;
 41 	
 42 	/**
 43 	 * @function
 44 	 * 指定されたJavaScriptを実行します。<br />
 45 	 * <code>logger.available</code>が<code>true</code>を返す場合、実行せずに<code>logger.log</code>を呼び出します。
 46 	 * 
 47 	 * @param {String} src JavaScriptソース
 48 	 */
 49 	function evaluate(src) {
 50 		if(logger.available()) {
 51 			logger.log(src);
 52 		} else {
 53 			eval(src);
 54 		}
 55 	}
 56 	
 57 	/**
 58 	 * @function
 59 	 * スニペットをキャレット位置に出力し、<code>CARET_POINTER</code>の位置へ移動します。
 60 	 * 
 61 	 * @param {String} snippet スニペット
 62 	 */
 63 	function writeSnippet(snippet) {
 64 		var text = snippet.replace(/\\t/g, "\t").replace(/\\n/g, JseeUtil.getBr());
 65 		document.selection.Text = text;
 66 		
 67 		if(text.indexOf(CARET_POINTER) >= 0) {
 68 			JseeUtil.findPrev(CARET_POINTER);
 69 			document.selection.Delete(1);
 70 		}
 71 	};
 72 })();
 73