1 #title = "cmb"
  2 #tooltip = "インデントを削除しながら行結合"
  3 #include "lib/sgc4jsee.jsee"
  4 
  5 /**
  6  * @fileOverview
  7  * インデントを削除しながら行を結合します。
  8  * <p>
  9  * 先頭の空白、および複数行コメント内を表す記号" * "を除去しながら、行を結合します。
 10  * </p>
 11  * <p>
 12  * 選択状態にない、または選択範囲が複数行にまたがっていない場合は、直下の行と結合します。<br />
 13  * 選択範囲が複数行にまたがっている場合は、選択範囲内の行を結合します。
 14  * </p>
 15  * 
 16  * @author gecca from 雪月花 (http://setsugecca.org/)
 17  * @version 1.01 for EmEditor v10.0
 18  */
 19 
 20 (function() {
 21 	// 結合部に挿入する文字列 (ダブルクォーテーションを除去)
 22 	var combiner = JseeUtil.getSnipIniObj("インデントを削除しながら行結合").combiner.replace(/^\"/, "").replace(/\"$/, "");
 23 	
 24 	var redraw = Redraw;
 25 	Redraw = false;
 26 	
 27 	var topX = document.selection.GetTopPointX(eePosLogical);
 28 	var topY = document.selection.GetTopPointY(eePosLogical);
 29 	var bottomX = document.selection.GetBottomPointX(eePosLogical);
 30 	var bottomY = document.selection.GetBottomPointY(eePosLogical);
 31 	
 32 	// 選択状態にない、または選択範囲が複数行にまたがっていない場合、直下の行と結合
 33 	if(topY == bottomY) {
 34 		// 結合部の位置を保持
 35 		var posX = document.GetLine(topY).length + 1;
 36 		
 37 		// 直下の行が存在する場合
 38 		if(bottomY + 1 <= document.getLines()) {
 39 			document.selection.SetActivePoint(eePosLogical, 1, topY);
 40 			document.selection.SetActivePoint(eePosLogical, document.getLine(bottomY + 1).length + 1, bottomY + 1, true);
 41 			document.selection.Text = document.selection.Text.replace(/([^\s\r\n])[\r\n]+\s*(\* )?/g, "$1" + combiner).replace(/[\r\n]+\s*(\* )?/g, "");
 42 		}
 43 		
 44 		Redraw = redraw;
 45 		// 行末へ
 46 		document.selection.SetActivePoint(eePosLogical, posX, topY);
 47 	
 48 	// 複数行にまたがる選択の場合、選択範囲を補完して、各行を結合
 49 	} else {
 50 		if(document.selection.Text.match(/[\r\n]|$/)) {
 51 			document.selection.SetActivePoint(eePosLogical, topX, topY);
 52 			document.selection.SetActivePoint(eePosLogical, document.GetLine(bottomY - 1).length + 1, bottomY - 1, true);
 53 		}
 54 		document.selection.Text = document.selection.Text.replace(/(\s)[\r\n]+\s*(\* )?([^\r\n]|$)/g, "$1$3").replace(/[\r\n]+\s*(\* )?([^\r\n]|$)/g, combiner + "$2");
 55 		
 56 		Redraw = redraw;
 57 		// 元の位置へ
 58 		document.selection.SetActivePoint(eePosLogical, topX, topY);
 59 	}
 60 })();
 61