1 #title = "astyle"
  2 #tooltip = "Artistic Style"
  3 #include "lib\sgc4jsee.jsee"
  4 
  5 /**
  6  * @fileOverview
  7  * Artistic Styleを使ってC言語系のプログラムを整形します。<br />
  8  * <p>
  9  * <a href="http://sourceforge.net/projects/astyle/">Artistic Styleを入手</a>する必要があります。 (AStyle.exe以外のファイルは不要です。)<br />
 10  * </p>
 11  * 
 12  * @author gecca from 雪月花 (http://setsugecca.org/)
 13  * @version 1.00 for EmEditor v10.0
 14  */
 15 
 16 (function() {
 17 	var fso = JseeUtil.fso();
 18 	
 19 	// exeパスと整形設定値を用意
 20 	var ini = JseeUtil.getSnipIniObj("AStyle");
 21 	var exeRelativePath = ini.exeRelativePath;
 22 	var mode = ini.mode;
 23 	var style = ini.style;
 24 	var additionalOption = ini.additionalOption;
 25 	
 26 	var path = (function() {
 27 		
 28 		// 絶対パスの場合はそのまま返却
 29 		if(fso.FileExists(exeRelativePath)) {
 30 			return exeRelativePath;
 31 		
 32 		// EmEditorフォルダからの相対パスの場合は、結合したパスを返却
 33 		} else if(fso.FileExists(JseeUtil.getEditorPath() + exeRelativePath)) {
 34 			return JseeUtil.getEditorPath() + exeRelativePath;
 35 		
 36 		// パスが見つからない場合はundefinedを返却
 37 		} else {
 38 			alert("AStyle.exeが下記のパスに見つかりませんでした。\n" + exeRelativePath + "\n\n" + JseeUtil.getSnipIniName() + "を開きます。");
 39 			JseeUtil.selectSnipIniValue("AStyle", "exeRelativePath");
 40 			return;
 41 		}
 42 	})();
 43 	if(!path) return;
 44 	
 45 	var option = (function() {
 46 		var indentLen = document.Config.Indent.TabColumns ? document.Config.Indent.TabColumns : 4;
 47 		var indentChar = document.Config.Indent.InsertSpaces ? "-s" : "-T";
 48 		
 49 		return indentChar + indentLen
 50 			+ " --mode=" + mode
 51 			+ " --style=" + style
 52 			+ " " + additionalOption;
 53 	})();
 54 	
 55 	// テンポラリ領域にファイルを出力
 56 	var tempFilePath = JseeUtil.getTempDirPath() + "EmEditorMacros_AStyle.tmp";
 57 	JseeUtil.writeFile(tempFilePath, JseeUtil.getAllText());
 58 	
 59 	// 実行してファイル書き換え
 60 	document.selection.SelectAll();
 61 	JseeUtil.exec("\"" + path + "\" " + option + " --suffix=none \"" + tempFilePath + "\"");
 62 	
 63 	// 書き換えたテンポラリ領域のファイルを読み込み
 64 	document.selection.Text = JseeUtil.readFile(tempFilePath);
 65 	
 66 	// テンポラリ領域のファイルを削除
 67 	fso.DeleteFile(tempFilePath);
 68 })();
 69