1 #title = "駱c"
  2 #tooltip = "クリップボードをキャメライズ"
  3 #include "lib\sgc4jsee.jsee"
  4 
  5 /**
  6  * @fileOverview
  7  * クリップボードの文字列に対して、「アッパーキャメルケース」・「ロウワーキャメルケース」・「アンダースコア区切り」を相互変換します。<br />
  8  * マクロ実行の度に右記のように変化します:"FOO_BAR"⇒"FooBar"⇒"fooBar"⇒"FOO_BAR"⇒・・・<br />
  9  * 複数行にまたがる変換も可能です。変換できない行は無視します。
 10  * <p>
 11  * Seasar2のStringUtil#camelizeに影響を受けました。
 12  * </p>
 13  * 
 14  * @author gecca from 雪月花 (http://setsugecca.org/)
 15  * @version 1.01 for EmEditor v10.0
 16  */
 17 
 18 (function() {
 19 	var target = clipboardData.getData("Text");
 20 	
 21 	// チェック処理 (「選択文字列をキャメライズ.jsee」と共通)
 22 	if(!target) {
 23 		return;
 24 	}
 25 	if(target.length >= 1000) {
 26 		if(!confirm("変換対象の文字数が1000を越えています。処理を続けてよろしいですか?")) {
 27 			return;
 28 		}
 29 	}
 30 	
 31 	var result = translateStringAsLines(target);
 32 	
 33 	clipboardData.setData("Text", result);
 34 	alert("↓クリップボードにコピーしました。\n\n" + result);
 35 	
 36 	return;
 37 	
 38 	// 変換処理 (「選択文字列をキャメライズ.jsee」と共通)
 39 	function translateStringAsLines(target) {
 40 		var lines = JseeUtil.str2lines(target, true);
 41 		
 42 		var result = "";
 43 		for(var i=0;i<lines.length;i++) {
 44 			result += translate(lines[i]);
 45 		}
 46 		return result;
 47 		
 48 		function translate(target) {
 49 			if(!target.match(/^[a-zA-Z]\w*(\r\n|\r|\n|$)/g)) {
 50 				return target;
 51 			}
 52 			
 53 			if(doneUnderScore(target)) {
 54 				return JseeUtil.upperCamelize(target);
 55 			}
 56 			if(doneLowerCamelize(target)) {
 57 				return JseeUtil.underScorize(target);
 58 			}
 59 			if(doneUpperCamelize(target)) {
 60 				return target.charAt(0).toLowerCase() + target.substring(1);
 61 			}
 62 			
 63 			return target;
 64 			
 65 			function doneUpperCamelize(target) {
 66 				return !target.match("_") && target.charAt(0) <= 'Z' || target.match(/^[A-Z][^_]*(\r\n|\r|\n|$)/);
 67 			}
 68 			
 69 			function doneLowerCamelize(target) {
 70 				return !target.match("_") && target.charAt(0) >= 'a';
 71 			}
 72 			
 73 			function doneUnderScore(target) {
 74 				return target.match(/^[^a-z]+$/);
 75 			}
 76 		}
 77 	}
 78 })();
 79