1 #title = "VBEnd"
  2 #tooltip = "End補完 for VB (入力割り込み)"
  3 #include "lib\sgc4jsee.jsee"
  4 
  5 /**
  6  * @fileOverview
  7  * VB系言語のEndの後を補完します。<br />
  8  * スニペット専用で、"End"を入力後の" "をトリガーにした場合の専用動作を行います。
  9  * 
 10  * @author gecca from 雪月花 (http://setsugecca.org/)
 11  * @version 1.00 for EmEditor v10.0
 12  */
 13 
 14 (function() {
 15 	var startMatcher = JseeUtil.getVBEndClosedScopeStartMatcher();
 16 	var endMatcher = JseeUtil.getVBEndClosedScopeEndMatcher();
 17 	
 18 	var logger = JseeUtil.getLogger(false, "End補完 for VB (入力割り込み).jsee");
 19 	
 20 	var activeX = document.selection.GetActivePointX(eePosLogical);
 21 	var activeY = document.selection.GetActivePointY(eePosLogical);
 22 	if(activeY == 1) {
 23 		return;
 24 	}
 25 	
 26 	// Region対応
 27 	if(/^\s*#/.test(document.getLine(activeY))) {
 28 		document.selection.Text = "End Region";
 29 		// スニペット専用動作。
 30 		// 補完が期待しないものだった場合に消しやすいよう、挿入した文字列を選択状態にします。
 31 		document.selection.CharLeft(true,"Region".length);
 32 		return;
 33 	}
 34 	
 35 	var startScope = (function() {
 36 		var endScope = 0;
 37 		for(var i=activeY-1;i>=1;i--) {
 38 			var line = document.getLine(i);
 39 			if(endMatcher.test(line)) {
 40 				logger.log("end:" + line);
 41 				endScope++;
 42 			} else if(startMatcher.test(line)) {
 43 				logger.log("start:" + line);
 44 				if(endScope > 0) {
 45 					endScope--;
 46 				} else {
 47 					return RegExp.$2;
 48 				}
 49 			}
 50 		}
 51 	})();
 52 	if(!startScope) {
 53 		document.selection.Text = "End ";
 54 		return;
 55 	}
 56 	
 57 	document.selection.Text = "End " + startScope;
 58 	// スニペット専用動作。
 59 	// 補完が期待しないものだった場合に消しやすいよう、挿入した文字列を選択状態にします。
 60 	document.selection.CharLeft(true,startScope.length);
 61 })();
 62