1 #title = "→"
  2 #tooltip = "1単語右へ"
  3 #include "lib\sgc4jsee.jsee"
  4 
  5 /**
  6  * @fileOverview
  7  * 1単語右へ移動します。<br />
  8  * 文字のみの選択や空白のみの選択、エスケープシーケンスの選択やキャメルケースの選択などに対応します。
  9  * 
 10  * @author gecca from 雪月花 (http://setsugecca.org/)
 11  * @version 1.00 for EmEditor v10.0
 12  */
 13 
 14 var isExtendSelectionMode = document.selection.Mode & eeModeKeyboard;
 15 
 16 // ■ここから「選択範囲を1単語右へ」と同じ
 17 
 18 // キャメルケースに対応するならtrue
 19 var willAcceptCamelCase = true;
 20 
 21 var activeX = document.selection.GetActivePointX(eePosLogical);
 22 var activeY = document.selection.GetActivePointY(eePosLogical);
 23 
 24 // 行末でない
 25 var line = document.getLine(activeY);
 26 if(activeX - 1 != line.length) {
 27 	var right = line.substring(activeX - 1);
 28 	var selectTarget = (function() {
 29 		// マッチしないRegExpを生成しないように文字列で定義
 30 		var patterns = [
 31 			// 空白系
 32 			"^\\t+",
 33 			"^ +",
 34 			"^\\s+",
 35 			"^ +",
 36 			// 英数
 37 			(willAcceptCamelCase ? "^[A-Z0-9]+[a-z0-9]*|^[a-z0-9]+" : "^[A-Za-z0-9]+"),
 38 			// 記号
 39 			"^(\\!+|#+|\\$+|%+|&+|'+|\"+|\\(+|\\)+|\\*+|\\++|,+|\\-+|\\.+|\\\\+|\\/+|:+|;+|=+|\\?+|@+|\\^+|_+|~+|\\[+|\\]+|\\|+|<+|>+|{+|}+|`+)",
 42 			// 日本語記号
 43 			"^(、+|。+|,+|.+|・+|:+|;+|?+|!+|゛+|゜+|´+| ̄+|_+|〇+|‐+|‐+|/+|\+|〜+|‖+||+|…+|‥+|‘+|’+|“+|”+|(+|)+|〔+|〕+|[+|]+|{+|}+|〈+|〉+|《+|》+|「+|」+|『+|』+|【+|】+|++|−+|×+|÷+|=+|≠+|<+|>+|≦+|≧+|¥+|$+|%+|#+|&+|*+|@+|☆+|★+|○+|●+|◎+|◇+|◆+|□+|■+|△+|▲+|▽+|▼+|※+|〒+|→+|←+|↑+|↓+|∈+|∋+|⊆+|⊇+|⊂+|∪+|∪+|∩+|≒+|≪+|≫+|√+|♯+|♪+|¶+|⇔+|⇒+)",
 44 			// 行頭禁止文字
 45 			"^[ー゛゜]",
 46 			// ひらがな
 47 			"^[ー゛゜ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん]+",
 48 			// カタカナ
 49 			"^[ー゛゜ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ]+",
 50 			// 全角数字
 51 			"^[0123456789]+",
 52 			// 半角カナ
 53 			"^[アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚アーッョュャォェゥィァヲ]+",
 54 			// 半角日本語記号
 55 			"^[・、」「。]+",
 56 			// その他
 57 			"^[^\\s \\w!#$%&'\"()*+,-.\\/:;=?@\\^_~\\[\\]|<>{}`、。,.・:;?!゛゜\\´ ̄_〇‐‐/\〜‖|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+−×÷=≠<>≦≧¥$%#&*@☆★○●◎◇◆□■△▲▽▼※〒→←↑↓∈∋⊆⊇⊂∪∪∩≒≪≫√♯♪¶⇔⇒ー゛゜ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんー゛゜ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ0123456789アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚アーッョュャォェゥィァヲ・、」「。]+"
 58 		];
 59 		for(var i=0;i<patterns.length;i++) {
 60 			if(new RegExp(patterns[i]).test(right)) {
 61 				return RegExp.lastMatch;
 62 			}
 63 		}
 64 	})();
 65 // ■ここまで「選択範囲を1単語右へ」と同じ
 66 	document.selection.SetActivePoint(eePosLogical, activeX + selectTarget.length, activeY, isExtendSelectionMode);
 67 	
 68 // 行頭かつ最下行ではない
 69 } else if(activeY != document.getLines()) {
 70 	document.selection.SetActivePoint(eePosLogical, 1, activeY + 1, isExtendSelectionMode);
 71 }
 72