1 #title = "</"
  2 #tooltip = "終了タグ補完"
  3 #include "lib\sgc4jsee.jsee"
  4 
  5 /**
  6  * @fileOverview
  7  * 終了タグを補完します。<br />
  8  * <p>
  9  * Crescent Eveを参考にしました。
 10  * </p>
 11  * 
 12  * @author gecca from 雪月花 (http://setsugecca.org/)
 13  * @version 1.00 for EmEditor v10.0
 14  */
 15 
 16 (function() {
 17 	var logger = JseeUtil.getLogger(false, "終了タグ補完");
 18 	
 19 	var tags = JseeUtil.getTopLeftText().match(/<([^\r\n\s>]+).*?>/g);
 20 	if(!tags) {
 21 		alert("タグが見つかりませんでした。");
 22 		return;
 23 	}
 24 	
 25 	logger.log(tags);
 26 	
 27 	var endTag = 0;
 28 	var startTag;
 29 	//var exceptTagsMatcher = /<(area|base|bgsound|br|frame|hr|img|input|link|meta|param|!|%)|\/\s*>$/i;
 30 	var exceptTagsMatcher = /<(area|base|bgsound|br|frame|hr|img|input|link|meta|param|!|%)(\s|>$)|\/\s*>$/i;
 31 	for(var i=tags.length-1;i>=0;i--) {
 32 		var tag = tags[i];
 33 		if(logger.available()) logger.log(i + "::" + tag);
 34 		
 35 		if(exceptTagsMatcher.test(tag)) {
 36 			continue;
 37 		} else if(tag.indexOf("</") >= 0) {
 38 			endTag++;
 39 		} else {
 40 			if(endTag > 0) {
 41 				endTag--;
 42 			} else {
 43 				startTag = tag;
 44 				break;
 45 			}
 46 		}
 47 	}
 48 	
 49 	if(startTag) {
 50 		document.selection.Text = startTag.replace(/^<([^\r\n\s>]+).*>$/, "</$1>");
 51 	} else {
 52 		alert("対応する開始タグが見つかりませんでした。");
 53 	}
 54 })();
 55