1 #title = "sql"
  2 #tooltip = "DMLBreakerでSQL整形"
  3 #include "lib/sgc4jsee.jsee"
  4 #include "lib\DMLBreaker\core.js"
  5 #include "lib\DMLBreaker\keyword.js"
  6 #include "lib\DMLBreaker\oracleKeyword.js"
  7 
  8 /**
  9  * DMLBreakerを使ってSQLを整形します。<br />
 10  * 選択文字列があれば選択文字列、なければ文書全体が対象です。<br />
 11  * EmEditorに"SQL"の定義があれば、対象文書の定義を"SQL"に変更します。<br />
 12  * <p>
 13  * <a href="http://sourceforge.jp/projects/format-sql/">DMLBreakerを入手</a>し、「EmEditorのマクロフォルダ\lib\DMLBreaker\」の中にDMLBreakerX.XX.zipの中身を配置してください。
 15  * </p>
 16  * SQL変換機能の詳細については、DMLBreakerX.XXの「readme.txt」を参照してください。
 17  * 
 18  * @author gecca from 雪月花 (http://setsugecca.org/)
 19  * @version 1.00 for EmEditor v10.0 and DMLBreaker2.01
 20  */
 21 
 22 // これが無いと#includeが失敗する
 23 "";
 24 
 25 (function() {
 26 	// インクルードしたDMLBreakerと同じスコープで定義する必要がある
 27 	var ini = JseeUtil.getSnipIniObj("DMLBreakerでSQL整形");
 28 	
 29 	// SQLの予約語を子文字化する場合はtrue、DMLBreakerのデフォルト動作(大文字化)を行う場合はfalse
 30 	var wordLower = (ini.wordLower == "true");
 31 	// インデントにタブを使用する場合はtrue、DMLBreakerのデフォルト動作(空白4文字)を使用する場合はfalse
 32 	var tabIndent = (ini.tabIndent == "true");
 33 	
 34 	if(!document.selection.Text) {
 35 		document.selection.SelectAll();
 36 	}
 37 	
 38 	if(wordLower) {
 39 		convUpperCaseKeyword = (function() {
 40 			var originalConvUpperCaseKeyword = convUpperCaseKeyword;
 41 			return function(targetSql){
 42 				// keywordを保存
 43 				var originalKeyword = [];
 44 				for(var i=0;i<keyword.length;i++) {
 45 					originalKeyword.push(keyword[i]);
 46 				}
 47 				
 48 				// keywordを小文字化
 49 				for(var i=0;i<keyword.length;i++) {
 50 					keyword[i] = keyword[i].toLowerCase();
 51 				}
 52 				
 53 				var returned = originalConvUpperCaseKeyword(targetSql);
 54 				
 55 				// keywordを元に戻す
 56 				keyword = originalKeyword;
 57 				
 58 				return returned;
 59 			};
 60 		})();
 61 	}
 62 	
 63 	var result = convertMain(document.selection.Text);
 64 	
 65 	if(tabIndent) {
 66 		var cnt = 4;
 67 		var tabed = "";
 68 		var lines = result.match(/[^\r\n]*(\r\n|\r|\n|$)/g);
 69 		if(lines) {
 70 			var matcher = new RegExp("^((\t* {"+cnt+"})+)([^\r\n]*)(\r\n|\r|\n)?");
 71 			var replacer = new RegExp(" {"+cnt+"}", "g");
 72 			
 73 			for(var i=0;i<lines.length;i++) {
 74 				var line = lines[i];
 75 				var m;
 76 				if(m = line.match(matcher)) {
 77 					tabed += m[1].replace(replacer, "\t") + m[3] + m[4];
 78 				} else {
 79 					tabed += line;
 80 				}
 81 			}
 82 			result = tabed;
 83 		}
 84 	}
 85 	
 86 	document.selection.Text = result;
 87 	
 88 	try {
 89 		document.ConfigName = "SQL";
 90 	} catch(e) {}
 91 })();
 92